@dhis2-ui/button 9.11.0 → 9.11.1-beta.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. package/build/cjs/button/__tests__/Button.test.js +1 -8
  2. package/build/cjs/button/button.e2e.stories.js +34 -0
  3. package/build/cjs/button/button.js +8 -47
  4. package/build/cjs/button/{button.stories.js → button.prod.stories.js} +36 -59
  5. package/build/cjs/button/button.styles.js +2 -5
  6. package/build/cjs/button/features/can_be_blurred/index.js +1 -2
  7. package/build/cjs/button/features/can_be_clicked/index.js +1 -2
  8. package/build/cjs/button/features/can_be_focused/index.js +1 -2
  9. package/build/cjs/button/index.js +0 -1
  10. package/build/cjs/button-strip/button-strip.e2e.stories.js +15 -0
  11. package/build/cjs/button-strip/button-strip.js +4 -17
  12. package/build/cjs/button-strip/{button-strip.stories.js → button-strip.prod.stories.js} +13 -21
  13. package/build/cjs/button-strip/features/accepts_children/index.js +0 -1
  14. package/build/cjs/button-strip/index.js +0 -1
  15. package/build/cjs/dropdown-button/__tests__/dropdown-button.test.js +1 -23
  16. package/build/cjs/dropdown-button/dropdown-button.e2e.stories.js +60 -0
  17. package/build/cjs/dropdown-button/dropdown-button.js +11 -48
  18. package/build/cjs/dropdown-button/{dropdown-button.stories.js → dropdown-button.prod.stories.js} +36 -60
  19. package/build/cjs/dropdown-button/features/accepts_children/index.js +0 -1
  20. package/build/cjs/dropdown-button/features/accepts_component/index.js +0 -1
  21. package/build/cjs/dropdown-button/features/accepts_icon/index.js +0 -1
  22. package/build/cjs/dropdown-button/features/accepts_initial_focus/index.js +1 -2
  23. package/build/cjs/dropdown-button/features/button_is_clickable/index.js +1 -2
  24. package/build/cjs/dropdown-button/features/can_be_disabled/index.js +1 -2
  25. package/build/cjs/dropdown-button/features/common/index.js +0 -1
  26. package/build/cjs/dropdown-button/features/opens_a_dropdown/index.js +0 -1
  27. package/build/cjs/dropdown-button/index.js +0 -1
  28. package/build/cjs/index.js +0 -4
  29. package/build/cjs/locales/index.js +3 -9
  30. package/build/cjs/split-button/features/accepts_children/index.js +0 -1
  31. package/build/cjs/split-button/features/accepts_icon/index.js +0 -1
  32. package/build/cjs/split-button/features/accepts_initial_focus/index.js +1 -2
  33. package/build/cjs/split-button/features/arrow_opens_menu/index.js +0 -1
  34. package/build/cjs/split-button/features/button_is_clickable/index.js +1 -2
  35. package/build/cjs/split-button/features/can_be_disabled/index.js +0 -1
  36. package/build/cjs/split-button/features/common/index.js +0 -1
  37. package/build/cjs/split-button/index.js +0 -1
  38. package/build/cjs/split-button/split-button.e2e.stories.js +53 -0
  39. package/build/cjs/split-button/split-button.js +13 -48
  40. package/build/cjs/split-button/{split-button.stories.js → split-button.prod.stories.js} +30 -42
  41. package/build/cjs/split-button/split-button.test.js +5 -22
  42. package/build/es/button/{button.stories.e2e.js → button.e2e.stories.js} +9 -5
  43. package/build/es/button/button.js +5 -33
  44. package/build/es/button/{button.stories.js → button.prod.stories.js} +23 -16
  45. package/build/es/button/button.styles.js +1 -1
  46. package/build/es/button/features/can_be_blurred/index.js +1 -1
  47. package/build/es/button/features/can_be_clicked/index.js +1 -1
  48. package/build/es/button/features/can_be_focused/index.js +1 -1
  49. package/build/es/button-strip/button-strip.e2e.stories.js +7 -0
  50. package/build/es/button-strip/button-strip.js +1 -5
  51. package/build/es/button-strip/{button-strip.stories.js → button-strip.prod.stories.js} +10 -4
  52. package/build/es/dropdown-button/{dropdown-button.stories.e2e.js → dropdown-button.e2e.stories.js} +17 -9
  53. package/build/es/dropdown-button/dropdown-button.js +8 -35
  54. package/build/es/dropdown-button/{dropdown-button.stories.js → dropdown-button.prod.stories.js} +21 -20
  55. package/build/es/dropdown-button/features/accepts_initial_focus/index.js +1 -1
  56. package/build/es/dropdown-button/features/button_is_clickable/index.js +1 -1
  57. package/build/es/dropdown-button/features/can_be_disabled/index.js +1 -1
  58. package/build/es/split-button/features/accepts_initial_focus/index.js +1 -1
  59. package/build/es/split-button/features/button_is_clickable/index.js +1 -1
  60. package/build/es/split-button/{split-button.stories.e2e.js → split-button.e2e.stories.js} +15 -8
  61. package/build/es/split-button/split-button.js +10 -32
  62. package/build/es/split-button/{split-button.stories.js → split-button.prod.stories.js} +19 -13
  63. package/build/es/split-button/split-button.test.js +4 -2
  64. package/package.json +9 -9
  65. package/build/cjs/button/button.stories.e2e.js +0 -27
  66. package/build/cjs/button-strip/button-strip.stories.e2e.js +0 -13
  67. package/build/cjs/dropdown-button/dropdown-button.stories.e2e.js +0 -45
  68. package/build/cjs/split-button/split-button.stories.e2e.js +0 -40
  69. package/build/es/button-strip/button-strip.stories.e2e.js +0 -5
