react-miui 0.0.1 → 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 (352) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +10 -1
  3. package/assets/back.svg +1 -0
  4. package/dist/components/form/Checkbox.module.scss +13 -6
  5. package/dist/components/form/Toggle.d.ts +8 -0
  6. package/dist/components/form/Toggle.d.ts.map +1 -0
  7. package/dist/components/form/Toggle.js +40 -0
  8. package/dist/components/form/Toggle.js.map +1 -0
  9. package/dist/components/form/Toggle.module.scss +46 -0
  10. package/dist/components/icons/Back.d.ts +7 -0
  11. package/dist/components/icons/Back.d.ts.map +1 -0
  12. package/dist/components/icons/Back.js +13 -0
  13. package/dist/components/icons/Back.js.map +1 -0
  14. package/dist/components/icons/Checkmark.d.ts.map +1 -1
  15. package/dist/components/icons/Checkmark.js.map +1 -1
  16. package/dist/components/icons/Icon.d.ts +12 -0
  17. package/dist/components/icons/Icon.d.ts.map +1 -0
  18. package/dist/components/icons/Icon.js +40 -0
  19. package/dist/components/icons/Icon.js.map +1 -0
  20. package/dist/components/layout/header/Header.d.ts +13 -0
  21. package/dist/components/layout/header/Header.d.ts.map +1 -0
  22. package/dist/components/layout/header/Header.js +43 -0
  23. package/dist/components/layout/header/Header.js.map +1 -0
  24. package/dist/components/layout/header/Header.module.scss +89 -0
  25. package/dist/components/layout/header/HeaderIconAction.d.ts +17 -0
  26. package/dist/components/layout/header/HeaderIconAction.d.ts.map +1 -0
  27. package/dist/components/layout/header/HeaderIconAction.js +40 -0
  28. package/dist/components/layout/header/HeaderIconAction.js.map +1 -0
  29. package/dist/components/layout/header/HeaderIconAction.module.scss +22 -0
  30. package/dist/components/layout/header/StickyHeader.d.ts +10 -0
  31. package/dist/components/layout/header/StickyHeader.d.ts.map +1 -0
  32. package/dist/components/layout/header/StickyHeader.js +34 -0
  33. package/dist/components/layout/header/StickyHeader.js.map +1 -0
  34. package/dist/components/layout/header/StickyHeader.module.scss +18 -0
  35. package/dist/components/layout/list/Item.d.ts +14 -0
  36. package/dist/components/layout/list/Item.d.ts.map +1 -0
  37. package/dist/components/layout/list/Item.js +50 -0
  38. package/dist/components/layout/list/Item.js.map +1 -0
  39. package/dist/components/layout/list/Item.module.scss +23 -0
  40. package/dist/components/layout/list/List.d.ts +4 -0
  41. package/dist/components/layout/list/List.d.ts.map +1 -0
  42. package/dist/components/layout/list/List.js +13 -0
  43. package/dist/components/layout/list/List.js.map +1 -0
  44. package/dist/components/layout/list/List.module.scss +4 -0
  45. package/dist/components/ui/action/Action.d.ts +17 -0
  46. package/dist/components/ui/action/Action.d.ts.map +1 -0
  47. package/dist/components/ui/action/Action.js +44 -0
  48. package/dist/components/ui/action/Action.js.map +1 -0
  49. package/dist/components/ui/action/Action.module.scss +26 -0
  50. package/dist/components/ui/action/EqualActions.d.ts +7 -0
  51. package/dist/components/ui/action/EqualActions.d.ts.map +1 -0
  52. package/dist/components/ui/action/EqualActions.js +23 -0
  53. package/dist/components/ui/action/EqualActions.js.map +1 -0
  54. package/dist/components/ui/action/EqualActions.module.scss +6 -0
  55. package/dist/components/ui/button/Button.d.ts +8 -0
  56. package/dist/components/ui/button/Button.d.ts.map +1 -0
  57. package/dist/components/ui/button/Button.js +20 -0
  58. package/dist/components/ui/button/Button.js.map +1 -0
  59. package/dist/components/ui/button/Button.module.scss +25 -0
  60. package/dist/components/ui/directionPad/Button.d.ts +7 -0
  61. package/dist/components/ui/directionPad/Button.d.ts.map +1 -0
  62. package/dist/components/ui/directionPad/Button.js +14 -0
  63. package/dist/components/ui/directionPad/Button.js.map +1 -0
  64. package/dist/components/ui/directionPad/Middle.d.ts +8 -0
  65. package/dist/components/ui/directionPad/Middle.d.ts.map +1 -0
  66. package/dist/components/ui/directionPad/Middle.js +13 -0
  67. package/dist/components/ui/directionPad/Middle.js.map +1 -0
  68. package/dist/components/ui/directionPad/Pad.d.ts +12 -0
  69. package/dist/components/ui/directionPad/Pad.d.ts.map +1 -0
  70. package/dist/components/ui/directionPad/Pad.js +23 -0
  71. package/dist/components/ui/directionPad/Pad.js.map +1 -0
  72. package/dist/components/ui/directionPad/Pad.module.scss +45 -0
  73. package/dist/demo/Demo.d.ts.map +1 -1
  74. package/dist/demo/Demo.js +2 -1
  75. package/dist/demo/Demo.js.map +1 -1
  76. package/dist/demo/Main.d.ts.map +1 -1
  77. package/dist/demo/Main.js +36 -8
  78. package/dist/demo/Main.js.map +1 -1
  79. package/dist/demo/Main.module.scss +13 -0
  80. package/dist/demo/Menu.d.ts +6 -1
  81. package/dist/demo/Menu.d.ts.map +1 -1
  82. package/dist/demo/Menu.js +20 -4
  83. package/dist/demo/Menu.js.map +1 -1
  84. package/dist/demo/Menu.module.scss +30 -8
  85. package/dist/demo/components/form/Checkbox.d.ts.map +1 -1
  86. package/dist/demo/components/form/Checkbox.js +3 -2
  87. package/dist/demo/components/form/Checkbox.js.map +1 -1
  88. package/dist/demo/components/form/Toggle.d.ts +4 -0
  89. package/dist/demo/components/form/Toggle.d.ts.map +1 -0
  90. package/dist/demo/components/form/Toggle.js +65 -0
  91. package/dist/demo/components/form/Toggle.js.map +1 -0
  92. package/dist/demo/components/form/Toggle.module.scss +5 -0
  93. package/dist/demo/components/layout/header/Header.d.ts +8 -0
  94. package/dist/demo/components/layout/header/Header.d.ts.map +1 -0
  95. package/dist/demo/components/layout/header/Header.js +60 -0
  96. package/dist/demo/components/layout/header/Header.js.map +1 -0
  97. package/dist/demo/components/layout/header/StickyHeader.d.ts +9 -0
  98. package/dist/demo/components/layout/header/StickyHeader.d.ts.map +1 -0
  99. package/dist/demo/components/layout/header/StickyHeader.js +73 -0
  100. package/dist/demo/components/layout/header/StickyHeader.js.map +1 -0
  101. package/dist/demo/components/layout/list/List.Item.d.ts +4 -0
  102. package/dist/demo/components/layout/list/List.Item.d.ts.map +1 -0
  103. package/dist/demo/components/layout/list/List.Item.js +42 -0
  104. package/dist/demo/components/layout/list/List.Item.js.map +1 -0
  105. package/dist/demo/components/layout/list/List.Item.module.scss +3 -0
  106. package/dist/demo/components/ui/action/Action.d.ts +8 -0
  107. package/dist/demo/components/ui/action/Action.d.ts.map +1 -0
  108. package/dist/demo/components/ui/action/Action.js +83 -0
  109. package/dist/demo/components/ui/action/Action.js.map +1 -0
  110. package/dist/demo/components/ui/action/ActionDemo.module.scss +3 -0
  111. package/dist/demo/components/ui/button/ButtonDemo.d.ts +4 -0
  112. package/dist/demo/components/ui/button/ButtonDemo.d.ts.map +1 -0
  113. package/dist/demo/components/ui/button/ButtonDemo.js +20 -0
  114. package/dist/demo/components/ui/button/ButtonDemo.js.map +1 -0
  115. package/dist/demo/components/ui/directionPad/Pad.d.ts +4 -0
  116. package/dist/demo/components/ui/directionPad/Pad.d.ts.map +1 -0
  117. package/dist/demo/components/ui/directionPad/Pad.js +49 -0
  118. package/dist/demo/components/ui/directionPad/Pad.js.map +1 -0
  119. package/dist/demo/components/ui/icons/Icons.d.ts +4 -0
  120. package/dist/demo/components/ui/icons/Icons.d.ts.map +1 -0
  121. package/dist/demo/components/ui/icons/Icons.js +20 -0
  122. package/dist/demo/components/ui/icons/Icons.js.map +1 -0
  123. package/dist/demo/components/ui/icons/Icons.module.scss +4 -0
  124. package/dist/demo/componentsMap.d.ts +13 -0
  125. package/dist/demo/componentsMap.d.ts.map +1 -0
  126. package/dist/demo/componentsMap.js +112 -0
  127. package/dist/demo/componentsMap.js.map +1 -0
  128. package/dist/demo/utils/makeVariants.d.ts +3 -0
  129. package/dist/demo/utils/makeVariants.d.ts.map +1 -0
  130. package/dist/demo/utils/makeVariants.js +14 -0
  131. package/dist/demo/utils/makeVariants.js.map +1 -0
  132. package/dist/global.scss +34 -13
  133. package/dist/index.d.ts +8 -1
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +8 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/pages/_app.d.ts.map +1 -1
  138. package/dist/pages/_app.js +5 -1
  139. package/dist/pages/_app.js.map +1 -1
  140. package/dist/pages/react-miui.d.ts +4 -0
  141. package/dist/pages/react-miui.d.ts.map +1 -0
  142. package/dist/pages/react-miui.js +11 -0
  143. package/dist/pages/react-miui.js.map +1 -0
  144. package/dist/types.d.ts +4 -0
  145. package/dist/types.d.ts.map +1 -0
  146. package/dist/types.js +3 -0
  147. package/dist/types.js.map +1 -0
  148. package/docs/assets/js/search.js +1 -1
  149. package/docs/assets/js/search.json +1 -1
  150. package/docs/enums/ICON.html +182 -0
  151. package/docs/index.html +38 -5
  152. package/docs/modules/StickyHeader.html +159 -0
  153. package/docs/modules.html +121 -5
  154. package/docs/pages/Tutorials/Test.html +6 -3
  155. package/esm/components/form/Checkbox.module.scss +13 -6
  156. package/esm/components/form/Toggle.d.ts +8 -0
  157. package/esm/components/form/Toggle.d.ts.map +1 -0
  158. package/esm/components/form/Toggle.js +15 -0
  159. package/esm/components/form/Toggle.js.map +1 -0
  160. package/esm/components/form/Toggle.module.scss +46 -0
  161. package/esm/components/icons/Back.d.ts +7 -0
  162. package/esm/components/icons/Back.d.ts.map +1 -0
  163. package/esm/components/icons/Back.js +7 -0
  164. package/esm/components/icons/Back.js.map +1 -0
  165. package/esm/components/icons/Checkmark.d.ts.map +1 -1
  166. package/esm/components/icons/Checkmark.js.map +1 -1
  167. package/esm/components/icons/Icon.d.ts +12 -0
  168. package/esm/components/icons/Icon.d.ts.map +1 -0
  169. package/esm/components/icons/Icon.js +21 -0
  170. package/esm/components/icons/Icon.js.map +1 -0
  171. package/esm/components/layout/header/Header.d.ts +13 -0
  172. package/esm/components/layout/header/Header.d.ts.map +1 -0
  173. package/esm/components/layout/header/Header.js +37 -0
  174. package/esm/components/layout/header/Header.js.map +1 -0
  175. package/esm/components/layout/header/Header.module.scss +89 -0
  176. package/esm/components/layout/header/HeaderIconAction.d.ts +17 -0
  177. package/esm/components/layout/header/HeaderIconAction.d.ts.map +1 -0
  178. package/esm/components/layout/header/HeaderIconAction.js +23 -0
  179. package/esm/components/layout/header/HeaderIconAction.js.map +1 -0
  180. package/esm/components/layout/header/HeaderIconAction.module.scss +22 -0
  181. package/esm/components/layout/header/StickyHeader.d.ts +10 -0
  182. package/esm/components/layout/header/StickyHeader.d.ts.map +1 -0
  183. package/esm/components/layout/header/StickyHeader.js +28 -0
  184. package/esm/components/layout/header/StickyHeader.js.map +1 -0
  185. package/esm/components/layout/header/StickyHeader.module.scss +18 -0
  186. package/esm/components/layout/list/Item.d.ts +14 -0
  187. package/esm/components/layout/list/Item.d.ts.map +1 -0
  188. package/esm/components/layout/list/Item.js +33 -0
  189. package/esm/components/layout/list/Item.js.map +1 -0
  190. package/esm/components/layout/list/Item.module.scss +23 -0
  191. package/esm/components/layout/list/List.d.ts +4 -0
  192. package/esm/components/layout/list/List.d.ts.map +1 -0
  193. package/esm/components/layout/list/List.js +7 -0
  194. package/esm/components/layout/list/List.js.map +1 -0
  195. package/esm/components/layout/list/List.module.scss +4 -0
  196. package/esm/components/ui/action/Action.d.ts +17 -0
  197. package/esm/components/ui/action/Action.d.ts.map +1 -0
  198. package/esm/components/ui/action/Action.js +27 -0
  199. package/esm/components/ui/action/Action.js.map +1 -0
  200. package/esm/components/ui/action/Action.module.scss +26 -0
  201. package/esm/components/ui/action/EqualActions.d.ts +7 -0
  202. package/esm/components/ui/action/EqualActions.d.ts.map +1 -0
  203. package/esm/components/ui/action/EqualActions.js +17 -0
  204. package/esm/components/ui/action/EqualActions.js.map +1 -0
  205. package/esm/components/ui/action/EqualActions.module.scss +6 -0
  206. package/esm/components/ui/button/Button.d.ts +8 -0
  207. package/esm/components/ui/button/Button.d.ts.map +1 -0
  208. package/esm/components/ui/button/Button.js +14 -0
  209. package/esm/components/ui/button/Button.js.map +1 -0
  210. package/esm/components/ui/button/Button.module.scss +25 -0
  211. package/esm/components/ui/directionPad/Button.d.ts +7 -0
  212. package/esm/components/ui/directionPad/Button.d.ts.map +1 -0
  213. package/esm/components/ui/directionPad/Button.js +8 -0
  214. package/esm/components/ui/directionPad/Button.js.map +1 -0
  215. package/esm/components/ui/directionPad/Middle.d.ts +8 -0
  216. package/esm/components/ui/directionPad/Middle.d.ts.map +1 -0
  217. package/esm/components/ui/directionPad/Middle.js +7 -0
  218. package/esm/components/ui/directionPad/Middle.js.map +1 -0
  219. package/esm/components/ui/directionPad/Pad.d.ts +12 -0
  220. package/esm/components/ui/directionPad/Pad.d.ts.map +1 -0
  221. package/esm/components/ui/directionPad/Pad.js +17 -0
  222. package/esm/components/ui/directionPad/Pad.js.map +1 -0
  223. package/esm/components/ui/directionPad/Pad.module.scss +45 -0
  224. package/esm/demo/Demo.d.ts.map +1 -1
  225. package/esm/demo/Demo.js +2 -1
  226. package/esm/demo/Demo.js.map +1 -1
  227. package/esm/demo/Main.d.ts.map +1 -1
  228. package/esm/demo/Main.js +37 -9
  229. package/esm/demo/Main.js.map +1 -1
  230. package/esm/demo/Main.module.scss +13 -0
  231. package/esm/demo/Menu.d.ts +6 -1
  232. package/esm/demo/Menu.d.ts.map +1 -1
  233. package/esm/demo/Menu.js +20 -4
  234. package/esm/demo/Menu.js.map +1 -1
  235. package/esm/demo/Menu.module.scss +30 -8
  236. package/esm/demo/components/form/Checkbox.d.ts.map +1 -1
  237. package/esm/demo/components/form/Checkbox.js +4 -3
  238. package/esm/demo/components/form/Checkbox.js.map +1 -1
  239. package/esm/demo/components/form/Toggle.d.ts +4 -0
  240. package/esm/demo/components/form/Toggle.d.ts.map +1 -0
  241. package/esm/demo/components/form/Toggle.js +40 -0
  242. package/esm/demo/components/form/Toggle.js.map +1 -0
  243. package/esm/demo/components/form/Toggle.module.scss +5 -0
  244. package/esm/demo/components/layout/header/Header.d.ts +8 -0
  245. package/esm/demo/components/layout/header/Header.d.ts.map +1 -0
  246. package/esm/demo/components/layout/header/Header.js +50 -0
  247. package/esm/demo/components/layout/header/Header.js.map +1 -0
  248. package/esm/demo/components/layout/header/StickyHeader.d.ts +9 -0
  249. package/esm/demo/components/layout/header/StickyHeader.d.ts.map +1 -0
  250. package/esm/demo/components/layout/header/StickyHeader.js +62 -0
  251. package/esm/demo/components/layout/header/StickyHeader.js.map +1 -0
  252. package/esm/demo/components/layout/list/List.Item.d.ts +4 -0
  253. package/esm/demo/components/layout/list/List.Item.d.ts.map +1 -0
  254. package/esm/demo/components/layout/list/List.Item.js +17 -0
  255. package/esm/demo/components/layout/list/List.Item.js.map +1 -0
  256. package/esm/demo/components/layout/list/List.Item.module.scss +3 -0
  257. package/esm/demo/components/ui/action/Action.d.ts +8 -0
  258. package/esm/demo/components/ui/action/Action.d.ts.map +1 -0
  259. package/esm/demo/components/ui/action/Action.js +73 -0
  260. package/esm/demo/components/ui/action/Action.js.map +1 -0
  261. package/esm/demo/components/ui/action/ActionDemo.module.scss +3 -0
  262. package/esm/demo/components/ui/button/ButtonDemo.d.ts +4 -0
  263. package/esm/demo/components/ui/button/ButtonDemo.d.ts.map +1 -0
  264. package/esm/demo/components/ui/button/ButtonDemo.js +14 -0
  265. package/esm/demo/components/ui/button/ButtonDemo.js.map +1 -0
  266. package/esm/demo/components/ui/directionPad/Pad.d.ts +4 -0
  267. package/esm/demo/components/ui/directionPad/Pad.d.ts.map +1 -0
  268. package/esm/demo/components/ui/directionPad/Pad.js +27 -0
  269. package/esm/demo/components/ui/directionPad/Pad.js.map +1 -0
  270. package/esm/demo/components/ui/icons/Icons.d.ts +4 -0
  271. package/esm/demo/components/ui/icons/Icons.d.ts.map +1 -0
  272. package/esm/demo/components/ui/icons/Icons.js +14 -0
  273. package/esm/demo/components/ui/icons/Icons.js.map +1 -0
  274. package/esm/demo/components/ui/icons/Icons.module.scss +4 -0
  275. package/esm/demo/componentsMap.d.ts +13 -0
  276. package/esm/demo/componentsMap.d.ts.map +1 -0
  277. package/esm/demo/componentsMap.js +109 -0
  278. package/esm/demo/componentsMap.js.map +1 -0
  279. package/esm/demo/utils/makeVariants.d.ts +3 -0
  280. package/esm/demo/utils/makeVariants.d.ts.map +1 -0
  281. package/esm/demo/utils/makeVariants.js +11 -0
  282. package/esm/demo/utils/makeVariants.js.map +1 -0
  283. package/esm/global.scss +34 -13
  284. package/esm/index.d.ts +8 -1
  285. package/esm/index.d.ts.map +1 -1
  286. package/esm/index.js +8 -1
  287. package/esm/index.js.map +1 -1
  288. package/esm/pages/_app.d.ts.map +1 -1
  289. package/esm/pages/_app.js +5 -1
  290. package/esm/pages/_app.js.map +1 -1
  291. package/esm/pages/react-miui.d.ts +4 -0
  292. package/esm/pages/react-miui.d.ts.map +1 -0
  293. package/esm/pages/react-miui.js +6 -0
  294. package/esm/pages/react-miui.js.map +1 -0
  295. package/esm/types.d.ts +4 -0
  296. package/esm/types.d.ts.map +1 -0
  297. package/esm/types.js +2 -0
  298. package/esm/types.js.map +1 -0
  299. package/package.json +9 -7
  300. package/src/components/form/Checkbox.module.scss +13 -6
  301. package/src/components/form/Toggle.module.scss +46 -0
  302. package/src/components/form/Toggle.tsx +33 -0
  303. package/src/components/icons/Back.tsx +15 -0
  304. package/src/components/icons/Checkmark.tsx +5 -2
  305. package/src/components/icons/Icon.tsx +30 -0
  306. package/src/components/layout/header/Header.module.scss +89 -0
  307. package/src/components/layout/header/Header.tsx +65 -0
  308. package/src/components/layout/header/HeaderIconAction.module.scss +22 -0
  309. package/src/components/layout/header/HeaderIconAction.tsx +49 -0
  310. package/src/components/layout/header/StickyHeader.module.scss +18 -0
  311. package/src/components/layout/header/StickyHeader.tsx +54 -0
  312. package/src/components/layout/list/Item.module.scss +23 -0
  313. package/src/components/layout/list/Item.tsx +50 -0
  314. package/src/components/layout/list/List.module.scss +4 -0
  315. package/src/components/layout/list/List.tsx +11 -0
  316. package/src/components/ui/action/Action.module.scss +26 -0
  317. package/src/components/ui/action/Action.tsx +58 -0
  318. package/src/components/ui/action/EqualActions.module.scss +6 -0
  319. package/src/components/ui/action/EqualActions.tsx +30 -0
  320. package/src/components/ui/button/Button.module.scss +25 -0
  321. package/src/components/ui/button/Button.tsx +25 -0
  322. package/src/components/ui/directionPad/Button.tsx +15 -0
  323. package/src/components/ui/directionPad/Middle.tsx +16 -0
  324. package/src/components/ui/directionPad/Pad.module.scss +45 -0
  325. package/src/components/ui/directionPad/Pad.tsx +35 -0
  326. package/src/demo/Demo.tsx +2 -1
  327. package/src/demo/Main.module.scss +13 -0
  328. package/src/demo/Main.tsx +53 -10
  329. package/src/demo/Menu.module.scss +30 -8
  330. package/src/demo/Menu.tsx +33 -7
  331. package/src/demo/components/form/Checkbox.tsx +7 -3
  332. package/src/demo/components/form/Toggle.module.scss +5 -0
  333. package/src/demo/components/form/Toggle.tsx +59 -0
  334. package/src/demo/components/layout/header/Header.tsx +119 -0
  335. package/src/demo/components/layout/header/StickyHeader.tsx +85 -0
  336. package/src/demo/components/layout/list/List.Item.module.scss +3 -0
  337. package/src/demo/components/layout/list/List.Item.tsx +23 -0
  338. package/src/demo/components/ui/action/Action.tsx +112 -0
  339. package/src/demo/components/ui/action/ActionDemo.module.scss +3 -0
  340. package/src/demo/components/ui/button/ButtonDemo.tsx +18 -0
  341. package/src/demo/components/ui/directionPad/Pad.tsx +40 -0
  342. package/src/demo/components/ui/icons/Icons.module.scss +4 -0
  343. package/src/demo/components/ui/icons/Icons.tsx +25 -0
  344. package/src/demo/componentsMap.ts +144 -0
  345. package/src/demo/utils/makeVariants.ts +13 -0
  346. package/src/global.scss +34 -13
  347. package/src/index.ts +11 -1
  348. package/src/pages/_app.tsx +7 -1
  349. package/src/pages/react-miui.tsx +12 -0
  350. package/src/types.ts +7 -0
  351. package/.postcssrc +0 -9
  352. package/src/pages/index.html +0 -14
