@dnanpm/ui-components 0.1.0 → 0.3.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.
Files changed (135) hide show
  1. package/README.md +2 -2
  2. package/dist/components/Accordion/Accordion.cjs +9 -3
  3. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  4. package/dist/components/Accordion/Accordion.css +1 -1
  5. package/dist/components/Accordion/Accordion.d.ts +1 -1
  6. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  7. package/dist/components/Accordion/Accordion.js +10 -4
  8. package/dist/components/Accordion/Accordion.js.map +1 -1
  9. package/dist/components/Accordion/Accordion.types.d.ts +2 -2
  10. package/dist/components/Accordion/Accordion.types.d.ts.map +1 -1
  11. package/dist/components/AccordionItem/AccordionItem.cjs +43 -43
  12. package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
  13. package/dist/components/AccordionItem/AccordionItem.css +20 -20
  14. package/dist/components/AccordionItem/AccordionItem.d.ts +1 -1
  15. package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
  16. package/dist/components/AccordionItem/AccordionItem.js +43 -43
  17. package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
  18. package/dist/components/AccordionItem/AccordionItem.module.css.cjs +11 -11
  19. package/dist/components/AccordionItem/AccordionItem.module.css.js +11 -11
  20. package/dist/components/AccordionItem/AccordionItem.types.d.ts +2 -2
  21. package/dist/components/AccordionItem/AccordionItem.types.d.ts.map +1 -1
  22. package/dist/components/Breadcrumb/Breadcrumb.cjs +4 -5
  23. package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  24. package/dist/components/Breadcrumb/Breadcrumb.css +16 -15
  25. package/dist/components/Breadcrumb/Breadcrumb.d.ts +1 -1
  26. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  27. package/dist/components/Breadcrumb/Breadcrumb.js +4 -5
  28. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  29. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +6 -6
  30. package/dist/components/Breadcrumb/Breadcrumb.module.css.js +6 -6
  31. package/dist/components/Breadcrumb/Breadcrumb.types.d.ts +1 -5
  32. package/dist/components/Breadcrumb/Breadcrumb.types.d.ts.map +1 -1
  33. package/dist/components/Button/Button.cjs +104 -0
  34. package/dist/components/Button/Button.cjs.map +1 -0
  35. package/dist/components/Button/Button.css +188 -0
  36. package/dist/components/Button/Button.d.ts +3 -0
  37. package/dist/components/Button/Button.d.ts.map +1 -0
  38. package/dist/components/Button/Button.js +104 -0
  39. package/dist/components/Button/Button.js.map +1 -0
  40. package/dist/components/Button/Button.module.css.cjs +24 -0
  41. package/dist/components/Button/Button.module.css.cjs.map +1 -0
  42. package/dist/components/Button/Button.module.css.js +24 -0
  43. package/dist/components/Button/Button.module.css.js.map +1 -0
  44. package/dist/components/Button/Button.types.d.ts +84 -0
  45. package/dist/components/Button/Button.types.d.ts.map +1 -0
  46. package/dist/components/Button/index.d.ts +3 -0
  47. package/dist/components/Button/index.d.ts.map +1 -0
  48. package/dist/components/ColorScheme/ColorScheme.cjs +9 -0
  49. package/dist/components/ColorScheme/ColorScheme.cjs.map +1 -0
  50. package/dist/components/ColorScheme/ColorScheme.d.ts +3 -0
  51. package/dist/components/ColorScheme/ColorScheme.d.ts.map +1 -0
  52. package/dist/components/ColorScheme/ColorScheme.js +9 -0
  53. package/dist/components/ColorScheme/ColorScheme.js.map +1 -0
  54. package/dist/components/ColorScheme/ColorScheme.types.d.ts +10 -0
  55. package/dist/components/ColorScheme/ColorScheme.types.d.ts.map +1 -0
  56. package/dist/components/ColorScheme/index.d.ts +3 -0
  57. package/dist/components/ColorScheme/index.d.ts.map +1 -0
  58. package/dist/components/Label/Label.cjs +2 -4
  59. package/dist/components/Label/Label.cjs.map +1 -1
  60. package/dist/components/Label/Label.css +15 -17
  61. package/dist/components/Label/Label.d.ts +1 -1
  62. package/dist/components/Label/Label.d.ts.map +1 -1
  63. package/dist/components/Label/Label.js +2 -4
  64. package/dist/components/Label/Label.js.map +1 -1
  65. package/dist/components/Label/Label.module.css.cjs +7 -7
  66. package/dist/components/Label/Label.module.css.js +7 -7
  67. package/dist/components/Label/Label.types.d.ts +1 -5
  68. package/dist/components/Label/Label.types.d.ts.map +1 -1
  69. package/dist/components/Notification/Notification.cjs +5 -6
  70. package/dist/components/Notification/Notification.cjs.map +1 -1
  71. package/dist/components/Notification/Notification.css +19 -20
  72. package/dist/components/Notification/Notification.d.ts +1 -1
  73. package/dist/components/Notification/Notification.d.ts.map +1 -1
  74. package/dist/components/Notification/Notification.js +5 -6
  75. package/dist/components/Notification/Notification.js.map +1 -1
  76. package/dist/components/Notification/Notification.module.css.cjs +9 -9
  77. package/dist/components/Notification/Notification.module.css.js +9 -9
  78. package/dist/components/Notification/Notification.types.d.ts +1 -1
  79. package/dist/components/Notification/Notification.types.d.ts.map +1 -1
  80. package/dist/components/Pictograph/Pictograph.cjs +33 -0
  81. package/dist/components/Pictograph/Pictograph.cjs.map +1 -0
  82. package/dist/components/Pictograph/Pictograph.css +190 -0
  83. package/dist/components/Pictograph/Pictograph.d.ts +3 -0
  84. package/dist/components/Pictograph/Pictograph.d.ts.map +1 -0
  85. package/dist/components/Pictograph/Pictograph.js +33 -0
  86. package/dist/components/Pictograph/Pictograph.js.map +1 -0
  87. package/dist/components/Pictograph/Pictograph.module.css.cjs +22 -0
  88. package/dist/components/Pictograph/Pictograph.module.css.cjs.map +1 -0
  89. package/dist/components/Pictograph/Pictograph.module.css.js +22 -0
  90. package/dist/components/Pictograph/Pictograph.module.css.js.map +1 -0
  91. package/dist/components/Pictograph/Pictograph.types.d.ts +46 -0
  92. package/dist/components/Pictograph/Pictograph.types.d.ts.map +1 -0
  93. package/dist/components/Pictograph/PictographItem.cjs +19 -0
  94. package/dist/components/Pictograph/PictographItem.cjs.map +1 -0
  95. package/dist/components/Pictograph/PictographItem.css +63 -0
  96. package/dist/components/Pictograph/PictographItem.d.ts +3 -0
  97. package/dist/components/Pictograph/PictographItem.d.ts.map +1 -0
  98. package/dist/components/Pictograph/PictographItem.js +19 -0
  99. package/dist/components/Pictograph/PictographItem.js.map +1 -0
  100. package/dist/components/Pictograph/PictographItem.module.css.cjs +9 -0
  101. package/dist/components/Pictograph/PictographItem.module.css.cjs.map +1 -0
  102. package/dist/components/Pictograph/PictographItem.module.css.js +10 -0
  103. package/dist/components/Pictograph/PictographItem.module.css.js.map +1 -0
  104. package/dist/components/Pictograph/index.d.ts +4 -0
  105. package/dist/components/Pictograph/index.d.ts.map +1 -0
  106. package/dist/components/Spinner/Spinner.cjs +62 -0
  107. package/dist/components/Spinner/Spinner.cjs.map +1 -0
  108. package/dist/components/Spinner/Spinner.css +116 -0
  109. package/dist/components/Spinner/Spinner.d.ts +3 -0
  110. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  111. package/dist/components/Spinner/Spinner.js +62 -0
  112. package/dist/components/Spinner/Spinner.js.map +1 -0
  113. package/dist/components/Spinner/Spinner.module.css.cjs +26 -0
  114. package/dist/components/Spinner/Spinner.module.css.cjs.map +1 -0
  115. package/dist/components/Spinner/Spinner.module.css.js +26 -0
  116. package/dist/components/Spinner/Spinner.module.css.js.map +1 -0
  117. package/dist/components/Spinner/Spinner.types.d.ts +41 -0
  118. package/dist/components/Spinner/Spinner.types.d.ts.map +1 -0
  119. package/dist/components/Spinner/index.d.ts +3 -0
  120. package/dist/components/Spinner/index.d.ts.map +1 -0
  121. package/dist/index.cjs +10 -0
  122. package/dist/index.cjs.map +1 -1
  123. package/dist/index.d.ts +8 -0
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +10 -0
  126. package/dist/index.js.map +1 -1
  127. package/dist/styles/utils/elevation.css +8 -8
  128. package/dist/styles/utils/elevation.module.css.cjs +1 -1
  129. package/dist/styles/utils/elevation.module.css.js +1 -1
  130. package/dist/styles/utils/focus.css +34 -13
  131. package/dist/styles/utils/focus.module.css.cjs +3 -3
  132. package/dist/styles/utils/focus.module.css.js +3 -3
  133. package/dist/styles/utils/text-decoration.css +1 -1
  134. package/dist/styles.css +349 -174
  135. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.cjs","sources":["../../../src/components/Breadcrumb/Breadcrumb.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { 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 = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n {\n items,\n lastItemAsLink = false,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Murupolku',\n ...props\n },\n ref,\n) {\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\nBreadcrumb.displayName = 'Breadcrumb';\n"],"names":["jsx","forwardRef","Breadcrumb","cn","styles","focusStyles","textDecorationStyles","jsxs","Fragment","ChevronRight"],"mappings":";;;;;;;;;AAQA,MAAM,oBAAoB,CAAC,UAA+BA,2BAAAA,IAAC,KAAA,EAAG,GAAG,OAAO;AAEjE,MAAM,aAAaC,MAAAA,WAAyC,SAASC,YACxE;AAAA,EACI;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B,GAAG;AACP,GACA,KACF;AACE,MAAI,MAAM,WAAW,GAAG;AACpB,WAAO;AAAA,EACX;AAEA,QAAM,YAAY,MAAM,SAAS;AAEjC,SACIF,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACG;AAAA,MACA,cAAY;AAAA,MACZ,WAAWG,GAAAA,GAAGC,kBAAAA,QAAO,YAAYC,aAAAA,QAAY,gBAAgB,SAAS;AAAA,MACrE,GAAG;AAAA,MAEJ,UAAAL,2BAAAA,IAAC,QAAG,WAAWI,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,IAEDJ,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWI,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,UACDJ,2BAAAA;AAAAA,YAACS,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,CAAC;AAED,WAAW,cAAc;;"}
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;;"}
@@ -1,4 +1,4 @@
1
- @layer dna-design-system {/**
1
+ @layer dds-components {/**
2
2
  * Breadcrumb Component Styles
3
3
  *
4
4
  * Design tokens are consumed via CSS custom properties (variables).
@@ -7,14 +7,14 @@
7
7
  * Uses a container query (ch units) to switch between default and collapsed mode.
8
8
  */
9
9
 
10
- ._breadcrumb_iubo4_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
- ._breadcrumb__list_iubo4_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
- ._breadcrumb__item_iubo4_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-size: 0.875rem;
32
- font-weight: 500;
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
- ._breadcrumb__link_iubo4_45 {
46
- color: var(--colors-semantic-interactive-primary-default);
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
- ._breadcrumb__link_iubo4_45:hover {
51
- color: var(--colors-semantic-interactive-primary-hover);
51
+ ._breadcrumb__link_b37v8_46:hover {
52
+ color: var(--color-semantic-interactive-primary-hover);
52
53
  }
53
54
 
54
- ._breadcrumb__current_iubo4_54 {
55
+ ._breadcrumb__current_b37v8_55 {
55
56
  overflow: hidden;
56
57
  text-overflow: ellipsis;
57
58
  }
58
59
 
59
- ._breadcrumb__separator_iubo4_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(--colors-semantic-interactive-primary-default);
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
- ._breadcrumb__item_iubo4_26:not(:nth-last-child(-n + 2)) {
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: import('react').ForwardRefExoticComponent<BreadcrumbProps & import('react').RefAttributes<HTMLElement>>;
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":"AAMA,OAAO,KAAK,EAAuB,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI/E,eAAO,MAAM,UAAU,yGA0ErB,CAAC"}
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 = forwardRef(function Breadcrumb2({
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
- }, ref) {
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 { forwardRef } from 'react';\nimport { 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 = forwardRef<HTMLElement, BreadcrumbProps>(function Breadcrumb(\n {\n items,\n lastItemAsLink = false,\n renderLink = defaultRenderLink,\n className,\n 'aria-label': ariaLabel = 'Murupolku',\n ...props\n },\n ref,\n) {\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\nBreadcrumb.displayName = 'Breadcrumb';\n"],"names":["Breadcrumb"],"mappings":";;;;;;;AAQA,MAAM,oBAAoB,CAAC,UAA+B,oBAAC,KAAA,EAAG,GAAG,OAAO;AAEjE,MAAM,aAAa,WAAyC,SAASA,YACxE;AAAA,EACI;AAAA,EACA,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb;AAAA,EACA,cAAc,YAAY;AAAA,EAC1B,GAAG;AACP,GACA,KACF;AACE,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,CAAC;AAED,WAAW,cAAc;"}
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 = "_breadcrumb_iubo4_10";
5
- const breadcrumb__list = "_breadcrumb__list_iubo4_17";
6
- const breadcrumb__item = "_breadcrumb__item_iubo4_26";
7
- const breadcrumb__link = "_breadcrumb__link_iubo4_45";
8
- const breadcrumb__current = "_breadcrumb__current_iubo4_54";
9
- const breadcrumb__separator = "_breadcrumb__separator_iubo4_59";
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 = "_breadcrumb_iubo4_10";
3
- const breadcrumb__list = "_breadcrumb__list_iubo4_17";
4
- const breadcrumb__item = "_breadcrumb__item_iubo4_26";
5
- const breadcrumb__link = "_breadcrumb__link_iubo4_45";
6
- const breadcrumb__current = "_breadcrumb__current_iubo4_54";
7
- const breadcrumb__separator = "_breadcrumb__separator_iubo4_59";
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.ComponentPropsWithoutRef<'nav'>, 'children'> {
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,wBAAwB,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5F;;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;IACtE;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC/B"}
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,188 @@
1
+ @layer dds-components {._button_1nsz1_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_1nsz1_18 {
19
+ width: 100%;
20
+ min-width: 0;
21
+ }
22
+
23
+ /* ─── Sizes ─── */
24
+
25
+ ._button--normal_1nsz1_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_1nsz1_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_1nsz1_41 {
42
+ background-color: var(--color-semantic-interactive-primary-default);
43
+ color: var(--color-semantic-foreground-inverse);
44
+ }
45
+
46
+ ._button--primary_1nsz1_41:hover {
47
+ background-color: var(--color-semantic-interactive-primary-hover);
48
+ color: var(--color-semantic-foreground-inverse);
49
+ }
50
+
51
+ ._button--primary_1nsz1_41:active {
52
+ background-color: var(--color-semantic-interactive-primary-active);
53
+ color: var(--color-semantic-foreground-inverse);
54
+ }
55
+
56
+ ._button--primary_1nsz1_41:focus-visible {
57
+ background-color: var(--color-semantic-interactive-primary-focus);
58
+ color: var(--color-semantic-foreground-inverse);
59
+ }
60
+
61
+ /* ─── Secondary variant ─── */
62
+
63
+ ._button--secondary_1nsz1_63 {
64
+ background-color: transparent;
65
+ border: var(--borderwidth-semantic-sm) solid var(--color-semantic-interactive-secondary-default);
66
+ color: var(--color-semantic-foreground-secondary-strong);
67
+ }
68
+
69
+ ._button--secondary_1nsz1_63:hover {
70
+ background-color: var(--color-semantic-interactive-secondary-hover);
71
+ border-color: var(--color-semantic-interactive-secondary-hover);
72
+ color: var(--color-semantic-foreground-inverse);
73
+ }
74
+
75
+ ._button--secondary_1nsz1_63:active {
76
+ background-color: var(--color-semantic-interactive-secondary-active);
77
+ border-color: var(--color-semantic-interactive-secondary-active);
78
+ color: var(--color-semantic-foreground-inverse);
79
+ }
80
+
81
+ ._button--secondary_1nsz1_63:focus-visible {
82
+ background-color: var(--color-semantic-interactive-secondary-focus);
83
+ color: var(--color-semantic-foreground-inverse);
84
+ }
85
+
86
+ /* ─── Tertiary variant ─── */
87
+
88
+ ._button--tertiary_1nsz1_88 {
89
+ background-color: var(--color-semantic-interactive-neutral-default);
90
+ border: var(--borderwidth-semantic-sm) solid var(--color-semantic-border-neutral-mid);
91
+ color: var(--color-semantic-foreground-secondary-strong);
92
+ }
93
+
94
+ ._button--tertiary_1nsz1_88:hover {
95
+ background-color: var(--color-semantic-interactive-neutral-hover);
96
+ color: var(--color-semantic-foreground-secondary-strong);
97
+ }
98
+
99
+ ._button--tertiary_1nsz1_88:active {
100
+ background-color: var(--color-semantic-interactive-neutral-active);
101
+ color: var(--color-semantic-foreground-secondary-strong);
102
+ }
103
+
104
+ ._button--tertiary_1nsz1_88:focus-visible {
105
+ background-color: var(--color-semantic-interactive-neutral-focus);
106
+ color: var(--color-semantic-foreground-secondary-strong);
107
+ }
108
+
109
+ /* ─── Disabled state ─── */
110
+
111
+ ._button--disabled_1nsz1_111 {
112
+ pointer-events: none;
113
+ }
114
+
115
+ ._button--primary_1nsz1_41._button--disabled_1nsz1_111 {
116
+ background-color: var(--color-semantic-interactive-primary-disabled);
117
+ color: var(--color-semantic-foreground-muted);
118
+ }
119
+
120
+ ._button--secondary_1nsz1_63._button--disabled_1nsz1_111 {
121
+ border-color: var(--color-semantic-interactive-secondary-disabled);
122
+ color: var(--color-semantic-foreground-muted);
123
+ }
124
+
125
+ ._button--tertiary_1nsz1_88._button--disabled_1nsz1_111 {
126
+ background-color: var(--color-semantic-interactive-neutral-disabled);
127
+ color: var(--color-semantic-foreground-muted);
128
+ }
129
+
130
+ /* ─── Dark color scheme ─── */
131
+ /* Styles apply from [data-color-scheme="dark"] down to (but not into) [data-color-scheme="light"]. */
132
+
133
+ @scope ([data-color-scheme='dark']) to ([data-color-scheme='light']) {
134
+ ._button--primary_1nsz1_41._button--disabled_1nsz1_111 {
135
+ color: var(--color-semantic-foreground-inverse-muted);
136
+ }
137
+
138
+ ._button--secondary_1nsz1_63 {
139
+ border-color: var(--color-semantic-interactive-inverse-default);
140
+ color: var(--color-semantic-foreground-inverse);
141
+ }
142
+
143
+ ._button--secondary_1nsz1_63:hover {
144
+ background-color: var(--color-semantic-interactive-inverse-hover);
145
+ border-color: var(--color-semantic-interactive-inverse-hover);
146
+ color: var(--color-semantic-foreground-secondary-strong);
147
+ }
148
+
149
+ ._button--secondary_1nsz1_63:active {
150
+ background-color: var(--color-semantic-interactive-inverse-active);
151
+ border-color: var(--color-semantic-interactive-inverse-active);
152
+ color: var(--color-semantic-foreground-secondary-strong);
153
+ }
154
+
155
+ ._button--secondary_1nsz1_63:focus-visible {
156
+ background-color: var(--color-semantic-interactive-inverse-focus);
157
+ color: var(--color-semantic-foreground-secondary-strong);
158
+ }
159
+
160
+ ._button--secondary_1nsz1_63._button--disabled_1nsz1_111 {
161
+ border-color: var(--color-semantic-interactive-inverse-disabled);
162
+ color: var(--color-semantic-foreground-inverse-muted);
163
+ }
164
+
165
+ ._button--tertiary_1nsz1_88._button--disabled_1nsz1_111 {
166
+ border-color: var(--color-semantic-interactive-neutral-disabled);
167
+ color: var(--color-semantic-foreground-inverse-muted);
168
+ }
169
+ }
170
+
171
+ /* ─── Loading state ─── */
172
+
173
+ ._button--loading_1nsz1_173 {
174
+ pointer-events: none;
175
+ }
176
+
177
+ ._button__content_1nsz1_177 {
178
+ flex: 0 1 auto;
179
+ min-width: 0;
180
+ overflow: hidden;
181
+ text-overflow: ellipsis;
182
+ white-space: nowrap;
183
+ }
184
+
185
+ ._button__spinner_1nsz1_185 {
186
+ flex: 0 0 auto;
187
+ }
188
+ }
@@ -0,0 +1,3 @@
1
+ import { ButtonProps } from './Button.types';
2
+ export declare const Button: ({ variant, fullWidth, size, loading, className, children, ref, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Button.d.ts.map
@@ -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"}