@@ -1,38 +1,46 @@
1
- import { storiesOf } from '@storybook/react';
2
1
  import React from 'react';
3
2
  import { DropdownButton } from './index.js';
4
3
  window.onClick = window.Cypress && window.Cypress.cy.stub();
5
- storiesOf('DropdownButton', module).add('Default', () => /*#__PURE__*/React.createElement(DropdownButton, {
4
+ export default {
5
+ title: 'DropdownButton'
6
+ };
7
+ export const Default = () => /*#__PURE__*/React.createElement(DropdownButton, {
6
8
  name: "Button",
7
9
  value: "default",
8
10
  component: /*#__PURE__*/React.createElement("div", null, "Content")
9
- }, "Button")).add('With onClick', () => /*#__PURE__*/React.createElement(DropdownButton, {
11
+ }, "Button");
12
+ export const WithOnClick = () => /*#__PURE__*/React.createElement(DropdownButton, {
10
13
  name: "Button",
11
14
  value: "default",
12
15
  onClick: window.onClick,
13
16
  component: /*#__PURE__*/React.createElement("div", null, "Content")
14
- }, "Button")).add('With children', () => /*#__PURE__*/React.createElement(DropdownButton, {
17
+ }, "Button");
18
+ export const WithChildren = () => /*#__PURE__*/React.createElement(DropdownButton, {
15
19
  name: "Button",
16
20
  value: "default",
17
21
  component: /*#__PURE__*/React.createElement("div", null, "Component")
18
- }, "I am a child")).add('With component', () => /*#__PURE__*/React.createElement(DropdownButton, {
22
+ }, "I am a child");
23
+ export const WithComponent = () => /*#__PURE__*/React.createElement(DropdownButton, {
19
24
  name: "Button",
20
25
  value: "default",
21
26
  component: /*#__PURE__*/React.createElement("div", null, "I am a component")
22
- })).add('With icon', () => /*#__PURE__*/React.createElement(DropdownButton, {
27
+ });
28
+ export const WithIcon = () => /*#__PURE__*/React.createElement(DropdownButton, {
23
29
  name: "Button",
24
30
  value: "default",
25
31
  component: /*#__PURE__*/React.createElement("div", null, "I am a component"),
26
32
  icon: 'Icon'
27
- })).add('With initialFocus', () => /*#__PURE__*/React.createElement(DropdownButton, {
33
+ });
34
+ export const WithInitialFocus = () => /*#__PURE__*/React.createElement(DropdownButton, {
28
35
  name: "Button",
29
36
  value: "default",
30
37
  component: /*#__PURE__*/React.createElement("div", null, "Content"),
31
38
  initialFocus: true
32
- })).add('Disabled with onClick', () => /*#__PURE__*/React.createElement(DropdownButton, {
39
+ });
40
+ export const DisabledWithOnClick = () => /*#__PURE__*/React.createElement(DropdownButton, {
33
41
  name: "Button",
34
42
  value: "default",
35
43
  component: /*#__PURE__*/React.createElement("div", null, "Content"),
36
44
  onClick: window.onClick,
37
45
  disabled: true
38
- }));
46
+ });
@@ -1,15 +1,14 @@
1
1
  import _JSXStyle from "styled-jsx/style";
