react-miui 0.0.3 → 0.4.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 (312) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/assets/back.svg +1 -0
  3. package/assets/forward.svg +1 -0
  4. package/assets/sources/back.fla +0 -0
  5. package/dist/components/form/Checkbox.module.scss +13 -6
  6. package/dist/components/form/Toggle.d.ts +8 -0
  7. package/dist/components/form/Toggle.d.ts.map +1 -0
  8. package/dist/{demo/components/form/Checkbox.js → components/form/Toggle.js} +17 -8
  9. package/dist/components/form/Toggle.js.map +1 -0
  10. package/dist/components/form/Toggle.module.scss +46 -0
  11. package/dist/components/icons/Back.d.ts +7 -0
  12. package/dist/components/icons/Back.d.ts.map +1 -0
  13. package/dist/components/icons/Back.js +13 -0
  14. package/dist/components/icons/Back.js.map +1 -0
  15. package/dist/components/icons/Forward.d.ts +7 -0
  16. package/dist/components/icons/Forward.d.ts.map +1 -0
  17. package/dist/components/icons/Forward.js +13 -0
  18. package/dist/components/icons/Forward.js.map +1 -0
  19. package/dist/components/icons/Icon.d.ts +13 -0
  20. package/dist/components/icons/Icon.d.ts.map +1 -0
  21. package/dist/components/icons/Icon.js +43 -0
  22. package/dist/components/icons/Icon.js.map +1 -0
  23. package/dist/components/layout/header/Header.d.ts +4 -0
  24. package/dist/components/layout/header/Header.d.ts.map +1 -1
  25. package/dist/components/layout/header/Header.js +26 -2
  26. package/dist/components/layout/header/Header.js.map +1 -1
  27. package/dist/components/layout/header/Header.module.scss +46 -2
  28. package/dist/components/layout/header/HeaderIconAction.d.ts +17 -0
  29. package/dist/components/layout/header/HeaderIconAction.d.ts.map +1 -0
  30. package/dist/components/layout/header/HeaderIconAction.js +40 -0
  31. package/dist/components/layout/header/HeaderIconAction.js.map +1 -0
  32. package/dist/components/layout/header/HeaderIconAction.module.scss +22 -0
  33. package/dist/components/layout/header/StickyHeader.js +1 -1
  34. package/dist/components/layout/header/StickyHeader.js.map +1 -1
  35. package/dist/components/layout/list/Header.d.ts +4 -0
  36. package/dist/components/layout/list/Header.d.ts.map +1 -0
  37. package/dist/components/layout/list/Header.js +16 -0
  38. package/dist/components/layout/list/Header.js.map +1 -0
  39. package/dist/components/layout/list/Header.module.scss +8 -0
  40. package/dist/components/layout/list/Item.d.ts +1 -0
  41. package/dist/components/layout/list/Item.d.ts.map +1 -1
  42. package/dist/components/layout/list/Item.js +18 -5
  43. package/dist/components/layout/list/Item.js.map +1 -1
  44. package/dist/components/layout/list/Item.module.scss +10 -2
  45. package/dist/components/layout/list/Label.d.ts +8 -0
  46. package/dist/components/layout/list/Label.d.ts.map +1 -0
  47. package/dist/components/layout/list/Label.js +16 -0
  48. package/dist/components/layout/list/Label.js.map +1 -0
  49. package/dist/components/layout/list/Label.module.scss +9 -0
  50. package/dist/components/layout/list/Value.d.ts +4 -0
  51. package/dist/components/layout/list/Value.d.ts.map +1 -0
  52. package/dist/components/layout/list/Value.js +13 -0
  53. package/dist/components/layout/list/Value.js.map +1 -0
  54. package/dist/components/layout/list/Value.module.scss +7 -0
  55. package/dist/components/ui/action/Action.d.ts +17 -0
  56. package/dist/components/ui/action/Action.d.ts.map +1 -0
  57. package/dist/components/ui/action/Action.js +44 -0
  58. package/dist/components/ui/action/Action.js.map +1 -0
  59. package/dist/components/ui/action/Action.module.scss +26 -0
  60. package/dist/components/ui/action/EqualActions.d.ts +7 -0
  61. package/dist/components/ui/action/EqualActions.d.ts.map +1 -0
  62. package/dist/components/ui/action/EqualActions.js +23 -0
  63. package/dist/components/ui/action/EqualActions.js.map +1 -0
  64. package/dist/components/ui/action/EqualActions.module.scss +6 -0
  65. package/dist/components/ui/button/Button.d.ts +8 -0
  66. package/dist/components/ui/button/Button.d.ts.map +1 -0
  67. package/dist/components/ui/button/Button.js +20 -0
  68. package/dist/components/ui/button/Button.js.map +1 -0
  69. package/dist/components/ui/button/Button.module.scss +25 -0
  70. package/dist/global.scss +35 -11
  71. package/dist/index.d.ts +2 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +2 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/types.d.ts +4 -0
  76. package/dist/types.d.ts.map +1 -0
  77. package/dist/types.js +3 -0
  78. package/dist/types.js.map +1 -0
  79. package/docs/assets/js/search.js +1 -1
  80. package/docs/assets/js/search.json +1 -1
  81. package/docs/enums/ICON.html +196 -0
  82. package/docs/index.html +13 -4
  83. package/docs/modules/StickyHeader.html +4 -4
  84. package/docs/modules.html +47 -10
  85. package/docs/pages/Tutorials/Test.html +3 -3
  86. package/esm/components/form/Checkbox.module.scss +13 -6
  87. package/esm/components/form/Toggle.d.ts +8 -0
  88. package/esm/components/form/Toggle.d.ts.map +1 -0
  89. package/esm/components/form/Toggle.js +15 -0
  90. package/esm/components/form/Toggle.js.map +1 -0
  91. package/esm/components/form/Toggle.module.scss +46 -0
  92. package/esm/components/icons/Back.d.ts +7 -0
  93. package/esm/components/icons/Back.d.ts.map +1 -0
  94. package/esm/components/icons/Back.js +7 -0
  95. package/esm/components/icons/Back.js.map +1 -0
  96. package/esm/components/icons/Forward.d.ts +7 -0
  97. package/esm/components/icons/Forward.d.ts.map +1 -0
  98. package/esm/components/icons/Forward.js +7 -0
  99. package/esm/components/icons/Forward.js.map +1 -0
  100. package/esm/components/icons/Icon.d.ts +13 -0
  101. package/esm/components/icons/Icon.d.ts.map +1 -0
  102. package/esm/components/icons/Icon.js +24 -0
  103. package/esm/components/icons/Icon.js.map +1 -0
  104. package/esm/components/layout/header/Header.d.ts +4 -0
  105. package/esm/components/layout/header/Header.d.ts.map +1 -1
  106. package/esm/components/layout/header/Header.js +26 -2
  107. package/esm/components/layout/header/Header.js.map +1 -1
  108. package/esm/components/layout/header/Header.module.scss +46 -2
  109. package/esm/components/layout/header/HeaderIconAction.d.ts +17 -0
  110. package/esm/components/layout/header/HeaderIconAction.d.ts.map +1 -0
  111. package/esm/components/layout/header/HeaderIconAction.js +23 -0
  112. package/esm/components/layout/header/HeaderIconAction.js.map +1 -0
  113. package/esm/components/layout/header/HeaderIconAction.module.scss +22 -0
  114. package/esm/components/layout/header/StickyHeader.js +1 -1
  115. package/esm/components/layout/header/StickyHeader.js.map +1 -1
  116. package/esm/components/layout/list/Header.d.ts +4 -0
  117. package/esm/components/layout/list/Header.d.ts.map +1 -0
  118. package/esm/components/layout/list/Header.js +10 -0
  119. package/esm/components/layout/list/Header.js.map +1 -0
  120. package/esm/components/layout/list/Header.module.scss +8 -0
  121. package/esm/components/layout/list/Item.d.ts +1 -0
  122. package/esm/components/layout/list/Item.d.ts.map +1 -1
  123. package/esm/components/layout/list/Item.js +18 -5
  124. package/esm/components/layout/list/Item.js.map +1 -1
  125. package/esm/components/layout/list/Item.module.scss +10 -2
  126. package/esm/components/layout/list/Label.d.ts +8 -0
  127. package/esm/components/layout/list/Label.d.ts.map +1 -0
  128. package/esm/components/layout/list/Label.js +10 -0
  129. package/esm/components/layout/list/Label.js.map +1 -0
  130. package/esm/components/layout/list/Label.module.scss +9 -0
  131. package/esm/components/layout/list/Value.d.ts +4 -0
  132. package/esm/components/layout/list/Value.d.ts.map +1 -0
  133. package/esm/components/layout/list/Value.js +7 -0
  134. package/esm/components/layout/list/Value.js.map +1 -0
  135. package/esm/components/layout/list/Value.module.scss +7 -0
  136. package/esm/components/ui/action/Action.d.ts +17 -0
  137. package/esm/components/ui/action/Action.d.ts.map +1 -0
  138. package/esm/components/ui/action/Action.js +27 -0
  139. package/esm/components/ui/action/Action.js.map +1 -0
  140. package/esm/components/ui/action/Action.module.scss +26 -0
  141. package/esm/components/ui/action/EqualActions.d.ts +7 -0
  142. package/esm/components/ui/action/EqualActions.d.ts.map +1 -0
  143. package/esm/components/ui/action/EqualActions.js +17 -0
  144. package/esm/components/ui/action/EqualActions.js.map +1 -0
  145. package/esm/components/ui/action/EqualActions.module.scss +6 -0
  146. package/esm/components/ui/button/Button.d.ts +8 -0
  147. package/esm/components/ui/button/Button.d.ts.map +1 -0
  148. package/esm/components/ui/button/Button.js +14 -0
  149. package/esm/components/ui/button/Button.js.map +1 -0
  150. package/esm/components/ui/button/Button.module.scss +25 -0
  151. package/esm/global.scss +35 -11
  152. package/esm/index.d.ts +2 -0
  153. package/esm/index.d.ts.map +1 -1
  154. package/esm/index.js +2 -0
  155. package/esm/index.js.map +1 -1
  156. package/esm/types.d.ts +4 -0
  157. package/esm/types.d.ts.map +1 -0
  158. package/esm/types.js +2 -0
  159. package/esm/types.js.map +1 -0
  160. package/package.json +6 -6
  161. package/src/components/form/Checkbox.module.scss +13 -6
  162. package/src/components/form/Toggle.module.scss +46 -0
  163. package/src/components/form/Toggle.tsx +33 -0
  164. package/src/components/icons/Back.tsx +21 -0
  165. package/src/components/icons/Forward.tsx +21 -0
  166. package/src/components/icons/Icon.tsx +33 -0
  167. package/src/components/layout/header/Header.module.scss +46 -2
  168. package/src/components/layout/header/Header.tsx +41 -3
  169. package/src/components/layout/header/HeaderIconAction.module.scss +22 -0
  170. package/src/components/layout/header/HeaderIconAction.tsx +49 -0
  171. package/src/components/layout/header/StickyHeader.tsx +1 -1
  172. package/src/components/layout/list/Header.module.scss +8 -0
  173. package/src/components/layout/list/Header.tsx +16 -0
  174. package/src/components/layout/list/Item.module.scss +10 -2
  175. package/src/components/layout/list/Item.tsx +23 -5
  176. package/src/components/layout/list/Label.module.scss +9 -0
  177. package/src/components/layout/list/Label.tsx +21 -0
  178. package/src/components/layout/list/Value.module.scss +7 -0
  179. package/src/components/layout/list/Value.tsx +11 -0
  180. package/src/components/ui/action/Action.module.scss +26 -0
  181. package/src/components/ui/action/Action.tsx +58 -0
  182. package/src/components/ui/action/EqualActions.module.scss +6 -0
  183. package/src/components/ui/action/EqualActions.tsx +30 -0
  184. package/src/components/ui/button/Button.module.scss +25 -0
  185. package/src/components/ui/button/Button.tsx +25 -0
  186. package/src/demo/Main.tsx +3 -2
  187. package/src/demo/Menu.module.scss +2 -0
  188. package/src/demo/components/form/Toggle.tsx +49 -0
  189. package/src/demo/components/layout/header/Header.tsx +104 -2
  190. package/src/demo/components/layout/list/Header.tsx +24 -0
  191. package/src/demo/components/layout/list/ItemRatio.tsx +21 -0
  192. package/src/demo/components/layout/list/Label.tsx +30 -0
  193. package/src/demo/components/layout/list/List.Item.module.scss +4 -0
  194. package/src/demo/components/layout/list/Value.module.scss +4 -0
  195. package/src/demo/components/layout/list/Value.tsx +26 -0
  196. package/src/demo/components/ui/action/Action.tsx +112 -0
  197. package/src/demo/components/ui/action/ActionDemo.module.scss +3 -0
  198. package/src/demo/components/ui/button/ButtonDemo.tsx +18 -0
  199. package/src/demo/components/ui/icons/Icons.tsx +21 -0
  200. package/src/demo/componentsMap.ts +110 -21
  201. package/src/demo/utils/makeVariants.ts +13 -0
  202. package/src/global.scss +35 -11
  203. package/src/index.ts +5 -0
  204. package/src/pages/react-miui.tsx +12 -0
  205. package/src/types.ts +7 -0
  206. package/.postcssrc +0 -9
  207. package/dist/demo/Demo.d.ts +0 -4
  208. package/dist/demo/Demo.d.ts.map +0 -1
  209. package/dist/demo/Demo.js +0 -18
  210. package/dist/demo/Demo.js.map +0 -1
  211. package/dist/demo/Demo.module.scss +0 -4
  212. package/dist/demo/Main.d.ts +0 -4
  213. package/dist/demo/Main.d.ts.map +0 -1
  214. package/dist/demo/Main.js +0 -83
  215. package/dist/demo/Main.js.map +0 -1
  216. package/dist/demo/Main.module.scss +0 -30
  217. package/dist/demo/Menu.d.ts +0 -9
  218. package/dist/demo/Menu.d.ts.map +0 -1
  219. package/dist/demo/Menu.js +0 -31
  220. package/dist/demo/Menu.js.map +0 -1
  221. package/dist/demo/Menu.module.scss +0 -39
  222. package/dist/demo/components/form/Checkbox.d.ts +0 -4
  223. package/dist/demo/components/form/Checkbox.d.ts.map +0 -1
  224. package/dist/demo/components/form/Checkbox.js.map +0 -1
  225. package/dist/demo/components/layout/header/Header.d.ts +0 -4
  226. package/dist/demo/components/layout/header/Header.d.ts.map +0 -1
  227. package/dist/demo/components/layout/header/Header.js +0 -16
  228. package/dist/demo/components/layout/header/Header.js.map +0 -1
  229. package/dist/demo/components/layout/header/StickyHeader.d.ts +0 -9
  230. package/dist/demo/components/layout/header/StickyHeader.d.ts.map +0 -1
  231. package/dist/demo/components/layout/header/StickyHeader.js +0 -73
  232. package/dist/demo/components/layout/header/StickyHeader.js.map +0 -1
  233. package/dist/demo/components/layout/list/List.Item.d.ts +0 -4
  234. package/dist/demo/components/layout/list/List.Item.d.ts.map +0 -1
  235. package/dist/demo/components/layout/list/List.Item.js +0 -42
  236. package/dist/demo/components/layout/list/List.Item.js.map +0 -1
  237. package/dist/demo/components/layout/list/List.Item.module.scss +0 -3
  238. package/dist/demo/components/ui/directionPad/Pad.d.ts +0 -4
  239. package/dist/demo/components/ui/directionPad/Pad.d.ts.map +0 -1
  240. package/dist/demo/components/ui/directionPad/Pad.js +0 -49
  241. package/dist/demo/components/ui/directionPad/Pad.js.map +0 -1
  242. package/dist/demo/componentsMap.d.ts +0 -14
  243. package/dist/demo/componentsMap.d.ts.map +0 -1
  244. package/dist/demo/componentsMap.js +0 -54
  245. package/dist/demo/componentsMap.js.map +0 -1
  246. package/dist/demo/utils/safeUseHash.d.ts +0 -3
  247. package/dist/demo/utils/safeUseHash.d.ts.map +0 -1
  248. package/dist/demo/utils/safeUseHash.js +0 -13
  249. package/dist/demo/utils/safeUseHash.js.map +0 -1
  250. package/dist/demo-global.scss +0 -9
  251. package/dist/pages/_app.d.ts +0 -7
  252. package/dist/pages/_app.d.ts.map +0 -1
  253. package/dist/pages/_app.js +0 -15
  254. package/dist/pages/_app.js.map +0 -1
  255. package/dist/pages/index.d.ts +0 -4
  256. package/dist/pages/index.d.ts.map +0 -1
  257. package/dist/pages/index.js +0 -10
  258. package/dist/pages/index.js.map +0 -1
  259. package/esm/demo/Demo.d.ts +0 -4
  260. package/esm/demo/Demo.d.ts.map +0 -1
  261. package/esm/demo/Demo.js +0 -12
  262. package/esm/demo/Demo.js.map +0 -1
  263. package/esm/demo/Demo.module.scss +0 -4
  264. package/esm/demo/Main.d.ts +0 -4
  265. package/esm/demo/Main.d.ts.map +0 -1
  266. package/esm/demo/Main.js +0 -58
  267. package/esm/demo/Main.js.map +0 -1
  268. package/esm/demo/Main.module.scss +0 -30
  269. package/esm/demo/Menu.d.ts +0 -9
  270. package/esm/demo/Menu.d.ts.map +0 -1
  271. package/esm/demo/Menu.js +0 -25
  272. package/esm/demo/Menu.js.map +0 -1
  273. package/esm/demo/Menu.module.scss +0 -39
  274. package/esm/demo/components/form/Checkbox.d.ts +0 -4
  275. package/esm/demo/components/form/Checkbox.d.ts.map +0 -1
  276. package/esm/demo/components/form/Checkbox.js +0 -9
  277. package/esm/demo/components/form/Checkbox.js.map +0 -1
  278. package/esm/demo/components/layout/header/Header.d.ts +0 -4
  279. package/esm/demo/components/layout/header/Header.d.ts.map +0 -1
  280. package/esm/demo/components/layout/header/Header.js +0 -10
  281. package/esm/demo/components/layout/header/Header.js.map +0 -1
  282. package/esm/demo/components/layout/header/StickyHeader.d.ts +0 -9
  283. package/esm/demo/components/layout/header/StickyHeader.d.ts.map +0 -1
  284. package/esm/demo/components/layout/header/StickyHeader.js +0 -62
  285. package/esm/demo/components/layout/header/StickyHeader.js.map +0 -1
  286. package/esm/demo/components/layout/list/List.Item.d.ts +0 -4
  287. package/esm/demo/components/layout/list/List.Item.d.ts.map +0 -1
  288. package/esm/demo/components/layout/list/List.Item.js +0 -17
  289. package/esm/demo/components/layout/list/List.Item.js.map +0 -1
  290. package/esm/demo/components/layout/list/List.Item.module.scss +0 -3
  291. package/esm/demo/components/ui/directionPad/Pad.d.ts +0 -4
  292. package/esm/demo/components/ui/directionPad/Pad.d.ts.map +0 -1
  293. package/esm/demo/components/ui/directionPad/Pad.js +0 -27
  294. package/esm/demo/components/ui/directionPad/Pad.js.map +0 -1
  295. package/esm/demo/componentsMap.d.ts +0 -14
  296. package/esm/demo/componentsMap.d.ts.map +0 -1
  297. package/esm/demo/componentsMap.js +0 -51
  298. package/esm/demo/componentsMap.js.map +0 -1
  299. package/esm/demo/utils/safeUseHash.d.ts +0 -3
  300. package/esm/demo/utils/safeUseHash.d.ts.map +0 -1
  301. package/esm/demo/utils/safeUseHash.js +0 -10
  302. package/esm/demo/utils/safeUseHash.js.map +0 -1
  303. package/esm/demo-global.scss +0 -9
  304. package/esm/pages/_app.d.ts +0 -7
  305. package/esm/pages/_app.d.ts.map +0 -1
  306. package/esm/pages/_app.js +0 -10
  307. package/esm/pages/_app.js.map +0 -1
  308. package/esm/pages/index.d.ts +0 -4
  309. package/esm/pages/index.d.ts.map +0 -1
  310. package/esm/pages/index.js +0 -5
  311. package/esm/pages/index.js.map +0 -1
  312. package/src/pages/index.html +0 -14