@@ -0,0 +1,54 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+
4
+ import { Header } from "./Header.js";
5
+ import styles from "./StickyHeader.module.scss";
6
+
7
+ const err = new TypeError("StickyHeader needs two children - Header and StickyHeader.Content");
8
+
9
+ interface Content {
10
+ Content: React.FC;
11
+ }
12
+
13
+ interface Props {
14
+ position?: "top" | "left" | "right" | "bottom";
15
+ }
16
+
17
+ const StickyHeader: React.FC<Props> & Content = (props) => {
18
+ const position = props.position || "top";
19
+
20
+ const children = React.Children.toArray(props.children);
21
+
22
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
23
+ if (children.length !== 2) {
24
+ throw err;
25
+ }
26
+
27
+ let header = children.find(c => typeof c === "object" && "type" in c && c.type === Header),
28
+ content = children.find(c => typeof c === "object" && "type" in c && c.type === StickyHeader.Content);
29
+
30
+ if (!header || !content) {
31
+ throw err;
32
+ }
33
+
34
+ header = header as never; // @TODO find a better way to silence TS on cloneElement
35
+ content = content as never;
36
+
37
+ const cls = classnames(styles.stickyHeader, styles[`stickyHeader--${position}`]);
38
+ const contentCls = classnames(styles.stickyHeader__content, styles[`stickyHeader__content--${position}`]);
39
+
40
+ return (
41
+ <div className={cls}>
42
+ {React.cloneElement(header, { position })}
43
+ <div className={contentCls}>
44
+ {content}
45
+ </div>
46
+ </div>
47
+ );
48
+ };
49
+ // eslint-disable-next-line react/no-multi-comp
50
+ StickyHeader.Content = ({ children }) => {
51
+ return <>{children}</>;
52
+ };
53
+
54
+ export { StickyHeader };
@@ -0,0 +1,23 @@
1
+ .item {
2
+ list-style-type: none;
3
+ margin: 0;
4
+ padding: 0;
5
+ font-size: 15px;
6
+
7
+ &:not(:first-child) > * {
8
+ border-top: 0.37px solid var(--header-border);
9
+ }
10
+
11
+ > * {
12
+ display: block;
13
+ padding: 20px 0;
14
+ text-decoration: none;
15
+ }
16
+ }
17
+
18
+ .button {
19
+ border: none;
20
+ background: none;
21
+ width: 100%;
22
+ text-align: left;
23
+ }
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+ import classnames from "classnames";
3
+
4
+ import styles from "./Item.module.scss";
5
+
6
+ interface LinkProps {
7
+ href: string;
8
+ }
9
+
10
+ interface Props {
11
+ href?: string;
12
+ to?: string;
13
+ onClick?: () => void;
14
+ className?: string;
15
+ Link?: React.ComponentClass<LinkProps> | React.FC<LinkProps>;
16
+ }
17
+
18
+ const Item: React.FC<Props> = (props) => {
19
+ const { className, children, href, to, onClick, Link, ...restProps } = props;
20
+ const cls = classnames(styles.item, className);
21
+
22
+ const liProps = {
23
+ className: cls,
24
+ };
25
+
26
+ if (to) {
27
+ if (!Link) {
28
+ throw new TypeError("`to` prop given without `Link` component");
29
+ }
30
+
31
+ return <li {...liProps}><Link href={to} {...restProps}>{children}</Link></li>;
32
+ }
33
+ if (href) {
34
+ const aProps: typeof restProps & { onClick?: Props["onClick"]} = { ...restProps };
35
+ if (onClick) {
36
+ aProps.onClick = onClick;
37
+ }
38
+ return <li {...liProps}><a href={href} {...aProps}>{children}</a></li>;
39
+ }
40
+ if (onClick) {
41
+ return (
42
+ <li {...liProps}>
43
+ <button className={styles.button} onClick={props.onClick} {...restProps}>{children}</button>
44
+ </li>
45
+ );
46
+ }
47
+ return <li {...liProps}><div {...restProps}>{children}</div></li>;
48
+ };
49
+
50
+ export { Item };
@@ -0,0 +1,4 @@
1
+ .list {
2
+ margin: 0 23px;
3
+ padding: 0;
4
+ }
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+
3
+ import styles from "./List.module.scss";
4
+
5
+ const List: React.FC = (props) => {
6
+ return (
7
+ <ul className={styles.list}>{props.children}</ul>
8
+ );
9
+ };
10
+
11
+ export { List };
@@ -0,0 +1,26 @@
1
+ .action {
2
+ height: calc(102px / var(--ratio-dimensions));
3
+ width: calc(102px / var(--ratio-dimensions));
4
+ border-radius: 100px;
5
+ border: calc(1px / var(--ratio-border)) solid var(--button-border);
6
+ background: white;
7
+ padding: 0;
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ }
12
+
13
+ .a {
14
+ display: inline-block;
15
+ vertical-align: middle;
16
+ }
17
+
18
+ .button {
19
+ border: none;
20
+ padding: 0;
21
+ background: none;
22
+ display: inline-flex;
23
+ flex-direction: column;
24
+ align-items: center;
25
+ gap: calc(18px / var(--ratio-dimensions));
26
+ }
@@ -0,0 +1,58 @@
1
+ import React from "react";
2
+ import type { ReactNode } from "react";
3
+
4
+ import type { ICON } from "../../icons/Icon";
5
+ import { Icon } from "../../icons/Icon";
6
+ import styles from "./Action.module.scss";
7
+
8
+ interface LinkProps { // @TODO extract? - same on list item
9
+ href: string;
10
+ }
11
+
12
+ interface Props {
13
+ href?: string;
14
+ to?: string;
15
+ onClick?: () => void;
16
+ icon?: ICON | Exclude<ReactNode, string>;
17
+ Link?: React.ComponentClass<LinkProps> | React.FC<LinkProps>;
18
+ label?: ReactNode;
19
+ // if className ever goes here make sure that `a` gets classnames merged
20
+ }
21
+
22
+ const Action: React.VFC<Props> = (props) => {
23
+ const { icon, label, href, to, Link, ...restProps } = props;
24
+
25
+ let iconElem: ReactNode = icon;
26
+ if (typeof icon === "string") {
27
+ iconElem = <Icon name={icon as ICON} />;
28
+ }
29
+
30
+ const labelElem = label ? <div className={styles.label}>{label}</div> : null;
31
+
32
+ const content = (
33
+ <>
34
+ <div className={styles.action}>{iconElem}</div>
35
+ {labelElem}
36
+ </>
37
+ );
38
+
39
+ if (to) {
40
+ if (!Link) {
41
+ throw new TypeError("`to` prop given without `Link` component");
42
+ }
43
+
44
+ return <Link href={to} {...restProps}><a className={styles.a}>{content}</a></Link>;
45
+ }
46
+
47
+ if (href) {
48
+ return <a href={href} className={styles.a} {...restProps}>{content}</a>;
49
+ }
50
+
51
+ return (
52
+ <button onClick={props.onClick} className={styles.button}>
53
+ {content}
54
+ </button>
55
+ );
56
+ };
57
+
58
+ export { Action };
@@ -0,0 +1,6 @@
1
+ .actions {
2
+ --actions-count: 1;
3
+ display: inline-grid;
4
+ grid-template-columns: repeat(var(--actions-count), 1fr);
5
+ gap: calc(56px / var(--ratio-dimensions));
6
+ }
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { Action } from "./Action";
3
+
4
+ import styles from "./EqualActions.module.scss";
5
+ import classnames from "classnames";
6
+
7
+ interface Props {
8
+ className?: string;
9
+ }
10
+
11
+ const EqualActions: React.FC<Props> = (props) => {
12
+ React.Children.forEach(props.children, (child) => {
13
+ if (!child || typeof child !== "object" || !("type" in child) || child.type !== Action) {
14
+ throw new TypeError("Every child of EqualActions must be an Action component");
15
+ }
16
+ });
17
+
18
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
19
+ const style = {
20
+ "--actions-count": React.Children.count(props.children),
21
+ } as React.CSSProperties;
22
+
23
+ return (
24
+ <div className={classnames(styles.actions, props.className)} style={style}>
25
+ {props.children}
26
+ </div>
27
+ );
28
+ };
29
+
30
+ export { EqualActions };
@@ -0,0 +1,25 @@
1
+ .btn {
2
+ height: calc(118px / var(--ratio-dimensions));
3
+ background: var(--green1);
4
+ border: calc(1px / var(--ratio-border)) solid var(--green1-darker);
5
+ color: white;
6
+ border-radius: 1000px;
7
+ display: block;
8
+ width: 100%;
9
+ font-size: calc(26px / var(--ratio-font));
10
+ padding: 0 1em;
11
+
12
+ &:disabled {
13
+ opacity: 0.5;
14
+ }
15
+ }
16
+
17
+ .btn--inline {
18
+ width: auto;
19
+ }
20
+
21
+ .btn--outline {
22
+ background: white;
23
+ border-color: var(--button-border);
24
+ color: var(--grey1);
25
+ }
@@ -0,0 +1,25 @@
1
+ import React from "react";
2
+
3
+ import styles from "./Button.module.scss";
4
+ import classnames from "classnames";
5
+ import { makeVariants } from "../../../demo/utils/makeVariants";
6
+
7
+ interface Props {
8
+ disabled?: boolean;
9
+ variant?: "inline" | "outline";
10
+ }
11
+
12
+ const Button: React.FC<Props> = (props) => {
13
+ const variants = makeVariants(props.variant);
14
+
15
+ const cls = classnames(styles.btn, {
16
+ [styles["btn--inline"]]: variants.includes("inline"),
17
+ [styles["btn--outline"]]: variants.includes("outline"),
18
+ });
19
+
20
+ return (
21
+ <button className={cls} disabled={props.disabled}>{props.children}</button>
22
+ );
23
+ };
24
+
25
+ export { Button };
@@ -0,0 +1,15 @@
1
+ import React from "react";
2
+
3
+ import styles from "./Pad.module.scss";
4
+
5
+ interface Props {
6
+ onClick?: () => void;
7
+ }
8
+
9
+ const PadButton: React.FC<Props> = (props) => {
10
+ return (
11
+ <button {...props} className={styles.pad__button}><span className={styles.pad__dot} /></button>
12
+ );
13
+ };
14
+
15
+ export { PadButton };
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+
3
+ import styles from "./Pad.module.scss";
4
+
5
+ interface Props {
6
+ label?: string;
7
+ onClick?: () => void;
8
+ }
9
+
10
+ const PadMiddle: React.FC<Props> = (props) => {
11
+ return (
12
+ <button onClick={props.onClick} className={styles.pad__middle}>{props.label}</button>
13
+ );
14
+ };
15
+
16
+ export { PadMiddle };
@@ -0,0 +1,45 @@
1
+ .pad {
2
+ display: flex;
3
+ flex-direction: column;
4
+ align-items: center;
5
+ justify-content: center;
6
+ height: 150px;
7
+ border-radius: 666px;
8
+ width: 150px;
9
+ border: 1px solid #aaa;
10
+ background: white;
11
+
12
+ &__line {
13
+ display: flex;
14
+ }
15
+
16
+ &__button {
17
+ height: 50px;
18
+ width: 50px;
19
+ margin: 0;
20
+ border-radius: 666px;
21
+ border: none;
22
+ display: block;
23
+ background: none;
24
+ }
25
+
26
+ &__middle {
27
+ display: block;
28
+ margin: 0;
29
+ height: 50px;
30
+ width: 50px;
31
+ border: 1px solid #999;
32
+ box-sizing: border-box;
33
+ border-radius: 666px;
34
+ background: none;
35
+ }
36
+
37
+ &__dot {
38
+ display: block;
39
+ width: 4px;
40
+ height: 4px;
41
+ border-radius: 666px;
42
+ background: black;
43
+ margin: auto;
44
+ }
45
+ }
@@ -0,0 +1,35 @@
1
+ import React from "react";
2
+
3
+ import { PadButton as Button } from "./Button.js";
4
+ import { PadMiddle as Middle } from "./Middle.js";
5
+
6
+ import styles from "./Pad.module.scss";
7
+
8
+ interface Props {
9
+ onUpPress?: () => void;
10
+ onDownPress?: () => void;
11
+ onLeftPress?: () => void;
12
+ onRightPress?: () => void;
13
+ onMiddlePress?: () => void;
14
+ middleLabel?: string;
15
+ }
16
+
17
+ const Pad: React.FC<Props> = (props) => {
18
+ return (
19
+ <div className={styles.pad}>
20
+ <div className={styles.pad__line}>
21
+ <Button onClick={props.onUpPress} />
22
+ </div>
23
+ <div className={styles.pad__line}>
24
+ <Button onClick={props.onLeftPress} />
25
+ <Middle onClick={props.onMiddlePress} label={props.middleLabel} />
26
+ <Button onClick={props.onRightPress} />
27
+ </div>
28
+ <div className={styles.pad__line}>
29
+ <Button onClick={props.onDownPress} />
30
+ </div>
31
+ </div>
32
+ );
33
+ };
34
+
35
+ export { Pad as DirectionPad };
package/src/demo/Demo.tsx CHANGED
@@ -3,11 +3,12 @@ import React from "react";
3
3
  import styles from "./Demo.module.scss";
