@para-ui/core 4.0.0-beta → 4.0.0-rc.1

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 (270) hide show
  1. package/AutoBox/index.d.ts +1 -1
  2. package/AutoBox/index.js +12 -12
  3. package/AutoTips/autoTipsMultiline/index.d.ts +1 -1
  4. package/AutoTips/index.d.ts +2 -2
  5. package/AutoTips/index.js +17 -17
  6. package/Badge/index.d.ts +23 -0
  7. package/Badge/index.js +54 -0
  8. package/Breadcrumbs/index.js +8 -8
  9. package/Button/SplitButton.d.ts +1 -1
  10. package/Button/index.d.ts +1 -1
  11. package/Button/index.js +4 -4
  12. package/Carousel/index.d.ts +6 -6
  13. package/Carousel/index.js +5 -5
  14. package/Cascader/Cascader.d.ts +10 -10
  15. package/Cascader/OptionList/Column.d.ts +3 -3
  16. package/Cascader/OptionList/index.d.ts +2 -2
  17. package/Cascader/index.d.ts +1 -1
  18. package/Cascader/index.js +5 -3
  19. package/Cascader/lang/en_US.d.ts +5 -0
  20. package/Cascader/lang/index.d.ts +11 -0
  21. package/Cascader/lang/zh_CN.d.ts +5 -0
  22. package/Cascader/utils/treeUtil.d.ts +1 -1
  23. package/Checkbox/index.d.ts +1 -1
  24. package/Checkbox/index.js +5 -5
  25. package/CheckboxGroup/index.d.ts +2 -2
  26. package/CheckboxGroup/index.js +3 -3
  27. package/Collapse/index.js +4 -4
  28. package/CollapseBox/index.js +12 -20
  29. package/CollapseLayout/index.js +20 -20
  30. package/ColorPicker/index.js +2 -2
  31. package/ComboSelect/index.js +53 -63
  32. package/ComboSelect/interface.d.ts +3 -3
  33. package/ComboSelect/utils.d.ts +5 -0
  34. package/Container/index.d.ts +3 -3
  35. package/Container/index.js +56 -56
  36. package/CopyText/index.d.ts +2 -2
  37. package/CopyText/index.js +2 -2
  38. package/DatePicker/generatePicker/index.d.ts +22 -22
  39. package/DatePicker/index.js +10 -8
  40. package/DatePicker/util.d.ts +1 -1
  41. package/Desktop/index.d.ts +1 -1
  42. package/Desktop/index.js +19 -14
  43. package/DragVerify/index.d.ts +1 -1
  44. package/DragVerify/index.js +15 -15
  45. package/Drawer/index.d.ts +2 -2
  46. package/Drawer/index.js +118 -17
  47. package/Drawer/interface.d.ts +10 -2
  48. package/Drawer/util.d.ts +6 -0
  49. package/Dropdown/index.d.ts +1 -1
  50. package/DynamicMultiBox/formItem.d.ts +1 -1
  51. package/DynamicMultiBox/index.d.ts +7 -2
  52. package/DynamicMultiBox/index.js +42 -39
  53. package/DynamicMultiBox/interface.d.ts +8 -8
  54. package/DynamicMultiBox/rowForm.d.ts +3 -1
  55. package/Empty/index.d.ts +1 -1
  56. package/Empty/index.js +2 -2
  57. package/Form/index.d.ts +12 -13
  58. package/Form/index.js +14 -12
  59. package/FormItem/compoments/defaultCompoments/index.d.ts +4 -4
  60. package/FormItem/compoments/formCheckboxGroup/index.d.ts +1 -1
  61. package/FormItem/compoments/formFile/index.d.ts +2 -2
  62. package/FormItem/compoments/formRadioGroup/index.d.ts +1 -1
  63. package/FormItem/compoments/formSelect/index.d.ts +7 -7
  64. package/FormItem/errorTips.d.ts +3 -3
  65. package/FormItem/index.d.ts +5 -5
  66. package/FormItem/index.js +7 -6
  67. package/FormItem/lang/en_US.d.ts +10 -0
  68. package/FormItem/lang/index.d.ts +21 -0
  69. package/FormItem/lang/zh_CN.d.ts +10 -0
  70. package/FormItem/validateFunction.d.ts +1 -1
  71. package/FunctionModal/dialog.d.ts +26 -26
  72. package/FunctionModal/index.d.ts +6 -6
  73. package/FunctionModal/index.js +9 -9
  74. package/FunctionModal/modalContext.d.ts +3 -3
  75. package/GlobalContext/componentsProps.d.ts +7 -7
  76. package/GlobalContext/index.d.ts +2 -2
  77. package/GlobalContext/index.js +1 -1
  78. package/GlobalContext/useFormatMessage.d.ts +1 -1
  79. package/Help/index.js +2 -2
  80. package/HelperText/index.js +1 -1
  81. package/InputLang/index.d.ts +2 -2
  82. package/InputLang/index.js +8 -8
  83. package/InputNumber/index.d.ts +2 -2
  84. package/InputNumber/index.js +4 -4
  85. package/Label/index.js +2 -2
  86. package/Loading/index.js +1 -1
  87. package/Menu/index.js +14 -14
  88. package/Menu/interface.d.ts +1 -1
  89. package/Message/index.js +12 -12
  90. package/Modal/Confirm/index.d.ts +3 -3
  91. package/Modal/index.d.ts +1 -1
  92. package/Modal/index.js +7 -7
  93. package/MultiBox/index.d.ts +2 -2
  94. package/MultiBox/index.js +11 -7
  95. package/Notification/index.js +2 -2
  96. package/OperateBtn/index.d.ts +2 -2
  97. package/OperateBtn/index.js +42 -37
  98. package/PageHeader/index.js +31 -31
  99. package/PageHeader/interface.d.ts +1 -1
  100. package/Pagination/index.d.ts +1 -1
  101. package/Pagination/index.js +17 -17
  102. package/ParauiProvider/index.js +1 -1
  103. package/PasswordRules/index.js +8 -8
  104. package/PopConfirm/index.js +4 -4
  105. package/Progress/Line.d.ts +10 -10
  106. package/Progress/Steps.d.ts +2 -2
  107. package/Progress/index.d.ts +12 -12
  108. package/Progress/index.js +40 -40
  109. package/Progress/utils.d.ts +4 -4
  110. package/Querying/index.d.ts +1 -1
  111. package/Querying/index.js +2 -2
  112. package/README.md +3 -0
  113. package/Radio/index.d.ts +1 -1
  114. package/Radio/index.js +5 -5
  115. package/RadioGroup/index.d.ts +2 -2
  116. package/RadioGroup/index.js +3 -3
  117. package/Search/index.js +2 -2
  118. package/Select/index.d.ts +3 -3
  119. package/Select/index.js +43 -43
  120. package/SelectInput/index.js +2 -2
  121. package/Selector/index.js +19 -19
  122. package/Selector/interface.d.ts +6 -6
  123. package/SelectorPicker/index.d.ts +4 -4
  124. package/SelectorPicker/index.js +12 -12
  125. package/SingleBox/index.d.ts +2 -2
  126. package/SingleBox/index.js +3 -3
  127. package/Slider/interface.d.ts +1 -1
  128. package/Status/index.d.ts +6 -4
  129. package/Status/index.js +21 -9
  130. package/Stepper/index.d.ts +5 -5
  131. package/Stepper/index.js +24 -24
  132. package/Styles/scrollbar.scss +66 -66
  133. package/Styles/theme.scss +62 -61
  134. package/Switch/index.d.ts +7 -7
  135. package/Switch/index.js +24 -6
  136. package/Switch/lang/en_US.d.ts +4 -0
  137. package/Switch/lang/index.d.ts +9 -0
  138. package/Switch/lang/zh_CN.d.ts +4 -0
  139. package/Table/index.js +36 -36
  140. package/Table/interface.d.ts +4 -4
  141. package/Table/tableBodyElement/index.d.ts +1 -1
  142. package/Table/tableBodyInterface.d.ts +2 -2
  143. package/Table/tableContainer/index.d.ts +1 -1
  144. package/Table/tableElement/index.d.ts +1 -1
  145. package/Table/tableHeadElement/index.d.ts +1 -1
  146. package/Table/tableHeadInterface.d.ts +1 -1
  147. package/Table/tablePaginationInterface.d.ts +6 -6
  148. package/Table/tdElement/index.d.ts +1 -1
  149. package/Table/thElement/index.d.ts +2 -2
  150. package/Table/trElement/index.d.ts +1 -1
  151. package/Table/util.d.ts +1 -1
  152. package/Tabs/index.d.ts +1 -1
  153. package/Tabs/index.js +26 -18
  154. package/Tag/TagGroup.d.ts +5 -5
  155. package/Tag/index.d.ts +7 -7
  156. package/Tag/index.js +33 -1207
  157. package/TextEditor/index.d.ts +2 -2
  158. package/TextEditor/index.js +45 -27
  159. package/TextEditor/lang/en_US.d.ts +4 -0
  160. package/TextEditor/lang/index.d.ts +9 -0
  161. package/TextEditor/lang/zh_CN.d.ts +4 -0
  162. package/TextField/index.d.ts +1 -1
  163. package/TextField/index.js +13 -13
  164. package/TimePicker/index.d.ts +1 -1
  165. package/TimePicker/index.js +2 -1
  166. package/Timeline/TimelineItem.d.ts +1 -1
  167. package/Timeline/index.d.ts +5 -5
  168. package/Timeline/index.js +14 -14
  169. package/Title/index.d.ts +6 -4
  170. package/Title/index.js +9 -5
  171. package/ToggleButton/ToggleButtonGroup.d.ts +1 -1
  172. package/ToggleButton/index.d.ts +5 -1
  173. package/ToggleButton/index.js +17 -10
  174. package/Tooltip/index.js +1 -1
  175. package/Transfer/box.d.ts +6 -6
  176. package/Transfer/index.js +27 -27
  177. package/Tree/OperateBar/index.d.ts +2 -2
  178. package/Tree/Tree.d.ts +2 -2
  179. package/Tree/index.js +4 -4
  180. package/Tree/interface.d.ts +8 -4
  181. package/Tree/utils/tools.d.ts +1 -1
  182. package/Upload/Dragger/index.d.ts +2 -2
  183. package/Upload/ErroTip/index.d.ts +1 -1
  184. package/Upload/index.d.ts +2 -2
  185. package/Upload/index.js +13 -13
  186. package/Upload/interface.d.ts +1 -1
  187. package/_verture/{index-5c77417d.js → index-0f315bca.js} +4 -4
  188. package/_verture/{index-e2881a53.js → index-19947788.js} +2 -2
  189. package/_verture/{index-d63bd287.js → index-232d890b.js} +1 -1
  190. package/_verture/{index-68db2bc3.js → index-92e406f4.js} +50 -26
  191. package/_verture/{index-7ec72724.js → index-bc461491.js} +45 -38
  192. package/_verture/{index-e6f85fd5.js → index-d251967e.js} +104 -47
  193. package/_verture/{modalContext-c12ca3e8.js → modalContext-9299acc9.js} +26 -26
  194. package/_verture/tinycolor-ece3542d.js +1180 -0
  195. package/_verture/{utils-f0e81540.js → utils-06d86594.js} +3 -6
  196. package/index.d.ts +2 -0
  197. package/index.js +14 -13
  198. package/locale/en-US.d.ts +19 -0
  199. package/locale/index.d.ts +38 -0
  200. package/locale/index.js +41 -3
  201. package/locale/zh-CN.d.ts +19 -0
  202. package/package.json +53 -8
  203. package/umd/AutoBox.js +2 -2
  204. package/umd/AutoTips.js +4 -4
  205. package/umd/Badge.js +1 -0
  206. package/umd/Breadcrumbs.js +2 -2
  207. package/umd/Button.js +2 -2
  208. package/umd/ButtonGroup.js +4 -4
  209. package/umd/Cascader.js +4 -4
  210. package/umd/Checkbox.js +5 -5
  211. package/umd/CheckboxGroup.js +5 -5
  212. package/umd/Collapse.js +1 -1
  213. package/umd/CollapseBox.js +1 -1
  214. package/umd/CollapseLayout.js +4 -4
  215. package/umd/ColorPicker.js +1 -1
  216. package/umd/ComboSelect.js +6 -6
  217. package/umd/CopyText.js +2 -2
  218. package/umd/DatePicker.js +2 -2
  219. package/umd/Desktop.js +2 -2
  220. package/umd/DragVerify.js +4 -4
  221. package/umd/Drawer.js +4 -4
  222. package/umd/DynamicMultiBox.js +4 -4
  223. package/umd/Form.js +4 -4
  224. package/umd/FormItem.js +4 -4
  225. package/umd/FunctionModal.js +2 -2
  226. package/umd/GlobalContext.js +1 -1
  227. package/umd/Help.js +2 -2
  228. package/umd/HelperText.js +1 -1
  229. package/umd/InputLang.js +4 -4
  230. package/umd/InputNumber.js +2 -2
  231. package/umd/Label.js +2 -2
  232. package/umd/Loading.js +1 -1
  233. package/umd/Menu.js +2 -2
  234. package/umd/Message.js +1 -1
  235. package/umd/Modal.js +2 -2
  236. package/umd/MultiBox.js +7 -7
  237. package/umd/Notification.js +2 -2
  238. package/umd/OperateBtn.js +2 -2
  239. package/umd/PageHeader.js +2 -2
  240. package/umd/Pagination.js +4 -4
  241. package/umd/ParauiProvider.js +1 -1
  242. package/umd/PasswordRules.js +3 -3
  243. package/umd/PopConfirm.js +2 -2
  244. package/umd/Popover.js +1 -1
  245. package/umd/Progress.js +1 -1
  246. package/umd/Radio.js +2 -2
  247. package/umd/RadioGroup.js +2 -2
  248. package/umd/Search.js +7 -7
  249. package/umd/Select.js +2 -2
  250. package/umd/SelectInput.js +2 -2
  251. package/umd/Selector.js +2 -2
  252. package/umd/SelectorPicker.js +2 -2
  253. package/umd/SingleBox.js +2 -2
  254. package/umd/Status.js +4 -4
  255. package/umd/Stepper.js +2 -2
  256. package/umd/Switch.js +5 -5
  257. package/umd/Table.js +6 -6
  258. package/umd/Tabs.js +4 -4
  259. package/umd/Tag.js +2 -2
  260. package/umd/TextEditor.js +3 -3
  261. package/umd/TextField.js +7 -7
  262. package/umd/TimePicker.js +2 -2
  263. package/umd/Title.js +2 -2
  264. package/umd/ToggleButton.js +4 -4
  265. package/umd/Tooltip.js +1 -1
  266. package/umd/Transfer.js +5 -5
  267. package/umd/Tree.js +7 -7
  268. package/umd/Upload.js +2 -2
  269. package/umd/locale.js +1 -1
  270. /package/_verture/{typeof-b240b062.js → typeof-c310ee4a.js} +0 -0