@@ -2,7 +2,7 @@
2
2
  list-style-type: none;
3
3
  margin: 0;
4
4
  padding: 0;
5
- font-size: 15px;
5
+ font-size: calc(34px / var(--ratio-font));
6
6
 
7
7
  &:not(:first-child) > * {
8
8
  border-top: 0.37px solid var(--header-border);
@@ -10,7 +10,7 @@
10
10
 
11
11
  > * {
12
12
  display: block;
13
- padding: 20px 0;
13
+ padding: 0;
14
14
  text-decoration: none;
15
15
  }
16
16
  }
@@ -20,4 +20,12 @@
20
20
  background: none;
21
21
  width: 100%;
22
22
  text-align: left;
23
+ font-family: inherit;
24
+ font-size: inherit;
25
+ }
26
+
27
+ .content {
28
+ display: flex;
29
+ min-height: calc(174px / var(--ratio-dimensions));
30
+ align-items: center;
23
31
  }
@@ -2,6 +2,7 @@ import React from "react";
2
2
  import classnames from "classnames";
3
3
 
4
4
  import styles from "./Item.module.scss";
5
+ import { Value } from "./Value";
5
6
 
6
7
  interface LinkProps {
7
8
  href: string;
@@ -13,38 +14,55 @@ interface Props {
13
14
  onClick?: () => void;
14
15
  className?: string;
15
16
  Link?: React.ComponentClass<LinkProps> | React.FC<LinkProps>;
17
+ ratio?: string; // @TODO number/number/number/.. type?
16
18
  }
17
19
 
20
+ // eslint-disable-next-line max-statements
18
21
  const Item: React.FC<Props> = (props) => {
19
- const { className, children, href, to, onClick, Link, ...restProps } = props;
22
+ const { className, children, href, to, onClick, Link, ratio, ...restProps } = props;
20
23
  const cls = classnames(styles.item, className);
21
24
 
22
25
  const liProps = {
23
26
  className: cls,
24
27
  };
25
28
 
29
+ const r = ratio ? ratio.split("/") : [];
30
+
31
+ const ren = React.Children.map(props.children, (child, index) => {
32
+ let flex = undefined;
33
+ if (!r.length && child && typeof child === "object" && "type" in child && child.type === Value) {
34
+ return child;
35
+ }
36
+ if (index in r) {
37
+ flex = r[index];
38
+ }
39
+ return <div style={{ flex }}>{child}</div>;
40
+ });
41
+
26
42
  if (to) {
27
43
  if (!Link) {
28
44
  throw new TypeError("`to` prop given without `Link` component");
29
45
  }
30
46
 
31
- return <li {...liProps}><Link href={to} {...restProps}>{children}</Link></li>;
47
+ return <li {...liProps}><Link href={to} {...restProps}><a className={styles.content}>{ren}</a></Link></li>;
32
48
  }
33
49
  if (href) {
34
50
  const aProps: typeof restProps & { onClick?: Props["onClick"]} = { ...restProps };
35
51
  if (onClick) {
36
52
  aProps.onClick = onClick;
37
53
  }
38
- return <li {...liProps}><a href={href} {...aProps}>{children}</a></li>;
54
+ return <li {...liProps}><a href={href} {...aProps} className={styles.content}>{ren}</a></li>;
39
55
  }
40
56
  if (onClick) {
41
57
  return (
42
58
  <li {...liProps}>
43
- <button className={styles.button} onClick={props.onClick} {...restProps}>{children}</button>
59
+ <button className={classnames(styles.button, styles.content)} onClick={props.onClick}{...restProps}>
60
+ {ren}
61
+ </button>
44
62
  </li>
45
63
  );
46
64
  }
47
- return <li {...liProps}><div {...restProps}>{children}</div></li>;
65
+ return <li {...liProps}><div {...restProps} className={styles.content}>{ren}</div></li>;
48
66
  };
49
67
 
50
68
  export { Item };
@@ -0,0 +1,9 @@
1
+ .sub {
2
+ font-size: calc(27px / var(--ratio-font));
3
+ color: var(--sub);
4
+ margin-top: calc(27px / var(--ratio-font) / 3);
5
+ }
6
+
7
+ .root {
8
+ padding: calc(54px / var(--ratio-dimensions)) 0;
9
+ }
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import type { ReactNode } from "react";
3
+
4
+ import styles from "./Label.module.scss";
5
+
6
+ interface Props {
7
+ sub?: ReactNode;
8
+ }
9
+
10
+ const Label: React.FC<Props> = (props) => {
11
+ const sub = props.sub ? <div className={styles.sub}>{props.sub}</div> : null;
12
+
13
+ return (
14
+ <div className={styles.root}>
15
+ <div>{props.children}</div>
16
+ {sub}
17
+ </div>
18
+ );
19
+ };
20
+
21
+ export { Label };
@@ -0,0 +1,7 @@
1
+ .value {
2
+ color: var(--icon);
3
+ font-size: calc(26px / var(--ratio-font));
4
+ display: flex;
5
+ justify-content: flex-end;
6
+ flex: 1;
7
+ }
@@ -0,0 +1,11 @@
1
+ import React from "react";
2
+
3
+ import styles from "./Value.module.scss";
4
+
5
+ const Value: React.FC = (props) => {
6
+ return (
7
+ <div className={styles.value}>{props.children}</div>
8
+ );
9
+ };
10
+
11
+ export { Value };
@@ -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 };
package/src/demo/Main.tsx CHANGED
@@ -1,14 +1,15 @@
1
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
9
  import { safeUseHash } from "./utils/safeUseHash";
