@nextui-org/react 1.0.1-alpha.48 → 1.0.1-alpha.51

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 (114) hide show
  1. package/cjs/backdrop/index.d.ts +23 -0
  2. package/cjs/backdrop/index.js +102 -0
  3. package/cjs/css-baseline/css-baseline.js +3 -3
  4. package/cjs/index.d.ts +4 -0
  5. package/cjs/index.js +22 -2
  6. package/cjs/input/input-icon-clear.d.ts +1 -0
  7. package/cjs/input/input-icon-clear.js +7 -5
  8. package/cjs/input/input-password.d.ts +4 -1
  9. package/cjs/input/input-props.d.ts +2 -0
  10. package/cjs/input/input-props.js +1 -0
  11. package/cjs/input/input.js +10 -3
  12. package/cjs/modal/index.d.ts +2 -0
  13. package/cjs/modal/index.js +21 -0
  14. package/cjs/modal/modal-body.d.ts +19 -0
  15. package/cjs/modal/modal-body.js +65 -0
  16. package/cjs/modal/modal-close-button.d.ts +7 -0
  17. package/cjs/modal/modal-close-button.js +52 -0
  18. package/cjs/modal/modal-context.d.ts +8 -0
  19. package/cjs/modal/modal-context.js +18 -0
  20. package/cjs/modal/modal-footer.d.ts +20 -0
  21. package/cjs/modal/modal-footer.js +65 -0
  22. package/cjs/modal/modal-header.d.ts +20 -0
  23. package/cjs/modal/modal-header.js +65 -0
  24. package/cjs/modal/modal-wrapper.d.ts +22 -0
  25. package/cjs/modal/modal-wrapper.js +128 -0
  26. package/cjs/modal/modal.d.ts +38 -0
  27. package/cjs/modal/modal.js +152 -0
  28. package/cjs/modal/use-modal.d.ts +11 -0
  29. package/cjs/modal/use-modal.js +25 -0
  30. package/cjs/radio/radio-group.js +6 -4
  31. package/cjs/radio/radio.js +11 -8
  32. package/cjs/{input → shared}/clear-icon.d.ts +3 -1
  33. package/cjs/{input → shared}/clear-icon.js +20 -1
  34. package/cjs/snippet/snippet.d.ts +6 -5
  35. package/cjs/snippet/snippet.js +4 -2
  36. package/cjs/text/child.d.ts +1 -0
  37. package/cjs/text/child.js +10 -4
  38. package/cjs/text/text.d.ts +1 -0
  39. package/cjs/text/text.js +2 -0
  40. package/cjs/theme/dark.js +3 -3
  41. package/cjs/theme/default.js +1 -1
  42. package/cjs/theme/types.d.ts +1 -0
  43. package/cjs/tooltip/tooltip-content.js +5 -5
  44. package/cjs/use-keyboard/codes.d.ts +92 -0
  45. package/cjs/use-keyboard/codes.js +104 -0
  46. package/cjs/use-keyboard/helper.d.ts +3 -0
  47. package/cjs/use-keyboard/helper.js +35 -0
  48. package/cjs/use-keyboard/index.d.ts +5 -0
  49. package/cjs/use-keyboard/index.js +15 -0
  50. package/cjs/use-keyboard/use-keyboard.d.ts +22 -0
  51. package/cjs/use-keyboard/use-keyboard.js +76 -0
  52. package/cjs/utils/collections.d.ts +3 -0
  53. package/cjs/utils/collections.js +30 -2
  54. package/cjs/utils/icons.js +57 -1
  55. package/esm/backdrop/index.d.ts +23 -0
  56. package/esm/backdrop/index.js +79 -0
  57. package/esm/css-baseline/css-baseline.js +3 -3
  58. package/esm/index.d.ts +4 -0
  59. package/esm/index.js +5 -1
  60. package/esm/input/input-icon-clear.d.ts +1 -0
  61. package/esm/input/input-icon-clear.js +7 -5
  62. package/esm/input/input-password.d.ts +4 -1
  63. package/esm/input/input-props.d.ts +2 -0
  64. package/esm/input/input-props.js +1 -0
  65. package/esm/input/input.js +9 -2
  66. package/esm/modal/index.d.ts +2 -0
  67. package/esm/modal/index.js +8 -0
  68. package/esm/modal/modal-body.d.ts +19 -0
  69. package/esm/modal/modal-body.js +45 -0
  70. package/esm/modal/modal-close-button.d.ts +7 -0
  71. package/esm/modal/modal-close-button.js +39 -0
  72. package/esm/modal/modal-context.d.ts +8 -0
  73. package/esm/modal/modal-context.js +4 -0
  74. package/esm/modal/modal-footer.d.ts +20 -0
  75. package/esm/modal/modal-footer.js +44 -0
  76. package/esm/modal/modal-header.d.ts +20 -0
  77. package/esm/modal/modal-header.js +44 -0
  78. package/esm/modal/modal-wrapper.d.ts +22 -0
  79. package/esm/modal/modal-wrapper.js +106 -0
  80. package/esm/modal/modal.d.ts +38 -0
  81. package/esm/modal/modal.js +128 -0
  82. package/esm/modal/use-modal.d.ts +11 -0
  83. package/esm/modal/use-modal.js +16 -0
  84. package/esm/radio/radio-group.js +6 -4
  85. package/esm/radio/radio.js +11 -8
  86. package/esm/{input → shared}/clear-icon.d.ts +3 -1
  87. package/esm/{input → shared}/clear-icon.js +20 -1
  88. package/esm/snippet/snippet.d.ts +6 -5
  89. package/esm/snippet/snippet.js +4 -2
  90. package/esm/text/child.d.ts +1 -0
  91. package/esm/text/child.js +10 -4
  92. package/esm/text/text.d.ts +1 -0
  93. package/esm/text/text.js +2 -0
  94. package/esm/theme/dark.js +3 -3
  95. package/esm/theme/default.js +1 -1
  96. package/esm/theme/types.d.ts +1 -0
  97. package/esm/tooltip/tooltip-content.js +5 -5
  98. package/esm/use-keyboard/codes.d.ts +92 -0
  99. package/esm/use-keyboard/codes.js +97 -0
  100. package/esm/use-keyboard/helper.d.ts +3 -0
  101. package/esm/use-keyboard/helper.js +24 -0
  102. package/esm/use-keyboard/index.d.ts +5 -0
  103. package/esm/use-keyboard/index.js +4 -0
  104. package/esm/use-keyboard/use-keyboard.d.ts +22 -0
  105. package/esm/use-keyboard/use-keyboard.js +67 -0
  106. package/esm/utils/collections.d.ts +3 -0
  107. package/esm/utils/collections.js +19 -0
  108. package/esm/utils/icons.js +50 -0
  109. package/modal/package.json +6 -0
  110. package/package.json +1 -1
  111. package/shared/package.json +6 -0
  112. package/umd/nextui.js +958 -91
  113. package/umd/nextui.min.js +1 -1
  114. package/use-keyboard/package.json +6 -0