package/umd/Tooltip.js CHANGED
@@ -17,7 +17,7 @@ PERFORMANCE OF THIS SOFTWARE.
17
17
  Copyright (c) 2018 Jed Watson.
18
18
  Licensed under the MIT License (MIT), see
19
19
  http://jedwatson.github.io/classnames
20
- */!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;e<arguments.length;e++){var n=arguments[e];if(n){var i=typeof n;if("string"===i||"number"===i)t.push(n);else if(Array.isArray(n)){if(n.length){var a=o.apply(null,n);a&&t.push(a)}}else if("object"===i){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){t.push(n.toString());continue}for(var u in n)r.call(n,u)&&n[u]&&t.push(u)}}}return t.join(" ")}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()},86010:function(t,e,n){"use strict";function r(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;e<t.length;e++)t[e]&&(n=r(t[e]))&&(o&&(o+=" "),o+=n);else for(e in t)t[e]&&(o&&(o+=" "),o+=e);return o}function o(){for(var t,e,n=0,o="";n<arguments.length;)(t=arguments[n++])&&(e=r(t))&&(o&&(o+=" "),o+=e);return o}n.d(e,{Z:function(){return o}})},9929:function(t,e,n){(e=n(23645)(!1)).push([t.id,".paraui-v4-tooltip{color:#fff;font-size:14px;line-height:1.5715;position:absolute;z-index:1500;display:block;width:max-content;visibility:visible}.paraui-v4-tooltip .component-tooltip-content{position:relative}.paraui-v4-tooltip.component-tooltip-hidden{display:none}.paraui-v4-tooltip .component-tooltip-inner{min-width:30px;min-height:32px;padding:5px 12px;color:#fff;text-align:left;text-decoration:none;word-break:break-all;background-color:rgba(29,33,38,.9);border-radius:4px;line-height:21px}.paraui-v4-tooltip .component-tooltip-inner .disabled-svg{font-size:12px;position:relative;top:1px;margin-right:4px;color:#fff}.component-tooltip-zoom-big-fast-enter,.component-tooltip-zoom-big-fast-appear{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.component-tooltip-zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.component-tooltip-zoom-big-fast-enter.component-tooltip-zoom-big-fast-enter-active,.component-tooltip-zoom-big-fast-appear.component-tooltip-zoom-big-fast-appear-active{animation-name:componentTooltipZoomBigIn;animation-play-state:running}.component-tooltip-zoom-big-fast-leave.component-tooltip-zoom-big-fast-leave-active{animation-name:componentTooltipZoomBigOut;animation-play-state:running;pointer-events:none}.component-tooltip-zoom-big-fast-enter,.component-tooltip-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1)}.component-tooltip-zoom-big-fast-enter-prepare,.component-tooltip-zoom-big-fast-appear-prepare{transform:none}.component-tooltip-zoom-big-fast-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86)}@keyframes componentTooltipZoomBigIn{0%{transform:scale(0.8);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes componentTooltipZoomBigOut{0%{transform:scale(1)}100%{transform:scale(0.8);opacity:0}}",""]),t.exports=e},23645:function(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var o=(a=r,u=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(u),"/*# ".concat(c," */")),i=r.sources.map((function(t){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(t," */")}));return[n].concat(i).concat([o]).join("\n")}var a,u,c;return[n].join("\n")}(e,t);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,r){"string"==typeof t&&(t=[[null,t,""]]);var o={};if(r)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(o[a]=!0)}for(var u=0;u<t.length;u++){var c=[].concat(t[u]);r&&o[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),e.push(c))}},e}},27418:function(t){"use strict";
20
+ */!function(){"use strict";var r={}.hasOwnProperty;function o(){for(var t=[],e=0;e<arguments.length;e++){var n=arguments[e];if(n){var i=typeof n;if("string"===i||"number"===i)t.push(n);else if(Array.isArray(n)){if(n.length){var a=o.apply(null,n);a&&t.push(a)}}else if("object"===i){if(n.toString!==Object.prototype.toString&&!n.toString.toString().includes("[native code]")){t.push(n.toString());continue}for(var u in n)r.call(n,u)&&n[u]&&t.push(u)}}}return t.join(" ")}t.exports?(o.default=o,t.exports=o):void 0===(n=function(){return o}.apply(e,[]))||(t.exports=n)}()},86010:function(t,e,n){"use strict";function r(t){var e,n,o="";if("string"==typeof t||"number"==typeof t)o+=t;else if("object"==typeof t)if(Array.isArray(t))for(e=0;e<t.length;e++)t[e]&&(n=r(t[e]))&&(o&&(o+=" "),o+=n);else for(e in t)t[e]&&(o&&(o+=" "),o+=e);return o}function o(){for(var t,e,n=0,o="";n<arguments.length;)(t=arguments[n++])&&(e=r(t))&&(o&&(o+=" "),o+=e);return o}n.d(e,{Z:function(){return o}})},9929:function(t,e,n){(e=n(23645)(!1)).push([t.id,".paraui-v4-tooltip{color:#fff;font-size:14px;line-height:1.5715;position:absolute;z-index:1500;display:block;width:max-content;visibility:visible}.paraui-v4-tooltip .component-tooltip-content{position:relative}.paraui-v4-tooltip.component-tooltip-hidden{display:none}.paraui-v4-tooltip .component-tooltip-inner{min-width:30px;min-height:32px;padding:5px 12px;color:#fff;text-align:left;text-decoration:none;word-break:break-all;background-color:rgba(29,33,38,.9);border-radius:4px;line-height:21px}.paraui-v4-tooltip .component-tooltip-inner .disabled-svg{font-size:16px;position:relative;top:3px;margin-right:4px;color:#fff}.component-tooltip-zoom-big-fast-enter,.component-tooltip-zoom-big-fast-appear{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.component-tooltip-zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.component-tooltip-zoom-big-fast-enter.component-tooltip-zoom-big-fast-enter-active,.component-tooltip-zoom-big-fast-appear.component-tooltip-zoom-big-fast-appear-active{animation-name:componentTooltipZoomBigIn;animation-play-state:running}.component-tooltip-zoom-big-fast-leave.component-tooltip-zoom-big-fast-leave-active{animation-name:componentTooltipZoomBigOut;animation-play-state:running;pointer-events:none}.component-tooltip-zoom-big-fast-enter,.component-tooltip-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1)}.component-tooltip-zoom-big-fast-enter-prepare,.component-tooltip-zoom-big-fast-appear-prepare{transform:none}.component-tooltip-zoom-big-fast-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86)}@keyframes componentTooltipZoomBigIn{0%{transform:scale(0.8);opacity:0}100%{transform:scale(1);opacity:1}}@keyframes componentTooltipZoomBigOut{0%{transform:scale(1)}100%{transform:scale(0.8);opacity:0}}",""]),t.exports=e},23645:function(t){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n=t[1]||"",r=t[3];if(!r)return n;if(e&&"function"==typeof btoa){var o=(a=r,u=btoa(unescape(encodeURIComponent(JSON.stringify(a)))),c="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(u),"/*# ".concat(c," */")),i=r.sources.map((function(t){return"/*# sourceURL=".concat(r.sourceRoot||"").concat(t," */")}));return[n].concat(i).concat([o]).join("\n")}var a,u,c;return[n].join("\n")}(e,t);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,r){"string"==typeof t&&(t=[[null,t,""]]);var o={};if(r)for(var i=0;i<this.length;i++){var a=this[i][0];null!=a&&(o[a]=!0)}for(var u=0;u<t.length;u++){var c=[].concat(t[u]);r&&o[c[0]]||(n&&(c[2]?c[2]="".concat(n," and ").concat(c[2]):c[2]=n),e.push(c))}},e}},27418:function(t){"use strict";
21
21
  /*
22
22
  object-assign
23
23
  (c) Sindre Sorhus