2
-
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
-
5
- import { Layer } from '@dhis2-ui/layer';
6
- import { Popper } from '@dhis2-ui/popper';
2
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
5
  import { requiredIf } from '@dhis2/prop-types';
8
6
  import { spacers, sharedPropTypes } from '@dhis2/ui-constants';
7
+ import { Layer } from '@dhis2-ui/layer';
8
+ import { Popper } from '@dhis2-ui/popper';
9
9
  import PropTypes from 'prop-types';
10
10
  import React, { Component } from 'react';
11
- import { Button } from '../index.js';
12
-
11
+ import { Button } from '../button/index.js';
13
12
  function ArrowDown(_ref) {
14
13
  let {
15
14
  className
@@ -25,11 +24,9 @@ function ArrowDown(_ref) {
25
24
  id: "2347926856"
26
25
  }, ["svg.jsx-2347926856{fill:inherit;height:12px;width:12px;vertical-align:middle;pointer-events:none;}"]));
27
26
  }
28
-
29
27
  ArrowDown.propTypes = {
30
28
  className: PropTypes.string
31
29
  };
32
-
33
30
  function ArrowUp(_ref2) {
34
31
  let {
35
32
  className
@@ -46,27 +43,22 @@ function ArrowUp(_ref2) {
46
43
  id: "2347926856"
47
44
  }, ["svg.jsx-2347926856{fill:inherit;height:12px;width:12px;vertical-align:middle;pointer-events:none;}"]));
48
45
  }
49
-
50
46
  ArrowUp.propTypes = {
51
47
  className: PropTypes.string
52
48
  };
53
49
  const arrow = {
54
50
  styles: /*#__PURE__*/React.createElement(_JSXStyle, {
55
51
  id: "1035250400"
56
- }, [".jsx-1035250400{margin-inline-start:".concat(spacers.dp12, ";}")]),
52
+ }, [`.jsx-1035250400{margin-inline-start:${spacers.dp12};}`]),
57
53
  className: "jsx-1035250400"
58
54
  };
59
-
60
55
  class DropdownButton extends Component {
61
56
  constructor() {
62
57
  super(...arguments);
63
-
64
58
  _defineProperty(this, "state", {
65
59
  open: false
66
60
  });
67
-
68
61
  _defineProperty(this, "anchorRef", /*#__PURE__*/React.createRef());
69
-
70
62
  _defineProperty(this, "handleKeyDown", event => {
71
63
  if (event.key === 'Escape' && this.state.open) {
72
64
  event.preventDefault();
@@ -76,13 +68,11 @@ class DropdownButton extends Component {
76
68
  });
77
69
  }
78
70
  });
79
-
80
71
  _defineProperty(this, "onClickHandler", (_ref3, event) => {
81
72
  let {
82
73
  name,
83
74
  value
84
75
  } = _ref3;
85
-
86
76
  const handleClick = open => {
87
77
  if (this.props.onClick) {
88
78
  this.props.onClick({
@@ -92,7 +82,6 @@ class DropdownButton extends Component {
92
82
  }, event);
93
83
  }
94
84
  };
95
-
96
85
  if (typeof this.props.open === 'boolean') {
97
86
  handleClick(!this.props.open);
98
87
  } else {
@@ -104,15 +93,12 @@ class DropdownButton extends Component {
104
93
  }
105
94
  });
106
95
  }
107
-
108
96
  componentDidMount() {
109
97
  document.addEventListener('keydown', this.handleKeyDown);
110
98
  }
111
-
112
99
  componentWillUnmount() {
113
100
  document.removeEventListener('keydown', this.handleKeyDown);
114
101
  }
115
-
116
102
  render() {
117
103
  const {
118
104
  component,
@@ -160,16 +146,14 @@ class DropdownButton extends Component {
160
146
  onBackdropClick: this.onClickHandler,
161
147
  transparent: true
162
148
  }, /*#__PURE__*/React.createElement(Popper, {
163
- dataTest: "".concat(dataTest, "-popper"),
149
+ dataTest: `${dataTest}-popper`,
164
150
  placement: "bottom-start",
165
151
  reference: this.anchorRef
166
152
  }, component)), arrow.styles, /*#__PURE__*/React.createElement(_JSXStyle, {
167
153
  id: "3163060161"
168
154
  }, ["div.jsx-3163060161{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;position:relative;color:inherit;white-space:nowrap;}"]));
169
155
  }
170
-
171
156
  }
