@deephaven/components 0.42.1-beta.4 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. package/dist/Button.d.ts +1 -1
  2. package/package.json +7 -7
  3. package/dist/AutoCompleteInput.css +0 -35
  4. package/dist/AutoCompleteInput.css.map +0 -1
  5. package/dist/AutoCompleteInput.js +0 -496
  6. package/dist/AutoCompleteInput.js.map +0 -1
  7. package/dist/AutoResizeTextarea.css +0 -11
  8. package/dist/AutoResizeTextarea.css.map +0 -1
  9. package/dist/AutoResizeTextarea.js +0 -128
  10. package/dist/AutoResizeTextarea.js.map +0 -1
  11. package/dist/BasicModal.js +0 -112
  12. package/dist/BasicModal.js.map +0 -1
  13. package/dist/Button.js +0 -193
  14. package/dist/Button.js.map +0 -1
  15. package/dist/ButtonGroup.js +0 -31
  16. package/dist/ButtonGroup.js.map +0 -1
  17. package/dist/ButtonOld.js +0 -41
  18. package/dist/ButtonOld.js.map +0 -1
  19. package/dist/CardFlip.css +0 -36
  20. package/dist/CardFlip.css.map +0 -1
  21. package/dist/CardFlip.js +0 -61
  22. package/dist/CardFlip.js.map +0 -1
  23. package/dist/Checkbox.js +0 -104
  24. package/dist/Checkbox.js.map +0 -1
  25. package/dist/Collapse.js +0 -89
  26. package/dist/Collapse.js.map +0 -1
  27. package/dist/ComboBox.css +0 -50
  28. package/dist/ComboBox.css.map +0 -1
  29. package/dist/ComboBox.js +0 -487
  30. package/dist/ComboBox.js.map +0 -1
  31. package/dist/CopyButton.js +0 -30
  32. package/dist/CopyButton.js.map +0 -1
  33. package/dist/CustomTimeSelect.css +0 -65
  34. package/dist/CustomTimeSelect.css.map +0 -1
  35. package/dist/CustomTimeSelect.js +0 -516
  36. package/dist/CustomTimeSelect.js.map +0 -1
  37. package/dist/DateInput.js +0 -54
  38. package/dist/DateInput.js.map +0 -1
  39. package/dist/DateInputUtils.js +0 -33
  40. package/dist/DateInputUtils.js.map +0 -1
  41. package/dist/DateTimeInput.js +0 -84
  42. package/dist/DateTimeInput.js.map +0 -1
  43. package/dist/DateTimeInputUtils.js +0 -8
  44. package/dist/DateTimeInputUtils.js.map +0 -1
  45. package/dist/DebouncedSearchInput.js +0 -79
  46. package/dist/DebouncedSearchInput.js.map +0 -1
  47. package/dist/DragUtils.js +0 -68
  48. package/dist/DragUtils.js.map +0 -1
  49. package/dist/DraggableItemList.css +0 -118
  50. package/dist/DraggableItemList.css.map +0 -1
  51. package/dist/DraggableItemList.js +0 -268
  52. package/dist/DraggableItemList.js.map +0 -1
  53. package/dist/EditableItemList.js +0 -105
  54. package/dist/EditableItemList.js.map +0 -1
  55. package/dist/HierarchicalCheckboxMenu.css +0 -30
  56. package/dist/HierarchicalCheckboxMenu.css.map +0 -1
  57. package/dist/HierarchicalCheckboxMenu.js +0 -218
  58. package/dist/HierarchicalCheckboxMenu.js.map +0 -1
  59. package/dist/ItemList.css +0 -13
  60. package/dist/ItemList.css.map +0 -1
  61. package/dist/ItemList.js +0 -686
  62. package/dist/ItemList.js.map +0 -1
  63. package/dist/ItemListItem.css +0 -48
  64. package/dist/ItemListItem.css.map +0 -1
  65. package/dist/ItemListItem.js +0 -214
  66. package/dist/ItemListItem.js.map +0 -1
  67. package/dist/LoadingOverlay.css +0 -24
  68. package/dist/LoadingOverlay.css.map +0 -1
  69. package/dist/LoadingOverlay.js +0 -48
  70. package/dist/LoadingOverlay.js.map +0 -1
  71. package/dist/LoadingSpinner.css +0 -8
  72. package/dist/LoadingSpinner.css.map +0 -1
  73. package/dist/LoadingSpinner.js +0 -24
  74. package/dist/LoadingSpinner.js.map +0 -1
  75. package/dist/MaskedInput.css +0 -7
  76. package/dist/MaskedInput.css.map +0 -1
  77. package/dist/MaskedInput.js +0 -394
  78. package/dist/MaskedInput.js.map +0 -1
  79. package/dist/MaskedInputUtils.js +0 -36
  80. package/dist/MaskedInputUtils.js.map +0 -1
  81. package/dist/Option.js +0 -16
  82. package/dist/Option.js.map +0 -1
  83. package/dist/RadioGroup.js +0 -34
  84. package/dist/RadioGroup.js.map +0 -1
  85. package/dist/RadioItem.js +0 -55
  86. package/dist/RadioItem.js.map +0 -1
  87. package/dist/RandomAreaPlotAnimation.css +0 -18
  88. package/dist/RandomAreaPlotAnimation.css.map +0 -1
  89. package/dist/RandomAreaPlotAnimation.js +0 -290
  90. package/dist/RandomAreaPlotAnimation.js.map +0 -1
  91. package/dist/SearchInput.css +0 -43
  92. package/dist/SearchInput.css.map +0 -1
  93. package/dist/SearchInput.js +0 -66
  94. package/dist/SearchInput.js.map +0 -1
  95. package/dist/Select.js +0 -30
  96. package/dist/Select.js.map +0 -1
  97. package/dist/SelectValueList.css +0 -38
  98. package/dist/SelectValueList.css.map +0 -1
  99. package/dist/SelectValueList.js +0 -175
  100. package/dist/SelectValueList.js.map +0 -1
  101. package/dist/SocketedButton.css +0 -123
  102. package/dist/SocketedButton.css.map +0 -1
  103. package/dist/SocketedButton.js +0 -63
  104. package/dist/SocketedButton.js.map +0 -1
  105. package/dist/SpectrumThemeDark.module.css +0 -9
  106. package/dist/SpectrumThemeDark.module.css.map +0 -1
  107. package/dist/SpectrumThemeLight.module.css +0 -9
  108. package/dist/SpectrumThemeLight.module.css.map +0 -1
  109. package/dist/SpectrumUtils.js +0 -59
  110. package/dist/SpectrumUtils.js.map +0 -1
  111. package/dist/ThemeExport.js +0 -15
  112. package/dist/ThemeExport.js.map +0 -1
  113. package/dist/ThemeExport.module.css +0 -40
  114. package/dist/ThemeExport.module.css.map +0 -1
  115. package/dist/TimeInput.js +0 -101
  116. package/dist/TimeInput.js.map +0 -1
  117. package/dist/TimeSlider.css +0 -178
  118. package/dist/TimeSlider.css.map +0 -1
  119. package/dist/TimeSlider.js +0 -314
  120. package/dist/TimeSlider.js.map +0 -1
  121. package/dist/TimeSlider.module.css +0 -185
  122. package/dist/TimeSlider.module.css.map +0 -1
  123. package/dist/ToastNotification.css +0 -62
  124. package/dist/ToastNotification.css.map +0 -1
  125. package/dist/ToastNotification.js +0 -56
  126. package/dist/ToastNotification.js.map +0 -1
  127. package/dist/UISwitch.css +0 -94
  128. package/dist/UISwitch.css.map +0 -1
  129. package/dist/UISwitch.js +0 -30
  130. package/dist/UISwitch.js.map +0 -1
  131. package/dist/ValidateLabelInput.css +0 -9
  132. package/dist/ValidateLabelInput.css.map +0 -1
  133. package/dist/ValidateLabelInput.js +0 -50
  134. package/dist/ValidateLabelInput.js.map +0 -1
  135. package/dist/context-actions/ContextActionUtils.js +0 -142
  136. package/dist/context-actions/ContextActionUtils.js.map +0 -1
  137. package/dist/context-actions/ContextActions.css +0 -157
  138. package/dist/context-actions/ContextActions.css.map +0 -1
  139. package/dist/context-actions/ContextActions.js +0 -182
  140. package/dist/context-actions/ContextActions.js.map +0 -1
  141. package/dist/context-actions/ContextMenu.js +0 -559
  142. package/dist/context-actions/ContextMenu.js.map +0 -1
  143. package/dist/context-actions/ContextMenuItem.js +0 -139
  144. package/dist/context-actions/ContextMenuItem.js.map +0 -1
  145. package/dist/context-actions/ContextMenuRoot.js +0 -135
  146. package/dist/context-actions/ContextMenuRoot.js.map +0 -1
  147. package/dist/context-actions/GlobalContextAction.js +0 -53
  148. package/dist/context-actions/GlobalContextAction.js.map +0 -1
  149. package/dist/context-actions/GlobalContextActions.js +0 -28
  150. package/dist/context-actions/GlobalContextActions.js.map +0 -1
  151. package/dist/context-actions/index.js +0 -5
  152. package/dist/context-actions/index.js.map +0 -1
  153. package/dist/declaration.d.js +0 -2
  154. package/dist/declaration.d.js.map +0 -1
  155. package/dist/index.js +0 -52
  156. package/dist/index.js.map +0 -1
  157. package/dist/menu-actions/DropdownMenu.css +0 -39
  158. package/dist/menu-actions/DropdownMenu.css.map +0 -1
  159. package/dist/menu-actions/DropdownMenu.js +0 -174
  160. package/dist/menu-actions/DropdownMenu.js.map +0 -1
  161. package/dist/menu-actions/Menu.js +0 -244
  162. package/dist/menu-actions/Menu.js.map +0 -1
  163. package/dist/menu-actions/index.js +0 -4
  164. package/dist/menu-actions/index.js.map +0 -1
  165. package/dist/modal/DebouncedModal.js +0 -26
  166. package/dist/modal/DebouncedModal.js.map +0 -1
  167. package/dist/modal/InfoModal.css +0 -24
  168. package/dist/modal/InfoModal.css.map +0 -1
  169. package/dist/modal/InfoModal.js +0 -34
  170. package/dist/modal/InfoModal.js.map +0 -1
  171. package/dist/modal/Modal.js +0 -122
  172. package/dist/modal/Modal.js.map +0 -1
  173. package/dist/modal/ModalBody.js +0 -16
  174. package/dist/modal/ModalBody.js.map +0 -1
  175. package/dist/modal/ModalFooter.js +0 -14
  176. package/dist/modal/ModalFooter.js.map +0 -1
  177. package/dist/modal/ModalHeader.js +0 -27
  178. package/dist/modal/ModalHeader.js.map +0 -1
  179. package/dist/modal/index.js +0 -7
  180. package/dist/modal/index.js.map +0 -1
  181. package/dist/navigation/Menu.css +0 -13
  182. package/dist/navigation/Menu.css.map +0 -1
  183. package/dist/navigation/Menu.js +0 -25
  184. package/dist/navigation/Menu.js.map +0 -1
  185. package/dist/navigation/MenuItem.css +0 -46
  186. package/dist/navigation/MenuItem.css.map +0 -1
  187. package/dist/navigation/MenuItem.js +0 -65
  188. package/dist/navigation/MenuItem.js.map +0 -1
  189. package/dist/navigation/Page.css +0 -34
  190. package/dist/navigation/Page.css.map +0 -1
  191. package/dist/navigation/Page.js +0 -46
  192. package/dist/navigation/Page.js.map +0 -1
  193. package/dist/navigation/Stack.css +0 -24
  194. package/dist/navigation/Stack.css.map +0 -1
  195. package/dist/navigation/Stack.js +0 -82
  196. package/dist/navigation/Stack.js.map +0 -1
  197. package/dist/navigation/index.js +0 -5
  198. package/dist/navigation/index.js.map +0 -1
  199. package/dist/popper/Popper.css +0 -127
  200. package/dist/popper/Popper.css.map +0 -1
  201. package/dist/popper/Popper.js +0 -283
  202. package/dist/popper/Popper.js.map +0 -1
  203. package/dist/popper/Tooltip.js +0 -283
  204. package/dist/popper/Tooltip.js.map +0 -1
  205. package/dist/popper/index.js +0 -3
  206. package/dist/popper/index.js.map +0 -1
  207. package/dist/shortcuts/GlobalShortcuts.js +0 -47
  208. package/dist/shortcuts/GlobalShortcuts.js.map +0 -1
  209. package/dist/shortcuts/Shortcut.js +0 -393
  210. package/dist/shortcuts/Shortcut.js.map +0 -1
  211. package/dist/shortcuts/ShortcutRegistry.js +0 -78
  212. package/dist/shortcuts/ShortcutRegistry.js.map +0 -1
  213. package/dist/shortcuts/index.js +0 -5
  214. package/dist/shortcuts/index.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/AutoResizeTextarea.scss","../../../node_modules/bootstrap/scss/_variables.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,YCifsC;EDhftC;;;AAOF;EACE","file":"AutoResizeTextarea.css","sourcesContent":["/* stylelint-disable scss/at-import-no-partial-leading-underscore */\n// Consumers should be able to resolve bootstrap/ to node_modules/bootstrap\n\n//Make bootstrap functions available for use in overrides\n@import 'bootstrap/scss/_functions.scss';\n@import './bootstrap_overrides.scss';\n\n//_variable imports come after bootstrap default overrides,\n// makes all other variables and mixins from bootstrap available\n/// with just importing customer.scss\n@import 'bootstrap/scss/_variables.scss';\n@import 'bootstrap/scss/_mixins.scss';\n\n//New variables come after imports\n@import './new_variables.scss';\n","@import '../scss/custom.scss';\n\ntextarea.auto-resize-textarea {\n min-height: $input-height;\n white-space: nowrap; // all on one line while collapsed\n}\n\n// After testing in firefox, nowrap doesn't allow new lines in firefox\n// So while focused, we need to change the whitespace mode so that we can\n// spread the variables over multiple lines\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1137650\ntextarea.auto-resize-textarea:focus {\n white-space: pre;\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n\n$grays: () !default;\n$grays: map-merge(\n (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n ),\n $grays\n);\n\n$blue: #007bff !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #e83e8c !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #28a745 !default;\n$teal: #20c997 !default;\n$cyan: #17a2b8 !default;\n\n$colors: () !default;\n$colors: map-merge(\n (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n ),\n $colors\n);\n\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-800 !default;\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n ),\n $theme-colors\n);\n\n// Set a specific jump point for requesting color jumps\n$theme-color-interval: 8% !default;\n\n// The yiq lightness value that determines when the lightness of color changes from \"dark\" to \"light\". Acceptable values are between 0 and 255.\n$yiq-contrasted-threshold: 150 !default;\n\n// Customize the light and dark text colors for use in our YIQ color contrast function.\n$yiq-text-dark: $gray-900 !default;\n$yiq-text-light: $white !default;\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-prefers-reduced-motion-media-query: true !default;\n$enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS\n$enable-grid-classes: true !default;\n$enable-pointer-cursor-for-buttons: true !default;\n$enable-print-styles: true !default;\n$enable-responsive-font-sizes: false !default;\n$enable-validation-icons: true !default;\n$enable-deprecation-messages: true !default;\n\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n$spacer: 1rem !default;\n$spacers: () !default;\n$spacers: map-merge(\n (\n 0: 0,\n 1: ($spacer * .25),\n 2: ($spacer * .5),\n 3: $spacer,\n 4: ($spacer * 1.5),\n 5: ($spacer * 3)\n ),\n $spacers\n);\n\n// This variable affects the `.h-*` and `.w-*` classes.\n$sizes: () !default;\n$sizes: map-merge(\n (\n 25: 25%,\n 50: 50%,\n 75: 75%,\n 100: 100%,\n auto: auto\n ),\n $sizes\n);\n\n\n// Body\n//\n// Settings for the `<body>` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: theme-color(\"primary\") !default;\n$link-decoration: none !default;\n$link-hover-color: darken($link-color, 15%) !default;\n$link-hover-decoration: underline !default;\n// Darken percentage for links with `.text-*` class (e.g. `.text-success`)\n$emphasized-link-hover-darken-percentage: 15% !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px\n) !default;\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px\n) !default;\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 30px !default;\n$grid-row-columns: 6 !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n$line-height-lg: 1.5 !default;\n$line-height-sm: 1.5 !default;\n\n$border-width: 1px !default;\n$border-color: $gray-300 !default;\n\n$border-radius: .25rem !default;\n$border-radius-lg: .3rem !default;\n$border-radius-sm: .2rem !default;\n\n$rounded-pill: 50rem !default;\n\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n\n$component-active-color: $white !default;\n$component-active-bg: theme-color(\"primary\") !default;\n\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n\n$embed-responsive-aspect-ratios: () !default;\n$embed-responsive-aspect-ratios: join(\n (\n (21 9),\n (16 9),\n (4 3),\n (1 1),\n ),\n $embed-responsive-aspect-ratios\n);\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n$font-family-base: $font-family-sans-serif !default;\n// stylelint-enable value-keyword-case\n\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-lg: $font-size-base * 1.25 !default;\n$font-size-sm: $font-size-base * .875 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n$line-height-base: 1.5 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n\n$display1-size: 6rem !default;\n$display2-size: 5.5rem !default;\n$display3-size: 4.5rem !default;\n$display4-size: 3.5rem !default;\n\n$display1-weight: 300 !default;\n$display2-weight: 300 !default;\n$display3-weight: 300 !default;\n$display4-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$text-muted: $gray-600 !default;\n\n$blockquote-small-color: $gray-600 !default;\n$blockquote-small-font-size: $small-font-size !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n\n$hr-border-color: rgba($black, .1) !default;\n$hr-border-width: $border-width !default;\n\n$mark-padding: .2em !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default;\n$nested-kbd-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-bg: #fcf8e3 !default;\n\n$hr-margin-y: $spacer !default;\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n$table-cell-padding: .75rem !default;\n$table-cell-padding-sm: .3rem !default;\n\n$table-color: $body-color !default;\n$table-bg: null !default;\n$table-accent-bg: rgba($black, .05) !default;\n$table-hover-color: $table-color !default;\n$table-hover-bg: rgba($black, .075) !default;\n$table-active-bg: $table-hover-bg !default;\n\n$table-border-width: $border-width !default;\n$table-border-color: $border-color !default;\n\n$table-head-bg: $gray-200 !default;\n$table-head-color: $gray-700 !default;\n$table-th-font-weight: null !default;\n\n$table-dark-color: $white !default;\n$table-dark-bg: $gray-800 !default;\n$table-dark-accent-bg: rgba($white, .05) !default;\n$table-dark-hover-color: $table-dark-color !default;\n$table-dark-hover-bg: rgba($white, .075) !default;\n$table-dark-border-color: lighten($table-dark-bg, 7.5%) !default;\n\n$table-striped-order: odd !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-level: -9 !default;\n$table-border-level: -6 !default;\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .2rem !default;\n$input-btn-focus-color: rgba($component-active-bg, .25) !default;\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n$input-btn-line-height-sm: $line-height-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n$input-btn-line-height-lg: $line-height-lg !default;\n\n$input-btn-border-width: $border-width !default;\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n$btn-line-height-sm: $input-btn-line-height-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n$btn-line-height-lg: $input-btn-line-height-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-disabled-color: $gray-600 !default;\n\n$btn-block-spacing-y: .5rem !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n\n// Forms\n\n$label-margin-bottom: .5rem !default;\n\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n$input-line-height-sm: $input-btn-line-height-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n$input-line-height-lg: $input-btn-line-height-lg !default;\n\n$input-bg: $white !default;\n$input-disabled-bg: $gray-200 !default;\n\n$input-color: $gray-700 !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: inset 0 1px 1px rgba($black, .075) !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-lg: $border-radius-lg !default;\n$input-border-radius-sm: $border-radius-sm !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: lighten($component-active-bg, 25%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-text-margin-top: .25rem !default;\n\n$form-check-input-gutter: 1.25rem !default;\n$form-check-input-margin-y: .3rem !default;\n$form-check-input-margin-x: .25rem !default;\n\n$form-check-inline-margin-x: .75rem !default;\n$form-check-inline-input-margin-x: .3125rem !default;\n\n$form-grid-gutter-width: 10px !default;\n$form-group-margin-bottom: 1rem !default;\n\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n\n$custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$custom-control-gutter: .5rem !default;\n$custom-control-spacer-x: 1rem !default;\n$custom-control-cursor: null !default;\n\n$custom-control-indicator-size: 1rem !default;\n$custom-control-indicator-bg: $input-bg !default;\n\n$custom-control-indicator-bg-size: 50% 50% !default;\n$custom-control-indicator-box-shadow: $input-box-shadow !default;\n$custom-control-indicator-border-color: $gray-500 !default;\n$custom-control-indicator-border-width: $input-border-width !default;\n\n$custom-control-label-color: null !default;\n\n$custom-control-indicator-disabled-bg: $input-disabled-bg !default;\n$custom-control-label-disabled-color: $gray-600 !default;\n\n$custom-control-indicator-checked-color: $component-active-color !default;\n$custom-control-indicator-checked-bg: $component-active-bg !default;\n$custom-control-indicator-checked-disabled-bg: rgba(theme-color(\"primary\"), .5) !default;\n$custom-control-indicator-checked-box-shadow: null !default;\n$custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default;\n\n$custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-control-indicator-focus-border-color: $input-focus-border-color !default;\n\n$custom-control-indicator-active-color: $component-active-color !default;\n$custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-control-indicator-active-box-shadow: null !default;\n$custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default;\n\n$custom-checkbox-indicator-border-radius: $border-radius !default;\n$custom-checkbox-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>\") !default;\n\n$custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default;\n$custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default;\n$custom-checkbox-indicator-icon-indeterminate: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>\") !default;\n$custom-checkbox-indicator-indeterminate-box-shadow: null !default;\n$custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default;\n\n$custom-radio-indicator-border-radius: 50% !default;\n$custom-radio-indicator-icon-checked: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>\") !default;\n\n$custom-switch-width: $custom-control-indicator-size * 1.75 !default;\n$custom-switch-indicator-border-radius: $custom-control-indicator-size * .5 !default;\n$custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default;\n\n$custom-select-padding-y: $input-padding-y !default;\n$custom-select-padding-x: $input-padding-x !default;\n$custom-select-font-family: $input-font-family !default;\n$custom-select-font-size: $input-font-size !default;\n$custom-select-height: $input-height !default;\n$custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator\n$custom-select-font-weight: $input-font-weight !default;\n$custom-select-line-height: $input-line-height !default;\n$custom-select-color: $input-color !default;\n$custom-select-disabled-color: $gray-600 !default;\n$custom-select-bg: $input-bg !default;\n$custom-select-disabled-bg: $gray-200 !default;\n$custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions\n$custom-select-indicator-color: $gray-800 !default;\n$custom-select-indicator: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>\") !default;\n$custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon)\n\n$custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default;\n$custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$custom-select-border-width: $input-border-width !default;\n$custom-select-border-color: $input-border-color !default;\n$custom-select-border-radius: $border-radius !default;\n$custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default;\n\n$custom-select-focus-border-color: $input-focus-border-color !default;\n$custom-select-focus-width: $input-focus-width !default;\n$custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default;\n\n$custom-select-padding-y-sm: $input-padding-y-sm !default;\n$custom-select-padding-x-sm: $input-padding-x-sm !default;\n$custom-select-font-size-sm: $input-font-size-sm !default;\n$custom-select-height-sm: $input-height-sm !default;\n\n$custom-select-padding-y-lg: $input-padding-y-lg !default;\n$custom-select-padding-x-lg: $input-padding-x-lg !default;\n$custom-select-font-size-lg: $input-font-size-lg !default;\n$custom-select-height-lg: $input-height-lg !default;\n\n$custom-range-track-width: 100% !default;\n$custom-range-track-height: .5rem !default;\n$custom-range-track-cursor: pointer !default;\n$custom-range-track-bg: $gray-300 !default;\n$custom-range-track-border-radius: 1rem !default;\n$custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default;\n\n$custom-range-thumb-width: 1rem !default;\n$custom-range-thumb-height: $custom-range-thumb-width !default;\n$custom-range-thumb-bg: $component-active-bg !default;\n$custom-range-thumb-border: 0 !default;\n$custom-range-thumb-border-radius: 1rem !default;\n$custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge\n$custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default;\n$custom-range-thumb-disabled-bg: $gray-500 !default;\n\n$custom-file-height: $input-height !default;\n$custom-file-height-inner: $input-height-inner !default;\n$custom-file-focus-border-color: $input-focus-border-color !default;\n$custom-file-focus-box-shadow: $input-focus-box-shadow !default;\n$custom-file-disabled-bg: $input-disabled-bg !default;\n\n$custom-file-padding-y: $input-padding-y !default;\n$custom-file-padding-x: $input-padding-x !default;\n$custom-file-line-height: $input-line-height !default;\n$custom-file-font-family: $input-font-family !default;\n$custom-file-font-weight: $input-font-weight !default;\n$custom-file-color: $input-color !default;\n$custom-file-bg: $input-bg !default;\n$custom-file-border-width: $input-border-width !default;\n$custom-file-border-color: $input-border-color !default;\n$custom-file-border-radius: $input-border-radius !default;\n$custom-file-box-shadow: $input-box-shadow !default;\n$custom-file-button-color: $custom-file-color !default;\n$custom-file-button-bg: $input-group-addon-bg !default;\n$custom-file-text: (\n en: \"Browse\"\n) !default;\n\n\n// Form validation\n\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $small-font-size !default;\n$form-feedback-valid-color: theme-color(\"success\") !default;\n$form-feedback-invalid-color: theme-color(\"danger\") !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/></svg>\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>\") !default;\n\n$form-validation-states: () !default;\n$form-validation-states: map-merge(\n (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n ),\n ),\n $form-validation-states\n);\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-modal-backdrop: 1040 !default;\n$zindex-modal: 1050 !default;\n$zindex-popover: 1060 !default;\n$zindex-tooltip: 1070 !default;\n\n\n// Navs\n\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n\n$nav-divider-color: $gray-200 !default;\n$nav-divider-margin-y: $spacer * .5 !default;\n\n\n// Navbar\n\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: $spacer !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n\n$navbar-nav-scroll-max-height: 75vh !default;\n\n$navbar-dark-color: rgba($white, .5) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n\n$navbar-light-color: rgba($black, .5) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: rgba($black, .15) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $gray-200 !default;\n$dropdown-divider-margin-y: $nav-divider-margin-y !default;\n$dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: darken($gray-900, 5%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: .25rem !default;\n$dropdown-item-padding-x: 1.5rem !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default;\n\n\n// Pagination\n\n$pagination-padding-y: .5rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n$pagination-line-height: 1.25 !default;\n\n$pagination-color: $link-color !default;\n$pagination-bg: $white !default;\n$pagination-border-width: $border-width !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: $link-hover-color !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n\n\n// Jumbotron\n\n$jumbotron-padding: 2rem !default;\n$jumbotron-color: null !default;\n$jumbotron-bg: $gray-200 !default;\n\n\n// Cards\n\n$card-spacer-y: .75rem !default;\n$card-spacer-x: 1.25rem !default;\n$card-border-width: $border-width !default;\n$card-border-radius: $border-radius !default;\n$card-border-color: rgba($black, .125) !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n\n$card-img-overlay-padding: 1.25rem !default;\n\n$card-group-margin: $grid-gutter-width * .5 !default;\n$card-deck-margin: $card-group-margin !default;\n\n$card-columns-count: 3 !default;\n$card-columns-gap: 1.25rem !default;\n$card-columns-margin: $card-spacer-y !default;\n\n\n// Tooltips\n\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: .25rem !default;\n$tooltip-padding-x: .5rem !default;\n$tooltip-margin: 0 !default;\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n$tooltip-arrow-color: $tooltip-bg !default;\n\n// Form tooltips must come after regular tooltips\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: $line-height-base !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n\n\n// Popovers\n\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: rgba($black, .2) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default;\n\n$popover-header-bg: darken($popover-bg, 3%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: .75rem !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $popover-header-padding-y !default;\n$popover-body-padding-x: $popover-header-padding-x !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n$popover-arrow-color: $popover-bg !default;\n\n$popover-arrow-outer-color: fade-in($popover-border-color, .05) !default;\n\n\n// Toasts\n\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .25rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: 1px !default;\n$toast-border-color: rgba(0, 0, 0, .1) !default;\n$toast-border-radius: .25rem !default;\n$toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba(0, 0, 0, .05) !default;\n\n\n// Badges\n\n$badge-font-size: 75% !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-padding-y: .25em !default;\n$badge-padding-x: .4em !default;\n$badge-border-radius: $border-radius !default;\n\n$badge-transition: $btn-transition !default;\n$badge-focus-width: $input-btn-focus-width !default;\n\n$badge-pill-padding-x: .6em !default;\n// Use a higher than normal value to ensure completely rounded edges when\n// customizing padding or font-size on labels.\n$badge-pill-border-radius: 10rem !default;\n\n\n// Modals\n\n// Padding applied to the modal body\n$modal-inner-padding: 1rem !default;\n\n// Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: rgba($black, .2) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;\n$modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n$modal-header-border-color: $border-color !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n$modal-header-padding-y: 1rem !default;\n$modal-header-padding-x: 1rem !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-xl: 1140px !default;\n$modal-lg: 800px !default;\n$modal-md: 500px !default;\n$modal-sm: 300px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n$alert-padding-y: .75rem !default;\n$alert-padding-x: 1.25rem !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n\n$alert-bg-level: -10 !default;\n$alert-border-level: -9 !default;\n$alert-color-level: 6 !default;\n\n\n// Progress bars\n\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: theme-color(\"primary\") !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n\n\n// List group\n\n$list-group-color: null !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: .75rem !default;\n$list-group-item-padding-x: 1.25rem !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n\n\n// Image thumbnails\n\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: $gray-300 !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default;\n\n\n// Figures\n\n$figure-caption-font-size: 90% !default;\n$figure-caption-color: $gray-600 !default;\n\n\n// Breadcrumbs\n\n$breadcrumb-font-size: null !default;\n\n$breadcrumb-padding-y: .75rem !default;\n$breadcrumb-padding-x: 1rem !default;\n$breadcrumb-item-padding: .5rem !default;\n\n$breadcrumb-margin-bottom: 1rem !default;\n\n$breadcrumb-bg: $gray-200 !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n\n$breadcrumb-border-radius: $border-radius !default;\n\n\n// Carousel\n\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n\n$carousel-control-icon-width: 20px !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n\n\n// Spinners\n\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n\n\n// Close\n\n$close-font-size: $font-size-base * 1.5 !default;\n$close-font-weight: $font-weight-bold !default;\n$close-color: $black !default;\n$close-text-shadow: 0 1px 0 $white !default;\n\n\n// Code\n\n$code-font-size: 87.5% !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .2rem !default;\n$kbd-padding-x: .4rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: $white !default;\n$kbd-bg: $gray-900 !default;\n\n$pre-color: $gray-900 !default;\n$pre-scrollable-max-height: 340px !default;\n\n\n// Utilities\n\n$displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default;\n$overflows: auto, hidden !default;\n$positions: static, relative, absolute, fixed, sticky !default;\n$user-selects: all, auto, none !default;\n\n\n// Printing\n\n$print-page-size: a3 !default;\n$print-body-min-width: map-get($grid-breakpoints, \"lg\") !default;\n"]}
