@deephaven/components 0.19.2-beta.0 → 0.19.2-beta.5

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 (74) hide show
  1. package/dist/AutoCompleteInput.d.ts.map +1 -1
  2. package/dist/AutoCompleteInput.js +7 -11
  3. package/dist/AutoCompleteInput.js.map +1 -1
  4. package/dist/BasicModal.d.ts.map +1 -1
  5. package/dist/BasicModal.js +5 -7
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/Button.d.ts +9 -3
  8. package/dist/Button.d.ts.map +1 -1
  9. package/dist/Button.js +18 -10
  10. package/dist/Button.js.map +1 -1
  11. package/dist/CardFlip.js +1 -1
  12. package/dist/CardFlip.js.map +1 -1
  13. package/dist/Collapse.js +2 -2
  14. package/dist/Collapse.js.map +1 -1
  15. package/dist/ComboBox.d.ts.map +1 -1
  16. package/dist/ComboBox.js +11 -15
  17. package/dist/ComboBox.js.map +1 -1
  18. package/dist/CustomTimeSelect.js +2 -2
  19. package/dist/CustomTimeSelect.js.map +1 -1
  20. package/dist/DraggableItemList.d.ts +1 -1
  21. package/dist/DraggableItemList.d.ts.map +1 -1
  22. package/dist/DraggableItemList.js +10 -7
  23. package/dist/DraggableItemList.js.map +1 -1
  24. package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
  25. package/dist/HierarchicalCheckboxMenu.js +9 -6
  26. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  27. package/dist/ItemList.js +19 -17
  28. package/dist/ItemList.js.map +1 -1
  29. package/dist/LoadingOverlay.js +1 -1
  30. package/dist/LoadingOverlay.js.map +1 -1
  31. package/dist/MaskedInput.js +3 -1
  32. package/dist/MaskedInput.js.map +1 -1
  33. package/dist/RadioGroup.js +12 -8
  34. package/dist/RadioGroup.js.map +1 -1
  35. package/dist/SocketedButton.d.ts.map +1 -1
  36. package/dist/SocketedButton.js +1 -1
  37. package/dist/SocketedButton.js.map +1 -1
  38. package/dist/TimeSlider.d.ts.map +1 -1
  39. package/dist/TimeSlider.js +2 -2
  40. package/dist/TimeSlider.js.map +1 -1
  41. package/dist/ValidateLabelInput.d.ts.map +1 -1
  42. package/dist/ValidateLabelInput.js +2 -2
  43. package/dist/ValidateLabelInput.js.map +1 -1
  44. package/dist/context-actions/ContextActionUtils.d.ts +3 -3
  45. package/dist/context-actions/ContextActionUtils.js +14 -8
  46. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  47. package/dist/context-actions/ContextActions.d.ts.map +1 -1
  48. package/dist/context-actions/ContextActions.js +9 -16
  49. package/dist/context-actions/ContextActions.js.map +1 -1
  50. package/dist/context-actions/ContextMenu.d.ts.map +1 -1
  51. package/dist/context-actions/ContextMenu.js +11 -13
  52. package/dist/context-actions/ContextMenu.js.map +1 -1
  53. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  54. package/dist/context-actions/ContextMenuItem.js +8 -6
  55. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  56. package/dist/context-actions/GlobalContextAction.d.ts.map +1 -1
  57. package/dist/context-actions/GlobalContextAction.js +7 -12
  58. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  59. package/dist/context-actions/GlobalContextActions.js +1 -1
  60. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  61. package/dist/menu-actions/DropdownMenu.js +1 -1
  62. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  63. package/dist/menu-actions/Menu.d.ts.map +1 -1
  64. package/dist/menu-actions/Menu.js +3 -3
  65. package/dist/menu-actions/Menu.js.map +1 -1
  66. package/dist/navigation/MenuItem.js +2 -2
  67. package/dist/navigation/MenuItem.js.map +1 -1
  68. package/dist/navigation/Stack.d.ts.map +1 -1
  69. package/dist/navigation/Stack.js +2 -2
  70. package/dist/navigation/Stack.js.map +1 -1
  71. package/dist/popper/Tooltip.js +1 -1
  72. package/dist/popper/Tooltip.js.map +1 -1
  73. package/package.json +8 -8
  74. package/scss/BaseStyleSheet.scss +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"AutoCompleteInput.d.ts","sourceRoot":"","sources":["../src/AutoCompleteInput.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AutoCompleteInput.d.ts","sourceRoot":"","sources":["../src/AutoCompleteInput.tsx"],"names":[],"mappings":"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"}