7
- import type { TheMap, TheMapItem } from "./componentsMap";
8
10
  import { componentsMap } from "./componentsMap";
9
11
 
10
12
  type BG = "white" | "transparent" | "mobile";
11
- type AnyComponent = React.ComponentClass | React.FC;
12
13
 
13
14
  interface ComponentInfo {
14
15
  Component: AnyComponent;
@@ -35,5 +35,7 @@
35
35
  &:hover {
36
36
  background: var(--active-bg);
37
37
  }
38
+
39
+ --focus-bg-set: var(--focus-color);
38
40
  }
39
41
  }
@@ -0,0 +1,49 @@
1
+ import React, { useCallback, useEffect, useState } from "react";
2
+ import { Toggle } from "../../../components/form/Toggle";
3
+ import { List } from "../../../components/layout/list/List";
4
+ import { Item } from "../../../components/layout/list/Item";
5
+
6
+ const handleNoop = () => undefined;
7
+
8
+ const ToggleDemo: React.VFC = () => {
9
+ const [state, ss] = useState<boolean | null>(null);
10
+
11
+ useEffect(() => {
12
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
13
+ setTimeout(() => { ss(true); }, 1000);
14
+ }, []);
15
+
16
+ const handleToggle = useCallback(() => {
17
+ if (state == null) {
18
+ return; // shouldn't happen, but ...
19
+ }
20
+ ss(null);
21
+ setTimeout(() => {
22
+ ss(!state);
23
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers
24
+ }, 1000);
25
+ }, [state]);
26
+
27
+ return (
28
+ <List>
29
+ <Item ratio={"1/"}>
30
+ <span>Off</span>
31
+ <Toggle onChange={handleNoop} state={false} />
32
+ </Item>
33
+ <Item ratio={"1/"}>
34
+ <span>On</span>
35
+ <Toggle onChange={handleNoop} state={true} />
36
+ </Item>
37
+ <Item ratio={"1/"}>
38
+ <span>Undetermined</span>
39
+ <Toggle onChange={handleNoop} state={null} />
40
+ </Item>
41
+ <Item ratio={"1/"}>
42
+ <span>Dynamic</span>
43
+ <Toggle onChange={handleToggle} state={state} />
44
+ </Item>
45
+ </List>
46
+ );
47
+ };
48
+
49
+ export { ToggleDemo };
@@ -1,6 +1,8 @@
1
1
  import React from "react";