@@ -1,128 +0,0 @@
1
- import React, { useState, useRef, useEffect } from 'react';
2
- import PropTypes from 'prop-types';
3
- import classNames from 'classnames';
4
- import "./AutoResizeTextarea.css";
5
- /**
6
- * Makes a textarea that auto resizes based on contents, its height grows with new lines.
7
- * If a delimeter is set, such as " -" or " ", as used by jvm args or env vars
8
- * then the field will also "explode" the value by the delimiter over new lines
9
- * on focus, and implode on blur. By default, it doesn't word wrap.
10
- */
11
- function AutoResizeTextarea(_ref) {
12
- var {
13
- className = '',
14
- value: propsValue,
15
- onChange,
16
- spellCheck = false,
17
- placeholder = '',
18
- disabled = false,
19
- delimiter = '',
20
- id = '',
21
- 'data-testid': dataTestId
22
- } = _ref;
23
- var [value, setValue] = useState(propsValue);
24
- var [isPastedChange, setIsPastedChange] = useState(false);
25
- var element = useRef(null);
26
- useEffect(function syncStateWithProp() {
27
- // keep state value in sync with prop changes
28
- setValue(propsValue);
29
- }, [propsValue]);
30
- function explode(input) {
31
- // split by delimiter, commonly " " or " -"
32
- // strip empty strings (if delimiter is space, and there are multiple spaces in a row)
33
- // and join with new line and a trimmed delimeter (get rid of leading spaces)
34
- return input.trim().split(delimiter).filter(string => string) // remove empty strings
35
- .join("\n".concat(delimiter.trim()));
36
- }
37
- function implode(input) {
38
- return input.split('\n').map(string => string.trim()).join(' ');
39
- }
40
- function reCalculateLayout() {
41
- if (!element.current) {
42
- return;
43
- }
44
- element.current.style.height = '0'; // shrink component to get scrollHeight
45
- var resizedHeight = element.current.scrollHeight + (element.current.offsetHeight - element.current.clientHeight);
46
- // accounts for border, padding is captured by scroll height
47
- if (resizedHeight > 0) element.current.style.height = "".concat(resizedHeight, "px");
48
- }
49
- function handleChange(event) {
50
- var newValue = event.target.value;
51
- if (isPastedChange) {
52
- if (delimiter) newValue = explode(newValue);
53
- setIsPastedChange(false);
54
- }
55
- setValue(newValue);
56
- onChange(newValue);
57
- }
58
- function handleFocus() {
59
- if (!element.current) {
60
- return;
61
- }
62
- if (delimiter) {
63
- setValue(explode(value));
64
- reCalculateLayout();
65
- }
66
- element.current.scrollLeft = 0;
67
- // scroll left as it can be disorienting if you click on a long line
68
- }
69
-
70
- // make it explode when dragging the resize handle
71
- // by making it trigger focus (which normally doesn't
72
- // trigger when just resizing).
73
- function handleMouseDown() {
74
- if (!element.current) return;
75
- if (document.activeElement === element.current) return;
76
- element.current.focus();
77
- }
78
- function handleBlur() {
79
- if (delimiter) {
80
- setValue(implode(value));
81
- onChange(implode(value));
82
- }
83
- }
84
- function handlePaste() {
85
- setIsPastedChange(true);
86
- }
87
- useEffect(function reCalculate() {
88
- reCalculateLayout();
89
- }, [value]);
90
- return /*#__PURE__*/React.createElement("textarea", {
91
- ref: element,
92
- id: id,
93
- className: classNames(className, 'auto-resize-textarea form-control'),
94
- placeholder: placeholder,
95
- value: value,
96
- rows: 1,
97
- onChange: handleChange,
98
- onFocus: handleFocus,
99
- onMouseDown: handleMouseDown,
100
- onBlur: handleBlur,
101
- onPaste: handlePaste,
102
- spellCheck: spellCheck,
103
- disabled: disabled,
104
- "data-testid": dataTestId
105
- });
106
- }
107
- AutoResizeTextarea.propTypes = {
108
- value: PropTypes.string.isRequired,
109
- onChange: PropTypes.func.isRequired,
110
- className: PropTypes.string,
111
- placeholder: PropTypes.string,
112
- spellCheck: PropTypes.bool,
113
- disabled: PropTypes.bool,
114
- delimiter: PropTypes.string,
115
- id: PropTypes.string,
116
- 'data-testid': PropTypes.string
117
- };
118
- AutoResizeTextarea.defaultProps = {
119
- className: '',
120
- id: '',
121
- placeholder: '',
122
- disabled: false,
123
- spellCheck: false,
124
- delimiter: '',
125
- 'data-testid': undefined
126
- };
127
- export default AutoResizeTextarea;
128
- //# sourceMappingURL=AutoResizeTextarea.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AutoResizeTextarea.js","names":["React","useState","useRef","useEffect","PropTypes","classNames","AutoResizeTextarea","className","value","propsValue","onChange","spellCheck","placeholder","disabled","delimiter","id","dataTestId","setValue","isPastedChange","setIsPastedChange","element","syncStateWithProp","explode","input","trim","split","filter","string","join","implode","map","reCalculateLayout","current","style","height","resizedHeight","scrollHeight","offsetHeight","clientHeight","handleChange","event","newValue","target","handleFocus","scrollLeft","handleMouseDown","document","activeElement","focus","handleBlur","handlePaste","reCalculate","propTypes","isRequired","func","bool","defaultProps","undefined"],"sources":["../src/AutoResizeTextarea.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport classNames from 'classnames';\n\nimport './AutoResizeTextarea.scss';\n\ninterface AutoResizeTextareaProps {\n value: string;\n onChange: (val: string) => void;\n className?: string;\n spellCheck?: boolean;\n placeholder?: string;\n disabled?: boolean;\n delimiter?: string;\n id?: string;\n 'data-testid'?: string;\n}\n\n/**\n * Makes a textarea that auto resizes based on contents, its height grows with new lines.\n * If a delimeter is set, such as \" -\" or \" \", as used by jvm args or env vars\n * then the field will also \"explode\" the value by the delimiter over new lines\n * on focus, and implode on blur. By default, it doesn't word wrap.\n */\nfunction AutoResizeTextarea({\n className = '',\n value: propsValue,\n onChange,\n spellCheck = false,\n placeholder = '',\n disabled = false,\n delimiter = '',\n id = '',\n 'data-testid': dataTestId,\n}: AutoResizeTextareaProps): JSX.Element {\n const [value, setValue] = useState(propsValue);\n const [isPastedChange, setIsPastedChange] = useState(false);\n const element = useRef<HTMLTextAreaElement>(null);\n\n useEffect(\n function syncStateWithProp() {\n // keep state value in sync with prop changes\n setValue(propsValue);\n },\n [propsValue]\n );\n\n function explode(input: string) {\n // split by delimiter, commonly \" \" or \" -\"\n // strip empty strings (if delimiter is space, and there are multiple spaces in a row)\n // and join with new line and a trimmed delimeter (get rid of leading spaces)\n return input\n .trim()\n .split(delimiter)\n .filter(string => string) // remove empty strings\n .join(`\\n${delimiter.trim()}`);\n }\n\n function implode(input: string) {\n return input\n .split('\\n')\n .map(string => string.trim())\n .join(' ');\n }\n\n function reCalculateLayout() {\n if (!element.current) {\n return;\n }\n element.current.style.height = '0'; // shrink component to get scrollHeight\n const resizedHeight =\n element.current.scrollHeight +\n (element.current.offsetHeight - element.current.clientHeight);\n // accounts for border, padding is captured by scroll height\n if (resizedHeight > 0) element.current.style.height = `${resizedHeight}px`;\n }\n\n function handleChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n let newValue = event.target.value;\n if (isPastedChange) {\n if (delimiter) newValue = explode(newValue);\n setIsPastedChange(false);\n }\n setValue(newValue);\n onChange(newValue);\n }\n\n function handleFocus() {\n if (!element.current) {\n return;\n }\n if (delimiter) {\n setValue(explode(value));\n reCalculateLayout();\n }\n element.current.scrollLeft = 0;\n // scroll left as it can be disorienting if you click on a long line\n }\n\n // make it explode when dragging the resize handle\n // by making it trigger focus (which normally doesn't\n // trigger when just resizing).\n function handleMouseDown() {\n if (!element.current) return;\n if (document.activeElement === element.current) return;\n element.current.focus();\n }\n\n function handleBlur() {\n if (delimiter) {\n setValue(implode(value));\n onChange(implode(value));\n }\n }\n\n function handlePaste() {\n setIsPastedChange(true);\n }\n\n useEffect(\n function reCalculate() {\n reCalculateLayout();\n },\n [value]\n );\n\n return (\n <textarea\n ref={element}\n id={id}\n className={classNames(className, 'auto-resize-textarea form-control')}\n placeholder={placeholder}\n value={value}\n rows={1}\n onChange={handleChange}\n onFocus={handleFocus}\n onMouseDown={handleMouseDown}\n onBlur={handleBlur}\n onPaste={handlePaste}\n spellCheck={spellCheck}\n disabled={disabled}\n data-testid={dataTestId}\n />\n );\n}\n\nAutoResizeTextarea.propTypes = {\n value: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n className: PropTypes.string,\n placeholder: PropTypes.string,\n spellCheck: PropTypes.bool,\n disabled: PropTypes.bool,\n delimiter: PropTypes.string,\n id: PropTypes.string,\n 'data-testid': PropTypes.string,\n};\n\nAutoResizeTextarea.defaultProps = {\n className: '',\n id: '',\n placeholder: '',\n disabled: false,\n spellCheck: false,\n delimiter: '',\n 'data-testid': undefined,\n};\n\nexport default AutoResizeTextarea;\n"],"mappings":"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"}
@@ -1,112 +0,0 @@
1
- import React, { useRef, useCallback } from 'react';
2
- import PropTypes from 'prop-types';
3
- import ButtonGroup from "./ButtonGroup.js";
4
- import Button from "./Button.js";
5
- import { Modal, ModalBody, ModalFooter, ModalHeader } from "./modal/index.js";
6
- /**
7
- * A basic modal dialog with two buttons: cancel / confirm.
8
- *
9
- * @param isOpen indicates if the modal dialog is open
10
- * @param headerText text displayed in the modal header
11
- * @param bodyText text displayed in the modal body
12
- * @param onCancel callback for the cancel button; if not provided, button not shown
13
- * @param onConfirm callback for the confirm button
14
- * @param onDiscard callback for the discard button; if not provided, button not shown
15
- * @param cancelButtonText optional text for the cancel button, defaults to 'Cancel'
16
- * @param confirmButtonText optional text for the confirm button, defaults to 'Okay'
17
- * @param discardButtonText optional text for the discard button, defaults to 'Discard'
18
- */
19
- function BasicModal(props) {
20
- var {
21
- isOpen,
22
- headerText,
23
- bodyText,
24
- onCancel,
25
- onConfirm,
26
- onDiscard,
27
- onModalDisable,
28
- cancelButtonText = 'Cancel',
29
- confirmButtonText = 'Okay',
30
- discardButtonText = 'Discard',
31
- isConfirmDanger = false,
32
- children,
33
- 'data-testid': dataTestId
34
- } = props;
35
- var confirmButton = useRef(null);
36
- var disableModalCheckbox = useRef(null);
37
- var onConfirmClicked = useCallback(() => {
38
- if (disableModalCheckbox.current !== null && disableModalCheckbox.current.checked && onModalDisable) {
39
- onModalDisable();
40
- }
41
- onConfirm();
42
- }, [onConfirm, onModalDisable]);
43
- var onOpened = useCallback(() => {
44
- var _confirmButton$curren;
45
- (_confirmButton$curren = confirmButton.current) === null || _confirmButton$curren === void 0 ? void 0 : _confirmButton$curren.focus();
46
- }, []);
47
- var modalBody = '';
48
- if (isOpen) {
49
- modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;
50
- }
51
- return /*#__PURE__*/React.createElement(Modal, {
52
- isOpen: isOpen,
53
- className: "theme-bg-light",
54
- onOpened: onOpened
55
- }, /*#__PURE__*/React.createElement(ModalHeader, {
56
- closeButton: false
57
- }, headerText), /*#__PURE__*/React.createElement(ModalBody, null, modalBody), /*#__PURE__*/React.createElement(ModalFooter, null, onModalDisable && /*#__PURE__*/React.createElement("div", {
58
- className: "custom-control custom-checkbox form-group mr-auto"
59
- }, /*#__PURE__*/React.createElement("input", {
60
- type: "checkbox",
61
- className: "custom-control-input",
62
- id: "move-confirmation-checkbox",
63
- defaultChecked: false,
64
- ref: disableModalCheckbox,
65
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-checkbox-confirm") : undefined
66
- }), /*#__PURE__*/React.createElement("label", {
67
- className: "custom-control-label",
68
- htmlFor: "move-confirmation-checkbox"
69
- }, "Don't ask me again")), onDiscard && /*#__PURE__*/React.createElement(Button, {
70
- kind: "secondary",
71
- className: "mr-auto",
72
- "data-dismiss": "modal",
73
- onClick: onDiscard,
74
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-discard") : undefined
75
- }, discardButtonText), onCancel && /*#__PURE__*/React.createElement(Button, {
76
- kind: "secondary",
77
- "data-dismiss": "modal",
78
- onClick: onCancel,
79
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-cancel") : undefined
80
- }, cancelButtonText), /*#__PURE__*/React.createElement(ButtonGroup, null, /*#__PURE__*/React.createElement(Button, {
81
- kind: isConfirmDanger ? 'danger' : 'primary',
82
- onClick: onConfirmClicked,
83
- ref: confirmButton,
84
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn-confirm") : undefined
85
- }, confirmButtonText), children)));
86
- }
87
- BasicModal.propTypes = {
88
- isOpen: PropTypes.bool.isRequired,
89
- headerText: PropTypes.string.isRequired,
90
- bodyText: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).isRequired,
91
- onCancel: PropTypes.func,
92
- onConfirm: PropTypes.func.isRequired,
93
- onDiscard: PropTypes.func,
94
- onModalDisable: PropTypes.func,
95
- cancelButtonText: PropTypes.string,
96
- confirmButtonText: PropTypes.string,
97
- discardButtonText: PropTypes.string,
98
- children: PropTypes.node,
99
- 'data-testid': PropTypes.string
100
- };
101
- BasicModal.defaultProps = {
102
- children: undefined,
103
- cancelButtonText: 'Cancel',
104
- confirmButtonText: 'Okay',
105
- discardButtonText: 'Discard',
106
- onCancel: undefined,
107
- onDiscard: undefined,
108
- onModalDisable: undefined,
109
- 'data-testid': undefined
110
- };
111
- export default BasicModal;
112
- //# sourceMappingURL=BasicModal.js.map
@@ -1 +0,0 @@
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","isConfirmDanger","children","dataTestId","confirmButton","disableModalCheckbox","onConfirmClicked","current","checked","onOpened","focus","modalBody","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\nexport interface 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 isConfirmDanger?: boolean;\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 */\nfunction BasicModal(props: BasicModalProps) {\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 isConfirmDanger = false,\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 const onOpened = useCallback(() => {\n confirmButton.current?.focus();\n }, []);\n\n let modalBody = '';\n if (isOpen) {\n modalBody = typeof bodyText === 'function' ? bodyText() : bodyText;\n }\n\n return (\n <Modal isOpen={isOpen} className=\"theme-bg-light\" onOpened={onOpened}>\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 kind=\"secondary\"\n className=\"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 kind=\"secondary\"\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={isConfirmDanger ? 'danger' : '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.js DELETED
@@ -1,193 +0,0 @@
1
- var _excluded = ["kind", "variant", "type", "tooltip", "icon", "disabled", "active", "onClick", "onContextMenu", "onMouseDown", "onMouseUp", "onMouseEnter", "onMouseLeave", "onKeyDown", "className", "style", "children", "tabIndex", "data-testid", "aria-label"];
2
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
4
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
5
- import React from 'react';
6
- import PropTypes from 'prop-types';
7
- import classNames from 'classnames';
8
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
9
- import { Tooltip } from "./popper/index.js";
10
- var BUTTON_KINDS = ['primary', 'secondary', 'tertiary', 'success', 'danger', 'inline', 'ghost'];
11
- var VARIANT_KINDS = ['group-end'];
12
- function getClassName(kind, iconOnly) {
13
- switch (kind) {
14
- case 'primary':
15
- return 'btn-primary';
16
- case 'secondary':
17
- return 'btn-outline-primary';
18
- case 'tertiary':
19
- return 'btn-secondary';
20
- case 'success':
21
- return 'btn-success';
22
- case 'danger':
23
- return 'btn-danger';
24
- case 'inline':
25
- return 'btn-inline';
26
- case 'ghost':
27
- return classNames('btn-link', {
28
- 'btn-link-icon': iconOnly,
29
- 'btn-link-icon-only': iconOnly
30
- });
31
- }
32
- }
33
- function getVariantClasses(kind) {
34
- switch (kind) {
35
- case 'group-end':
36
- return classNames('pl-2', 'pr-3');
37
- }
38
- }
39
- var Button = /*#__PURE__*/React.forwardRef((props, ref) => {
40
- var {
41
- kind,
42
- variant,
43
- type,
44
- tooltip,
45
- icon,
46
- disabled = false,
47
- active,
48
- onClick,
49
- onContextMenu,
50
- onMouseDown,
51
- onMouseUp,
52
- onMouseEnter,
53
- onMouseLeave,
54
- onKeyDown,
55
- className,
56
- style,
57
- children,
58
- tabIndex,
59
- 'data-testid': dataTestId,
60
- 'aria-label': ariaLabel
61
- } = props,
62
- rest = _objectWithoutProperties(props, _excluded);
63
- var iconOnly = Boolean(icon && children == null);
64
- var btnClassName = getClassName(kind, iconOnly);
65
- var variantClassName;
66
- if (variant) {
67
- variantClassName = getVariantClasses(variant);
68
- }
69
- var iconElem;
70
- if (icon) {
71
- iconElem = /*#__PURE__*/React.isValidElement(icon) ? icon : /*#__PURE__*/React.createElement(FontAwesomeIcon, {
72
- icon: icon
73
- });
74
- }
75
- var tooltipElem;
76
- if (tooltip !== undefined) {
77
- tooltipElem = typeof tooltip === 'string' ? /*#__PURE__*/React.createElement(Tooltip, null, tooltip) : tooltip;
78
- }
79
-
80
- // use tooltip as arial-label for iconOnly buttons only
81
- // if tooltip is also a string and aria-label is not set
82
- var ariaLabelString = ariaLabel;
83
- if (ariaLabel === undefined && iconOnly && tooltip != null && typeof tooltip === 'string') {
84
- ariaLabelString = tooltip;
85
- }
86
- var button = /*#__PURE__*/React.createElement("button", _extends({
87
- "data-testid": dataTestId,
88
- ref: ref
89
- // eslint-disable-next-line react/button-has-type
90
- ,
91
- type: type,
92
- className: classNames('btn', btnClassName, variantClassName, {
93
- active
94
- }, className),
95
- onClick: onClick,
96
- onContextMenu: onContextMenu,
97
- onMouseUp: onMouseUp,
98
- onMouseDown: onMouseDown,
99
- onMouseEnter: onMouseEnter,
100
- onMouseLeave: onMouseLeave,
101
- onKeyDown: onKeyDown,
102
- style: style,
103
- disabled: disabled,
104
- tabIndex: tabIndex,
105
- "aria-label": ariaLabelString
106
- // eslint-disable-next-line react/jsx-props-no-spreading
107
- }, rest), icon && iconElem, children, tooltip != null && !disabled && tooltipElem);
108
-
109
- // disabled buttons tooltips need a wrapped element to receive pointer events
110
- // https://jakearchibald.com/2017/events-and-disabled-form-fields/
111
-
112
- return disabled ? /*#__PURE__*/React.createElement("span", {
113
- className: "btn-disabled-wrapper"
114
- }, button, tooltip !== undefined && tooltipElem) : button;
115
- });
116
- Button.displayName = 'Button';
117
- Button.propTypes = {
118
- kind: PropTypes.oneOf(BUTTON_KINDS).isRequired,
119
- variant: PropTypes.oneOf(VARIANT_KINDS),
120
- type: PropTypes.oneOf(['submit', 'reset', 'button']),
121
- tooltip(props) {
122
- var {
123
- tooltip,
124
- icon,
125
- children
126
- } = props;
127
- if (tooltip === undefined && icon != null && children == null) {
128
- return new Error('Tooltip is required for icon only buttons');
129
- }
130
- return null;
131
- },
132
- icon(props) {
133
- var {
134
- children,
135
- icon
136
- } = props;
137
- if (icon == null && children == null) {
138
- return new Error('Icon is required if no children are provided');
139
- }
140
- if (children == null && ! /*#__PURE__*/React.isValidElement(icon) && (icon == null || icon.iconName === '' || icon.iconName == null)) {
141
- return new Error('Icon must be react element or fontawesome IconDefinition');
142
- }
143
- return null;
144
- },
145
- disabled: PropTypes.bool,
146
- active: PropTypes.bool,
147
- onClick(props) {
148
- var {
149
- onClick,
150
- type
151
- } = props;
152
- if (type === 'button' && typeof onClick !== 'function') {
153
- return new Error('type button requires an onClick function');
154
- }
155
- if (onClick !== undefined && typeof onClick !== 'function') {
156
- return new Error('onClick must be a function');
157
- }
158
- return null;
159
- },
160
- onContextMenu: PropTypes.func,
161
- onMouseUp: PropTypes.func,
162
- onMouseDown: PropTypes.func,
163
- onMouseEnter: PropTypes.func,
164
- onMouseLeave: PropTypes.func,
165
- onKeyDown: PropTypes.func,
166
- tabIndex: PropTypes.number,
167
- children: PropTypes.node,
168
- className: PropTypes.string,
169
- style: PropTypes.object,
170
- 'data-testid': PropTypes.string
171
- };
172
- Button.defaultProps = {
173
- type: 'button',
174
- onClick: undefined,
175
- onContextMenu: undefined,
176
- onMouseUp: undefined,
177
- onMouseDown: undefined,
178
- onMouseEnter: undefined,
179
- onMouseLeave: undefined,
180
- onKeyDown: undefined,
181
- variant: undefined,
182
- tooltip: undefined,
183
- icon: undefined,
184
- disabled: false,
185
- active: undefined,
186
- tabIndex: undefined,
187
- children: undefined,
188
- className: undefined,
189
- style: {},
190
- 'data-testid': undefined
191
- };
192
- export default Button;
193
- //# sourceMappingURL=Button.js.map
@@ -1 +0,0 @@
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","onContextMenu","onMouseDown","onMouseUp","onMouseEnter","onMouseLeave","onKeyDown","className","style","children","tabIndex","dataTestId","ariaLabel","rest","Boolean","btnClassName","variantClassName","iconElem","isValidElement","tooltipElem","undefined","ariaLabelString","button","displayName","propTypes","oneOf","isRequired","Error","iconName","bool","func","number","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;\nexport type 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}\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 = false,\n active,\n onClick,\n onContextMenu,\n onMouseDown,\n onMouseUp,\n onMouseEnter,\n onMouseLeave,\n onKeyDown,\n className,\n style,\n children,\n tabIndex,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n ...rest\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 onContextMenu={onContextMenu}\n onMouseUp={onMouseUp}\n onMouseDown={onMouseDown}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onKeyDown={onKeyDown}\n style={style}\n disabled={disabled}\n tabIndex={tabIndex}\n aria-label={ariaLabelString}\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...rest}\n >\n {icon && iconElem}\n {children}\n {tooltip != null && !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 !== 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 onContextMenu: PropTypes.func,\n onMouseUp: PropTypes.func,\n onMouseDown: PropTypes.func,\n onMouseEnter: PropTypes.func,\n onMouseLeave: PropTypes.func,\n onKeyDown: PropTypes.func,\n tabIndex: PropTypes.number,\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 onContextMenu: undefined,\n onMouseUp: undefined,\n onMouseDown: undefined,\n onMouseEnter: undefined,\n onMouseLeave: undefined,\n onKeyDown: undefined,\n variant: undefined,\n tooltip: undefined,\n icon: undefined,\n disabled: false,\n active: undefined,\n tabIndex: undefined,\n children: undefined,\n className: undefined,\n style: {},\n 'data-testid': undefined,\n};\n\nexport default Button;\n"],"mappings":"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"}