@@ -17,16 +17,35 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
17
17
 
18
18
  const defaultProps = {
19
19
  width: 24,
20
- height: 24
20
+ height: 24,
21
+ plain: false
21
22
  };
22
23
 
23
24
  const Close = ({
24
25
  size,
25
26
  fill,
27
+ plain,
26
28
  width,
27
29
  height,
28
30
  ...props
29
31
  }) => {
32
+ if (plain) {
33
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
34
+ width: size || width,
35
+ height: size || height,
36
+ viewBox: "0 0 24 24",
37
+ fill: "none",
38
+ stroke: fill,
39
+ strokeWidth: 2,
40
+ strokeLinecap: "round",
41
+ strokeLinejoin: "round",
42
+ ...props,
43
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)("path", {
44
+ d: "M18 6L6 18M6 6l12 12"
45
+ })
46
+ });
47
+ }
48
+
30
49
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("svg", {
31
50
  width: size || width,
32
51
  height: size || height,
@@ -1,17 +1,18 @@
1
1
  import React from 'react';
2
- import { SnippetTypes, CopyTypes } from '../utils/prop-types';
2
+ import { SnippetTypes, CopyTypes, TooltipColors } from '../utils/prop-types';
3
3
  interface Props {
4
4
  text?: string | string[];
5
5
  symbol?: string;
6
- toastText?: string;
7
6
  filled?: boolean;
8
7
  width?: string;
9
8
  bordered?: boolean;
10
9
  showTooltip?: boolean;
10
+ tooltipText?: string;
11
11
  tooltipCopyText?: string;
12
12
  tooltipCopiedText?: string;
13
13
  copy?: CopyTypes;
14
14
  type?: SnippetTypes;
15
+ tooltipColor?: TooltipColors | string;
15
16
  className?: string;
16
17
  }
17
18
  declare const defaultProps: {
@@ -19,10 +20,10 @@ declare const defaultProps: {
19
20
  bordered: boolean;
20
21
  showTooltip: boolean;
21
22
  symbol: string;
22
- toastText: string;
23
23
  width: string;
24
24
  copy: "default" | "slient" | "prevent";
25
25
  type: "default" | "primary" | "secondary" | "success" | "warning" | "error" | "gradient" | "invert";
26
+ tooltipColor: string;
26
27
  tooltipCopyText: string;
27
28
  tooltipCopiedText: string;
28
29
  className: string;
@@ -34,12 +35,12 @@ declare const _default: React.ComponentType<Partial<{
34
35
  bordered: boolean;
35
36
  showTooltip: boolean;
36
37
  symbol: string;
37
- toastText: string;
38
38
  width: string;
39
39
  copy: "default" | "slient" | "prevent";
40
40
  type: "default" | "primary" | "secondary" | "success" | "warning" | "error" | "gradient" | "invert";
41
+ tooltipColor: string;
41
42
  tooltipCopyText: string;
42
43
  tooltipCopiedText: string;
43
44
  className: string;
44
- }> & Omit<SnippetProps, "symbol" | "type" | "width" | "copy" | "className" | "bordered" | "filled" | "toastText" | "showTooltip" | "tooltipCopyText" | "tooltipCopiedText">>;
45
+ }> & Omit<SnippetProps, "symbol" | "type" | "width" | "copy" | "className" | "bordered" | "filled" | "showTooltip" | "tooltipCopyText" | "tooltipCopiedText" | "tooltipColor">>;
45
46
  export default _default;
@@ -32,10 +32,10 @@ const defaultProps = {
32
32
  bordered: false,
33
33
  showTooltip: true,
34
34
  symbol: '$',
35
- toastText: 'Copied to clipboard!',
36
35
  width: 'initial',
37
36
  copy: 'default',
38
37
  type: 'default',
38
+ tooltipColor: 'default',
39
39
  tooltipCopyText: 'Copy',
40
40
  tooltipCopiedText: 'Copied',
41
41
  className: ''
@@ -54,12 +54,12 @@ const Snippet = ({
54
54
  bordered,
55
55
  children,
56
56
  symbol,
57
- toastText,
58
57
  showTooltip,
59
58
  text,
60
59
  width,
61
60
  tooltipCopyText,
62
61
  tooltipCopiedText,
62
+ tooltipColor,
63
63
  copy: copyType,
64
64
  className,
65
65
  ...props
@@ -111,6 +111,8 @@ const Snippet = ({
111
111
  children: children || text
112
112
  }), showCopyIcon && copyType !== 'slient' ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_tooltip.default, {
113
113
  hideArrow: true,
114
+ rounded: true,
115
+ color: tooltipColor,
114
116
  text: copied ? tooltipCopiedText : tooltipCopyText,
115
117
  onVisibleChange: handleTooltipVisibleChange,
116
118
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("span", {
@@ -4,6 +4,7 @@ export interface Props {
4
4
  tag: keyof JSX.IntrinsicElements;
5
5
  color?: NormalColors | string;
6
6
  size?: string | number;
7
+ margin?: string | number;
7
8
  capitalize?: boolean;
8
9
  className?: '';
9
10
  }
package/cjs/text/child.js CHANGED
@@ -33,6 +33,7 @@ const TextChild = ({
33
33
  className,
34
34
  color: userColor,
35
35
  capitalize,
36
+ margin: marginProp,
36
37
  size,
37
38
  ...props
38
39
  }) => {
@@ -44,14 +45,19 @@ const TextChild = ({
44
45
  if (typeof size === 'number') return `${size}px`;
45
46
  return size;
46
47
  }, [size]);
48
+ const margin = (0, _react.useMemo)(() => {
49
+ if (!marginProp) return 'inherit';
50
+ if (typeof marginProp === 'number') return `${size}px`;
51
+ return marginProp;
52
+ }, [marginProp]);
47
53
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_react.default.Fragment, {
48
54
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(Component, { ...props,
49
- className: _style.default.dynamic([["895353027", [tag, color, fontSize]]]) + " " + (props && props.className != null && props.className || `${size ? 'custom-size' : ''} ${capitalize ? 'capitalize' : ''} ${className}`),
55
+ className: _style.default.dynamic([["3362076940", [tag, color, margin, fontSize]]]) + " " + (props && props.className != null && props.className || `${size ? 'custom-size' : ''} ${capitalize ? 'capitalize' : ''} ${className}`),
50
56
  children: children
51
57
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_style.default, {
52
- id: "895353027",
53
- dynamic: [tag, color, fontSize],
54
- children: `${tag}.__jsx-style-dynamic-selector{color:${color};}.custom-size.__jsx-style-dynamic-selector{font-size:${fontSize};}.capitalize.__jsx-style-dynamic-selector{text-transform:capitalize;}`
58
+ id: "3362076940",
59
+ dynamic: [tag, color, margin, fontSize],
60
+ children: `${tag}.__jsx-style-dynamic-selector{color:${color};margin:${margin};}.custom-size.__jsx-style-dynamic-selector{font-size:${fontSize};}.capitalize.__jsx-style-dynamic-selector{text-transform:capitalize;}`
55
61
  })]
56
62
  });
57
63
  };
@@ -18,6 +18,7 @@ interface Props {
18
18
  blockquote?: boolean;
19
19
  className?: string;
20
20
  size?: string | number;
21
+ margin?: string | number;
21
22
  color?: NormalColors | string;
22
23
  }
23
24
  declare const defaultProps: {
package/cjs/text/text.js CHANGED
@@ -65,6 +65,7 @@ const Text = ({
65
65
  blockquote,
66
66
  capitalize,
67
67
  size,
68
+ margin,
68
69
  children,
69
70
  className,
70
71
  ...props
@@ -113,6 +114,7 @@ const Text = ({
113
114
  className: className,
114
115
  capitalize: capitalize,
115
116
  tag: tag,
117
+ margin: margin,
116
118
  size: size,
117
119
  ...props,
118
120
  children: modifers
package/cjs/theme/dark.js CHANGED
@@ -31,9 +31,9 @@ const expressiveness = {
31
31
  dropdownBoxShadow: '0 0 0 1px #333',
32
32
  scrollerStart: 'rgba(255, 255, 255, 1)',
33
33
  scrollerEnd: 'rgba(255, 255, 255, 0)',
34
- shadowSmall: '0 10px 20px -10px rgba(255, 255, 255, .15)',
35
- shadowMedium: '0 15px 22px -10px rgba(255, 255, 255, 0.15)',
36
- shadowLarge: '0 20px 24px -10px rgba(255, 255, 255, 0.15)',
34
+ shadowSmall: '0 10px 20px -10px rgba(0, 0, 0, 0.1)',
35
+ shadowMedium: '0 15px 22px -10px rgba(0, 0, 0, 0.1)',
36
+ shadowLarge: '0 20px 24px -10px rgba(0, 0, 0, 0.1)',
37
37
  portalOpacity: 0.75
38
38
  };
39
39
  exports.expressiveness = expressiveness;
@@ -18,7 +18,7 @@ const palette = { ..._common.default,
18
18
  accents_6: '#444',
19
19
  accents_7: '#333',
20
20
  accents_8: '#111',
21
- text: '#2c3e50',
21
+ text: '#333',
22
22
  white: '#fff',
23
23
  background: '#fff',
24
24
  foreground: '#000',
@@ -1,4 +1,5 @@
1
1
  import { ThemeTypes } from '../utils/prop-types';
2
+ export declare type ThemeType = ThemeTypes;
2
3
  export interface NextUIThemesPalette {
3
4
  accents_1: string;
4
5
  accents_2: string;
@@ -108,15 +108,15 @@ const TooltipContent = ({
108
108
  ref: selfRef,
109
109
  onClick: preventHandler,
110
110
  ...props,
111
- className: _style.default.dynamic([["3534938502", [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowSmall : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top]]]) + " " + (props && props.className != null && props.className || `tooltip-content ${className}`),
111
+ className: _style.default.dynamic([["472873192", [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowMedium : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top]]]) + " " + (props && props.className != null && props.className || `tooltip-content ${className}`),
112
112
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
113
113
  role: "tooltip",
114
- className: _style.default.dynamic([["3534938502", [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowSmall : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top]]]) + " " + `inner ${!hideArrow ? 'arrow' : ''}`,
114
+ className: _style.default.dynamic([["472873192", [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowMedium : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top]]]) + " " + `inner ${!hideArrow ? 'arrow' : ''}`,
115
115
  children: children
116
116
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_style.default, {
117
- id: "3534938502",
118
- dynamic: [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowSmall : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top],
119
- children: `.tooltip-content.__jsx-style-dynamic-selector{position:absolute;width:auto;top:calc(${rect.top} + 6px);left:${rect.left};-webkit-transform:${rect.transform};-ms-transform:${rect.transform};transform:${rect.transform};background:${colors.bgColor};color:${colors.color};border-radius:${borderRadius};padding:0;opacity:0;z-index:1000;box-shadow:${shadow ? theme.expressiveness.shadowSmall : 'none'};-webkit-transition:opacity 0.25s ease 0s,top 0.25s ease 0s;transition:opacity 0.25s ease 0s,top 0.25s ease 0s;}.inner.__jsx-style-dynamic-selector{font-size:0.875rem;padding:${theme.layout.gapQuarter} ${theme.layout.gapHalf};position:relative;}.inner.arrow.__jsx-style-dynamic-selector:after{content:'';width:10px;height:10px;z-index:-2;background:${colors.bgColor};border-radius:0px 0px 2px 0px;position:absolute;left:${left};top:${top};right:${right};bottom:${bottom};-webkit-transform:${transform};-ms-transform:${transform};transform:${transform};}.wrapper-enter-active.__jsx-style-dynamic-selector{opacity:1;top:${rect.top};}`
117
+ id: "472873192",
118
+ dynamic: [rect.top, rect.left, rect.transform, colors.bgColor, colors.color, borderRadius, shadow ? theme.expressiveness.shadowMedium : 'none', theme.layout.gapQuarter, theme.layout.gapHalf, colors.bgColor, left, top, right, bottom, transform, rect.top],
119
+ children: `.tooltip-content.__jsx-style-dynamic-selector{position:absolute;width:auto;top:calc(${rect.top} + 6px);left:${rect.left};-webkit-transform:${rect.transform};-ms-transform:${rect.transform};transform:${rect.transform};background:${colors.bgColor};color:${colors.color};border-radius:${borderRadius};padding:0;opacity:0;z-index:1000;box-shadow:${shadow ? theme.expressiveness.shadowMedium : 'none'};-webkit-transition:opacity 0.25s ease 0s,top 0.25s ease 0s;transition:opacity 0.25s ease 0s,top 0.25s ease 0s;}.inner.__jsx-style-dynamic-selector{font-size:0.875rem;padding:${theme.layout.gapQuarter} ${theme.layout.gapHalf};position:relative;}.inner.arrow.__jsx-style-dynamic-selector:after{content:'';width:10px;height:10px;z-index:-2;background:${colors.bgColor};border-radius:0px 0px 2px 0px;position:absolute;left:${left};top:${top};right:${right};bottom:${bottom};-webkit-transform:${transform};-ms-transform:${transform};transform:${transform};}.wrapper-enter-active.__jsx-style-dynamic-selector{opacity:1;top:${rect.top};}`
120
120
  })]
121
121
  })
122
122
  }), el);
@@ -0,0 +1,92 @@
1
+ /**
2
+ * KeyBinding Codes
3
+ * The content of this file is based on the design of the open source project "microsoft/vscode",
4
+ * Copyright (c) Microsoft Corporation. All rights reserved.
5
+ *
6
+ * We inherit the KeyMod values from "microsoft/vscode",
7
+ * but use the Browser's KeyboardEvent event implementation, and all values are used only as identification.
8
+ */
9
+ export declare enum KeyCode {
10
+ Unknown = 0,
11
+ Backspace = 8,
12
+ Tab = 9,
13
+ Enter = 13,
14
+ Shift = 16,
15
+ Ctrl = 17,
16
+ Alt = 18,
17
+ PauseBreak = 19,
18
+ CapsLock = 20,
19
+ Escape = 27,
20
+ Space = 32,
21
+ PageUp = 33,
22
+ PageDown = 34,
23
+ End = 35,
24
+ Home = 36,
25
+ LeftArrow = 37,
26
+ UpArrow = 38,
27
+ RightArrow = 39,
28
+ DownArrow = 40,
29
+ Insert = 45,
30
+ Delete = 46,
31
+ KEY_0 = 48,
32
+ KEY_1 = 49,
33
+ KEY_2 = 50,
34
+ KEY_3 = 51,
35
+ KEY_4 = 52,
36
+ KEY_5 = 53,
37
+ KEY_6 = 54,
38
+ KEY_7 = 55,
39
+ KEY_8 = 56,
40
+ KEY_9 = 57,
41
+ KEY_A = 65,
42
+ KEY_B = 66,
43
+ KEY_C = 67,
44
+ KEY_D = 68,
45
+ KEY_E = 69,
46
+ KEY_F = 70,
47
+ KEY_G = 71,
48
+ KEY_H = 72,
49
+ KEY_I = 73,
50
+ KEY_J = 74,
51
+ KEY_K = 75,
52
+ KEY_L = 76,
53
+ KEY_M = 77,
54
+ KEY_N = 78,
55
+ KEY_O = 79,
56
+ KEY_P = 80,
57
+ KEY_Q = 81,
58
+ KEY_R = 82,
59
+ KEY_S = 83,
60
+ KEY_T = 84,
61
+ KEY_U = 85,
62
+ KEY_V = 86,
63
+ KEY_W = 87,
64
+ KEY_X = 88,
65
+ KEY_Y = 89,
66
+ KEY_Z = 90,
67
+ Meta = 91,
68
+ F1 = 112,
69
+ F2 = 113,
70
+ F3 = 114,
71
+ F4 = 115,
72
+ F5 = 116,
73
+ F6 = 117,
74
+ F7 = 118,
75
+ F8 = 119,
76
+ F9 = 120,
77
+ F10 = 121,
78
+ F11 = 122,
79
+ F12 = 123,
80
+ NumLock = 144,
81
+ ScrollLock = 145,
82
+ Equal = 187,
83
+ Minus = 189,
84
+ Backquote = 192,
85
+ Backslash = 220
86
+ }
87
+ export declare enum KeyMod {
88
+ CtrlCmd = 2048,
89
+ Shift = 1024,
90
+ Alt = 512,
91
+ WinCtrl = 256
92
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.KeyMod = exports.KeyCode = void 0;
5
+
6
+ /**
7
+ * KeyBinding Codes
8
+ * The content of this file is based on the design of the open source project "microsoft/vscode",
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ *
11
+ * We inherit the KeyMod values from "microsoft/vscode",
12
+ * but use the Browser's KeyboardEvent event implementation, and all values are used only as identification.
13
+ */
14
+ let KeyCode;
15
+ exports.KeyCode = KeyCode;
16
+
17
+ (function (KeyCode) {
18
+ KeyCode[KeyCode["Unknown"] = 0] = "Unknown";
19
+ KeyCode[KeyCode["Backspace"] = 8] = "Backspace";
20
+ KeyCode[KeyCode["Tab"] = 9] = "Tab";
21
+ KeyCode[KeyCode["Enter"] = 13] = "Enter";
22
+ KeyCode[KeyCode["Shift"] = 16] = "Shift";
23
+ KeyCode[KeyCode["Ctrl"] = 17] = "Ctrl";
24
+ KeyCode[KeyCode["Alt"] = 18] = "Alt";
25
+ KeyCode[KeyCode["PauseBreak"] = 19] = "PauseBreak";
26
+ KeyCode[KeyCode["CapsLock"] = 20] = "CapsLock";
27
+ KeyCode[KeyCode["Escape"] = 27] = "Escape";
28
+ KeyCode[KeyCode["Space"] = 32] = "Space";
29
+ KeyCode[KeyCode["PageUp"] = 33] = "PageUp";
30
+ KeyCode[KeyCode["PageDown"] = 34] = "PageDown";
31
+ KeyCode[KeyCode["End"] = 35] = "End";
32
+ KeyCode[KeyCode["Home"] = 36] = "Home";
33
+ KeyCode[KeyCode["LeftArrow"] = 37] = "LeftArrow";
34
+ KeyCode[KeyCode["UpArrow"] = 38] = "UpArrow";
35
+ KeyCode[KeyCode["RightArrow"] = 39] = "RightArrow";
36
+ KeyCode[KeyCode["DownArrow"] = 40] = "DownArrow";
37
+ KeyCode[KeyCode["Insert"] = 45] = "Insert";
38
+ KeyCode[KeyCode["Delete"] = 46] = "Delete";
39
+ KeyCode[KeyCode["KEY_0"] = 48] = "KEY_0";
40
+ KeyCode[KeyCode["KEY_1"] = 49] = "KEY_1";
41
+ KeyCode[KeyCode["KEY_2"] = 50] = "KEY_2";
42
+ KeyCode[KeyCode["KEY_3"] = 51] = "KEY_3";
43
+ KeyCode[KeyCode["KEY_4"] = 52] = "KEY_4";
44
+ KeyCode[KeyCode["KEY_5"] = 53] = "KEY_5";
45
+ KeyCode[KeyCode["KEY_6"] = 54] = "KEY_6";
46
+ KeyCode[KeyCode["KEY_7"] = 55] = "KEY_7";
47
+ KeyCode[KeyCode["KEY_8"] = 56] = "KEY_8";
48
+ KeyCode[KeyCode["KEY_9"] = 57] = "KEY_9";
49
+ KeyCode[KeyCode["KEY_A"] = 65] = "KEY_A";
50
+ KeyCode[KeyCode["KEY_B"] = 66] = "KEY_B";
51
+ KeyCode[KeyCode["KEY_C"] = 67] = "KEY_C";
52
+ KeyCode[KeyCode["KEY_D"] = 68] = "KEY_D";
53
+ KeyCode[KeyCode["KEY_E"] = 69] = "KEY_E";
54
+ KeyCode[KeyCode["KEY_F"] = 70] = "KEY_F";
55
+ KeyCode[KeyCode["KEY_G"] = 71] = "KEY_G";
56
+ KeyCode[KeyCode["KEY_H"] = 72] = "KEY_H";
57
+ KeyCode[KeyCode["KEY_I"] = 73] = "KEY_I";
58
+ KeyCode[KeyCode["KEY_J"] = 74] = "KEY_J";
59
+ KeyCode[KeyCode["KEY_K"] = 75] = "KEY_K";
60
+ KeyCode[KeyCode["KEY_L"] = 76] = "KEY_L";
61
+ KeyCode[KeyCode["KEY_M"] = 77] = "KEY_M";
62
+ KeyCode[KeyCode["KEY_N"] = 78] = "KEY_N";
63
+ KeyCode[KeyCode["KEY_O"] = 79] = "KEY_O";
64
+ KeyCode[KeyCode["KEY_P"] = 80] = "KEY_P";
65
+ KeyCode[KeyCode["KEY_Q"] = 81] = "KEY_Q";
66
+ KeyCode[KeyCode["KEY_R"] = 82] = "KEY_R";
67
+ KeyCode[KeyCode["KEY_S"] = 83] = "KEY_S";
68
+ KeyCode[KeyCode["KEY_T"] = 84] = "KEY_T";
69
+ KeyCode[KeyCode["KEY_U"] = 85] = "KEY_U";
70
+ KeyCode[KeyCode["KEY_V"] = 86] = "KEY_V";
71
+ KeyCode[KeyCode["KEY_W"] = 87] = "KEY_W";
72
+ KeyCode[KeyCode["KEY_X"] = 88] = "KEY_X";
73
+ KeyCode[KeyCode["KEY_Y"] = 89] = "KEY_Y";
74
+ KeyCode[KeyCode["KEY_Z"] = 90] = "KEY_Z";
75
+ KeyCode[KeyCode["Meta"] = 91] = "Meta";
76
+ KeyCode[KeyCode["F1"] = 112] = "F1";
77
+ KeyCode[KeyCode["F2"] = 113] = "F2";
78
+ KeyCode[KeyCode["F3"] = 114] = "F3";
79
+ KeyCode[KeyCode["F4"] = 115] = "F4";
80
+ KeyCode[KeyCode["F5"] = 116] = "F5";
81
+ KeyCode[KeyCode["F6"] = 117] = "F6";
82
+ KeyCode[KeyCode["F7"] = 118] = "F7";
83
+ KeyCode[KeyCode["F8"] = 119] = "F8";
84
+ KeyCode[KeyCode["F9"] = 120] = "F9";
85
+ KeyCode[KeyCode["F10"] = 121] = "F10";
86
+ KeyCode[KeyCode["F11"] = 122] = "F11";
87
+ KeyCode[KeyCode["F12"] = 123] = "F12";
88
+ KeyCode[KeyCode["NumLock"] = 144] = "NumLock";
89
+ KeyCode[KeyCode["ScrollLock"] = 145] = "ScrollLock";
90
+ KeyCode[KeyCode["Equal"] = 187] = "Equal";
91
+ KeyCode[KeyCode["Minus"] = 189] = "Minus";
92
+ KeyCode[KeyCode["Backquote"] = 192] = "Backquote";
93
+ KeyCode[KeyCode["Backslash"] = 220] = "Backslash";
94
+ })(KeyCode || (exports.KeyCode = KeyCode = {}));
95
+
96
+ let KeyMod;
97
+ exports.KeyMod = KeyMod;
98
+
99
+ (function (KeyMod) {
100
+ KeyMod[KeyMod["CtrlCmd"] = 2048] = "CtrlCmd";
101
+ KeyMod[KeyMod["Shift"] = 1024] = "Shift";
102
+ KeyMod[KeyMod["Alt"] = 512] = "Alt";
103
+ KeyMod[KeyMod["WinCtrl"] = 256] = "WinCtrl";
104
+ })(KeyMod || (exports.KeyMod = KeyMod = {}));
@@ -0,0 +1,3 @@
1
+ import { KeyMod } from './codes';
2
+ export declare const getCtrlKeysByPlatform: () => Record<string, 'metaKey' | 'ctrlKey'>;
3
+ export declare const getActiveModMap: (bindings: number[]) => Record<keyof typeof KeyMod, boolean>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.getActiveModMap = exports.getCtrlKeysByPlatform = void 0;
5
+
6
+ var _collections = require("../utils/collections");
7
+
8
+ var _codes = require("./codes");
9
+
10
+ /* istanbul ignore next */
11
+ const getCtrlKeysByPlatform = () => {
12
+ return {
13
+ CtrlCmd: (0, _collections.isMac)() ? 'metaKey' : 'ctrlKey',
14
+ WinCtrl: (0, _collections.isMac)() ? 'ctrlKey' : 'metaKey'
15
+ };
16
+ };
17
+
18
+ exports.getCtrlKeysByPlatform = getCtrlKeysByPlatform;
19
+
20
+ const getActiveModMap = bindings => {
21
+ const modBindings = bindings.filter(item => !!_codes.KeyMod[item]);
22
+ const activeModMap = {
23
+ CtrlCmd: false,
24
+ Shift: false,
25
+ Alt: false,
26
+ WinCtrl: false
27
+ };
28
+ modBindings.forEach(code => {
29
+ const modKey = _codes.KeyMod[code];
30
+ activeModMap[modKey] = true;
31
+ });
32
+ return activeModMap;
33
+ };
34
+
35
+ exports.getActiveModMap = getActiveModMap;
@@ -0,0 +1,5 @@
1
+ import useKeyboard from './use-keyboard';
2
+ import { KeyMod, KeyCode } from './codes';
3
+ export { KeyMod, KeyCode };
4
+ export type { UseKeyboardHandler, KeyboardOptions, KeyboardResult, UseKeyboard } from './use-keyboard';
5
+ export default useKeyboard;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ exports.__esModule = true;
6
+ exports.default = void 0;
7
+
8
+ var _useKeyboard = _interopRequireDefault(require("./use-keyboard"));
9
+
10
+ var _codes = require("./codes");
11
+
12
+ exports.KeyMod = _codes.KeyMod;
13
+ exports.KeyCode = _codes.KeyCode;
14
+ var _default = _useKeyboard.default;
15
+ exports.default = _default;
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ export declare type KeyboardOptions = {
3
+ disableGlobalEvent?: boolean;
4
+ stopPropagation?: boolean;
5
+ preventDefault?: boolean;
6
+ capture?: boolean;
7
+ event?: 'keydown' | 'keypress' | 'keyup';
8
+ };
9
+ export declare type KeyboardResult = {
10
+ bindings: {
11
+ onKeyDown: React.KeyboardEventHandler;
12
+ onKeyDownCapture: React.KeyboardEventHandler;
13
+ onKeyPress: React.KeyboardEventHandler;
14
+ onKeyPressCapture: React.KeyboardEventHandler;
15
+ onKeyUp: React.KeyboardEventHandler;
16
+ onKeyUpCapture: React.KeyboardEventHandler;
17
+ };
18
+ };
19
+ export declare type UseKeyboardHandler = (event: React.KeyboardEvent | KeyboardEvent) => void;
20
+ export declare type UseKeyboard = (handler: UseKeyboardHandler, keyBindings: Array<number> | number, options?: KeyboardOptions) => KeyboardResult;
21
+ declare const useKeyboard: UseKeyboard;
22
+ export default useKeyboard;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+
6
+ var _codes = require("./codes");
7
+
8
+ var _react = require("react");
9
+
10
+ var _helper = require("./helper");
11
+
12
+ const useKeyboard = (handler, keyBindings, options = {}) => {
13
+ const bindings = Array.isArray(keyBindings) ? keyBindings : [keyBindings];
14
+ const {
15
+ disableGlobalEvent = false,
16
+ capture = false,
17
+ stopPropagation = false,
18
+ preventDefault = true,
19
+ event = 'keydown'
20
+ } = options;
21
+ const activeModMap = (0, _helper.getActiveModMap)(bindings);
22
+ const keyCode = bindings.filter(item => !_codes.KeyMod[item])[0];
23
+ const {
24
+ CtrlCmd,
25
+ WinCtrl
26
+ } = (0, _helper.getCtrlKeysByPlatform)();
27
+
28
+ const eventHandler = event => {
29
+ if (activeModMap.Shift && !event.shiftKey) return;
30
+ if (activeModMap.Alt && !event.altKey) return;
31
+ if (activeModMap.CtrlCmd && !event[CtrlCmd]) return;
32
+ if (activeModMap.WinCtrl && !event[WinCtrl]) return;
33
+ if (keyCode && event.keyCode !== keyCode) return;
34
+
35
+ if (stopPropagation) {
36
+ event.stopPropagation();
37
+ }
38
+
39
+ if (preventDefault) {
40
+ event.preventDefault();
41
+ }
42
+
43
+ handler && handler(event);
44
+ };
45
+
46
+ (0, _react.useEffect)(() => {
47
+ if (!disableGlobalEvent) {
48
+ document.addEventListener(event, eventHandler);
49
+ }
50
+
51
+ return () => {
52
+ document.removeEventListener(event, eventHandler);
53
+ };
54
+ }, [disableGlobalEvent]);
55
+
56
+ const elementBindingHandler = (elementEventType, isCapture = false) => {
57
+ if (elementEventType !== event) return () => {};
58
+ if (isCapture !== capture) return () => {};
59
+ return e => eventHandler(e);
60
+ };
61
+
62
+ return {
63
+ bindings: {
64
+ onKeyDown: elementBindingHandler('keydown'),
65
+ onKeyDownCapture: elementBindingHandler('keydown', true),
66
+ onKeyPress: elementBindingHandler('keypress'),
67
+ onKeyPressCapture: elementBindingHandler('keypress', true),
68
+ onKeyUp: elementBindingHandler('keyup'),
69
+ onKeyUpCapture: elementBindingHandler('keyup', true)
70
+ }
71
+ };
72
+ };
73
+
74
+ var _default = useKeyboard;
75
+ exports.default = _default;
76
+ module.exports = exports.default;
@@ -5,3 +5,6 @@ export declare const pick: <Obj extends {
5
5
  [key: string]: any;
6
6
  }, Key extends keyof Obj>(props: Key[], obj: Obj) => Pick<Obj, Key>;
7
7
  export declare const pickChild: (children: ReactNode | undefined, targetChild: React.ElementType) => [ReactNode | undefined, ReactNode | undefined];
8
+ export declare const isChildElement: (parent: Element | null | undefined, child: Element | null | undefined) => boolean;
9
+ export declare const isBrowser: () => boolean;
10
+ export declare const isMac: () => boolean;
@@ -3,7 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  exports.__esModule = true;
6
- exports.pickChild = exports.pick = exports.hasChild = exports.getId = void 0;
6
+ exports.isMac = exports.isBrowser = exports.isChildElement = exports.pickChild = exports.pick = exports.hasChild = exports.getId = void 0;
7
7
 
8
8
  var _react = _interopRequireDefault(require("react"));
9
9
 
@@ -49,4 +49,32 @@ const pickChild = (children, targetChild) => {
49
49
  return [withoutTargetChildren, targetChildren];
50
50
  };
51
51
 
52
- exports.pickChild = pickChild;
52
+ exports.pickChild = pickChild;
53
+
54
+ const isChildElement = (parent, child) => {
55
+ if (!parent || !child) return false; // eslint-disable-next-line no-undef
56
+
57
+ let node = child;
58
+
59
+ while (node) {
60
+ if (node === parent) return true;
61
+ node = node.parentNode;
62
+ }
63
+
64
+ return false;
65
+ };
66
+
67
+ exports.isChildElement = isChildElement;
68
+
69
+ const isBrowser = () => {
70
+ return Boolean(typeof window !== 'undefined' && window.document && window.document.createElement);
71
+ };
72
+
73
+ exports.isBrowser = isBrowser;
74
+
75
+ const isMac = () => {
76
+ if (!isBrowser()) return false;
77
+ return navigator.platform.toUpperCase().indexOf('MAC') >= 0;
78
+ };
79
+
80
+ exports.isMac = isMac;