172
-
173
157
  DropdownButton.defaultProps = {
174
158
  dataTest: 'dhis2-uicore-dropdownbutton'
175
159
  };
@@ -177,48 +161,37 @@ DropdownButton.propTypes = {
177
161
  /** Children to render inside the buton */
178
162
  children: PropTypes.node,
179
163
  className: PropTypes.string,
180
-
181
164
  /** Component to show/hide when button is clicked */
182
165
  component: PropTypes.element,
183
166
  dataTest: PropTypes.string,
184
-
185
167
  /**
186
168
  * Applies 'destructive' button appearance, implying a dangerous action.
187
169
  */
188
170
  destructive: PropTypes.bool,
189
-
190
171
  /** Make the button non-interactive */
191
172
  disabled: PropTypes.bool,
192
173
  icon: PropTypes.element,
193
-
194
174
  /** Grants button initial focus on the page */
195
175
  initialFocus: PropTypes.bool,
196
-
197
176
  /** Button size. Mutually exclusive with `small` prop */
198
177
  large: sharedPropTypes.sizePropType,
199
178
  name: PropTypes.string,
200
-
201
179
  /** Controls popper visibility. When implementing this prop the component becomes a controlled component */
202
180
  open: PropTypes.bool,
203
-
204
181
  /**
205
182
  * Applies 'primary' button appearance, implying the most important action.
206
183
  */
207
184
  primary: PropTypes.bool,
208
-
209
185
  /**
210
186
  * Applies 'secondary' button appearance.
211
187
  */
212
188
  secondary: PropTypes.bool,
213
-
214
189
  /** Button size. Mutually exclusive with `large` prop */
215
190
  small: sharedPropTypes.sizePropType,
216
191
  tabIndex: PropTypes.string,
217
-
218
192
  /** Type of button. Can take advantage of different default behavior */
219
193
  type: PropTypes.oneOf(['submit', 'reset', 'button']),
220
194
  value: PropTypes.string,
221
-
222
195
  /**
223
196
  * Callback triggered on click.
224
197
  * Called with signature `({ name: string, value: string, open: bool }, event)`
@@ -1,10 +1,15 @@
1
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
-
3
- import { FlyoutMenu, MenuItem } from '@dhis2-ui/menu';
1
+ function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
4
2
  import { sharedPropTypes } from '@dhis2/ui-constants';
3
+ import { FlyoutMenu, MenuItem } from '@dhis2-ui/menu';
5
4
  import React, { useState } from 'react';
6
5
  import { DropdownButton } from './index.js';
7
- const description = "\nPresents several actions to a user in a small space. Can replace single, individual buttons. Should only be used for actions that are related to one another. Ensure the button has a useful level that communicates that actions are contained within. Dropdown buttons do not have an explicit action, only expanding the list of contained actions.\n\n```js\nimport { DropdownButton } from '@dhis2/ui'\n```\n";
6
+ const description = `
7
+ Presents several actions to a user in a small space. Can replace single, individual buttons. Should only be used for actions that are related to one another. Ensure the button has a useful level that communicates that actions are contained within. Dropdown buttons do not have an explicit action, only expanding the list of contained actions.
8
+
9
+ \`\`\`js
10
+ import { DropdownButton } from '@dhis2/ui'
11
+ \`\`\`
12
+ `;
8
13
  const Simple = /*#__PURE__*/React.createElement("span", null, "Simplest thing");
9
14
  const {
10
15
  sizeArgType,
@@ -21,15 +26,20 @@ export default {
21
26
  }
22
27
  },
23
28
  argTypes: {
24
- primary: { ...buttonVariantArgType
29
+ primary: {
30
+ ...buttonVariantArgType
25
31
  },
26
- secondary: { ...buttonVariantArgType
32
+ secondary: {
33
+ ...buttonVariantArgType
27
34
  },
28
- destructive: { ...buttonVariantArgType
35
+ destructive: {
36
+ ...buttonVariantArgType
29
37
  },
30
- small: { ...sizeArgType
38
+ small: {
39
+ ...sizeArgType
31
40
  },
32
- large: { ...sizeArgType
41
+ large: {
42
+ ...sizeArgType
33
43
  }
34
44
  },
35
45
  // Default args for all stories (can be overridden)
@@ -40,9 +50,7 @@ export default {
40
50
  children: 'Label me!'
41
51
  }
42
52
  };
43
-
44
53
  const Template = args => /*#__PURE__*/React.createElement(DropdownButton, args);
45
-
46
54
  export const Default = Template.bind({});
47
55
  export const WithClick = Template.bind({});
48
56
  WithClick.args = {
@@ -86,9 +94,9 @@ WithMenu.args = {
86
94
  }), /*#__PURE__*/React.createElement(MenuItem, {
87
95
  label: "Item 3"
88
96
  }))
89
- }; // FlyoutMenu needs iframe
97
+ };
98
+ // FlyoutMenu needs iframe
90
99
  // But docs page down too much with iframe, so disabled
91
-
92
100
  WithMenu.parameters = {
93
101
  docs: {
94
102
  disable: true
@@ -103,29 +111,23 @@ InitialFocus.args = {
103
111
  * a control is changed, therefore it is omitted from the docs page (but
104
112
  * not the normal 'canvas' story viewer)
105
113
  */
106
-
107
114
  InitialFocus.parameters = {
108
115
  docs: {
109
116
  disable: true
110
117
  }
111
118
  };
112
-
113
119
  const OpenTemplate = args => {
114
120
  return /*#__PURE__*/React.createElement(DropdownButton, args);
115
121
  };
116
-
117
122
  export const Open = OpenTemplate.bind({});
118
123
  Open.args = {
119
124
  open: true,
120
125
  component: Simple,
121
126
  onClick: () => {}
122
127
  };
123
-
124
128
  const ManualControlTemplate = args => {
125
129
  const [isOpen, setIsOpen] = useState(true);
126
-
127
130
  const handleOpen = () => setIsOpen(false);
128
-
129
131
  const Menu = /*#__PURE__*/React.createElement("ul", null, /*#__PURE__*/React.createElement("li", null, "First option does nothing"), /*#__PURE__*/React.createElement("li", {
130
132
  onClick: handleOpen
131
133
  }, "Close the dropdown"));
@@ -135,7 +137,6 @@ const ManualControlTemplate = args => {
135
137
  component: Menu
136
138
  }));
137
139
  };
138
-
139
140
  export const ManualControl = ManualControlTemplate.bind({});
140
141
  ManualControl.args = {};
141
142
  export const RTL = args => /*#__PURE__*/React.createElement("div", {
@@ -1,6 +1,6 @@
1
1
  import { Given, Then } from '@badeball/cypress-cucumber-preprocessor';
2
2
  Given('a DropdownButton with initialFocus is rendered', () => {
3
- cy.visitStory('DropdownButton', 'With initialFocus');
3
+ cy.visitStory('DropdownButton', 'With initial focus');
4
4
  });
5
5
  Then('the DropdownButton is focused', () => {
6
6
  cy.focused().parent('[data-test="dhis2-uicore-dropdownbutton"]').should('exist');
@@ -1,6 +1,6 @@
1
1
  import { Given, Then } from '@badeball/cypress-cucumber-preprocessor';
2
2
  Given('a DropdownButton with onClick handler is rendered', () => {
3
- cy.visitStory('DropdownButton', 'With onClick');
3
+ cy.visitStory('DropdownButton', 'With on click');
4
4
  });
5
5
  Then('the onClick handler is called', () => {
6
6
  cy.window().should(win => {
@@ -1,6 +1,6 @@
1
1
  import { Given, Then } from '@badeball/cypress-cucumber-preprocessor';
2
2
  Given('a disabled DropdownButton with onClick handler is rendered', () => {
3
- cy.visitStory('DropdownButton', 'Disabled with onClick');
3
+ cy.visitStory('DropdownButton', 'Disabled with on click');
4
4
  });
5
5
  Then('the onClick handler is not called', () => {
6
6
  cy.window().should(win => {
@@ -1,6 +1,6 @@
1
1
  import { Given, Then } from '@badeball/cypress-cucumber-preprocessor';
2
2
  Given('a SplitButton with initialFocus is rendered', () => {
3
- cy.visitStory('SplitButton', 'With initialFocus');
3
+ cy.visitStory('SplitButton', 'With initial focus');
4
4
  });
5
5
  Then('the SplitButton button is focused', () => {
6
6
  cy.focused().should('have.attr', 'data-test', 'dhis2-uicore-splitbutton-button');
@@ -1,6 +1,6 @@
1
1
  import { Given, Then } from '@badeball/cypress-cucumber-preprocessor';
2
2
  Given('a SplitButton with onClick hander is rendered', () => {
3
- cy.visitStory('SplitButton', 'With onClick');
3
+ cy.visitStory('SplitButton', 'With on click');
4
4
  });
5
5
  Then('the onClick handler is called', () => {
6
6
  cy.window().its('onClick').should('be.calledWith', {
@@ -1,33 +1,40 @@
1
- import { storiesOf } from '@storybook/react';
2
1
  import React from 'react';
3
2
  import { SplitButton } from './split-button.js';
4
3
  window.onClick = window.Cypress && window.Cypress.cy.stub();
5
- storiesOf('SplitButton', module).add('Default', () => /*#__PURE__*/React.createElement(SplitButton, {
4
+ export default {
5
+ title: 'SplitButton'
6
+ };
7
+ export const Default = () => /*#__PURE__*/React.createElement(SplitButton, {
6
8
  name: "Button",
7
9
  value: "default",
8
10
  component: /*#__PURE__*/React.createElement("div", null, "Component")
9
- }, "Label me!")).add('With onClick', () => /*#__PURE__*/React.createElement(SplitButton, {
11
+ }, "Label me!");
12
+ export const WithOnClick = () => /*#__PURE__*/React.createElement(SplitButton, {
10
13
  name: "Button",
11
14
  value: "default",
12
15
  component: /*#__PURE__*/React.createElement("div", null, "Component"),
13
16
  onClick: window.onClick
14
- }, "Label me!")).add('With children', () => /*#__PURE__*/React.createElement(SplitButton, {
17
+ }, "Label me!");
18
+ export const WithChildren = () => /*#__PURE__*/React.createElement(SplitButton, {
15
19
  name: "Button",
16
20
  value: "default",
17
21
  component: /*#__PURE__*/React.createElement("div", null, "Component")
18
- }, "I am a child")).add('With icon', () => /*#__PURE__*/React.createElement(SplitButton, {
22
+ }, "I am a child");
23
+ export const WithIcon = () => /*#__PURE__*/React.createElement(SplitButton, {
19
24
  name: "Button",
20
25
  value: "default",
21
26
  component: /*#__PURE__*/React.createElement("div", null, "Component"),
22
27
  icon: /*#__PURE__*/React.createElement("div", null, "Icon")
23
- }, "Children")).add('With initialFocus', () => /*#__PURE__*/React.createElement(SplitButton, {
28
+ }, "Children");
29
+ export const WithInitialFocus = () => /*#__PURE__*/React.createElement(SplitButton, {
24
30
  name: "Button",
25
31
  value: "default",
26
32
  component: /*#__PURE__*/React.createElement("div", null, "Component"),
27
33
  initialFocus: true
28
- }, "Children")).add('With disabled', () => /*#__PURE__*/React.createElement(SplitButton, {
34
+ }, "Children");
35
+ export const WithDisabled = () => /*#__PURE__*/React.createElement(SplitButton, {
29
36
  name: "Button",
30
37
  value: "default",
31
38
  component: /*#__PURE__*/React.createElement("div", null, "Component"),
32
39
  disabled: true
33
- }, "Children"));
40
+ }, "Children");
@@ -1,33 +1,29 @@
1
1
  import _JSXStyle from "styled-jsx/style";
2
-
3
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
-
5
- import { Layer } from '@dhis2-ui/layer';
6
- import { Popper } from '@dhis2-ui/popper';
2
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
3
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
4
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
5
  import { spacers, sharedPropTypes } from '@dhis2/ui-constants';
8
6
  import { IconChevronUp16, IconChevronDown16 } from '@dhis2/ui-icons';
7
+ import { Layer } from '@dhis2-ui/layer';
8
+ import { Popper } from '@dhis2-ui/popper';
9
9
  import cx from 'classnames';
10
10
  import PropTypes from 'prop-types';
11
11
  import React, { Component } from 'react';
12
- import { Button } from '../index.js';
12
+ import { Button } from '../button/index.js';
13
13
  import i18n from '../locales/index.js';
14
14
  const rightButton = {
15
15
  styles: /*#__PURE__*/React.createElement(_JSXStyle, {
16
16
  id: "2502148942"
17
- }, ["button.jsx-2502148942{padding:0 ".concat(spacers.dp12, ";}")]),
17
+ }, [`button.jsx-2502148942{padding:0 ${spacers.dp12};}`]),
18
18
  className: "jsx-2502148942"
19
19
  };
20
-
21
20
  class SplitButton extends Component {
22
21
  constructor() {
23
22
  super(...arguments);
24
-
25
23
  _defineProperty(this, "state", {
26
24
  open: false
27
25
  });
28
-
29
26
  _defineProperty(this, "anchorRef", /*#__PURE__*/React.createRef());
30
-
31
27
  _defineProperty(this, "handleKeyDown", event => {
32
28
  if (event.key === 'Escape' && this.state.open) {
33
29
  event.preventDefault();
@@ -38,7 +34,6 @@ class SplitButton extends Component {
38
34
  this.anchorRef.current && this.anchorRef.current.focus();
39
35
  }
40
36
  });
41
-
42
37
  _defineProperty(this, "onClick", (payload, event) => {
43
38
  if (this.props.onClick) {
44
39
  this.props.onClick({
@@ -48,22 +43,18 @@ class SplitButton extends Component {
48
43
  }, event);
49
44
  }
50
45
  });
51
-
52
46
  _defineProperty(this, "onToggle", () => {
53
47
  this.setState(prevState => ({
54
48
  open: !prevState.open
55
49
  }));
56
50
  });
57
51
  }
58
-
59
52
  componentDidMount() {
60
53
  document.addEventListener('keydown', this.handleKeyDown);
61
54
  }
62
-
63
55
  componentWillUnmount() {
64
56
  document.removeEventListener('keydown', this.handleKeyDown);
65
57
  }
66
-
67
58
  render() {
68
59
  const {
69
60
  open
@@ -106,7 +97,7 @@ class SplitButton extends Component {
106
97
  tabIndex: tabIndex,
107
98
  className: cx(className),
108
99
  initialFocus: initialFocus,
109
- dataTest: "".concat(dataTest, "-button")
100
+ dataTest: `${dataTest}-button`
110
101
  }, children), /*#__PURE__*/React.createElement(Button, {
111
102
  name: name,
112
103
  value: value,
@@ -120,69 +111,56 @@ class SplitButton extends Component {
120
111
  type: type,
121
112
  tabIndex: tabIndex,
122
113
  className: cx(className, rightButton.className),
123
- dataTest: "".concat(dataTest, "-toggle"),
114
+ dataTest: `${dataTest}-toggle`,
124
115
  title: i18n.t('Toggle dropdown'),
125
116
  "aria-label": i18n.t('Toggle dropdown')
126
117
  }, arrow), open && /*#__PURE__*/React.createElement(Layer, {
127
118
  onBackdropClick: this.onToggle,
128
119
  transparent: true
129
120
  }, /*#__PURE__*/React.createElement(Popper, {
130
- dataTest: "".concat(dataTest, "-menu"),
121
+ dataTest: `${dataTest}-menu`,
131
122
  placement: "bottom-end",
132
123
  reference: this.anchorRef
133
124
  }, component)), rightButton.styles, /*#__PURE__*/React.createElement(_JSXStyle, {
134
125
  id: "2116647326"
135
126
  }, ["div.jsx-2116647326{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;color:inherit;white-space:nowrap;position:relative;z-index:0;}", "div.jsx-2116647326>button:first-child{border-start-end-radius:0;border-end-end-radius:0;border-inline-end:0;}", "div.jsx-2116647326>button:last-child{border-start-start-radius:0;border-end-start-radius:0;}"]));
136
127
  }
137
-
138
128
  }
139
-
140
129
  SplitButton.defaultProps = {
141
130
  dataTest: 'dhis2-uicore-splitbutton'
142
131
  };
143
132
  SplitButton.propTypes = {
144
133
  children: PropTypes.string,
145
134
  className: PropTypes.string,
146
-
147
135
  /** Component to render when the dropdown is opened */
148
136
  component: PropTypes.element,
149
137
  dataTest: PropTypes.string,
150
-
151
138
  /**
152
139
  * Applies 'destructive' button appearance, implying a dangerous action.
153
140
  */
154
141
  destructive: PropTypes.bool,
155
-
156
142
  /** Disables the button and makes it uninteractive */
157
143
  disabled: PropTypes.bool,
158
-
159
144
  /** An icon to add inside the button */
160
145
  icon: PropTypes.element,
161
-
162
146
  /** Grants the button the initial focus */
163
147
  initialFocus: PropTypes.bool,
164
-
165
148
  /** Changes button size. Mutually exclusive with `small` prop */
166
149
  large: sharedPropTypes.sizePropType,
167
150
  name: PropTypes.string,
168
-
169
151
  /**
170
152
  * Applies 'primary' button appearance, implying the most important action.
171
153
  */
172
154
  primary: PropTypes.bool,
173
-
174
155
  /**
175
156
  * Applies 'secondary' button appearance.
176
157
  */
177
158
  secondary: PropTypes.bool,
178
-
179
159
  /** Changes button size. Mutually exclusive with `large` prop */
180
160
  small: sharedPropTypes.sizePropType,
181
161
  tabIndex: PropTypes.string,
182
-
183
162
  /** Type of button. Applied to html `button` element */
184
163
  type: PropTypes.oneOf(['submit', 'reset', 'button']),
185
-
186
164
  /** Value associated with the button. Passed in object to onClick handler */
187
165
  value: PropTypes.string,
188
166
  onClick: PropTypes.func
@@ -1,17 +1,20 @@
1
1
  import { sharedPropTypes } from '@dhis2/ui-constants';
2
2
  import React from 'react';
3
3
  import { SplitButton } from './split-button.js';
4
- const description = "\nSimilar to the dropdown button, but can be triggered independently of opening the contained action list. The main action may be 'Save' and the contained actions may be \"Save and add another\" and \"Save and open\".\n\n```js\nimport { SplitButton } from '@dhis2/ui'\n```\n";
4
+ const description = `
5
+ Similar to the dropdown button, but can be triggered independently of opening the contained action list. The main action may be 'Save' and the contained actions may be "Save and add another" and "Save and open".
5
6
 
7
+ \`\`\`js
8
+ import { SplitButton } from '@dhis2/ui'
9
+ \`\`\`
10
+ `;
6
11
  window.onClick = (payload, event) => {
7
12
  console.log('onClick payload', payload);
8
13
  console.log('onClick event', event);
9
14
  };
10
-
11
15
  const onClick = function () {
12
16
  return window.onClick(...arguments);
13
17
  };
14
-
15
18
  const DropdownComponent = /*#__PURE__*/React.createElement("span", null, "Dropdown component");
16
19
  export default {
17
20
  title: 'Split Button',
@@ -31,21 +34,24 @@ export default {
31
34
  children: 'Label me!'
32
35
  },
33
36
  argTypes: {
34
- small: { ...sharedPropTypes.sizeArgType
37
+ small: {
38
+ ...sharedPropTypes.sizeArgType
35
39
  },
36
- large: { ...sharedPropTypes.sizeArgType
40
+ large: {
41
+ ...sharedPropTypes.sizeArgType
37
42
  },
38
- primary: { ...sharedPropTypes.buttonVariantArgType
43
+ primary: {
44
+ ...sharedPropTypes.buttonVariantArgType
39
45
  },
40
- secondary: { ...sharedPropTypes.buttonVariantArgType
46
+ secondary: {
47
+ ...sharedPropTypes.buttonVariantArgType
41
48
  },
42
- destructive: { ...sharedPropTypes.buttonVariantArgType
49
+ destructive: {
50
+ ...sharedPropTypes.buttonVariantArgType
43
51
  }
44
52
  }
45
53
  };
46
-
47
54
  const Template = args => /*#__PURE__*/React.createElement(SplitButton, args);
48
-
49
55
  export const Default = Template.bind({});
50
56
  export const Primary = Template.bind({});
51
57
  Primary.args = {
@@ -54,7 +60,7 @@ Primary.args = {
54
60
  Primary.parameters = {
55
61
  docs: {
56
62
  description: {
57
- story: "_**Note**: The dropdown components in the following examples do not appear in the right place on this page. View the following examples in the 'Canvas' tab for the correct placement._"
63
+ story: `_**Note**: The dropdown components in the following examples do not appear in the right place on this page. View the following examples in the 'Canvas' tab for the correct placement._`
58
64
  }
59
65
  }
60
66
  };
@@ -81,8 +87,8 @@ Large.args = {
81
87
  export const InitialFocus = Template.bind({});
82
88
  InitialFocus.args = {
83
89
  initialFocus: true
84
- }; // Disable this on docs page because grabbing focus repeatedly is annoying
85
-
90
+ };
91
+ // Disable this on docs page because grabbing focus repeatedly is annoying
86
92
  InitialFocus.parameters = {
87
93
  docs: {
88
94
  disable: true