@xyd-js/components 0.1.0-xyd.7 → 0.1.0-xyd.8

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 (223) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -0
  3. package/dist/CTABanner-4FVIoaTR.js +2 -0
  4. package/dist/CTABanner-4FVIoaTR.js.map +1 -0
  5. package/dist/CTABanner-C6afsXoE.js +2 -0
  6. package/dist/CTABanner-C6afsXoE.js.map +1 -0
  7. package/dist/CTABanner-CEKs-Hb-.js +2 -0
  8. package/dist/CTABanner-CEKs-Hb-.js.map +1 -0
  9. package/dist/CTABanner-CUNcTr6s.js +2 -0
  10. package/dist/CTABanner-CUNcTr6s.js.map +1 -0
  11. package/dist/CTABanner-D02aIAsD.js +2 -0
  12. package/dist/CTABanner-D02aIAsD.js.map +1 -0
  13. package/dist/CTABanner-Dm3tUG3I.js +2 -0
  14. package/dist/CTABanner-Dm3tUG3I.js.map +1 -0
  15. package/dist/CTABanner-MCOcVowa.js +2 -0
  16. package/dist/CTABanner-MCOcVowa.js.map +1 -0
  17. package/dist/CTABanner-X6K49gSr.js +2 -0
  18. package/dist/CTABanner-X6K49gSr.js.map +1 -0
  19. package/dist/CodeSample-B9VUhTKF.js +2 -0
  20. package/dist/CodeSample-B9VUhTKF.js.map +1 -0
  21. package/dist/CodeSample-BSXeFy0x.js +2 -0
  22. package/dist/CodeSample-BSXeFy0x.js.map +1 -0
  23. package/dist/CodeSample-BwP208sQ.js +2 -0
  24. package/dist/CodeSample-BwP208sQ.js.map +1 -0
  25. package/dist/CodeSample-CUemtj_W.js +2 -0
  26. package/dist/CodeSample-CUemtj_W.js.map +1 -0
  27. package/dist/CodeSample-D0iKih-A.js +2 -0
  28. package/dist/CodeSample-D0iKih-A.js.map +1 -0
  29. package/dist/CodeSample-D33vTa6M.js +2 -0
  30. package/dist/CodeSample-D33vTa6M.js.map +1 -0
  31. package/dist/CodeSample-DUSx2KBt.js +2 -0
  32. package/dist/CodeSample-DUSx2KBt.js.map +1 -0
  33. package/dist/CodeSample-P4yxkHPW.js +2 -0
  34. package/dist/CodeSample-P4yxkHPW.js.map +1 -0
  35. package/dist/HomeView-ACBdUgyz.js +2 -0
  36. package/dist/HomeView-ACBdUgyz.js.map +1 -0
  37. package/dist/HomeView-B0ATNUF1.js +2 -0
  38. package/dist/HomeView-B0ATNUF1.js.map +1 -0
  39. package/dist/HomeView-COJrg8Ju.js +2 -0
  40. package/dist/HomeView-COJrg8Ju.js.map +1 -0
  41. package/dist/HomeView-Cun4apuy.js +2 -0
  42. package/dist/HomeView-Cun4apuy.js.map +1 -0
  43. package/dist/HomeView-D4DXEOOn.js +2 -0
  44. package/dist/HomeView-D4DXEOOn.js.map +1 -0
  45. package/dist/HomeView-DaH1PSBB.js +2 -0
  46. package/dist/HomeView-DaH1PSBB.js.map +1 -0
  47. package/dist/HomeView-O_lj2c2t.js +2 -0
  48. package/dist/HomeView-O_lj2c2t.js.map +1 -0
  49. package/dist/HomeView-_Nu2RcOM.js +2 -0
  50. package/dist/HomeView-_Nu2RcOM.js.map +1 -0
  51. package/dist/UnderlineNav-BCyB0G5d.js +2 -0
  52. package/dist/UnderlineNav-BCyB0G5d.js.map +1 -0
  53. package/dist/UnderlineNav-BEhDJk0H.js +2 -0
  54. package/dist/UnderlineNav-BEhDJk0H.js.map +1 -0
  55. package/dist/UnderlineNav-BqZ2xAp7.js +2 -0
  56. package/dist/UnderlineNav-BqZ2xAp7.js.map +1 -0
  57. package/dist/UnderlineNav-C2-4Vyj8.js +2 -0
  58. package/dist/UnderlineNav-C2-4Vyj8.js.map +1 -0
  59. package/dist/UnderlineNav-Co08Gykm.js +2 -0
  60. package/dist/UnderlineNav-Co08Gykm.js.map +1 -0
  61. package/dist/UnderlineNav-DC3UVmnZ.js +2 -0
  62. package/dist/UnderlineNav-DC3UVmnZ.js.map +1 -0
  63. package/dist/UnderlineNav-DsRYwuGB.js +2 -0
  64. package/dist/UnderlineNav-DsRYwuGB.js.map +1 -0
  65. package/dist/UnderlineNav-FbclXKUW.js +2 -0
  66. package/dist/UnderlineNav-FbclXKUW.js.map +1 -0
  67. package/dist/{_rollupPluginBabelHelpers-BMmCG_qQ.js → _rollupPluginBabelHelpers-BEouSrrZ.js} +2 -2
  68. package/dist/_rollupPluginBabelHelpers-BEouSrrZ.js.map +1 -0
  69. package/dist/{_rollupPluginBabelHelpers-DsEzE6Ab.js → _rollupPluginBabelHelpers-BHehKRBq.js} +2 -2
  70. package/dist/_rollupPluginBabelHelpers-BHehKRBq.js.map +1 -0
  71. package/dist/_rollupPluginBabelHelpers-Bunpz22T.js +2 -0
  72. package/dist/_rollupPluginBabelHelpers-Bunpz22T.js.map +1 -0
  73. package/dist/_rollupPluginBabelHelpers-CVblpRvU.js +2 -0
  74. package/dist/_rollupPluginBabelHelpers-CVblpRvU.js.map +1 -0
  75. package/dist/_rollupPluginBabelHelpers-CxmswfqM.js +2 -0
  76. package/dist/_rollupPluginBabelHelpers-CxmswfqM.js.map +1 -0
  77. package/dist/_rollupPluginBabelHelpers-DQJTK9EO.js +2 -0
  78. package/dist/_rollupPluginBabelHelpers-DQJTK9EO.js.map +1 -0
  79. package/dist/_rollupPluginBabelHelpers-DuRQdJ01.js +2 -0
  80. package/dist/_rollupPluginBabelHelpers-DuRQdJ01.js.map +1 -0
  81. package/dist/_rollupPluginBabelHelpers-tRAa4O0f.js +2 -0
  82. package/dist/_rollupPluginBabelHelpers-tRAa4O0f.js.map +1 -0
  83. package/dist/brand.d.ts +9 -9
  84. package/dist/brand.js +1 -1
  85. package/dist/brand.js.map +1 -1
  86. package/dist/coder.js +1 -1
  87. package/dist/content.d.ts +4 -3
  88. package/dist/content.js +1 -1
  89. package/dist/content.js.map +1 -1
  90. package/dist/index-B0FncPxO.js +2 -0
  91. package/dist/index-B0FncPxO.js.map +1 -0
  92. package/dist/index-BEm-xkm-.js +2 -0
  93. package/dist/index-BEm-xkm-.js.map +1 -0
  94. package/dist/index-BHwtxG27.js +2 -0
  95. package/dist/index-BHwtxG27.js.map +1 -0
  96. package/dist/index-BTcmIG47.js +2 -0
  97. package/dist/index-BTcmIG47.js.map +1 -0
  98. package/dist/index-CNkHt1r7.js +2 -0
  99. package/dist/index-CNkHt1r7.js.map +1 -0
  100. package/dist/index-D0XuyFm7.js +2 -0
  101. package/dist/index-D0XuyFm7.js.map +1 -0
  102. package/dist/index-DBspcqWq.js +2 -0
  103. package/dist/index-DBspcqWq.js.map +1 -0
  104. package/dist/index-DVBO4gYE.js +2 -0
  105. package/dist/index-DVBO4gYE.js.map +1 -0
  106. package/dist/index.css +217 -216
  107. package/dist/layouts.d.ts +1 -1
  108. package/dist/layouts.js +1 -1
  109. package/dist/layouts.js.map +1 -1
  110. package/dist/pages.js +1 -1
  111. package/dist/pages.js.map +1 -1
  112. package/dist/{tslib.es6-DDIOdJiV.js → tslib.es6-BBkx4Se1.js} +1 -1
  113. package/dist/{tslib.es6-DDIOdJiV.js.map → tslib.es6-BBkx4Se1.js.map} +1 -1
  114. package/dist/{tslib.es6-DUrRPhZd.js → tslib.es6-BF6ZLEXa.js} +1 -1
  115. package/dist/{tslib.es6-DUrRPhZd.js.map → tslib.es6-BF6ZLEXa.js.map} +1 -1
  116. package/dist/tslib.es6-BOZCDgb8.js +2 -0
  117. package/dist/tslib.es6-BOZCDgb8.js.map +1 -0
  118. package/dist/tslib.es6-Cjl5tesf.js +2 -0
  119. package/dist/tslib.es6-Cjl5tesf.js.map +1 -0
  120. package/dist/tslib.es6-DEH7Dkgy.js +2 -0
  121. package/dist/tslib.es6-DEH7Dkgy.js.map +1 -0
  122. package/dist/tslib.es6-DTeJ7dWi.js +2 -0
  123. package/dist/tslib.es6-DTeJ7dWi.js.map +1 -0
  124. package/dist/tslib.es6-U9-f6pA7.js +2 -0
  125. package/dist/tslib.es6-U9-f6pA7.js.map +1 -0
  126. package/dist/tslib.es6-cb69JjeS.js +2 -0
  127. package/dist/tslib.es6-cb69JjeS.js.map +1 -0
  128. package/dist/views.js +1 -1
  129. package/dist/writer.d.ts +4 -3
  130. package/dist/writer.js +1 -1
  131. package/dist/writer.js.map +1 -1
  132. package/package.json +12 -11
  133. package/rollup.config.js +20 -1
  134. package/src/brand/Button/Button.styles.tsx +31 -0
  135. package/src/brand/Button/Button.tsx +3 -35
  136. package/src/brand/CTABanner/CTABanner.styles.tsx +82 -0
  137. package/src/brand/CTABanner/CTABanner.tsx +34 -112
  138. package/src/brand/Footer/Footer.styles.tsx +21 -0
  139. package/src/brand/Footer/Footer.tsx +4 -24
  140. package/src/brand/TODO.md +1 -0
  141. package/src/coder/Code/Code.styles.tsx +45 -48
  142. package/src/coder/Code/Code.tsx +8 -8
  143. package/src/coder/Code/CodeLoader.tsx +2 -2
  144. package/src/coder/Code/annotations.tsx +1 -1
  145. package/src/coder/CodeCopy/CodeCopy.styles.tsx +19 -0
  146. package/src/coder/CodeCopy/CodeCopy.tsx +2 -4
  147. package/src/coder/CodeTabs/CodeTabs.styles.tsx +101 -97
  148. package/src/coder/CodeTabs/CodeTabs.tsx +11 -14
  149. package/src/content/Anchor/Anchor.styles.tsx +5 -0
  150. package/src/content/Anchor/Anchor.tsx +4 -14
  151. package/src/content/Content/Content.styles.tsx +9 -0
  152. package/src/content/Content/Content.tsx +4 -12
  153. package/src/content/Content.tsx +1 -2
  154. package/src/content/Subtitle/Subtitle.styles.ts +8 -0
  155. package/src/content/Subtitle/Subtitle.tsx +1 -10
  156. package/src/layouts/Layout.styles.tsx +135 -131
  157. package/src/layouts/Layout.tsx +21 -23
  158. package/src/layouts/LayoutPrimary/LayoutPrimary.styles.tsx +298 -277
  159. package/src/layouts/LayoutPrimary/LayoutPrimary.tsx +39 -42
  160. package/src/pages/HomePage/HomePage.styles.tsx +16 -0
  161. package/src/pages/HomePage/HomePage.tsx +7 -21
  162. package/src/pages/TODO.md +1 -0
  163. package/src/ui/Loader/Loader.styles.tsx +48 -46
  164. package/src/ui/Loader/Loader.tsx +8 -8
  165. package/src/ui/TODO.md +2 -0
  166. package/src/utils/useStyle.ts +19 -0
  167. package/src/views/HomeView/HomeView.styles.tsx +37 -0
  168. package/src/views/HomeView/HomeView.tsx +5 -45
  169. package/src/views/TODO.md +1 -0
  170. package/src/writer/Badge/Badge.styles.tsx +31 -30
  171. package/src/writer/Badge/Badge.tsx +40 -9
  172. package/src/writer/Blockquote/Blockquote.styles.tsx +6 -8
  173. package/src/writer/Blockquote/Blockquote.tsx +2 -2
  174. package/src/writer/Breadcrumbs/Breadcrumbs.styles.ts +27 -26
  175. package/src/writer/Breadcrumbs/Breadcrumbs.tsx +5 -5
  176. package/src/writer/Callout/Callout.styles.tsx +44 -48
  177. package/src/writer/Callout/Callout.tsx +5 -5
  178. package/src/writer/Code/Code.styles.tsx +11 -13
  179. package/src/writer/Code/Code.tsx +2 -2
  180. package/src/writer/Details/Details.styles.tsx +101 -90
  181. package/src/writer/Details/Details.tsx +32 -33
  182. package/src/writer/GuideCard/GuideCard.styles.tsx +116 -112
  183. package/src/writer/GuideCard/GuideCard.tsx +19 -19
  184. package/src/writer/Heading/Heading.styles.tsx +65 -61
  185. package/src/writer/Heading/Heading.tsx +11 -11
  186. package/src/writer/Hr/Hr.styles.tsx +3 -5
  187. package/src/writer/Hr/Hr.tsx +2 -2
  188. package/src/writer/NavLinks/NavLinks.styles.ts +30 -31
  189. package/src/writer/NavLinks/NavLinks.tsx +6 -6
  190. package/src/writer/Pre/Pre.styles.tsx +8 -10
  191. package/src/writer/Pre/Pre.tsx +2 -2
  192. package/src/writer/Steps/Steps.styles.tsx +30 -31
  193. package/src/writer/Steps/Steps.tsx +3 -4
  194. package/src/writer/Table/Table.styles.tsx +32 -31
  195. package/src/writer/Table/Table.tsx +5 -5
  196. package/src/writer/Tabs/Tabs.styles.tsx +60 -63
  197. package/src/writer/Tabs/Tabs.tsx +11 -16
  198. package/src/writer/UnderlineNav/UnderlineNav.styles.tsx +44 -42
  199. package/src/writer/UnderlineNav/UnderlineNav.tsx +5 -5
  200. package/tsconfig.json +2 -3
  201. package/dist/CTABanner-BrdYlhnD.js +0 -2
  202. package/dist/CTABanner-BrdYlhnD.js.map +0 -1
  203. package/dist/CTABanner-XQNnnpUx.js +0 -2
  204. package/dist/CTABanner-XQNnnpUx.js.map +0 -1
  205. package/dist/CodeSample-Cp42Adjc.js +0 -2
  206. package/dist/CodeSample-Cp42Adjc.js.map +0 -1
  207. package/dist/CodeSample-DxPp80ID.js +0 -2
  208. package/dist/CodeSample-DxPp80ID.js.map +0 -1
  209. package/dist/HomeView-BN9mZXh9.js +0 -2
  210. package/dist/HomeView-BN9mZXh9.js.map +0 -1
  211. package/dist/HomeView-BVaaV0uE.js +0 -2
  212. package/dist/HomeView-BVaaV0uE.js.map +0 -1
  213. package/dist/UnderlineNav-Bs7Ot9Ch.js +0 -2
  214. package/dist/UnderlineNav-Bs7Ot9Ch.js.map +0 -1
  215. package/dist/UnderlineNav-C2aEVraN.js +0 -2
  216. package/dist/UnderlineNav-C2aEVraN.js.map +0 -1
  217. package/dist/_rollupPluginBabelHelpers-BMmCG_qQ.js.map +0 -1
  218. package/dist/_rollupPluginBabelHelpers-DsEzE6Ab.js.map +0 -1
  219. package/dist/index-BVUz77Tm.js +0 -2
  220. package/dist/index-BVUz77Tm.js.map +0 -1
  221. package/dist/index-jxd3nv2J.js +0 -2
  222. package/dist/index-jxd3nv2J.js.map +0 -1
  223. package/src/coder/CodeCopy/CodeCopy.style.tsx +0 -21