2
+ import Link from "next/link";
2
3
 
3
- import { Header } from "../../../../index.js";
4
+ import { Header, ICON, StickyHeader } from "../../../../index.js";
5
+ import { HeaderIconAction } from "../../../../components/layout/header/HeaderIconAction";
4
6
 
5
7
  const HeaderDemo = () => {
6
8
  // eslint-disable-next-line @typescript-eslint/no-magic-numbers,react/no-array-index-key
@@ -14,4 +16,104 @@ const HeaderDemo = () => {
14
16
  );
15
17
  };
16
18
 
17
- export { HeaderDemo };
19
+ const CenteredHeaderDemo = () => {
20
+ return (
21
+ <>
22
+ <Header center={true}>Messages</Header>
23
+ <div>
24
+ Header text is centered
25
+ </div>
26
+ </>
27
+ );
28
+ };
29
+
30
+ const ToolbarVariantDemo = () => {
31
+ return (
32
+ <>
33
+ <Header center={true} variant={"toolbar"}>Toolbar version</Header>
34
+ </>
35
+ );
36
+ };
37
+
38
+ const handleClick = () => { alert(1); };
39
+
40
+ // eslint-disable-next-line max-lines-per-function
41
+ const HeaderWithButtonsDemo = () => {
42
+ const demo = (
43
+ <>
44
+ <HeaderIconAction icon={ICON.back} onClick={handleClick} />
45
+ <HeaderIconAction icon={ICON.checkmark} onClick={handleClick} />
46
+ </>
47
+ );
48
+
49
+ return (
50
+ <>
51
+ <Header center={true} before={"A text"}>Messages</Header>
52
+ <div>
53
+ Header text is centered
54
+ </div>
55
+ <Header before={"A text"}>Messages</Header>
56
+ <div>
57
+ Header text is start aligned
58
+ </div>
59
+ <Header before={demo}>Messages</Header>
60
+ <div>
61
+ Some button icons are added on the left to left aligned title
62
+ </div>
63
+ <Header before={demo} center={true}>Messages</Header>
64
+ <div>
65
+ Some button icons are added on the left to centered aligned title
66
+ </div>
67
+ <Header
68
+ before={<HeaderIconAction icon={ICON.back} to={"/react-miui"} Link={Link} />}
69
+ center={true}
70
+ >Messages
71
+ </Header>
72
+ <div>
73
+ Some internal link icons are added on the left to centered aligned title
74
+ </div>
75
+ <Header
76
+ before={<HeaderIconAction icon={ICON.back} href={"https://www.npmjs.com/package/react-miui"} />}
77
+ center={true}
78
+ >Messages
79
+ </Header>
80
+ <div>
81
+ Some external link icons are added on the left to centered aligned title
82
+ </div>
83
+ <Header
84
+ before={<HeaderIconAction icon={ICON.back} href={"https://www.npmjs.com/package/react-miui"} />}
85
+ after={<HeaderIconAction icon={ICON.checkmark} href={"https://www.npmjs.com/package/react-miui"} />}
86
+ center={true}
87
+ >Messages
88
+ </Header>
89
+ <div>
90
+ Some external link icons are added on both sides to centered aligned title
91
+ </div>
92
+ </>
93
+ );
94
+ };
95
+
96
+ const HeaderWithButtonsOnSideDemo = () => {
97
+ const demo = (
98
+ <>
99
+ <HeaderIconAction icon={ICON.back} onClick={handleClick} />
100
+ <HeaderIconAction icon={ICON.checkmark} onClick={handleClick} />
101
+ </>
102
+ );
103
+
104
+ return (
105
+ <StickyHeader position={"left"}>
106
+ <Header
107
+ center={true}
108
+ before={demo}
109
+ after={demo}
110
+ >M
111
+ </Header>
112
+ <StickyHeader.Content>
113
+ Header is on the side
114
+ </StickyHeader.Content>
115
+ </StickyHeader>
116
+ );
117
+ };
118
+
119
+ export { HeaderDemo, CenteredHeaderDemo, ToolbarVariantDemo, HeaderWithButtonsDemo, HeaderWithButtonsOnSideDemo };
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import { List } from "../../../../components/layout/list/List";
3
+ import { Item } from "../../../../components/layout/list/Item";
4
+ import { Header } from "../../../../components/layout/list/Header";
5
+
6
+ const ListHeaderDemo = () => {
7
+ return (
8
+ <List>
9
+ <Header>Section name</Header>
10
+ <Item>Item</Item>
11
+ <Item>Another item</Item>
12
+ <Item>One more</Item>
13
+ <Header>Status section</Header>
14
+ <Item>Item</Item>
15
+ <Item>One more</Item>
16
+ <Header>Advanced</Header>
17
+ <Item>Item</Item>
18
+ <Item>Another item</Item>
19
+ <Item>One more</Item>
20
+ </List>
21
+ );
22
+ };
23
+
24
+ export { ListHeaderDemo };
@@ -0,0 +1,21 @@
1
+ import React from "react";
2
+ import { List } from "../../../../components/layout/list/List";
3
+ import { Item } from "../../../../components/layout/list/Item";
4
+ import { ICON, Icon } from "../../../../components/icons/Icon";
5
+
6
+ const ItemRatioDemo = () => {
7
+ return (
8
+ <List>
9
+ <Item ratio={"1/"}>
10
+ <span>Label</span>
11
+ <>Value</>
12
+ </Item>
13
+ <Item ratio={"1/"}>
14
+ <span>Label</span>
15
+ <Icon name={ICON.forward} />
16
+ </Item>
17
+ </List>
18
+ );
19
+ };
20
+
21
+ export { ItemRatioDemo };
@@ -0,0 +1,30 @@
1
+ import React from "react";
2
+ import { List } from "../../../../components/layout/list/List";
3
+ import { Item } from "../../../../components/layout/list/Item";
4
+ import { Label } from "../../../../components/layout/list/Label";
5
+
6
+ const ItemLabelDemo = () => {
7
+ return (
8
+ <List>
9
+ <Item>
10
+ <Label sub={"Here is a little text explaining things. Don't go too long, but make it non-ambiguous."}>
11
+ Transmit power
12
+ </Label>
13
+ </Item>
14
+ <Item ratio={"6/4/"}>
15
+ <Label sub={"Here is a little text explaining things. Don't go too long, but make it non-ambiguous."}>
16
+ Transmit power
17
+ </Label>
18
+ <></>
19
+ <>Value</>
20
+ </Item>
21
+ <Item>
22
+ <Label sub={"Just one sentence."}>
23
+ Complicated name
24
+ </Label>
25
+ </Item>
26
+ </List>
27
+ );
28
+ };
29
+
30
+ export { ItemLabelDemo };
@@ -1,3 +1,7 @@
1
1
  .custom {
2
2
  border-left: 3px solid green;
3
3
  }
4
+
5
+ .item {
6
+ display: flex;
7
+ }
@@ -0,0 +1,4 @@
1
+ .icon {
2
+ color: var(--toolbar-border);
3
+ margin-left: calc(40px / var(--ratio-dimensions));
4
+ }
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+ import { List } from "../../../../components/layout/list/List";
3
+ import { Item } from "../../../../components/layout/list/Item";
4
+ import { Value } from "../../../../components/layout/list/Value";
5
+ import { Label } from "../../../../components/layout/list/Label";
6
+ import { ICON, Icon } from "../../../../components/icons/Icon";
7
+
8
+ import styles from "./Value.module.scss";
9
+
10
+ const ValueDemo = () => {
11
+ return (
12
+ <List>
13
+ <Item>
14
+ <Label>Name</Label>
15
+ <Value>Jack The 23rd</Value>
16
+ </Item>
17
+ <Item>
18
+ <Label>Start at</Label>
19
+ <Value>18:00</Value>
20
+ <Icon name={ICON.forward} className={styles.icon} />
21
+ </Item>
22
+ </List>
23
+ );
24
+ };
25
+
26
+ export { ValueDemo };