4
4
  import { Menu } from "./Menu";
5
5
  import { Main } from "./Main";
6
+ import { componentsMap } from "./componentsMap";
6
7
 
7
8
  const Demo: React.FC = (props) => {
8
9
  return (
9
10
  <div className={styles.container}>
10
- <Menu />
11
+ <Menu list={componentsMap} />
11
12
  <Main />
12
13
  </div>
13
14
  );
@@ -8,10 +8,23 @@
8
8
  .component {
9
9
  padding: 20px;
10
10
  flex: 1;
11
+ overflow: auto;
11
12
 
12
13
  &--transparent {
13
14
  background-position: 0px 0px, 10px 10px;
14
15
  background-size: 20px 20px;
15
16
  background-image: linear-gradient(45deg, #eee 25%, transparent 25%, transparent 75%, #eee 75%, #eee 100%),linear-gradient(45deg, #eee 25%, white 25%, white 75%, #eee 75%, #eee 100%);
16
17
  }
18
+
19
+ &--mobile {
20
+ border-radius: 20px;
21
+ max-width: 400px;
22
+ width: 100%;
23
+ padding: 0;
24
+ margin: 20px 0;
25
+ align-self: center;
26
+ border: 10px solid black;
27
+ border-top-width: 30px;
28
+ position: relative;
29
+ }
17
30
  }
package/src/demo/Main.tsx CHANGED
@@ -1,15 +1,44 @@
1
- import React, { useState } from "react";
1
+ import React, { useCallback, useState } from "react";
2
2
  import classnames from "classnames";
3
3
 
4
+ import type { AnyComponent } from "../types";
5
+ import type { TheMap, TheMapItem } from "./componentsMap";
6
+
4
7
  import styles from "./Main.module.scss";
5
8
 
6
- import { CheckboxDemo } from "./components/form/Checkbox";
7
9
  import { safeUseHash } from "./utils/safeUseHash";
10
+ import { componentsMap } from "./componentsMap";
11
+
12
+ type BG = "white" | "transparent" | "mobile";
13
+
14
+ interface ComponentInfo {
15
+ Component: AnyComponent;
16
+ name: string;
17
+ }
18
+
19
+ const getComponentByHash = (hash: string): ComponentInfo | null => {
20
+ const parts = hash.split("/");
21
+ let obj: TheMap | undefined = componentsMap,
22
+ objItem: TheMapItem | undefined;
23
+
24
+ while (parts.length) {
25
+ const first = parts.shift()!;
26
+ objItem = obj?.[first];
8
27
 
9
- type BG = "white" | "transparent";
28
+ if (!objItem) {
29
+ return null;
30
+ }
31
+ obj = objItem.children;
32
+ }
33
+
34
+ if (objItem?.Component) {
35
+ return {
36
+ name: objItem.name,
37
+ Component: objItem.Component,
38
+ };
39
+ }
10
40
 
11
- const componentsMap: { [key: string]: (typeof React.Component) | React.FC } = {
12
- checkbox: CheckboxDemo,
41
+ return null;
13
42
  };
14
43
 
15
44
  const Main: React.FC = (props) => {
@@ -17,9 +46,19 @@ const Main: React.FC = (props) => {
17
46
 
18
47
  const hash = safeUseHash();
19
48
  const hashWithoutHash = hash.substr(1);
20
- const Component = componentsMap[hashWithoutHash];
49
+ const info = getComponentByHash(hashWithoutHash);
21
50
 
22
- if (!Component) {
51
+ const handleTransparentBg = useCallback(() => {
52
+ setBg("transparent");
53
+ }, []);
54
+ const handleWhiteBg = useCallback(() => {
55
+ setBg("white");
56
+ }, []);
57
+ const handleMobileBg = useCallback(() => {
58
+ setBg("mobile");
59
+ }, []);
60
+
61
+ if (!info) {
23
62
  return (
24
63
  <div className={styles.container}>
25
64
  <h1 className={styles.header}>Hi there</h1>
@@ -28,15 +67,19 @@ const Main: React.FC = (props) => {
28
67
  );
29
68
  }
30
69
 
70
+ const Component = info.Component;
71
+
31
72
  const componentCls = classnames(styles.component, {
32
73
  [styles["component--transparent"]]: bg === "transparent",
74
+ [styles["component--mobile"]]: bg === "mobile",
33
75
  });
34
76
 
35
77
  return (
36
78
  <div className={styles.container}>
37
- <h1 className={styles.header}>{hash}</h1>
38
- <button onClick={() => { setBg("transparent"); }}>Transparent</button>
39
- <button onClick={() => { setBg("white"); }}>White</button>
79
+ <h1 className={styles.header}>{info.name}</h1>
80
+ <button onClick={handleTransparentBg}>Transparent</button>
81
+ <button onClick={handleWhiteBg}>White</button>
82
+ <button onClick={handleMobileBg}>Mobile</button>
40
83
 
41
84
  <div className={componentCls}>
42
85
  <Component />
@@ -1,19 +1,41 @@
1
1
  .menu {
2
- display: block;
3
- padding: 10px;
2
+ margin: 0;
3
+ padding: 0;
4
4
  border-right: 1px solid black;
5
5
 
6
- a {
6
+ ul {
7
+ margin: 0 0 0 15px;
8
+ padding: 0;
9
+ }
10
+
11
+ li {
12
+ padding: 0;
13
+ margin: 0;
14
+ list-style-type: none;
15
+ }
16
+
17
+ > ul {
18
+ margin: 0;
7
19
  display: block;
20
+ }
21
+
22
+ > ul > li > a {
8
23
  padding: 10px;
9
- background: var(--active-bg);
10
- border-radius: 5px;
24
+ text-transform: uppercase;
25
+ font-size: 16px;
26
+ }
27
+
28
+ a {
29
+ padding: 5px 10px;
30
+ display: block;
11
31
  color: black;
12
32
  text-decoration: none;
13
- text-transform: uppercase;
33
+ font-size: 14px;
14
34
 
15
- + a {
16
- margin-top: 10px;
35
+ &:hover {
36
+ background: var(--active-bg);
17
37
  }
38
+
39
+ --focus-bg-set: var(--focus-color);
18
40
  }
19
41
  }
package/src/demo/Menu.tsx CHANGED
@@ -1,14 +1,40 @@
1
1
  import React from "react";
2
2
 
3
3
  import styles from "./Menu.module.scss";
4
+ import type { componentsMap } from "./componentsMap";
4
5
 
5
- const Menu: React.FC = () => {
6
- return (
7
- <div className={styles.menu}>
8
- <a href={"#"}>Main</a>
9
- <a href={"#checkbox"}>Checkbox</a>
10
- </div>
11
- );
6
+ interface Props {
7
+ ancestors?: string[];
8
+ list: typeof componentsMap;
9
+ }
10
+
11
+ const Menu: React.FC<Props> = (props) => {
12
+ const cmp = Object.entries(props.list).map(([urlHash, component]) => {
13
+ const label = component.name;
14
+ const children = `children` in component && component.children
15
+ ? <Menu ancestors={[...props.ancestors!, urlHash]} list={component.children} />
16
+ : null;
17
+
18
+ return (
19
+ <li key={urlHash}>
20
+ <a href={"#" + [...props.ancestors!, urlHash].join("/")}>{label}</a>
21
+ {children}
22
+ </li>
23
+ );
24
+ });
25
+
26
+ const contents = <ul>{cmp}</ul>;
27
+
28
+ if (!props.ancestors!.length) {
29
+ cmp.unshift(<li key={"--main"}><a href={"#"}>Main</a></li>);
30
+ return <menu className={styles.menu}>{contents}</menu>;
31
+ }
32
+
33
+ return contents;
34
+ };
35
+
36
+ Menu.defaultProps = {
37
+ ancestors: [],
12
38
  };
13
39
 
14
40
  export { Menu };