@@ -1,12 +1,12 @@
1
1
  import React, {useEffect, useState} from "react"
2
2
 
3
- import {$layout, $page, $article, globalHeaderHeight} from "./LayoutPrimary.styles.tsx"
3
+ import * as cn from "./LayoutPrimary.styles"
4
4
 
5
5
  export interface LayoutPrimaryProps {
6
6
  header: React.ReactNode;
7
7
  aside: React.ReactNode;
8
8
  content: React.ReactNode;
9
- contentNav: React.ReactNode;
9
+ contentNav?: React.ReactNode;
10
10
 
11
11
  subheader?: React.ReactNode;
12
12
  layoutSize?: "large"
@@ -18,23 +18,26 @@ export function LayoutPrimary(props: LayoutPrimaryProps) {
18
18
 
19
19
  const {hideMainHeader} = props.subheader ? useSubHeader() : {hideMainHeader: false}
20
20
 
21
- return <div className={$layout.host}>
21
+ return <div className={cn.LayoutPrimaryHost}>
22
22
  <header className={`
23
- ${$layout.header}
24
- ${props.subheader && $layout.header$$sub}
25
- ${hideMainHeader && $layout.header$$hideMain}
23
+ ${cn.LayoutPrimaryHeader}
24
+ ${props.subheader && cn.LayoutPrimaryHeaderSub}
25
+ ${hideMainHeader && cn.LayoutPrimaryHeaderHideMain}
26
26
  `}>
27
- <div className={$layout.primaryHeaderContent}>
27
+ <div className={cn.LayoutPrimaryHeaderContent}>
28
28
  {props.header}
29
29
  <button
30
- className={$layout.hamburgerButton}
30
+ className={cn.LayoutPrimaryHamburgerButton}
31
31
  onClick={() => setIsMobileNavOpen(!isMobileNavOpen)}
32
32
  aria-label="Toggle navigation menu"
33
33
  >
34
- <div className={$layout.hamburgerIcon}>
35
- <span className={`${$layout.hamburgerLine} ${isMobileNavOpen ? $layout.hamburgerLine$$open : ''}`}/>
36
- <span className={`${$layout.hamburgerLine} ${isMobileNavOpen ? $layout.hamburgerLine$$open : ''}`}/>
37
- <span className={`${$layout.hamburgerLine} ${isMobileNavOpen ? $layout.hamburgerLine$$open : ''}`}/>
34
+ <div className={cn.LayoutPrimaryHamburgerIcon}>
35
+ <span
36
+ className={`${cn.LayoutPrimaryHamburgerLine} ${isMobileNavOpen ? cn.LayoutPrimaryHamburgerLineOpen : ''}`}/>
37
+ <span
38
+ className={`${cn.LayoutPrimaryHamburgerLine} ${isMobileNavOpen ? cn.LayoutPrimaryHamburgerLineOpen : ''}`}/>
39
+ <span
40
+ className={`${cn.LayoutPrimaryHamburgerLine} ${isMobileNavOpen ? cn.LayoutPrimaryHamburgerLineOpen : ''}`}/>
38
41
  </div>
39
42
  </button>
40
43
  </div>
@@ -43,55 +46,49 @@ export function LayoutPrimary(props: LayoutPrimaryProps) {
43
46
 
44
47
  {/* Mobile Drawer Sidebar */}
45
48
  <div
46
- className={`${$layout.overlay} ${isMobileNavOpen ? $layout.overlay$$visible : ''}`}
49
+ className={`${cn.LayoutPrimaryOverlay} ${isMobileNavOpen ? cn.LayoutPrimaryOverlayVisible : ''}`}
47
50
  onClick={() => setIsMobileNavOpen(false)}
48
51
  />
49
52
  <aside className={`
50
- ${$layout.mobileSidebar}
51
- ${isMobileNavOpen ? $layout.mobileSidebar$$open : ''}
53
+ ${cn.LayoutPrimaryMobileSidebar}
54
+ ${isMobileNavOpen ? cn.LayoutPrimaryMobileSidebarOpen : ''}
52
55
  `}>
53
- <div className={$layout.sidebarContent}>
56
+ <div className={cn.LayoutPrimarySidebarContent}>
54
57
  {props.aside}
55
58
  </div>
56
59
  <button
57
- className={$layout.closeButton}
60
+ className={cn.LayoutPrimaryCloseButton}
58
61
  onClick={() => setIsMobileNavOpen(false)}
59
62
  aria-label="Close navigation menu"
60
63
  >
61
- <div className={$layout.closeIcon}/>
64
+ <div className={cn.LayoutPrimaryCloseIcon}/>
62
65
  </button>
63
66
  </aside>
64
67
 
65
68
  <main className={`
66
- ${$layout.main}
67
- ${!hideMainHeader && props.subheader && $layout.main$$sub}
69
+ ${cn.LayoutPrimaryMain}
70
+ ${!hideMainHeader && props.subheader && cn.LayoutPrimaryMainSub}
68
71
  `}>
69
72
  {/* Desktop Static Sidebar */}
70
- <aside className={$layout.staticSidebar}>
73
+ <aside className={cn.LayoutPrimaryStaticSidebar}>
71
74
  {props.aside}
72
75
  </aside>
73
76
 
74
- <div className={$page.host}>
75
- <div className={$page.scroll}>
77
+ <div className={cn.LayoutPrimaryPageHost}>
78
+ <div className={cn.LayoutPrimaryPageScroll}>
76
79
  <div className={`
77
- ${$page.container}
78
- ${props.layoutSize == "large" && $page.container$$large}
80
+ ${cn.LayoutPrimaryPageContainer}
81
+ ${props.layoutSize == "large" && cn.LayoutPrimaryPageContainerLarge}
79
82
  `}>
80
- <div className={`
81
- ${$page.articleContainer}
82
- `}>
83
- <article className={$article.host}>
84
- <section className={$article.content}>
83
+ <div className={cn.LayoutPrimaryPageArticleContainer}>
84
+ <article className={cn.LayoutPrimaryArticleHost}>
85
+ <section className={cn.LayoutPrimaryArticleContent}>
85
86
  {props.content}
86
87
  </section>
87
- {
88
- props.contentNav && <nav className={`
89
- ${$article.nav}
90
- `}>
91
- {props.contentNav}
92
- </nav>
93
- }
94
88
  </article>
89
+ {props.contentNav && <nav className={cn.LayoutPrimaryArticleNav}>
90
+ {props.contentNav}
91
+ </nav>}
95
92
  </div>
96
93
  </div>
97
94
  </div>
@@ -111,7 +108,7 @@ function useSubHeader() {
111
108
  return
112
109
  }
113
110
 
114
- const checkpoint = parseInt(globalHeaderHeight, 10) / 2
111
+ const checkpoint = parseInt(cn.globalHeaderHeight, 10) / 2
115
112
  const diff = scrollTop - controlScrollPos
116
113
  const reversePosDiff = Math.abs(scrollTop - controlScrollPos)
117
114
 
@@ -145,12 +142,12 @@ function useSubHeader() {
145
142
  // TODO: by ref?
146
143
  // TODO: MOVE SOMEWHERE ELSE BECAUSE IT DECREASE PERFORMANCE (RERENDER)
147
144
  useEffect(() => {
148
- document.querySelector(`.${$page.scroll}`)?.addEventListener("scroll", onScroll)
149
- document.querySelector(`.${$page.scroll}`)?.addEventListener("scrollend", onScrollFinish)
145
+ document.querySelector(`.${cn.LayoutPrimaryPageScroll}`)?.addEventListener("scroll", onScroll)
146
+ document.querySelector(`.${cn.LayoutPrimaryPageScroll}`)?.addEventListener("scrollend", onScrollFinish)
150
147
 
151
148
  return () => {
152
- document.querySelector(`.${$page.scroll}`)?.removeEventListener("scroll", onScroll)
153
- document.querySelector(`.${$page.scroll}`)?.removeEventListener("scrollend", onScrollFinish)
149
+ document.querySelector(`.${cn.LayoutPrimaryPageScroll}`)?.removeEventListener("scroll", onScroll)
150
+ document.querySelector(`.${cn.LayoutPrimaryPageScroll}`)?.removeEventListener("scrollend", onScrollFinish)
154
151
  }
155
152
  }, []);
156
153
 
@@ -0,0 +1,16 @@
1
+ import {css} from "@linaria/core";
2
+
3
+ export const HomePageCardsHost = css`
4
+ display: grid;
5
+ grid-template-columns: repeat(2, 500px);
6
+ justify-content: center;
7
+ gap: 30px;
8
+
9
+ @media (max-width: 1200px) {
10
+ grid-template-columns: repeat(2, 1fr);
11
+ }
12
+
13
+ @media (max-width: 768px) {
14
+ grid-template-columns: 1fr;
15
+ }
16
+ `;
@@ -1,5 +1,5 @@
1
1
  import React from 'react'
2
- import {css} from "@linaria/core";
2
+ import * as cn from "./HomePage.styles";
3
3
 
4
4
  import {
5
5
  GuideCard,
@@ -9,23 +9,6 @@ import {HomeView} from "../../views"
9
9
 
10
10
  import {IHomePageHero, IHomePageFeature} from "./types";
11
11
 
12
- const $cards = {
13
- host: css`
14
- display: grid;
15
- grid-template-columns: repeat(2, 500px);
16
- justify-content: center;
17
- gap: 30px;
18
-
19
- @media (max-width: 1200px) {
20
- grid-template-columns: repeat(2, 1fr);
21
- }
22
-
23
- @media (max-width: 768px) {
24
- grid-template-columns: 1fr;
25
- }
26
- `,
27
- }
28
-
29
12
  export interface HomePageProps {
30
13
  header: React.ReactNode
31
14
 
@@ -50,11 +33,14 @@ export function HomePage(props: HomePageProps) {
50
33
  }
51
34
 
52
35
  function $Hero(props: HomePageProps) {
36
+ const subtitle = typeof props.hero?.subtitle === 'string'
37
+ ? props.hero.subtitle
38
+ : props.hero?.subtitle?.toString() || "";
39
+
53
40
  return <CTABanner>
54
41
  <CTABanner.Heading
55
42
  title={props.hero?.text || ""}
56
- headingEffect={props.hero?.textEffect}
57
- subtitle={props.hero?.subtitle}
43
+ subtitle={subtitle}
58
44
  />
59
45
  {props?.hero?.actions && <CTABanner.ButtonGroup>
60
46
  {props?.hero?.actions.map((action, index) => (
@@ -72,7 +58,7 @@ function $Cards(props: HomePageProps) {
72
58
  // TODO: cards gridTemplateColumns based on elements
73
59
  return <div
74
60
  className={`
75
- ${$cards.host}
61
+ ${cn.HomePageCardsHost}
76
62
  xyd_page-comp-homepage-cards
77
63
  `}>
78
64
  {props.features?.map((feat, index) => (
@@ -0,0 +1 @@
1
+ move to `@xyd-js/pages` ?
@@ -1,52 +1,54 @@
1
1
  import {css} from "@linaria/core";
2
2
 
3
- export const $loader = {
4
- host: css`
5
- display: inline-flex;
6
- align-items: center;
7
- justify-content: center;
8
- `,
9
- dots: css`
10
- display: flex;
11
- gap: 4px;
12
- `,
13
- dot: css`
14
- width: 8px;
15
- height: 8px;
16
- background-color: currentColor;
17
- border-radius: 50%;
18
- animation: pulse 1.4s infinite ease-in-out;
19
- opacity: 0.6;
20
-
21
- &:nth-of-type(2) {
22
- animation-delay: 0.2s;
23
- }
3
+ export const LoaderHost = css`
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ `;
24
8
 
25
- &:nth-of-type(3) {
26
- animation-delay: 0.4s;
27
- }
9
+ export const LoaderDots = css`
10
+ display: flex;
11
+ gap: 4px;
12
+ `;
28
13
 
29
- @keyframes pulse {
30
- 0%, 80%, 100% {
31
- transform: scale(0.6);
32
- opacity: 0.4;
33
- }
34
- 40% {
35
- transform: scale(1);
36
- opacity: 1;
37
- }
38
- }
39
- `,
40
- $$small: css`
41
- .${$loader.dot} {
42
- width: 6px;
43
- height: 6px;
14
+ export const LoaderDot = css`
15
+ width: 8px;
16
+ height: 8px;
17
+ background-color: currentColor;
18
+ border-radius: 50%;
19
+ animation: pulse 1.4s infinite ease-in-out;
20
+ opacity: 0.6;
21
+
22
+ &:nth-of-type(2) {
23
+ animation-delay: 0.2s;
24
+ }
25
+
26
+ &:nth-of-type(3) {
27
+ animation-delay: 0.4s;
28
+ }
29
+
30
+ @keyframes pulse {
31
+ 0%, 80%, 100% {
32
+ transform: scale(0.6);
33
+ opacity: 0.4;
44
34
  }
45
- `,
46
- $$large: css`
47
- .${$loader.dot} {
48
- width: 12px;
49
- height: 12px;
35
+ 40% {
36
+ transform: scale(1);
37
+ opacity: 1;
50
38
  }
51
- `
52
- }
39
+ }
40
+ `;
41
+
42
+ export const LoaderSmall = css`
43
+ .${LoaderDot} {
44
+ width: 6px;
45
+ height: 6px;
46
+ }
47
+ `;
48
+
49
+ export const LoaderLarge = css`
50
+ .${LoaderDot} {
51
+ width: 12px;
52
+ height: 12px;
53
+ }
54
+ `;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import {$loader} from "./Loader.styles.tsx";
2
+ import * as cn from "./Loader.styles";
3
3
 
4
4
  export interface LoaderProps {
5
5
  size?: "small" | "medium" | "large";
@@ -10,16 +10,16 @@ export function Loader({ size = "medium", className }: LoaderProps) {
10
10
  return (
11
11
  <div
12
12
  className={`
13
- ${$loader.host}
14
- ${size === "small" && $loader.$$small}
15
- ${size === "large" && $loader.$$large}
13
+ ${cn.LoaderHost}
14
+ ${size === "small" && cn.LoaderSmall}
15
+ ${size === "large" && cn.LoaderLarge}
16
16
  ${className}
17
17
  `}
18
18
  >
19
- <div className={$loader.dots}>
20
- <div className={$loader.dot} />
21
- <div className={$loader.dot} />
22
- <div className={$loader.dot} />
19
+ <div className={cn.LoaderDots}>
20
+ <div className={cn.LoaderDot} />
21
+ <div className={cn.LoaderDot} />
22
+ <div className={cn.LoaderDot} />
23
23
  </div>
24
24
  </div>
25
25
  );
package/src/ui/TODO.md ADDED
@@ -0,0 +1,2 @@
1
+ rename to `@xyd-js/components/kit` / `@xyd-js/components/ui-kit` ?
2
+
@@ -0,0 +1,19 @@
1
+ import {css} from '@linaria/core';
2
+
3
+ type StyleObject = Record<string, string>;
4
+ type StyleFunction = (strings: TemplateStringsArray, ...values: any[]) => string;
5
+
6
+ export function useStyle<T extends StyleObject>(component: { styles: T }) {
7
+ const styled = {} as Record<keyof T, StyleFunction>;
8
+
9
+ for (const key of Object.keys(component.styles)) {
10
+ styled[key as keyof T] = (strings: TemplateStringsArray, ...values: any[]) => {
11
+ const customStyles = css`
12
+ ${strings.reduce((result, str, i) => result + str + (values[i] || ''), '')}
13
+ `;
14
+ return `${component.styles[key]} ${customStyles}`;
15
+ };
16
+ }
17
+
18
+ return styled;
19
+ }
@@ -0,0 +1,37 @@
1
+ import {css} from "@linaria/core";
2
+
3
+ export const HomeViewHost = css`
4
+ display: flex;
5
+ flex-direction: column;
6
+ min-height: 100vh;
7
+ `;
8
+
9
+ export const HomeViewBodyHost = css`
10
+ background: radial-gradient(circle, hsl(0 0% 9% / .3) 1px, transparent 1px);
11
+ backdrop-filter: sepia(10%);
12
+ background-size: 30px 30px;
13
+ padding: 60px;
14
+ flex: 1;
15
+ `;
16
+
17
+ export const HomeViewBodyHostSecondary = css`
18
+ background: repeating-linear-gradient(to right, hsl(0 0% 9% / .1), hsl(0 0% 9% / .1) 1px, transparent 1px, transparent 50px), repeating-linear-gradient(to bottom, hsl(0 0% 9% / .1), hsl(0 0% 9% / .1) 1px, transparent 1px, transparent 50px);
19
+ `;
20
+
21
+ export const HomeViewBodyContent = css`
22
+ width: 1200px;
23
+ margin: 0 auto;
24
+ display: flex;
25
+ flex-direction: column;
26
+ gap: 80px;
27
+
28
+ @media (max-width: 1200px) {
29
+ width: 100%;
30
+ padding: 0 20px;
31
+ }
32
+
33
+ @media (max-width: 768px) {
34
+ width: 100%;
35
+ padding: 0 10px;
36
+ }
37
+ `;
@@ -1,13 +1,5 @@
1
1
  import React from "react"
2
- import {css} from "@linaria/core";
3
-
4
- const $homeView = {
5
- host: css`
6
- display: flex;
7
- flex-direction: column;
8
- min-height: 100vh;
9
- `,
10
- }
2
+ import * as cn from "./HomeView.styles";
11
3
 
12
4
  export interface HomeViewProps {
13
5
  header: React.ReactNode
@@ -16,43 +8,13 @@ export interface HomeViewProps {
16
8
  }
17
9
 
18
10
  export function HomeView({header, body, footer}: HomeViewProps) {
19
- return <div className={$homeView.host}>
11
+ return <div className={cn.HomeViewHost}>
20
12
  {header}
21
13
  {body}
22
14
  {footer}
23
15
  </div>
24
16
  }
25
17
 
26
- const $body = {
27
- host: css`
28
- background: radial-gradient(circle, hsl(0 0% 9% / .3) 1px, transparent 1px);
29
- backdrop-filter: sepia(10%);
30
- background-size: 30px 30px;
31
- padding: 60px;
32
- flex: 1;
33
- `,
34
- host$$secondary: css`
35
- background: repeating-linear-gradient(to right, hsl(0 0% 9% / .1), hsl(0 0% 9% / .1) 1px, transparent 1px, transparent 50px), repeating-linear-gradient(to bottom, hsl(0 0% 9% / .1), hsl(0 0% 9% / .1) 1px, transparent 1px, transparent 50px);
36
- `,
37
- body: css`
38
- width: 1200px;
39
- margin: 0 auto;
40
- display: flex;
41
- flex-direction: column;
42
- gap: 80px;
43
-
44
- @media (max-width: 1200px) {
45
- width: 100%;
46
- padding: 0 20px;
47
- }
48
-
49
- @media (max-width: 768px) {
50
- width: 100%;
51
- padding: 0 10px;
52
- }
53
- `
54
- }
55
-
56
18
  export interface HomeViewBodyProps {
57
19
  children: React.ReactNode
58
20
  kind?: "secondary"
@@ -60,12 +22,10 @@ export interface HomeViewBodyProps {
60
22
 
61
23
  HomeView.Body = function HomeViewBody({children, kind}: HomeViewBodyProps) {
62
24
  return <div className={`
63
- ${$body.host}
64
- ${kind === "secondary" ? $body.host$$secondary : ""}
25
+ ${cn.HomeViewBodyHost}
26
+ ${kind === "secondary" ? cn.HomeViewBodyHostSecondary : ""}
65
27
  `}>
66
- <div className={`
67
- ${$body.body}
68
- `}>
28
+ <div className={cn.HomeViewBodyContent}>
69
29
  {children}
70
30
  </div>
71
31
  </div>
@@ -0,0 +1 @@
1
+ move to `@xyd-js/pages` ?
@@ -1,33 +1,34 @@
1
1
  import {css} from "@linaria/core";
2
2
 
3
- export const $badge = {
4
- host: css`
5
- display: inline-flex;
6
- align-items: center;
7
- line-height: 1rem;
8
- font-style: normal;
9
- font-weight: 500;
10
- letter-spacing: normal;
11
- white-space: nowrap;
12
- text-transform: none;
13
- `,
14
- host$$warning: css`
15
- color: #434e4e;
16
- background-color: #ffffe1
17
- `,
18
- host$$info: css`
19
- color: #fff;
20
- background-color: #1971a8;
21
- `,
22
- host$$sm: css`
23
- font-size: 12px;
24
- height: 18px;
25
- padding: 0 6px;
26
- gap: 3px;
27
- border-radius: 6px;
28
- `,
3
+ export const BadgeHost = css`
4
+ display: inline-flex;
5
+ align-items: center;
6
+ line-height: 1rem;
7
+ font-style: normal;
8
+ font-weight: 500;
9
+ letter-spacing: normal;
10
+ white-space: nowrap;
11
+ text-transform: none;
12
+ `;
29
13
 
30
- item: css`
31
- position: relative;
32
- `
33
- }
14
+ export const BadgeHostWarning = css`
15
+ color: #434e4e;
16
+ background-color: #ffffe1
17
+ `;
18
+
19
+ export const BadgeHostInfo = css`
20
+ color: #fff;
21
+ background-color: #1971a8;
22
+ `;
23
+
24
+ export const BadgeHostSm = css`
25
+ font-size: 12px;
26
+ height: 18px;
27
+ padding: 0 6px;
28
+ gap: 3px;
29
+ border-radius: 6px;
30
+ `;
31
+
32
+ export const BadgeItem = css`
33
+ position: relative;
34
+ `;
@@ -1,30 +1,61 @@
1
1
  import React from "react"
2
-
3
- import {$badge} from "./Badge.styles";
2
+ import * as cn from "./Badge.styles";
4
3
 
5
4
  export interface BadgeProps {
6
- children: React.ReactNode;
5
+ className?: string;
6
+ children?: React.ReactNode;
7
7
 
8
8
  size?: "sm"
9
9
  kind?: "warning" | "info"
10
10
  }
11
11
 
12
12
  export function Badge({
13
+ className,
13
14
  children,
14
15
  size = "sm",
15
16
  kind = "warning"
16
17
  }: BadgeProps) {
17
18
  return <div className={`
18
- ${$badge.host}
19
+ ${cn.BadgeHost}
20
+
21
+ ${size === "sm" && cn.BadgeHostSm}
19
22
 
20
- ${size === "sm" && $badge.host$$sm}
23
+ ${kind === "warning" && cn.BadgeHostWarning}
21
24
 
22
- ${kind === "warning" && $badge.host$$warning}
25
+ ${kind === "info" && cn.BadgeHostInfo}
23
26
 
24
- ${kind === "info" && $badge.host$$info}
27
+ ${className || ''}
25
28
  `}>
26
- <span className={$badge.item}>
29
+ <span className={cn.BadgeItem}>
27
30
  {children}
28
31
  </span>
29
32
  </div>
30
- }
33
+ }
34
+
35
+ // TODO: below is a concept only
36
+ // Export styles for useStyle hook
37
+ // Badge.styles = cn;
38
+ // export type BadgeStyles = typeof cn;
39
+
40
+ // Example usage:
41
+ /*
42
+ import { useStyle } from '@xyd/components/utils';
43
+ import { Badge, BadgeStyles } from '@xyd/components/writer';
44
+
45
+ const styled = useStyle<BadgeStyles>(Badge);
46
+
47
+ styled.BadgeHost`
48
+ background-color: red;
49
+ `;
50
+ */
51
+
52
+ // usage
53
+
54
+ // import {Content} from "@xyd-js/components/writer"
55
+ // const styled = useStyle(Badge)
56
+
57
+ // styled.BadgeHostInfo`
58
+ // background-color: red;
59
+ // `
60
+
61
+ // export default styled
@@ -1,10 +1,8 @@
1
1
  import {css} from "@linaria/core";
2
2
 
3
- export const $blockquote = {
4
- host: css`
5
- color: rgb(55 65 81 / 1);
6
- font-style: italic;
7
- border-color: rgb(209 213 219 / 1);
8
- margin: 0;
9
- `
10
- }
3
+ export const BlockquoteHost = css`
4
+ color: rgb(55 65 81 / 1);
5
+ font-style: italic;
6
+ border-color: rgb(209 213 219 / 1);
7
+ margin: 0;
8
+ `;
@@ -1,13 +1,13 @@
1
1
  import React from "react"
2
2
 
3
- import {$blockquote} from "./Blockquote.styles";
3
+ import * as cn from "./Blockquote.styles";
4
4
 
5
5
  export interface BlockquoteProps {
6
6
  children: React.ReactNode;
7
7
  }
8
8
 
9
9
  export function Blockquote({children}: BlockquoteProps) {
10
- return <blockquote className={$blockquote.host}>
10
+ return <blockquote className={cn.BlockquoteHost}>
11
11
  {children}
12
12
  </blockquote>
13
13
  }