@@ -205,7 +205,7 @@ class AutoCompleteInput extends Component {
205
205
  event.stopPropagation();
206
206
  event.preventDefault();
207
207
 
208
- if (option) {
208
+ if (option != null) {
209
209
  this.setState({
210
210
  title: option.title,
211
211
  invalid: false
@@ -344,13 +344,11 @@ class AutoCompleteInput extends Component {
344
344
  }
345
345
 
346
346
  handleInputBlur(event) {
347
- var _this$popper$current2;
348
-
349
347
  var {
350
348
  menuIsOpen
351
349
  } = this.state;
352
350
 
353
- if (menuIsOpen && event.relatedTarget instanceof Element && (_this$popper$current2 = this.popper.current) !== null && _this$popper$current2 !== void 0 && _this$popper$current2.element.contains(event.relatedTarget)) {
351
+ if (menuIsOpen && event.relatedTarget instanceof Element && this.popper.current !== null && this.popper.current.element.contains(event.relatedTarget)) {
354
352
  return;
355
353
  }
356
354
 
@@ -358,10 +356,8 @@ class AutoCompleteInput extends Component {
358
356
  }
359
357
 
360
358
  handleMenuBlur(event) {
361
- var _this$popper$current3;
362
-
363
359
  // if blur event is caused by focusing on the input or focus on options don't close menu
364
- if (event.relatedTarget === this.input.current || event.relatedTarget instanceof Element && (_this$popper$current3 = this.popper.current) !== null && _this$popper$current3 !== void 0 && _this$popper$current3.element.contains(event.relatedTarget)) {
360
+ if (event.relatedTarget === this.input.current || event.relatedTarget instanceof Element && this.popper.current !== null && this.popper.current.element.contains(event.relatedTarget)) {
365
361
  return;
366
362
  }
367
363
 
@@ -398,14 +394,14 @@ class AutoCompleteInput extends Component {
398
394
  }); // https://github.com/reactjs/react-transition-group/issues/382
399
395
 
400
396
  window.requestAnimationFrame(() => {
401
- var _this$popper$current4;
397
+ var _this$popper$current2;
402
398
 
403
- (_this$popper$current4 = this.popper.current) === null || _this$popper$current4 === void 0 ? void 0 : _this$popper$current4.show();
399
+ (_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.show();
404
400
  });
405
401
  }
406
402
 
407
403
  closeMenu() {
408
- var _this$popper$current5;
404
+ var _this$popper$current3;
409
405
 
410
406
  var focusInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
411
407
  this.setState({
@@ -419,7 +415,7 @@ class AutoCompleteInput extends Component {
419
415
  (_this$input$current4 = this.input.current) === null || _this$input$current4 === void 0 ? void 0 : _this$input$current4.focus();
420
416
  }
421
417
 
422
- (_this$popper$current5 = this.popper.current) === null || _this$popper$current5 === void 0 ? void 0 : _this$popper$current5.hide();
418
+ (_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.hide();
423
419
  }
424
420
 
425
421
  scrollOptionIntoView(index) {
@@ -1 +1 @@
1
- {"version":3,"file":"AutoCompleteInput.js","names":["React","Component","PropTypes","memoize","classNames","debounce","Popper","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","popperOptions","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","processFilterChange","fireOnChange","onChange","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","relatedTarget","Element","element","contains","window","requestAnimationFrame","show","focusInput","hide","index","children","item","scrollIntoView","behavior","block","renderMenuElement","renderOptions","noMatchText","map","renderOption","render","inputPlaceholder","disabled","className","defaultTitle","spellCheck","dataTestId","arrayOf","shape","string","isRequired","func","bool","undefined"],"sources":["../src/AutoCompleteInput.tsx"],"sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange(value: string, isValid: boolean): void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter(): void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({}),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultTitle: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n noMatchText: PropTypes.string,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current?.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AutoCompleteInput.js","names":["React","Component","PropTypes","memoize","classNames","debounce","Popper","DEBOUNCE_DELAY","MENU_NAVIGATION_DIRECTION","AutoCompleteInput","constructor","props","options","input","filter","option","title","toLowerCase","indexOf","popperOptions","placement","modifiers","preventOverflow","enabled","state","filteredOptions","keyboardOptionIndex","menuIsOpen","inputWidth","invalid","handleMenuKeyDown","bind","handleMenuBlur","handleInputChange","handleInputKeyDown","handleInputBlur","handelInputFocus","handleInputClick","updateInputValue","handleOptionClick","handleMenuOpened","handleMenuExited","popper","createRef","cbContainer","menuContainer","setInputWidth","current","setState","getBoundingClientRect","width","getValueAndValidate","value","isValid","result","length","processFilterChange","fireOnChange","onChange","getCachedFilteredOptions","perfectMatch","closeMenu","scheduleUpdate","resetValue","handleResize","event","key","stopPropagation","preventDefault","focus","navigateMenu","UP","DOWN","shiftKey","direction","newKeyboardOptionIndex","scrollOptionIntoView","onEnter","openMenu","target","relatedTarget","Element","element","contains","window","requestAnimationFrame","show","focusInput","hide","index","children","item","scrollIntoView","behavior","block","renderMenuElement","renderOptions","noMatchText","map","renderOption","render","inputPlaceholder","disabled","className","defaultTitle","spellCheck","dataTestId","arrayOf","shape","string","isRequired","func","bool","undefined"],"sources":["../src/AutoCompleteInput.tsx"],"sourcesContent":["/**\n * An Input component that pops and filters auto complete options as you type.\n *\n * props:\n * @param options :[{\n * title: 'option title for display',\n * value: 'option value' //option value\n * }]\n * @param popperOptions options for the Popper\n * @param onChange called when the value is changed from the pulldown\n * @param inputPlaceholder place holder for the input box\n * @param disabled disable both input & drop down\n * @param className an optional class name applied to the input element\n * @param defaultTitle the default title to display\n * @param spellCheck flag to disable spell checking, defaults to true\n * @param onEnter called when the Enter key is typed in the input element\n *\n */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport memoize from 'memoizee';\nimport classNames from 'classnames';\nimport debounce from 'lodash.debounce';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from './popper';\n\nimport './AutoCompleteInput.scss';\n\nconst DEBOUNCE_DELAY = 100;\n\nenum MENU_NAVIGATION_DIRECTION {\n UP = 'UP',\n DOWN = 'DOWN',\n}\n\ninterface AutoCompleteOption {\n title: string;\n value: string;\n}\n\ninterface AutoCompleteInputProps {\n options: AutoCompleteOption[];\n popperOptions: PopperOptions;\n onChange(value: string, isValid: boolean): void;\n inputPlaceholder: string;\n disabled: boolean;\n className: string;\n defaultTitle: string;\n spellCheck: boolean;\n onEnter(): void;\n noMatchText: string;\n 'data-testid'?: string;\n}\n\ninterface AutoCompleteInputState {\n title: string;\n filteredOptions: AutoCompleteOption[];\n keyboardOptionIndex: number;\n menuIsOpen: boolean;\n inputWidth: number;\n invalid: boolean;\n popperOptions: PopperOptions;\n}\n\nclass AutoCompleteInput extends Component<\n AutoCompleteInputProps,\n AutoCompleteInputState\n> {\n static propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n })\n ).isRequired,\n popperOptions: PropTypes.shape({}),\n onChange: PropTypes.func,\n inputPlaceholder: PropTypes.string,\n disabled: PropTypes.bool,\n className: PropTypes.string,\n defaultTitle: PropTypes.string,\n spellCheck: PropTypes.bool,\n onEnter: PropTypes.func,\n noMatchText: PropTypes.string,\n 'data-testid': PropTypes.string,\n };\n\n static defaultProps = {\n onChange(): void {\n // no-op\n },\n inputPlaceholder: '',\n disabled: false,\n className: '',\n defaultTitle: '',\n popperOptions: null,\n spellCheck: true,\n onEnter(): void {\n // no-op\n },\n noMatchText: 'No matching items found',\n 'data-testid': undefined,\n };\n\n static MENU_NAVIGATION_DIRECTION = MENU_NAVIGATION_DIRECTION;\n\n constructor(props: AutoCompleteInputProps) {\n super(props);\n\n let { popperOptions } = this.props;\n popperOptions = {\n placement: 'bottom-end',\n modifiers: {\n preventOverflow: { enabled: false },\n },\n ...popperOptions,\n };\n\n this.state = {\n title: '',\n filteredOptions: [],\n keyboardOptionIndex: 0,\n menuIsOpen: false,\n inputWidth: 100,\n invalid: false,\n popperOptions,\n };\n\n this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);\n this.handleMenuBlur = this.handleMenuBlur.bind(this);\n\n this.handleInputChange = this.handleInputChange.bind(this);\n this.handleInputKeyDown = this.handleInputKeyDown.bind(this);\n this.handleInputBlur = this.handleInputBlur.bind(this);\n this.handelInputFocus = this.handelInputFocus.bind(this);\n this.handleInputClick = this.handleInputClick.bind(this);\n\n this.updateInputValue = debounce(this.updateInputValue, DEBOUNCE_DELAY);\n\n this.handleOptionClick = this.handleOptionClick.bind(this);\n\n this.handleMenuOpened = this.handleMenuOpened.bind(this);\n this.handleMenuExited = this.handleMenuExited.bind(this);\n\n this.popper = React.createRef();\n this.cbContainer = React.createRef();\n this.menuContainer = React.createRef();\n this.input = React.createRef();\n }\n\n popper: React.RefObject<Popper>;\n\n cbContainer: React.RefObject<HTMLDivElement>;\n\n menuContainer: React.RefObject<HTMLDivElement>;\n\n input: React.RefObject<HTMLInputElement>;\n\n setInputWidth(): void {\n if (this.cbContainer.current) {\n this.setState({\n inputWidth: this.cbContainer.current.getBoundingClientRect().width,\n });\n }\n }\n\n getCachedFilteredOptions = memoize(\n (options: AutoCompleteOption[], input: string) =>\n options.filter(\n // supports partial match\n option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0\n )\n );\n\n // validation needs to be an exact case-sensitve match on value\n getValueAndValidate(title: string): { value: string; isValid: boolean } {\n if (!title) {\n this.setState({ invalid: false });\n return { value: title, isValid: false };\n }\n\n // validate\n const { options } = this.props;\n const result = options.filter(\n option => option.title.toLowerCase() === title.toLowerCase()\n );\n if (result.length < 1) {\n this.setState({ invalid: true });\n return { value: title, isValid: false };\n }\n\n this.setState({ invalid: false });\n return { value: result[0].value, isValid: true };\n }\n\n // validate typed entries emit change event using value\n updateInputValue(title: string): void {\n const { menuIsOpen } = this.state;\n const { value, isValid } = this.getValueAndValidate(title);\n if (menuIsOpen) this.processFilterChange(title);\n this.fireOnChange(value, isValid);\n }\n\n fireOnChange(value: string, isValid = true): void {\n const { onChange } = this.props;\n onChange(value, isValid);\n }\n\n processFilterChange(filter: string): void {\n const { options } = this.props;\n const { menuIsOpen } = this.state;\n const filteredOptions = filter\n ? this.getCachedFilteredOptions(options, filter)\n : options;\n const perfectMatch =\n filteredOptions.length === 1 && filteredOptions[0].title === filter;\n this.setState({\n filteredOptions,\n keyboardOptionIndex: 0,\n });\n if (perfectMatch && menuIsOpen) {\n this.closeMenu();\n return;\n }\n this.popper.current?.scheduleUpdate(); // filtered options list can change size, may need to be repositioned\n }\n\n resetValue(): void {\n this.setState({ title: '' });\n this.fireOnChange('');\n }\n\n handleResize(): void {\n this.setInputWidth();\n }\n\n handleMenuKeyDown(event: React.KeyboardEvent): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n const option = filteredOptions[keyboardOptionIndex];\n\n switch (event.key) {\n case 'Enter':\n case 'ArrowRight':\n event.stopPropagation();\n event.preventDefault();\n if (option != null) {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n }\n this.closeMenu();\n this.input.current?.focus();\n break;\n case 'ArrowUp':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n case 'ArrowDown':\n event.stopPropagation();\n event.preventDefault();\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Tab':\n event.stopPropagation();\n event.preventDefault();\n if (event.shiftKey) {\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP);\n break;\n }\n this.navigateMenu(AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN);\n break;\n case 'Escape':\n event.preventDefault();\n event.stopPropagation();\n this.closeMenu();\n break;\n default:\n break;\n }\n }\n\n navigateMenu(direction: MENU_NAVIGATION_DIRECTION): void {\n const { filteredOptions, keyboardOptionIndex } = this.state;\n let newKeyboardOptionIndex = keyboardOptionIndex;\n if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.UP) {\n if (keyboardOptionIndex > 0) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex - 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n } else if (keyboardOptionIndex === 0) {\n newKeyboardOptionIndex = filteredOptions.length - 1;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n } else if (direction === AutoCompleteInput.MENU_NAVIGATION_DIRECTION.DOWN) {\n if (keyboardOptionIndex < filteredOptions.length) {\n newKeyboardOptionIndex =\n (newKeyboardOptionIndex + 1) % filteredOptions.length;\n this.setState({\n keyboardOptionIndex: newKeyboardOptionIndex,\n });\n }\n }\n this.scrollOptionIntoView(newKeyboardOptionIndex);\n }\n\n handleInputKeyDown(event: React.KeyboardEvent): void {\n const { onEnter } = this.props;\n const { menuIsOpen } = this.state;\n\n if (menuIsOpen) {\n this.handleMenuKeyDown(event);\n } else if (event.key === 'Enter') {\n onEnter();\n } else if (event.key === 'Escape') {\n this.resetValue();\n event.preventDefault();\n event.stopPropagation();\n } else if (\n !(\n event.key === 'ArrowRight' ||\n event.key === 'ArrowLeft' ||\n event.key === 'Tab' ||\n event.key === 'Shift'\n )\n ) {\n this.openMenu();\n }\n }\n\n handleInputChange(event: React.ChangeEvent<HTMLInputElement>): void {\n this.setState({ title: event.target.value });\n this.updateInputValue(event.target.value);\n }\n\n handleOptionClick(option: AutoCompleteOption): void {\n this.setState({ title: option.title, invalid: false });\n this.fireOnChange(option.value);\n this.closeMenu();\n this.input.current?.focus();\n }\n\n handelInputFocus(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputClick(): void {\n const { menuIsOpen } = this.state;\n if (!menuIsOpen) {\n this.openMenu();\n }\n }\n\n handleInputBlur(event: React.FocusEvent<HTMLInputElement>): void {\n const { menuIsOpen } = this.state;\n if (\n menuIsOpen &&\n event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget)\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuBlur(event: React.FocusEvent<HTMLDivElement>): void {\n // if blur event is caused by focusing on the input or focus on options don't close menu\n if (\n event.relatedTarget === this.input.current ||\n (event.relatedTarget instanceof Element &&\n this.popper.current !== null &&\n this.popper.current.element.contains(event.relatedTarget))\n ) {\n return;\n }\n this.closeMenu(false);\n }\n\n handleMenuOpened(): void {\n this.input.current?.focus();\n }\n\n handleMenuExited(): void {\n const { menuIsOpen } = this.state;\n if (menuIsOpen) {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n }\n }\n\n openMenu(): void {\n const { title } = this.state;\n this.processFilterChange(title);\n this.setInputWidth();\n this.setState({ menuIsOpen: true });\n\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.popper.current?.show();\n });\n }\n\n closeMenu(focusInput = true): void {\n this.setState({ menuIsOpen: false, keyboardOptionIndex: 0 });\n if (focusInput) {\n this.input.current?.focus();\n }\n this.popper.current?.hide();\n }\n\n scrollOptionIntoView(index: number): void {\n if (this.menuContainer.current) {\n this.menuContainer.current.children.item(index)?.scrollIntoView({\n behavior: 'smooth',\n block: 'nearest',\n });\n }\n }\n\n renderMenuElement(): JSX.Element {\n const { inputWidth } = this.state;\n return (\n <div\n className={classNames('aci-options')}\n ref={this.menuContainer}\n role=\"presentation\"\n onKeyDown={this.handleMenuKeyDown}\n style={{ width: inputWidth }}\n onBlur={this.handleMenuBlur}\n >\n {this.renderOptions()}\n </div>\n );\n }\n\n renderOptions(): React.ReactNode {\n const { noMatchText } = this.props;\n const { title, filteredOptions } = this.state;\n\n if (title && filteredOptions.length === 0) {\n return <div className=\"no-match\">{noMatchText}</div>;\n }\n\n return filteredOptions.map((option, index) =>\n this.renderOption(option, index)\n );\n }\n\n renderOption(option: AutoCompleteOption, index: number): JSX.Element {\n const { keyboardOptionIndex } = this.state;\n const key = `option-${index}-${option.value}`;\n return (\n <button\n key={key}\n type=\"button\"\n className={classNames('aci-option-btn', {\n 'keyboard-active': keyboardOptionIndex === index,\n })}\n onClick={() => this.handleOptionClick(option)}\n onFocus={() => this.setState({ keyboardOptionIndex: index })}\n >\n {option.title}\n </button>\n );\n }\n\n render(): JSX.Element {\n const {\n options,\n inputPlaceholder,\n disabled,\n className,\n defaultTitle,\n spellCheck,\n 'data-testid': dataTestId,\n } = this.props;\n const { title, menuIsOpen, popperOptions, invalid } = this.state;\n\n return (\n <div className=\"aci-container\" ref={this.cbContainer}>\n <input\n value={title || defaultTitle}\n className={classNames('form-control', className, 'aci-input', {\n 'is-invalid': invalid && !menuIsOpen,\n })}\n ref={this.input}\n onChange={this.handleInputChange}\n placeholder={inputPlaceholder || options[0].title}\n disabled={disabled}\n onFocus={this.handelInputFocus}\n onClick={this.handleInputClick}\n onBlur={this.handleInputBlur}\n onKeyDown={this.handleInputKeyDown}\n spellCheck={spellCheck}\n data-testid={dataTestId}\n />\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('aci-options-popper interactive')}\n onEntered={this.handleMenuOpened}\n onExited={this.handleMenuExited}\n >\n {this.renderMenuElement()}\n </Popper>\n </div>\n );\n }\n}\n\nexport default AutoCompleteInput;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"BasicModal.d.ts","sourceRoot":"","sources":["../src/BasicModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAmGzC,CAAC;AA4BF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"BasicModal.d.ts","sourceRoot":"","sources":["../src/BasicModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAMnD,UAAU,eAAe;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA+GzC,CAAC;AA4BF,eAAe,UAAU,CAAC"}
@@ -35,9 +35,7 @@ var BasicModal = props => {
35
35
  var confirmButton = useRef(null);
36
36
  var disableModalCheckbox = useRef(null);
37
37
  var onConfirmClicked = useCallback(() => {
38
- var _disableModalCheckbox;
39
-
40
- if ((_disableModalCheckbox = disableModalCheckbox.current) !== null && _disableModalCheckbox !== void 0 && _disableModalCheckbox.checked && onModalDisable) {
38
+ if (disableModalCheckbox.current !== null && disableModalCheckbox.current.checked && onModalDisable) {
41
39
  onModalDisable();
42
40
  }
43
41
 
@@ -67,7 +65,7 @@ var BasicModal = props => {
67
65
  id: "move-confirmation-checkbox",
68
66
  defaultChecked: false,
69
67
  ref: disableModalCheckbox,
70
- "data-testid": dataTestId ? "".concat(dataTestId, "-checkbox-confirm") : undefined
68
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-checkbox-confirm") : undefined
71
69
  }), /*#__PURE__*/React.createElement("label", {
72
70
  className: "custom-control-label",
73
71
  htmlFor: "move-confirmation-checkbox"
@@ -76,18 +74,18 @@ var BasicModal = props => {
76
74
  className: "btn btn-outline-primary mr-auto",
77
75
  "data-dismiss": "modal",
78
76
  onClick: onDiscard,
79
- "data-testid": dataTestId ? "".concat(dataTestId, "-btn-discard") : undefined
77
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-discard") : undefined
80
78
  }, discardButtonText), onCancel && /*#__PURE__*/React.createElement("button", {
81
79
  type: "button",
82
80
  className: "btn btn-outline-primary",
83
81
  "data-dismiss": "modal",
84
82
  onClick: onCancel,
85
- "data-testid": dataTestId ? "".concat(dataTestId, "-btn-cancel") : undefined
83
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-cancel") : undefined
86
84
  }, cancelButtonText), /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
87
85
  kind: "primary",
88
86
  onClick: onConfirmClicked,
89
87
  ref: confirmButton,
90
- "data-testid": dataTestId ? "".concat(dataTestId, "-btn-confirm") : undefined
88
+ "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-confirm") : undefined
91
89
  }, confirmButtonText), children)));
92
90
  };
93
91
 
@@ -1 +1 @@
1
- {"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","PropTypes","ButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","modalBody","focus","undefined","propTypes","bool","isRequired","string","oneOfType","func","node","defaultProps"],"sources":["../src/BasicModal.tsx"],"sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport ButtonGroup from './ButtonGroup';\nimport Button from './Button';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from './modal';\n\ninterface BasicModalProps {\n isOpen: boolean;\n headerText: string;\n bodyText: string | (() => string);\n onCancel?: () => void;\n onConfirm: () => void;\n onDiscard?: () => void;\n onModalDisable?: () => void;\n cancelButtonText?: string;\n confirmButtonText?: string;\n discardButtonText?: string;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nconst BasicModal: React.FC<BasicModalProps> = props => {\n const {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const confirmButton = useRef<HTMLButtonElement>(null);\n\n const disableModalCheckbox = useRef<HTMLInputElement>(null);\n\n const onConfirmClicked = useCallback(() => {\n if (disableModalCheckbox.current?.checked && onModalDisable) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n className=\"theme-bg-light\"\n onOpened={() => {\n confirmButton.current?.focus();\n }}\n >\n <ModalHeader closeButton={false}>{headerText}</ModalHeader>\n <ModalBody>{modalBody}</ModalBody>\n <ModalFooter>\n {onModalDisable && (\n <div className=\"custom-control custom-checkbox form-group mr-auto\">\n <input\n type=\"checkbox\"\n className=\"custom-control-input\"\n id=\"move-confirmation-checkbox\"\n defaultChecked={false}\n ref={disableModalCheckbox}\n data-testid={\n dataTestId ? `${dataTestId}-checkbox-confirm` : undefined\n }\n />\n <label\n className=\"custom-control-label\"\n htmlFor=\"move-confirmation-checkbox\"\n >\n Don&#39;t ask me again\n </label>\n </div>\n )}\n {onDiscard && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={dataTestId ? `${dataTestId}-btn-discard` : undefined}\n >\n {discardButtonText}\n </button>\n )}\n {onCancel && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={dataTestId ? `${dataTestId}-btn-cancel` : undefined}\n >\n {cancelButtonText}\n </button>\n )}\n <ButtonGroup>\n <Button\n kind=\"primary\"\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={dataTestId ? `${dataTestId}-btn-confirm` : undefined}\n >\n {confirmButtonText}\n </Button>\n {children}\n </ButtonGroup>\n </ModalFooter>\n </Modal>\n );\n};\n\nBasicModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n headerText: PropTypes.string.isRequired,\n bodyText: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n onDiscard: PropTypes.func,\n onModalDisable: PropTypes.func,\n cancelButtonText: PropTypes.string,\n confirmButtonText: PropTypes.string,\n discardButtonText: PropTypes.string,\n children: PropTypes.node,\n 'data-testid': PropTypes.string,\n};\n\nBasicModal.defaultProps = {\n children: undefined,\n cancelButtonText: 'Cancel',\n confirmButtonText: 'Okay',\n discardButtonText: 'Discard',\n onCancel: undefined,\n onDiscard: undefined,\n onModalDisable: undefined,\n 'data-testid': undefined,\n};\n\nexport default BasicModal;\n"],"mappings":"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"}
1
+ {"version":3,"file":"BasicModal.js","names":["React","useRef","useCallback","PropTypes","ButtonGroup","Button","Modal","ModalBody","ModalFooter","ModalHeader","BasicModal","props","isOpen","headerText","bodyText","onCancel","onConfirm","onDiscard","onModalDisable","cancelButtonText","confirmButtonText","discardButtonText","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","modalBody","focus","undefined","propTypes","bool","isRequired","string","oneOfType","func","node","defaultProps"],"sources":["../src/BasicModal.tsx"],"sourcesContent":["import React, { useRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport ButtonGroup from './ButtonGroup';\nimport Button from './Button';\nimport { Modal, ModalBody, ModalFooter, ModalHeader } from './modal';\n\ninterface BasicModalProps {\n isOpen: boolean;\n headerText: string;\n bodyText: string | (() => string);\n onCancel?: () => void;\n onConfirm: () => void;\n onDiscard?: () => void;\n onModalDisable?: () => void;\n cancelButtonText?: string;\n confirmButtonText?: string;\n discardButtonText?: string;\n children?: React.ReactNode;\n 'data-testid'?: string;\n}\n\n/**\n * A basic modal dialog with two buttons: cancel / confirm.\n *\n * @param isOpen indicates if the modal dialog is open\n * @param headerText text displayed in the modal header\n * @param bodyText text displayed in the modal body\n * @param onCancel callback for the cancel button; if not provided, button not shown\n * @param onConfirm callback for the confirm button\n * @param onDiscard callback for the discard button; if not provided, button not shown\n * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'\n * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'\n * @param discardButtonText optional text for the discard button, defaults to 'Discard'\n */\nconst BasicModal: React.FC<BasicModalProps> = props => {\n const {\n isOpen,\n headerText,\n bodyText,\n onCancel,\n onConfirm,\n onDiscard,\n onModalDisable,\n cancelButtonText = 'Cancel',\n confirmButtonText = 'Okay',\n discardButtonText = 'Discard',\n children,\n 'data-testid': dataTestId,\n } = props;\n\n const confirmButton = useRef<HTMLButtonElement>(null);\n\n const disableModalCheckbox = useRef<HTMLInputElement>(null);\n\n const onConfirmClicked = useCallback(() => {\n if (\n disableModalCheckbox.current !== null &&\n disableModalCheckbox.current.checked &&\n onModalDisable\n ) {\n onModalDisable();\n }\n onConfirm();\n }, [onConfirm, onModalDisable]);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal\n isOpen={isOpen}\n className=\"theme-bg-light\"\n onOpened={() => {\n confirmButton.current?.focus();\n }}\n >\n <ModalHeader closeButton={false}>{headerText}</ModalHeader>\n <ModalBody>{modalBody}</ModalBody>\n <ModalFooter>\n {onModalDisable && (\n <div className=\"custom-control custom-checkbox form-group mr-auto\">\n <input\n type=\"checkbox\"\n className=\"custom-control-input\"\n id=\"move-confirmation-checkbox\"\n defaultChecked={false}\n ref={disableModalCheckbox}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-checkbox-confirm`\n : undefined\n }\n />\n <label\n className=\"custom-control-label\"\n htmlFor=\"move-confirmation-checkbox\"\n >\n Don&#39;t ask me again\n </label>\n </div>\n )}\n {onDiscard && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary mr-auto\"\n data-dismiss=\"modal\"\n onClick={onDiscard}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-discard` : undefined\n }\n >\n {discardButtonText}\n </button>\n )}\n {onCancel && (\n <button\n type=\"button\"\n className=\"btn btn-outline-primary\"\n data-dismiss=\"modal\"\n onClick={onCancel}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-cancel` : undefined\n }\n >\n {cancelButtonText}\n </button>\n )}\n <ButtonGroup>\n <Button\n kind=\"primary\"\n onClick={onConfirmClicked}\n ref={confirmButton}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-confirm` : undefined\n }\n >\n {confirmButtonText}\n </Button>\n {children}\n </ButtonGroup>\n </ModalFooter>\n </Modal>\n );\n};\n\nBasicModal.propTypes = {\n isOpen: PropTypes.bool.isRequired,\n headerText: PropTypes.string.isRequired,\n bodyText: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n onDiscard: PropTypes.func,\n onModalDisable: PropTypes.func,\n cancelButtonText: PropTypes.string,\n confirmButtonText: PropTypes.string,\n discardButtonText: PropTypes.string,\n children: PropTypes.node,\n 'data-testid': PropTypes.string,\n};\n\nBasicModal.defaultProps = {\n children: undefined,\n cancelButtonText: 'Cancel',\n confirmButtonText: 'Okay',\n discardButtonText: 'Discard',\n onCancel: undefined,\n onDiscard: undefined,\n onModalDisable: undefined,\n 'data-testid': undefined,\n};\n\nexport default BasicModal;\n"],"mappings":"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"}
package/dist/Button.d.ts CHANGED
@@ -20,11 +20,17 @@ interface BaseButtonProps extends React.ComponentPropsWithRef<'button'> {
20
20
  declare type ButtonWithChildren = BaseButtonProps & {
21
21
  children: React.ReactNode;
22
22
  };
23
- declare type IconOnlyButton = BaseButtonProps & {
24
- tooltip: string | JSX.Element;
23
+ declare type IconOnlyButtonStringTooltip = BaseButtonProps & {
24
+ tooltip: string;
25
25
  icon: IconDefinition | JSX.Element;
26
26
  children?: undefined;
27
27
  };
28
- declare const Button: React.ForwardRefExoticComponent<(Pick<ButtonWithChildren, "className" | "placeholder" | "value" | "onChange" | "onSelect" | "onFocus" | "onBlur" | "data-testid" | "key" | "form" | "slot" | "style" | "title" | "color" | "hidden" | "type" | "onKeyDown" | "onSelectCapture" | "dir" | "defaultChecked" | "defaultValue" | "disabled" | "formAction" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "children" | "tooltip" | "onClick" | "tabIndex" | "role" | "spellCheck" | "id" | "onMouseDown" | "onPaste" | "autoFocus" | "formEncType" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "kind" | "icon" | "variant" | "active"> | Pick<IconOnlyButton, "className" | "placeholder" | "value" | "onChange" | "onSelect" | "onFocus" | "onBlur" | "data-testid" | "key" | "form" | "slot" | "style" | "title" | "color" | "hidden" | "type" | "onKeyDown" | "onSelectCapture" | "dir" | "defaultChecked" | "defaultValue" | "disabled" | "formAction" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "children" | "tooltip" | "onClick" | "tabIndex" | "role" | "spellCheck" | "id" | "onMouseDown" | "onPaste" | "autoFocus" | "formEncType" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "kind" | "icon" | "variant" | "active">) & React.RefAttributes<HTMLButtonElement>>;
28
+ declare type IconOnlyButtonJsxTooltip = BaseButtonProps & {
29
+ tooltip: JSX.Element;
30
+ 'aria-label': string;
31
+ icon: IconDefinition | JSX.Element;
32
+ children?: undefined;
33
+ };
34
+ declare const Button: React.ForwardRefExoticComponent<(Pick<ButtonWithChildren, "className" | "placeholder" | "value" | "onChange" | "onSelect" | "onFocus" | "onBlur" | "data-testid" | "key" | "form" | "slot" | "style" | "title" | "color" | "hidden" | "type" | "onKeyDown" | "onSelectCapture" | "dir" | "defaultChecked" | "defaultValue" | "disabled" | "formAction" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "children" | "tooltip" | "onClick" | "tabIndex" | "role" | "spellCheck" | "id" | "onMouseDown" | "onPaste" | "autoFocus" | "formEncType" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "kind" | "icon" | "variant" | "active"> | Pick<IconOnlyButtonStringTooltip, "className" | "placeholder" | "value" | "onChange" | "onSelect" | "onFocus" | "onBlur" | "data-testid" | "key" | "form" | "slot" | "style" | "title" | "color" | "hidden" | "type" | "onKeyDown" | "onSelectCapture" | "dir" | "defaultChecked" | "defaultValue" | "disabled" | "formAction" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "children" | "tooltip" | "onClick" | "tabIndex" | "role" | "spellCheck" | "id" | "onMouseDown" | "onPaste" | "autoFocus" | "formEncType" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "kind" | "icon" | "variant" | "active"> | Pick<IconOnlyButtonJsxTooltip, "className" | "placeholder" | "value" | "onChange" | "onSelect" | "onFocus" | "onBlur" | "data-testid" | "key" | "form" | "slot" | "style" | "title" | "color" | "hidden" | "type" | "onKeyDown" | "onSelectCapture" | "dir" | "defaultChecked" | "defaultValue" | "disabled" | "formAction" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "children" | "tooltip" | "onClick" | "tabIndex" | "role" | "spellCheck" | "id" | "onMouseDown" | "onPaste" | "autoFocus" | "formEncType" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "translate" | "radioGroup" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "kind" | "icon" | "variant" | "active">) & React.RefAttributes<HTMLButtonElement>>;
29
35
  export default Button;
30
36
  //# sourceMappingURL=Button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../src/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,QAAA,MAAM,YAAY,uFAQR,CAAC;AACX,aAAK,WAAW,GAAG,OAAO,YAAY,CAAC;AACvC,aAAK,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAEtC,QAAA,MAAM,aAAa,wBAAyB,CAAC;AAC7C,aAAK,YAAY,GAAG,OAAO,aAAa,CAAC;AACzC,aAAK,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAExC,aAAK,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD,UAAU,eAAgB,SAAQ,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC;IACrE,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,aAAK,kBAAkB,GAAG,eAAe,GAAG;IAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,aAAK,cAAc,GAAG,eAAe,GAAG;IACtC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC9B,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAiCF,QAAA,MAAM,MAAM,mhTA6EX,CAAC;AA6DF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Button.d.ts","sourceRoot":"","sources":["../src/Button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGnE,QAAA,MAAM,YAAY,uFAQR,CAAC;AACX,aAAK,WAAW,GAAG,OAAO,YAAY,CAAC;AACvC,aAAK,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAEtC,QAAA,MAAM,aAAa,wBAAyB,CAAC;AAC7C,aAAK,YAAY,GAAG,OAAO,aAAa,CAAC;AACzC,aAAK,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AAExC,aAAK,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjD,UAAU,eAAgB,SAAQ,KAAK,CAAC,qBAAqB,CAAC,QAAQ,CAAC;IACrE,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,aAAK,kBAAkB,GAAG,eAAe,GAAG;IAC1C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CAAC;AAEF,aAAK,2BAA2B,GAAG,eAAe,GAAG;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,aAAK,wBAAwB,GAAG,eAAe,GAAG;IAChD,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAmCF,QAAA,MAAM,MAAM,4wcA2FX,CAAC;AAiEF,eAAe,MAAM,CAAC"}
package/dist/Button.js CHANGED
@@ -29,7 +29,7 @@ function getClassName(kind, iconOnly) {
29
29
  case 'ghost':
30
30
  return classNames('btn-link', {
31
31
  'btn-link-icon': iconOnly,
32
- 'px-2': iconOnly
32
+ 'btn-link-icon-only': iconOnly
33
33
  });
34
34
  }
35
35
  }
@@ -57,7 +57,7 @@ var Button = /*#__PURE__*/React.forwardRef((props, ref) => {
57
57
  'data-testid': dataTestId,
58
58
  'aria-label': ariaLabel
59
59
  } = props;
60
- var iconOnly = icon && !children;
60
+ var iconOnly = Boolean(icon && children == null);
61
61
  var btnClassName = getClassName(kind, iconOnly);
62
62
  var variantClassName;
63
63
 
@@ -75,8 +75,16 @@ var Button = /*#__PURE__*/React.forwardRef((props, ref) => {
75
75
 
76
76
  var tooltipElem;
77
77
 
78
- if (tooltip) {
78
+ if (tooltip !== undefined) {
79
79
  tooltipElem = typeof tooltip === 'string' ? /*#__PURE__*/React.createElement(Tooltip, null, tooltip) : tooltip;
80
+ } // use tooltip as arial-label for iconOnly buttons only
81
+ // if tooltip is also a string and aria-label is not set
82
+
83
+
84
+ var ariaLabelString = ariaLabel;
85
+
86
+ if (ariaLabel === undefined && iconOnly && tooltip != null && typeof tooltip === 'string') {
87
+ ariaLabelString = tooltip;
80
88
  }
81
89
 
82
90
  var button = /*#__PURE__*/React.createElement("button", {
@@ -90,13 +98,13 @@ var Button = /*#__PURE__*/React.forwardRef((props, ref) => {
90
98
  onClick: onClick,
91
99
  style: style,
92
100
  disabled: disabled,
93
- "aria-label": ariaLabel
94
- }, icon && iconElem, children, tooltip && !disabled && tooltipElem); // disabled buttons tooltips need a wrapped element to receive pointer events
101
+ "aria-label": ariaLabelString
102
+ }, icon && iconElem, children, tooltip != null && (disabled === undefined || !disabled) && tooltipElem); // disabled buttons tooltips need a wrapped element to receive pointer events
95
103
  // https://jakearchibald.com/2017/events-and-disabled-form-fields/
96
104
 
97
- return disabled ? /*#__PURE__*/React.createElement("span", {
105
+ return disabled !== undefined && disabled ? /*#__PURE__*/React.createElement("span", {
98
106
  className: "btn-disabled-wrapper"
99
- }, button, tooltip && tooltipElem) : button;
107
+ }, button, tooltip !== undefined && tooltipElem) : button;
100
108
  });
101
109
  Button.displayName = 'Button';
102
110
  Button.propTypes = {
@@ -111,7 +119,7 @@ Button.propTypes = {
111
119
  children
112
120
  } = props;
113
121
 
114
- if (!tooltip && icon && !children) {
122
+ if (tooltip === undefined && icon != null && children == null) {
115
123
  return new Error('Tooltip is required for icon only buttons');
116
124
  }
117
125
 
@@ -124,11 +132,11 @@ Button.propTypes = {
124
132
  icon
125
133
  } = props;
126
134
 
127
- if (!icon && !children) {
135
+ if (icon == null && children == null) {
128
136
  return new Error('Icon is required if no children are provided');
129
137
  }
130
138
 
131
- if (!children && ! /*#__PURE__*/React.isValidElement(icon) && !(icon !== null && icon !== void 0 && icon.iconName)) {
139
+ if (children == null && ! /*#__PURE__*/React.isValidElement(icon) && (icon == null || icon.iconName === '' || icon.iconName == null)) {
132
140
  return new Error('Icon must be react element or fontawesome IconDefinition');
133
141
  }
134
142
 
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","names":["React","PropTypes","classNames","FontAwesomeIcon","Tooltip","BUTTON_KINDS","VARIANT_KINDS","getClassName","kind","iconOnly","getVariantClasses","Button","forwardRef","props","ref","variant","type","tooltip","icon","disabled","active","onClick","className","style","children","dataTestId","ariaLabel","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","button","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","undefined","node","string","object","defaultProps"],"sources":["../src/Button.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Tooltip } from './popper';\n\nconst BUTTON_KINDS = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'danger',\n 'inline',\n 'ghost',\n] as const;\ntype ButtonTuple = typeof BUTTON_KINDS;\ntype ButtonKind = ButtonTuple[number];\n\nconst VARIANT_KINDS = ['group-end'] as const;\ntype VariantTuple = typeof VARIANT_KINDS;\ntype VariantKind = VariantTuple[number];\n\ntype ButtonTypes = 'submit' | 'reset' | 'button';\n\ninterface BaseButtonProps extends React.ComponentPropsWithRef<'button'> {\n kind: ButtonKind;\n type?: ButtonTypes;\n variant?: VariantKind;\n tooltip?: string | JSX.Element;\n icon?: IconDefinition | JSX.Element;\n active?: boolean;\n 'data-testid'?: string;\n 'aria-label'?: string;\n}\n\ntype ButtonWithChildren = BaseButtonProps & {\n children: React.ReactNode;\n};\n\ntype IconOnlyButton = BaseButtonProps & {\n tooltip: string | JSX.Element;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype ButtonProps = IconOnlyButton | ButtonWithChildren;\n\nfunction getClassName(kind: ButtonKind, iconOnly: boolean): string {\n switch (kind) {\n case 'primary':\n return 'btn-primary';\n case 'secondary':\n return 'btn-outline-primary';\n case 'tertiary':\n return 'btn-secondary';\n case 'success':\n return 'btn-success';\n case 'danger':\n return 'btn-danger';\n case 'inline':\n return 'btn-inline';\n case 'ghost':\n return classNames('btn-link', {\n 'btn-link-icon': iconOnly,\n 'px-2': iconOnly,\n });\n }\n}\n\nfunction getVariantClasses(kind: VariantKind): string {\n switch (kind) {\n case 'group-end':\n return classNames('pl-2', 'pr-3');\n }\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props: ButtonProps, ref) => {\n const {\n kind,\n variant,\n type,\n tooltip,\n icon,\n disabled,\n active,\n onClick,\n className,\n style,\n children,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n } = props;\n\n const iconOnly = (icon && !children) as boolean;\n const btnClassName = getClassName(kind, iconOnly);\n\n let variantClassName;\n if (variant) {\n variantClassName = getVariantClasses(variant);\n }\n\n let iconElem: JSX.Element | undefined;\n if (icon) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n let tooltipElem: JSX.Element | undefined;\n if (tooltip) {\n tooltipElem =\n typeof tooltip === 'string' ? <Tooltip>{tooltip}</Tooltip> : tooltip;\n }\n\n const button = (\n <button\n data-testid={dataTestId}\n ref={ref}\n // eslint-disable-next-line react/button-has-type\n type={type}\n className={classNames(\n 'btn',\n btnClassName,\n variantClassName,\n { active },\n className\n )}\n onClick={onClick}\n style={style}\n disabled={disabled}\n aria-label={ariaLabel}\n >\n {icon && iconElem}\n {children}\n {tooltip && !disabled && tooltipElem}\n </button>\n );\n\n // disabled buttons tooltips need a wrapped element to receive pointer events\n // https://jakearchibald.com/2017/events-and-disabled-form-fields/\n\n return disabled ? (\n <span className=\"btn-disabled-wrapper\">\n {button}\n {tooltip && tooltipElem}\n </span>\n ) : (\n button\n );\n }\n);\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n kind: PropTypes.oneOf(BUTTON_KINDS).isRequired,\n variant: PropTypes.oneOf(VARIANT_KINDS),\n type: PropTypes.oneOf<ButtonTypes>(['submit', 'reset', 'button']),\n tooltip(props) {\n const { tooltip, icon, children } = props;\n if (!tooltip && icon && !children) {\n return new Error('Tooltip is required for icon only buttons');\n }\n return null;\n },\n icon(props) {\n const { children, icon } = props;\n if (!icon && !children) {\n return new Error('Icon is required if no children are provided');\n }\n\n if (!children && !React.isValidElement(icon) && !icon?.iconName) {\n return new Error(\n 'Icon must be react element or fontawesome IconDefinition'\n );\n }\n\n return null;\n },\n disabled: PropTypes.bool,\n active: PropTypes.bool,\n onClick(props) {\n const { onClick, type } = props;\n if (type === 'button' && typeof onClick !== 'function') {\n return new Error('type button requires an onClick function');\n }\n if (onClick !== undefined && typeof onClick !== 'function') {\n return new Error('onClick must be a function');\n }\n return null;\n },\n children: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string,\n};\n\nButton.defaultProps = {\n type: 'button',\n onClick: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n children: undefined,\n className: undefined,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default Button;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Button.js","names":["React","PropTypes","classNames","FontAwesomeIcon","Tooltip","BUTTON_KINDS","VARIANT_KINDS","getClassName","kind","iconOnly","getVariantClasses","Button","forwardRef","props","ref","variant","type","tooltip","icon","disabled","active","onClick","className","style","children","dataTestId","ariaLabel","Boolean","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","undefined","ariaLabelString","button","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","node","string","object","defaultProps"],"sources":["../src/Button.tsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Tooltip } from './popper';\n\nconst BUTTON_KINDS = [\n 'primary',\n 'secondary',\n 'tertiary',\n 'success',\n 'danger',\n 'inline',\n 'ghost',\n] as const;\ntype ButtonTuple = typeof BUTTON_KINDS;\ntype ButtonKind = ButtonTuple[number];\n\nconst VARIANT_KINDS = ['group-end'] as const;\ntype VariantTuple = typeof VARIANT_KINDS;\ntype VariantKind = VariantTuple[number];\n\ntype ButtonTypes = 'submit' | 'reset' | 'button';\n\ninterface BaseButtonProps extends React.ComponentPropsWithRef<'button'> {\n kind: ButtonKind;\n type?: ButtonTypes;\n variant?: VariantKind;\n tooltip?: string | JSX.Element;\n icon?: IconDefinition | JSX.Element;\n active?: boolean;\n 'data-testid'?: string;\n 'aria-label'?: string;\n}\n\ntype ButtonWithChildren = BaseButtonProps & {\n children: React.ReactNode;\n};\n\ntype IconOnlyButtonStringTooltip = BaseButtonProps & {\n tooltip: string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButtonJsxTooltip = BaseButtonProps & {\n tooltip: JSX.Element;\n 'aria-label': string;\n icon: IconDefinition | JSX.Element;\n children?: undefined;\n};\n\ntype IconOnlyButton = IconOnlyButtonStringTooltip | IconOnlyButtonJsxTooltip;\n\ntype ButtonProps = IconOnlyButton | ButtonWithChildren;\n\nfunction getClassName(kind: ButtonKind, iconOnly: boolean): string {\n switch (kind) {\n case 'primary':\n return 'btn-primary';\n case 'secondary':\n return 'btn-outline-primary';\n case 'tertiary':\n return 'btn-secondary';\n case 'success':\n return 'btn-success';\n case 'danger':\n return 'btn-danger';\n case 'inline':\n return 'btn-inline';\n case 'ghost':\n return classNames('btn-link', {\n 'btn-link-icon': iconOnly,\n 'btn-link-icon-only': iconOnly,\n });\n }\n}\n\nfunction getVariantClasses(kind: VariantKind): string {\n switch (kind) {\n case 'group-end':\n return classNames('pl-2', 'pr-3');\n }\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (props: ButtonProps, ref) => {\n const {\n kind,\n variant,\n type,\n tooltip,\n icon,\n disabled,\n active,\n onClick,\n className,\n style,\n children,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n } = props;\n\n const iconOnly = Boolean(icon && children == null);\n const btnClassName = getClassName(kind, iconOnly);\n\n let variantClassName;\n if (variant) {\n variantClassName = getVariantClasses(variant);\n }\n\n let iconElem: JSX.Element | undefined;\n if (icon) {\n iconElem = React.isValidElement(icon) ? (\n icon\n ) : (\n <FontAwesomeIcon icon={icon as IconDefinition} />\n );\n }\n\n let tooltipElem: JSX.Element | undefined;\n if (tooltip !== undefined) {\n tooltipElem =\n typeof tooltip === 'string' ? <Tooltip>{tooltip}</Tooltip> : tooltip;\n }\n\n // use tooltip as arial-label for iconOnly buttons only\n // if tooltip is also a string and aria-label is not set\n let ariaLabelString = ariaLabel;\n if (\n ariaLabel === undefined &&\n iconOnly &&\n tooltip != null &&\n typeof tooltip === 'string'\n ) {\n ariaLabelString = tooltip;\n }\n\n const button = (\n <button\n data-testid={dataTestId}\n ref={ref}\n // eslint-disable-next-line react/button-has-type\n type={type}\n className={classNames(\n 'btn',\n btnClassName,\n variantClassName,\n { active },\n className\n )}\n onClick={onClick}\n style={style}\n disabled={disabled}\n aria-label={ariaLabelString}\n >\n {icon && iconElem}\n {children}\n {tooltip != null &&\n (disabled === undefined || !disabled) &&\n tooltipElem}\n </button>\n );\n\n // disabled buttons tooltips need a wrapped element to receive pointer events\n // https://jakearchibald.com/2017/events-and-disabled-form-fields/\n\n return disabled !== undefined && disabled ? (\n <span className=\"btn-disabled-wrapper\">\n {button}\n {tooltip !== undefined && tooltipElem}\n </span>\n ) : (\n button\n );\n }\n);\n\nButton.displayName = 'Button';\n\nButton.propTypes = {\n kind: PropTypes.oneOf(BUTTON_KINDS).isRequired,\n variant: PropTypes.oneOf(VARIANT_KINDS),\n type: PropTypes.oneOf<ButtonTypes>(['submit', 'reset', 'button']),\n tooltip(props) {\n const { tooltip, icon, children } = props;\n if (tooltip === undefined && icon != null && children == null) {\n return new Error('Tooltip is required for icon only buttons');\n }\n return null;\n },\n icon(props) {\n const { children, icon } = props;\n if (icon == null && children == null) {\n return new Error('Icon is required if no children are provided');\n }\n\n if (\n children == null &&\n !React.isValidElement(icon) &&\n (icon == null || icon.iconName === '' || icon.iconName == null)\n ) {\n return new Error(\n 'Icon must be react element or fontawesome IconDefinition'\n );\n }\n\n return null;\n },\n disabled: PropTypes.bool,\n active: PropTypes.bool,\n onClick(props) {\n const { onClick, type } = props;\n if (type === 'button' && typeof onClick !== 'function') {\n return new Error('type button requires an onClick function');\n }\n if (onClick !== undefined && typeof onClick !== 'function') {\n return new Error('onClick must be a function');\n }\n return null;\n },\n children: PropTypes.node,\n className: PropTypes.string,\n style: PropTypes.object,\n 'data-testid': PropTypes.string,\n};\n\nButton.defaultProps = {\n type: 'button',\n onClick: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n children: undefined,\n className: undefined,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default Button;\n"],"mappings":"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"}
package/dist/CardFlip.js CHANGED
@@ -42,7 +42,7 @@ var CardFlip = _ref => {
42
42
  front.current.addEventListener('transitionstart', transitionStart);
43
43
  var refObj = front.current;
44
44
  return function cleanupListener() {
45
- if (refObj) {
45
+ if (refObj != null) {
46
46
  return refObj.removeEventListener('transitionstart', transitionStart);
47
47
  }
48
48
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CardFlip.js","names":["React","useCallback","useEffect","useRef","classNames","CardFlip","className","isFlipped","children","dataTestId","getComponent","key","length","Error","front","transitionStart","event","target","currentTarget","document","body","classList","add","transitionEnd","remove","setIsFlippingClassOnTransitionStart","current","addEventListener","refObj","cleanupListener","removeEventListener"],"sources":["../src/CardFlip.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport './CardFlip.scss';\n\ntype CardFlipProps = {\n isFlipped: boolean;\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n 'data-testid'?: string;\n};\n\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nconst CardFlip = ({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element => {\n const getComponent = (key: 0 | 1) => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n\n const front = useRef<HTMLDivElement>(null);\n\n const transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n\n const transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n\n useEffect(\n function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n\n const refObj = front.current;\n return function cleanupListener() {\n if (refObj) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n },\n [transitionStart]\n );\n\n return (\n <div\n className={classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped,\n })}\n data-testid={dataTestId}\n >\n <div className=\"card-flip--back\">{getComponent(0)}</div>\n <div\n ref={front}\n className=\"card-flip--front\"\n onTransitionEnd={transitionEnd}\n >\n {getComponent(1)}\n </div>\n </div>\n );\n};\n\nexport default CardFlip;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAQ,GAAG,QAKiB;EAAA,IALhB;IAChBC,SADgB;IAEhBC,SAFgB;IAGhBC,QAHgB;IAIhB,eAAeC;EAJC,CAKgB;;EAChC,IAAMC,YAAY,GAAIC,GAAD,IAAgB;IACnC,IAAIH,QAAQ,CAACI,MAAT,KAAoB,CAAxB,EAA2B;MACzB,MAAM,IAAIC,KAAJ,CAAU,0CAAV,CAAN;IACD;;IACD,OAAOL,QAAQ,CAACG,GAAD,CAAf;EACD,CALD;;EAOA,IAAMG,KAAK,GAAGX,MAAM,CAAiB,IAAjB,CAApB;EAEA,IAAMY,eAAe,GAAGd,WAAW,CAACe,KAAK,IAAI;IAC3C,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBC,GAAxB,CAA4B,wBAA5B;IACD;EACF,CAJkC,EAIhC,EAJgC,CAAnC;EAMA,IAAMC,aAAa,GAAGtB,WAAW,CAACe,KAAK,IAAI;IACzC,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBG,MAAxB,CAA+B,wBAA/B;IACD;EACF,CAJgC,EAI9B,EAJ8B,CAAjC;EAMAtB,SAAS,CACP,SAASuB,mCAAT,GAA+C;IAC7C,IAAI,CAACX,KAAK,CAACY,OAAX,EAAoB,MAAMb,KAAK,CAAC,eAAD,CAAX;IACpBC,KAAK,CAACY,OAAN,CAAcC,gBAAd,CAA+B,iBAA/B,EAAkDZ,eAAlD;IAEA,IAAMa,MAAM,GAAGd,KAAK,CAACY,OAArB;IACA,OAAO,SAASG,eAAT,GAA2B;MAChC,IAAID,MAAJ,EAAY;QACV,OAAOA,MAAM,CAACE,mBAAP,CAA2B,iBAA3B,EAA8Cf,eAA9C,CAAP;MACD;IACF,CAJD;EAKD,CAXM,EAYP,CAACA,eAAD,CAZO,CAAT;EAeA,oBACE;IACE,SAAS,EAAEX,UAAU,CAACE,SAAD,EAAY;MAC/B,yBAAyBC,SADM;MAE/B,wBAAwB,CAACA;IAFM,CAAZ,CADvB;IAKE,eAAaE;EALf,gBAOE;IAAK,SAAS,EAAC;EAAf,GAAkCC,YAAY,CAAC,CAAD,CAA9C,CAPF,eAQE;IACE,GAAG,EAAEI,KADP;IAEE,SAAS,EAAC,kBAFZ;IAGE,eAAe,EAAES;EAHnB,GAKGb,YAAY,CAAC,CAAD,CALf,CARF,CADF;AAkBD,CA5DD;;AA8DA,eAAeL,QAAf"}
1
+ {"version":3,"file":"CardFlip.js","names":["React","useCallback","useEffect","useRef","classNames","CardFlip","className","isFlipped","children","dataTestId","getComponent","key","length","Error","front","transitionStart","event","target","currentTarget","document","body","classList","add","transitionEnd","remove","setIsFlippingClassOnTransitionStart","current","addEventListener","refObj","cleanupListener","removeEventListener"],"sources":["../src/CardFlip.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useRef } from 'react';\nimport classNames from 'classnames';\nimport './CardFlip.scss';\n\ntype CardFlipProps = {\n isFlipped: boolean;\n children: [React.ReactNode, React.ReactNode];\n className?: string;\n 'data-testid'?: string;\n};\n\n/**\n * Card flip component, switches between a front and back face being visible.\n * Has logic to handle overflow on body, caused by perspective transforms\n * and moves z-index to top during transition.\n * @param isFlipped true shows second child, false shows first child\n * @param children Expects exactly two children\n * @returns\n */\nconst CardFlip = ({\n className,\n isFlipped,\n children,\n 'data-testid': dataTestId,\n}: CardFlipProps): JSX.Element => {\n const getComponent = (key: 0 | 1) => {\n if (children.length !== 2) {\n throw new Error('CardFlip requires 2 children to function');\n }\n return children[key];\n };\n\n const front = useRef<HTMLDivElement>(null);\n\n const transitionStart = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.add('card-flip--is-flipping');\n }\n }, []);\n\n const transitionEnd = useCallback(event => {\n if (event.target === event.currentTarget) {\n document.body.classList.remove('card-flip--is-flipping');\n }\n }, []);\n\n useEffect(\n function setIsFlippingClassOnTransitionStart() {\n if (!front.current) throw Error('ref undefined');\n front.current.addEventListener('transitionstart', transitionStart);\n\n const refObj = front.current;\n return function cleanupListener() {\n if (refObj != null) {\n return refObj.removeEventListener('transitionstart', transitionStart);\n }\n };\n },\n [transitionStart]\n );\n\n return (\n <div\n className={classNames(className, {\n 'card-flip--show-front': isFlipped,\n 'card-flip--show-back': !isFlipped,\n })}\n data-testid={dataTestId}\n >\n <div className=\"card-flip--back\">{getComponent(0)}</div>\n <div\n ref={front}\n className=\"card-flip--front\"\n onTransitionEnd={transitionEnd}\n >\n {getComponent(1)}\n </div>\n </div>\n );\n};\n\nexport default CardFlip;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,SAA7B,EAAwCC,MAAxC,QAAsD,OAAtD;AACA,OAAOC,UAAP,MAAuB,YAAvB;;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAQ,GAAG,QAKiB;EAAA,IALhB;IAChBC,SADgB;IAEhBC,SAFgB;IAGhBC,QAHgB;IAIhB,eAAeC;EAJC,CAKgB;;EAChC,IAAMC,YAAY,GAAIC,GAAD,IAAgB;IACnC,IAAIH,QAAQ,CAACI,MAAT,KAAoB,CAAxB,EAA2B;MACzB,MAAM,IAAIC,KAAJ,CAAU,0CAAV,CAAN;IACD;;IACD,OAAOL,QAAQ,CAACG,GAAD,CAAf;EACD,CALD;;EAOA,IAAMG,KAAK,GAAGX,MAAM,CAAiB,IAAjB,CAApB;EAEA,IAAMY,eAAe,GAAGd,WAAW,CAACe,KAAK,IAAI;IAC3C,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBC,GAAxB,CAA4B,wBAA5B;IACD;EACF,CAJkC,EAIhC,EAJgC,CAAnC;EAMA,IAAMC,aAAa,GAAGtB,WAAW,CAACe,KAAK,IAAI;IACzC,IAAIA,KAAK,CAACC,MAAN,KAAiBD,KAAK,CAACE,aAA3B,EAA0C;MACxCC,QAAQ,CAACC,IAAT,CAAcC,SAAd,CAAwBG,MAAxB,CAA+B,wBAA/B;IACD;EACF,CAJgC,EAI9B,EAJ8B,CAAjC;EAMAtB,SAAS,CACP,SAASuB,mCAAT,GAA+C;IAC7C,IAAI,CAACX,KAAK,CAACY,OAAX,EAAoB,MAAMb,KAAK,CAAC,eAAD,CAAX;IACpBC,KAAK,CAACY,OAAN,CAAcC,gBAAd,CAA+B,iBAA/B,EAAkDZ,eAAlD;IAEA,IAAMa,MAAM,GAAGd,KAAK,CAACY,OAArB;IACA,OAAO,SAASG,eAAT,GAA2B;MAChC,IAAID,MAAM,IAAI,IAAd,EAAoB;QAClB,OAAOA,MAAM,CAACE,mBAAP,CAA2B,iBAA3B,EAA8Cf,eAA9C,CAAP;MACD;IACF,CAJD;EAKD,CAXM,EAYP,CAACA,eAAD,CAZO,CAAT;EAeA,oBACE;IACE,SAAS,EAAEX,UAAU,CAACE,SAAD,EAAY;MAC/B,yBAAyBC,SADM;MAE/B,wBAAwB,CAACA;IAFM,CAAZ,CADvB;IAKE,eAAaE;EALf,gBAOE;IAAK,SAAS,EAAC;EAAf,GAAkCC,YAAY,CAAC,CAAD,CAA9C,CAPF,eAQE;IACE,GAAG,EAAEI,KADP;IAEE,SAAS,EAAC,kBAFZ;IAGE,eAAe,EAAES;EAHnB,GAKGb,YAAY,CAAC,CAAD,CALf,CARF,CADF;AAkBD,CA5DD;;AA8DA,eAAeL,QAAf"}