@xyd-js/components 0.1.0-xyd.11 → 0.1.0-xyd.13

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 (256) hide show
  1. package/.idea/git_toolbox_blame.xml +6 -0
  2. package/.idea/modules.xml +8 -0
  3. package/.idea/vcs.xml +6 -0
  4. package/.idea/xyd-components.iml +12 -0
  5. package/CHANGELOG.md +16 -0
  6. package/TODO.md +1 -0
  7. package/content.ts +0 -2
  8. package/dist/CTABanner-BD4wweO5.js +2 -0
  9. package/dist/CTABanner-BD4wweO5.js.map +1 -0
  10. package/dist/CTABanner-DLG0_gv8.js +2 -0
  11. package/dist/CTABanner-DLG0_gv8.js.map +1 -0
  12. package/dist/CTABanner-DpPtA-FL.js +2 -0
  13. package/dist/CTABanner-DpPtA-FL.js.map +1 -0
  14. package/dist/CodeSample--qfqZ1hL.js +2 -0
  15. package/dist/CodeSample--qfqZ1hL.js.map +1 -0
  16. package/dist/CodeSample-CqFaFwwz.js +2 -0
  17. package/dist/CodeSample-CqFaFwwz.js.map +1 -0
  18. package/dist/CodeSample-GbqwRbcO.js +2 -0
  19. package/dist/CodeSample-GbqwRbcO.js.map +1 -0
  20. package/dist/HomeView-BZdY0g_7.js +2 -0
  21. package/dist/{HomeView-DHdqouwJ.js.map → HomeView-BZdY0g_7.js.map} +1 -1
  22. package/dist/HomeView-C_mEMzjV.js +2 -0
  23. package/dist/{HomeView-TDx2tcP_.js.map → HomeView-C_mEMzjV.js.map} +1 -1
  24. package/dist/HomeView-RATm-3zT.js +2 -0
  25. package/dist/HomeView-RATm-3zT.js.map +1 -0
  26. package/dist/Icon-BkXdTctK.js +2 -0
  27. package/dist/Icon-BkXdTctK.js.map +1 -0
  28. package/dist/Icon-BoKcRZAF.js +2 -0
  29. package/dist/Icon-BoKcRZAF.js.map +1 -0
  30. package/dist/Icon-CouPZRkJ.js +2 -0
  31. package/dist/Icon-CouPZRkJ.js.map +1 -0
  32. package/dist/Text-B-E3eaWW.js +2 -0
  33. package/dist/Text-B-E3eaWW.js.map +1 -0
  34. package/dist/Text-B5Ba_pci.js +2 -0
  35. package/dist/Text-B5Ba_pci.js.map +1 -0
  36. package/dist/Text-QH4jjPUM.js +2 -0
  37. package/dist/Text-QH4jjPUM.js.map +1 -0
  38. package/dist/Update-BlhP2VFR.js +2 -0
  39. package/dist/Update-BlhP2VFR.js.map +1 -0
  40. package/dist/Update-CMM38Snc.js +2 -0
  41. package/dist/Update-CMM38Snc.js.map +1 -0
  42. package/dist/Update-D5e_yqty.js +2 -0
  43. package/dist/Update-D5e_yqty.js.map +1 -0
  44. package/dist/VideoGuide-C5aW4OXW.js +2 -0
  45. package/dist/VideoGuide-C5aW4OXW.js.map +1 -0
  46. package/dist/VideoGuide-CoQXlHjQ.js +2 -0
  47. package/dist/VideoGuide-CoQXlHjQ.js.map +1 -0
  48. package/dist/VideoGuide-CwkedH8b.js +2 -0
  49. package/dist/VideoGuide-CwkedH8b.js.map +1 -0
  50. package/dist/_rollupPluginBabelHelpers-9wcO9jN6.js +4 -0
  51. package/dist/_rollupPluginBabelHelpers-9wcO9jN6.js.map +1 -0
  52. package/dist/_rollupPluginBabelHelpers-CiqSP2w-.js +4 -0
  53. package/dist/_rollupPluginBabelHelpers-CiqSP2w-.js.map +1 -0
  54. package/dist/_rollupPluginBabelHelpers-DmvUE1MU.js +4 -0
  55. package/dist/_rollupPluginBabelHelpers-DmvUE1MU.js.map +1 -0
  56. package/dist/brand.js +1 -1
  57. package/dist/brand.js.map +1 -1
  58. package/dist/coder/themes/cosmo-light.js.map +1 -1
  59. package/dist/coder.d.ts +32 -10
  60. package/dist/coder.js +1 -1
  61. package/dist/coder.js.map +1 -1
  62. package/dist/content.d.ts +264 -201
  63. package/dist/content.js +1 -1
  64. package/dist/content.js.map +1 -1
  65. package/dist/index.css +260 -210
  66. package/dist/layouts.d.ts +20 -21
  67. package/dist/layouts.js +1 -1
  68. package/dist/layouts.js.map +1 -1
  69. package/dist/pages.js +1 -1
  70. package/dist/pages.js.map +1 -1
  71. package/dist/system.d.ts +10 -0
  72. package/dist/system.js +2 -0
  73. package/dist/system.js.map +1 -0
  74. package/dist/tslib.es6-Bb9zBh0L.js +2 -0
  75. package/dist/{tslib.es6-BI9zka_a.js.map → tslib.es6-Bb9zBh0L.js.map} +1 -1
  76. package/dist/tslib.es6-Bd9lzVn6.js +2 -0
  77. package/dist/{tslib.es6-sxmRJynD.js.map → tslib.es6-Bd9lzVn6.js.map} +1 -1
  78. package/dist/tslib.es6-DwnOrHRg.js +2 -0
  79. package/dist/tslib.es6-DwnOrHRg.js.map +1 -0
  80. package/dist/views.js +1 -1
  81. package/dist/writer.d.ts +409 -77
  82. package/dist/writer.js +1 -1
  83. package/dist/writer.js.map +1 -1
  84. package/docs/.nojekyll +1 -0
  85. package/docs/assets/hierarchy.js +1 -0
  86. package/docs/assets/highlight.css +22 -0
  87. package/docs/assets/icons.js +18 -0
  88. package/docs/assets/icons.svg +1 -0
  89. package/docs/assets/main.js +60 -0
  90. package/docs/assets/navigation.js +1 -0
  91. package/docs/assets/search.js +1 -0
  92. package/docs/assets/style.css +1640 -0
  93. package/docs/functions/GuideCard.html +6 -0
  94. package/docs/hierarchy.html +1 -0
  95. package/docs/index.html +2 -0
  96. package/docs/interfaces/GuideCardProps.html +18 -0
  97. package/docs/modules.html +1 -0
  98. package/index.ts +0 -1
  99. package/package.json +10 -6
  100. package/project.json +677 -0
  101. package/rollup.config.js +30 -20
  102. package/src/brand/Button/Button.styles.tsx +0 -3
  103. package/src/brand/CTABanner/CTABanner.styles.tsx +2 -4
  104. package/src/brand/Footer/Footer.styles.tsx +0 -3
  105. package/src/coder/Code/Code.styles.tsx +132 -33
  106. package/src/coder/Code/Code.tsx +129 -38
  107. package/src/coder/Code/CodeLoader.tsx +3 -3
  108. package/src/coder/Code/annotations.tsx +28 -8
  109. package/src/coder/Code/highlight.ts +38 -0
  110. package/src/coder/Code/index.ts +2 -1
  111. package/src/coder/CodeCopy/CodeCopy.styles.tsx +13 -11
  112. package/src/coder/CodeCopy/CodeCopy.tsx +5 -3
  113. package/src/coder/CodeSample/CodeSample.tsx +83 -27
  114. package/src/coder/CodeTabs/CodeTabs.styles.tsx +111 -94
  115. package/src/coder/CodeTabs/CodeTabs.tsx +69 -51
  116. package/src/coder/CodeTheme/CodeTheme.tsx +89 -49
  117. package/src/coder/CodeTheme/index.ts +0 -1
  118. package/src/coder/CoderProvider.tsx +26 -0
  119. package/src/coder/index.ts +8 -4
  120. package/src/content/ContentDecoator.styles.tsx +113 -0
  121. package/src/content/ContentDecorator.tsx +17 -0
  122. package/src/content/GridDecorator.styles.tsx +67 -0
  123. package/src/content/GridDecorator.tsx +21 -0
  124. package/src/content/ReactContent.tsx +575 -0
  125. package/src/content/index.ts +10 -2
  126. package/src/icons/index.ts +0 -0
  127. package/src/kit/Loader/Loader.styles.tsx +53 -0
  128. package/src/kit/Loader/Loader.tsx +22 -0
  129. package/src/kit/index.ts +1 -0
  130. package/src/layouts/LayoutPrimary/LayoutPrimary.styles.tsx +270 -306
  131. package/src/layouts/LayoutPrimary/LayoutPrimary.tsx +171 -91
  132. package/src/layouts/LayoutPrimary/index.ts +0 -2
  133. package/src/layouts/index.ts +0 -7
  134. package/src/system/SearchButton/SearchButton.styles.tsx +86 -0
  135. package/src/system/SearchButton/SearchButton.tsx +116 -0
  136. package/src/system/SearchButton/index.ts +1 -0
  137. package/src/system/index.ts +1 -0
  138. package/src/writer/Anchor/Anchor.styles.tsx +11 -0
  139. package/src/{content → writer}/Anchor/Anchor.tsx +20 -22
  140. package/src/writer/Anchor/index.tsx +1 -0
  141. package/src/writer/Badge/Badge.styles.tsx +37 -27
  142. package/src/writer/Badge/Badge.tsx +34 -48
  143. package/src/writer/Banner/Banner.styles.tsx +91 -0
  144. package/src/writer/Banner/Banner.tsx +70 -0
  145. package/src/writer/Banner/index.ts +1 -0
  146. package/src/writer/Blockquote/Blockquote.styles.tsx +6 -4
  147. package/src/writer/Blockquote/Blockquote.tsx +5 -2
  148. package/src/writer/Breadcrumbs/Breadcrumbs.styles.ts +25 -25
  149. package/src/writer/Breadcrumbs/Breadcrumbs.tsx +18 -12
  150. package/src/writer/Button/Button.styles.tsx +137 -0
  151. package/src/writer/Button/Button.tsx +75 -0
  152. package/src/writer/Button/index.ts +2 -0
  153. package/src/writer/Callout/Callout.styles.tsx +35 -42
  154. package/src/writer/Callout/Callout.tsx +30 -15
  155. package/src/writer/Card/Card.styles.tsx +47 -0
  156. package/src/writer/Card/Card.tsx +69 -0
  157. package/src/writer/Card/index.ts +1 -0
  158. package/src/writer/Code/Code.styles.tsx +12 -11
  159. package/src/writer/Code/Code.tsx +6 -3
  160. package/src/writer/ColorSchemeButton/ColorSchemeButton.tsx +172 -0
  161. package/src/writer/ColorSchemeButton/index.ts +1 -0
  162. package/src/writer/Details/Details.styles.tsx +87 -98
  163. package/src/writer/Details/Details.tsx +65 -44
  164. package/src/writer/Example/index.tsx +5 -0
  165. package/src/writer/GuideCard/GuideCard.styles.tsx +100 -103
  166. package/src/writer/GuideCard/GuideCard.tsx +72 -37
  167. package/src/writer/Heading/Heading.styles.tsx +76 -60
  168. package/src/writer/Heading/Heading.tsx +92 -22
  169. package/src/writer/Hr/Hr.styles.tsx +3 -1
  170. package/src/writer/Hr/Hr.tsx +2 -5
  171. package/src/writer/Icon/Icon.tsx +48 -0
  172. package/src/writer/Icon/index.ts +1 -0
  173. package/src/writer/Image/Image.styles.tsx +9 -0
  174. package/src/writer/Image/Image.tsx +19 -0
  175. package/src/writer/Image/index.ts +1 -0
  176. package/src/writer/List/List.styles.tsx +47 -0
  177. package/src/writer/List/List.tsx +29 -0
  178. package/src/writer/List/index.ts +4 -0
  179. package/src/writer/NavLinks/NavLinks.styles.ts +26 -26
  180. package/src/writer/NavLinks/NavLinks.tsx +65 -18
  181. package/src/writer/Pre/Pre.styles.tsx +8 -6
  182. package/src/writer/Pre/Pre.tsx +3 -2
  183. package/src/writer/Steps/Steps.styles.tsx +27 -24
  184. package/src/writer/Steps/Steps.tsx +38 -8
  185. package/src/writer/Table/Table.styles.tsx +65 -34
  186. package/src/writer/Table/Table.tsx +121 -11
  187. package/src/writer/Table/index.ts +0 -11
  188. package/src/writer/Tabs/Tabs.styles.tsx +51 -55
  189. package/src/writer/Tabs/Tabs.tsx +30 -23
  190. package/src/writer/Text/Text.styles.tsx +66 -0
  191. package/src/writer/Text/Text.tsx +79 -0
  192. package/src/writer/Text/index.ts +3 -0
  193. package/src/writer/TocCard/TocCard.module.css +44 -0
  194. package/src/writer/TocCard/TocCard.tsx +42 -0
  195. package/src/writer/TocCard/index.ts +3 -0
  196. package/src/writer/UnderlineNav/Tabs.tsx +51 -0
  197. package/src/writer/UnderlineNav/TabsPrimary.styles.tsx +184 -0
  198. package/src/writer/UnderlineNav/TabsPrimary.tsx +209 -0
  199. package/src/writer/UnderlineNav/TabsSecondary.styles.tsx +77 -0
  200. package/src/writer/UnderlineNav/TabsSecondary.tsx +171 -0
  201. package/src/writer/UnderlineNav/UnderlineNav.styles.tsx +165 -31
  202. package/src/writer/UnderlineNav/UnderlineNav.tsx +257 -22
  203. package/src/writer/UnderlineNav/index.ts +2 -1
  204. package/src/writer/UnderlineNav/useValueChange.ts +60 -0
  205. package/src/writer/Update/Update.styles.tsx +33 -0
  206. package/src/writer/Update/Update.tsx +37 -0
  207. package/src/writer/Update/index.ts +1 -0
  208. package/src/writer/VideoGuide/VideoGuide.module.css +105 -0
  209. package/src/writer/VideoGuide/VideoGuide.tsx +75 -0
  210. package/src/writer/VideoGuide/index.ts +1 -0
  211. package/src/writer/index.ts +23 -1
  212. package/tsconfig.json +9 -3
  213. package/types.d.ts +50 -0
  214. package/writer.ts +1 -1
  215. package/dist/CTABanner-BLDHbq5h.js +0 -2
  216. package/dist/CTABanner-BLDHbq5h.js.map +0 -1
  217. package/dist/CTABanner-n3vc4xW5.js +0 -2
  218. package/dist/CTABanner-n3vc4xW5.js.map +0 -1
  219. package/dist/CodeSample-CVki5fdQ.js +0 -2
  220. package/dist/CodeSample-CVki5fdQ.js.map +0 -1
  221. package/dist/CodeSample-Dkob5gWa.js +0 -2
  222. package/dist/CodeSample-Dkob5gWa.js.map +0 -1
  223. package/dist/HomeView-DHdqouwJ.js +0 -2
  224. package/dist/HomeView-TDx2tcP_.js +0 -2
  225. package/dist/UnderlineNav-9lJPvnIp.js +0 -2
  226. package/dist/UnderlineNav-9lJPvnIp.js.map +0 -1
  227. package/dist/UnderlineNav-VqB7jDQD.js +0 -2
  228. package/dist/UnderlineNav-VqB7jDQD.js.map +0 -1
  229. package/dist/_rollupPluginBabelHelpers-C8nLsqZ7.js +0 -2
  230. package/dist/_rollupPluginBabelHelpers-C8nLsqZ7.js.map +0 -1
  231. package/dist/_rollupPluginBabelHelpers-CrdNG0jb.js +0 -2
  232. package/dist/_rollupPluginBabelHelpers-CrdNG0jb.js.map +0 -1
  233. package/dist/index-TkBHKzGT.js +0 -2
  234. package/dist/index-TkBHKzGT.js.map +0 -1
  235. package/dist/index-YH6Q3iH2.js +0 -2
  236. package/dist/index-YH6Q3iH2.js.map +0 -1
  237. package/dist/tslib.es6-BI9zka_a.js +0 -2
  238. package/dist/tslib.es6-sxmRJynD.js +0 -2
  239. package/src/content/Anchor/Anchor.styles.tsx +0 -5
  240. package/src/content/Anchor/index.tsx +0 -3
  241. package/src/content/Content/Content.styles.tsx +0 -9
  242. package/src/content/Content/Content.tsx +0 -13
  243. package/src/content/Content/index.tsx +0 -3
  244. package/src/content/Content.tsx +0 -179
  245. package/src/content/Subtitle/Subtitle.styles.ts +0 -8
  246. package/src/content/Subtitle/Subtitle.tsx +0 -12
  247. package/src/content/Subtitle/index.tsx +0 -3
  248. package/src/layouts/Layout.styles.tsx +0 -155
  249. package/src/layouts/Layout.tsx +0 -119
  250. package/src/ui/Loader/Loader.styles.tsx +0 -54
  251. package/src/ui/Loader/Loader.tsx +0 -26
  252. package/src/ui/index.ts +0 -1
  253. package/src/writer/Icon/index.tsx +0 -355
  254. package/src/writer/Table/TableV2.styles.tsx +0 -117
  255. package/src/writer/Table/TableV2.tsx +0 -83
  256. /package/src/{ui → kit}/TODO.md +0 -0
@@ -2,68 +2,94 @@ import React from "react"
2
2
 
3
3
  import * as cn from "./GuideCard.styles";
4
4
 
5
+ /**
6
+ * Props for the GuideCard component
7
+ */
5
8
  export interface GuideCardProps {
9
+ /** Content to be displayed in the card body */
6
10
  children: React.ReactNode;
11
+
12
+ /** URL the card links to */
7
13
  href: string
14
+
15
+ /** Title displayed at the top of the card */
8
16
  title: string;
17
+
18
+ /** Optional icon displayed to the left of the content */
9
19
  icon?: React.ReactNode;
20
+
21
+ /** Visual style variant of the card */
10
22
  kind?: "secondary"
23
+
24
+ /** Size variant of the card */
11
25
  size?: "sm" | "md"
26
+
27
+ /** Additional CSS class names to apply to the card */
28
+ className?: string
29
+
30
+ /** Additional props to pass to the link element */
31
+ as?: React.ElementType
12
32
  }
13
33
 
34
+ /**
35
+ * A card component that displays content with a title and optional icon.
36
+ * The entire card is clickable and links to the specified URL.
37
+ *
38
+ * @category Component
39
+ */
14
40
  export function GuideCard({
15
- children,
16
- href,
17
- icon,
18
- title,
19
- kind,
20
- size,
41
+ children,
42
+ href,
43
+ icon,
44
+ title,
45
+ kind,
46
+ size,
47
+ className,
48
+ as,
49
+ }: GuideCardProps) {
50
+ const Link = as || $Link
21
51
 
22
- }: GuideCardProps) {
23
- return <div className={`
24
- ${cn.GuideHost}
25
- ${kind === "secondary" && cn.GuideHostSecondary}
26
- ${kind === "secondary" && size == "md" && cn.GuideHostSecondaryMd}
27
- `}>
28
- <a className={cn.GuideLink} href={href}>
29
- <div className={`
30
- ${cn.GuideItem}
31
- ${kind === "secondary" && cn.GuideItemSecondary}
32
- `}>
33
- {icon && <div className={cn.GuideIcon}>
52
+ return <xyd-guidecard
53
+ className={`${cn.GuideHost} ${className || ""}`}
54
+ data-kind={kind}
55
+ data-size={size}
56
+ >
57
+ <Link part="link" href={href}>
58
+ <div part="item">
59
+ {icon && <div part="icon">
34
60
  {icon}
35
61
  </div>}
36
- <div className={cn.GuideRight}>
37
- <div className={cn.GuideTitle}>
38
- <div className={`
39
- ${cn.GuideTitle}
40
- ${cn.GuideTitleBody}
41
- ${size == "md" && cn.GuideTitleBodyMd}
42
- `}>
62
+ <div part="right">
63
+ <div part="title">
64
+ <div part="title-body">
43
65
  {title}
44
66
  </div>
45
- <Pointer/>
67
+ <$Pointer />
46
68
  </div>
47
- <div className={`
48
- ${cn.GuideBody}
49
- ${size == "md" && cn.GuideBodyMd}
50
- `}>
69
+ <div part="body">
51
70
  {children}
52
71
  </div>
53
72
  </div>
54
73
  </div>
55
- </a>
56
- </div>
74
+ </Link>
75
+ </xyd-guidecard>
57
76
  }
58
77
 
59
- GuideCard.List = function GuideCardList({children}: { children: React.ReactNode }) {
60
- return <div className={cn.GuideListHost}>
78
+ /**
79
+ * A container component for grouping multiple GuideCard components.
80
+ * Provides consistent spacing and layout for a list of guide cards.
81
+ */
82
+ GuideCard.List = function GuideCardList({ children }: { children: React.ReactNode }) {
83
+ return <xyd-guidecard-list className={cn.GuideListHost}>
61
84
  {children}
62
- </div>
85
+ </xyd-guidecard-list>
63
86
  }
64
87
 
65
- function Pointer() {
66
- return <div data-pointer="true" className={cn.GuidePointer}>
88
+ /**
89
+ * Internal component that renders the arrow pointer icon.
90
+ */
91
+ function $Pointer() {
92
+ return <div part="pointer">
67
93
  <svg
68
94
  xmlns="http://www.w3.org/2000/svg"
69
95
  width={24}
@@ -78,4 +104,13 @@ function Pointer() {
78
104
  />
79
105
  </svg>
80
106
  </div>
107
+ }
108
+
109
+ function $Link({ href, children, ...rest }) {
110
+ return <a
111
+ href={href}
112
+ {...rest}
113
+ >
114
+ {children}
115
+ </a>
81
116
  }
@@ -1,77 +1,93 @@
1
- import {css} from "@linaria/core";
1
+ import { css } from "@linaria/core";
2
2
 
3
3
  export const HeadingHost = css`
4
- line-height: 40px;
5
- font-weight: 600;
6
-
7
- position: relative;
8
- display: inline-block;
9
- margin: 0;
10
- padding: 0 24px 0 0;
11
- scroll-margin-top: 30px;
12
- cursor: pointer;
13
-
14
- &:hover {
15
- svg {
16
- opacity: 1;
4
+ @layer defaults {
5
+ color: var(--xyd-heading-color);
6
+ line-height: var(--xyd-line-height-xlarge);
7
+ font-weight: var(--xyd-font-weight-semibold);
8
+
9
+ position: relative;
10
+ display: table;
11
+ margin: 0;
12
+ padding: 0 24px 0 0;
13
+ scroll-margin-top: 30px;
14
+ cursor: default;
15
+
16
+ &[id] {
17
+ cursor: pointer;
18
+ }
19
+ &[data-noanchor="true"] {
20
+ cursor: default;
17
21
  }
18
- }
19
- `;
20
-
21
- export const HeadingH1 = css`
22
- font-size: 36px;
23
22
 
24
- code {
25
- font-size: 30px;
26
- }
27
- `;
23
+ &[data-has-label="true"] {
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 8px;
28
27
 
29
- export const HeadingH2 = css`
30
- font-size: 30px;
28
+ xyd-badge {
29
+ font-size: var(--xyd-font-size-xsmall);
30
+ line-height: var(--xyd-line-height-xsmall);
31
+ letter-spacing: 2px;
32
+ }
33
+ }
31
34
 
32
- code {
33
- font-size: 24px;
34
- }
35
- `;
35
+ &:hover {
36
+ svg {
37
+ opacity: 1;
38
+ }
39
+ }
36
40
 
37
- export const HeadingH3 = css`
38
- font-size: 26px;
41
+ &[data-kind="muted"] {
42
+ color: var(--xyd-heading-color--muted);
43
+ cursor: default;
44
+ font-weight: var(--xyd-font-weight-medium);
45
+ }
39
46
 
40
- code {
41
- font-size: 22px;
42
- }
43
- `;
47
+ &[data-size="1"] {
48
+ font-size: var(--xyd-font-size-2xl);
49
+ line-height: var(--xyd-line-height-2xl);
50
+ }
44
51
 
45
- export const HeadingH4 = css`
46
- font-size: 22px;
52
+ &[data-size="2"] {
53
+ font-size: var(--xyd-font-size-xxlarge);
54
+ line-height: var(--xyd-line-height-xxlarge);
55
+ }
47
56
 
48
- code {
49
- font-size: 18px;
50
- }
51
- `;
57
+ &[data-size="3"] {
58
+ font-size: var(--xyd-font-size-xlarge);
59
+ line-height: var(--xyd-line-height-xlarge);
60
+ }
52
61
 
53
- export const HeadingH5 = css`
54
- font-size: 18px;
62
+ &[data-size="4"] {
63
+ font-size: var(--xyd-font-size-large);
64
+ line-height: var(--xyd-line-height-large);
65
+ }
55
66
 
56
- code {
57
- font-size: 14px;
58
- }
59
- `;
67
+ &[data-size="5"] {
68
+ font-size: var(--xyd-font-size-medium);
69
+ line-height: var(--xyd-line-height-medium);
70
+ }
60
71
 
61
- export const HeadingH6 = css`
62
- font-size: 16px;
72
+ &[data-size="6"] {
73
+ font-size: var(--xyd-font-size-small);
74
+ line-height: var(--xyd-line-height-small);
75
+ }
63
76
 
64
- code {
65
- font-size: 12px;
77
+ [part="icon"] {
78
+ position: absolute;
79
+ top: 50%;
80
+ right: 0;
81
+ margin-top: -6px;
82
+ opacity: 0;
83
+ color: var(--xyd-heading-icon-color);
84
+ transition: opacity .15s ease;
85
+ }
86
+ &[data-active="true"] {
87
+ [part="icon"] {
88
+ opacity: 1;
89
+ }
90
+ }
66
91
  }
67
92
  `;
68
93
 
69
- export const HeadingLink = css`
70
- position: absolute;
71
- top: 50%;
72
- right: 0;
73
- margin-top: -6px;
74
- opacity: 0;
75
- color: #7051d4;
76
- transition: opacity .15s ease;
77
- `;
@@ -1,47 +1,117 @@
1
- import React, {useRef} from "react"
1
+ import React, { } from "react"
2
2
 
3
3
  import * as cn from "./Heading.styles";
4
+ import { Badge } from "writer";
4
5
 
6
+ /**
7
+ * Props for the Heading component
8
+ * @interface HeadingProps
9
+ */
5
10
  export interface HeadingProps {
11
+ /** Content to be rendered inside the heading */
6
12
  children: React.ReactNode
13
+
14
+ /** The size of the heading (1-6, corresponding to h1-h6) */
7
15
  size: 1 | 2 | 3 | 4 | 5 | 6
16
+
17
+ /** Optional HTML element to render as (div or span) */
8
18
  as?: "div" | "span"
19
+
20
+ /** Optional ID for the heading element */
9
21
  id?: string
22
+
23
+ /** Optional visual style variant */
24
+ kind?: "muted"
25
+
26
+ /** Optional click handler */
10
27
  onClick?: () => void
28
+
29
+ /** Optional additional CSS class name */
30
+ className?: string
31
+
32
+ /** Optional active state */
33
+ active?: boolean
34
+
35
+ /** Optional label for the heading */
36
+ label?: string
37
+
38
+ /** Optional subtitle for the heading */
39
+ subtitle?: string
40
+
41
+ /** Optional to hide the anchor icon */
42
+ noanchor?: boolean
43
+
44
+ /** Optional ref for the heading element */
45
+ ref?: React.RefObject<HTMLHeadingElement>
46
+
47
+ style?: React.CSSProperties
11
48
  }
12
49
 
13
- export function Heading({children, size = 1, as, id, onClick}: HeadingProps) {
50
+ /**
51
+ * A flexible heading component that can render as any heading level (h1-h6) or as a div/span
52
+ *
53
+ * @category Component
54
+ */
55
+ export function Heading(props: HeadingProps) {
56
+ const {
57
+ children,
58
+ size = 1,
59
+ as,
60
+ id,
61
+ onClick,
62
+ className,
63
+ kind,
64
+ active,
65
+ label,
66
+ subtitle,
67
+ noanchor,
68
+ ref,
69
+ style,
70
+ } = props
14
71
  let HeadingComponent = as ? as : `h${size}` as "h1" | "h2" | "h3" | "h4" | "h5" | "h6"
15
72
 
16
- const obRef = useRef<HTMLAnchorElement>(null)
17
-
18
- return <HeadingComponent
19
- className={`
20
- ${cn.HeadingHost}
21
- ${size === 1 && cn.HeadingH1}
22
- ${size === 2 && cn.HeadingH2}
23
- ${size === 3 && cn.HeadingH3}
24
- ${size === 4 && cn.HeadingH4}
25
- ${size === 5 && cn.HeadingH5}
26
- ${size === 6 && cn.HeadingH6}
27
- xyd_comp-comp-heading
28
- `}
29
- onClick={onClick}
30
- >
31
- {children}
73
+ return <>
74
+ <HeadingComponent
75
+ style={style || undefined}
76
+ className={` ${cn.HeadingHost} ${className || ''}`}
77
+ data-size={size}
78
+ data-kind={kind}
79
+ data-has-label={String(label ? "true" : "false")}
80
+ data-noanchor={String(noanchor || "false")}
81
+ data-active={String(active || "false")}
82
+ onClick={noanchor ? undefined : onClick}
83
+ id={id}
84
+ ref={ref}
85
+ >
86
+ {children}
87
+
88
+ {label && <Badge size="sm">{label}</Badge>}
89
+
90
+ {id && !noanchor && <$Anchor />}
91
+ </HeadingComponent>
32
92
 
33
- {id && <Anchor/>}
34
- </HeadingComponent>
93
+ {
94
+ subtitle ? <Heading
95
+ {...props}
96
+ size={4}
97
+ kind="muted"
98
+ subtitle={undefined}
99
+ label={undefined}
100
+ >
101
+ {subtitle}
102
+ </Heading> : null
103
+ }
104
+ </>
35
105
  }
36
106
 
37
- function Anchor() {
107
+ function $Anchor() {
38
108
  return <svg
109
+ part="icon"
39
110
  xmlns="http://www.w3.org/2000/svg"
40
111
  width={15}
41
112
  height={15}
42
113
  fill="currentColor"
43
114
  viewBox="0 0 24 24"
44
- className={cn.HeadingLink}
45
115
  role="presentation"
46
116
  >
47
117
  <path
@@ -1,5 +1,7 @@
1
1
  import {css} from "@linaria/core";
2
2
 
3
3
  export const HrHost = css`
4
- border-color: rgb(229 229 229 / 0.7);
4
+ @layer defaults {
5
+ border: 0.5px solid var(--xyd-hr-border-color);
6
+ }
5
7
  `;
@@ -3,11 +3,8 @@ import React from "react"
3
3
  import * as cn from "./Hr.styles";
4
4
 
5
5
  export interface HrProps {
6
- children: React.ReactNode;
7
6
  }
8
7
 
9
- export function Hr({children}: HrProps) {
10
- return <hr className={cn.HrHost}>
11
- {children}
12
- </hr>
8
+ export function Hr() {
9
+ return <hr part="hr" className={cn.HrHost}/>
13
10
  }
@@ -0,0 +1,48 @@
1
+ import React, {createContext, ReactElement, SVGProps, use} from "react";
2
+ import parse from 'html-react-parser';
3
+
4
+ // TODO: html-react-parser is not the best choice, but it works for now
5
+
6
+ export const IconProvider = createContext({
7
+ iconSet: {}
8
+ })
9
+
10
+ interface IconProps {
11
+ name: string;
12
+ size?: number;
13
+ color?: string;
14
+ }
15
+
16
+ export function Icon(props: IconProps): ReactElement | null {
17
+ const {name, size = 24, color} = props
18
+
19
+ const iconProvider = use(IconProvider)
20
+ const iconSet = iconProvider?.iconSet
21
+
22
+ if (!iconSet) {
23
+ return null
24
+ }
25
+
26
+ const ico = iconSet[name]
27
+ if (!ico || !ico.svg) {
28
+ return null
29
+ }
30
+
31
+ const icon = parse(ico.svg) as ReactElement<SVGProps<SVGSVGElement>>
32
+ if (React.isValidElement(icon)) {
33
+ return React.cloneElement(icon, {
34
+ width: size,
35
+ height: size,
36
+ color: color || icon.props.color || 'currentColor',
37
+ style: {
38
+ width: size,
39
+ height: size,
40
+ color: color || icon.props.color || 'currentColor',
41
+ }
42
+ })
43
+ }
44
+
45
+ return null
46
+ }
47
+
48
+
@@ -0,0 +1 @@
1
+ export * from "./Icon"
@@ -0,0 +1,9 @@
1
+ import { css } from "@linaria/core"
2
+
3
+ export const ImageHost = css`
4
+ @layer defaults {
5
+ width: 100%;
6
+ border-radius: 16px;
7
+ box-shadow: 0 2px 16px rgba(0,0,0,0.06);
8
+ }
9
+ `;
@@ -0,0 +1,19 @@
1
+
2
+
3
+ import React from 'react';
4
+
5
+ import * as cn from "./Image.styles"
6
+
7
+ export interface ImageProps {
8
+ src: string
9
+ alt: string
10
+ style?: React.CSSProperties
11
+ }
12
+
13
+ export function Image(props: ImageProps) {
14
+ return <img
15
+ src={props.src}
16
+ alt={props.alt}
17
+ className={cn.ImageHost}
18
+ />
19
+ }
@@ -0,0 +1 @@
1
+ export { Image } from "./Image"
@@ -0,0 +1,47 @@
1
+ import { css } from '@linaria/core'
2
+
3
+ export default {
4
+ List: css`
5
+ @layer defaults {
6
+ list-style: none;
7
+ margin: 0;
8
+ padding: 0;
9
+
10
+ ol& {
11
+ list-style-type: decimal;
12
+ padding-inline-start: 1.625em;
13
+ }
14
+ }
15
+ `,
16
+ Item: css`
17
+ @layer defaults {
18
+ ul & {
19
+ margin-bottom: 0.5rem;
20
+ position: relative;
21
+ padding-inline-start: .375em;
22
+ padding-left: 2em !important;
23
+ }
24
+
25
+ /* TODO: IN THE FUTURE BETTER SOLUTION IS NEEDED */
26
+ xyd-grid-decorator ul & {
27
+ padding-left: 0 !important;
28
+ }
29
+
30
+ ul &::before {
31
+ content: "";
32
+ width: .375em;
33
+ height: .375em;
34
+ position: absolute;
35
+ top: 0.5em;
36
+ left: .5em;
37
+ border-radius: 50%;
38
+ background-color: var(--xyd-list-item-bgcolor);
39
+ }
40
+
41
+ ol &::marker {
42
+ padding-inline-start: .375em;
43
+ color: var(--xyd-list-marker-color);
44
+ }
45
+ }
46
+ `
47
+ }
@@ -0,0 +1,29 @@
1
+ import React from "react"
2
+
3
+ import cn from "./List.styles";
4
+
5
+ export interface ListProps {
6
+ children: React.ReactNode;
7
+ }
8
+
9
+ export function List({ children }: ListProps) {
10
+ return <ul className={cn.List}>
11
+ {children}
12
+ </ul>
13
+ }
14
+
15
+ export function ListOl({ children }: ListProps) {
16
+ return <ol className={cn.List}>
17
+ {children}
18
+ </ol>
19
+ }
20
+
21
+ export interface ListItemProps {
22
+ children: React.ReactNode;
23
+ }
24
+
25
+ function ListItem({ children }: ListItemProps) {
26
+ return <li className={cn.Item}>{children}</li>
27
+ }
28
+
29
+ List.Item = ListItem;
@@ -0,0 +1,4 @@
1
+ export {
2
+ List,
3
+ ListOl
4
+ } from "./List";