@deephaven/components 0.42.1-beta.2 → 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/ComboBox.scss","../../../node_modules/bootstrap/scss/_variables.scss","../scss/new_variables.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACOA;EACE;;AAEA;EACE,cCuoBgC;EDtoBhC,OCsoBgC;;;ADjoBlC;EACE,SEfO;EFgBP;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;EACA;EACA,OGrBa;EHsBb;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE,kBA1C6B;;AA6C/B;EACE,OGpCa;EHqCb,kBGtCY;;AHwCd;EACE;;AAGF;EACE,2BGgEY;EH/DZ,4BG+DY","file":"ComboBox.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\n$cb-option-btn-color: $dropdown-link-color;\n$cb-option-keyboard-selected-bg: rgba($primary, 0.5);\n$cb-option-hover-bg: $dropdown-link-hover-bg;\n$cb-option-hover-color: $dropdown-link-hover-color;\n\n.cb-container {\n flex-wrap: nowrap;\n\n .cb-input.is-invalid + .cb-dropdown .btn {\n border-color: $form-feedback-invalid-color;\n color: $form-feedback-invalid-color;\n }\n}\n\n.cb-menu-container {\n .cb-search-input-container {\n padding: $spacer-2;\n width: 100%;\n position: fixed;\n }\n\n .cb-options-container {\n padding-top: calc(2.25rem + 2px + 1rem);\n //2.25rem + 2px is bootstrap form-control height + 1rem spacer to account for fixed height element above\n }\n .cb-options {\n max-height: 200px;\n overflow: auto;\n }\n .cb-option-btn {\n border: none;\n width: 100%;\n color: $cb-option-btn-color;\n padding: $input-btn-padding-y $input-btn-padding-x;\n white-space: nowrap;\n text-decoration: none;\n background-color: transparent;\n text-align: left;\n cursor: pointer;\n user-select: none;\n display: block;\n }\n .cb-option-btn.keyboard-active {\n background-color: $cb-option-keyboard-selected-bg;\n }\n\n .cb-option-btn:hover {\n color: $cb-option-hover-color;\n background-color: $cb-option-hover-bg;\n }\n .cb-option-btn:focus {\n outline: none;\n }\n\n .cb-options:last-child {\n border-bottom-left-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\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","//Set of spacer variables from the spacer map\n$spacer-0: map-get($spacers, 0); //0\n$spacer-1: map-get($spacers, 1);\n$spacer-2: map-get($spacers, 2);\n$spacer-3: map-get($spacers, 3);\n$spacer-4: map-get($spacers, 4);\n$spacer-5: map-get($spacers, 5);\n\n//Marching Ants for golden layout dropzone and drag and drop\n//top bottom, left right.\n//create 4 background images that are 50% color 1, 50% color 2 using graidents, two veritical, two horizontal\n//size them to ant-size and thickness\n//position those images along the egdes and make top/bottom repeat-x and left/right repeat-y\n//then offest each of those background positions by ant-size in animation to make them march.\n$ant-size: 8px;\n$ant-thickness: 1px;\n\n@mixin ants-base($color-1: black, $color-2: white) {\n background-image: linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to right, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%),\n linear-gradient(to bottom, $color-2 50%, $color-1 50%);\n background-size: $ant-size $ant-thickness, $ant-size $ant-thickness,\n $ant-thickness $ant-size, $ant-thickness $ant-size;\n background-position: 0 top, 0 bottom, left 0, right 0;\n background-repeat: repeat-x, repeat-x, repeat-y, repeat-y;\n animation: march 0.5s;\n animation-timing-function: linear;\n animation-iteration-count: infinite;\n}\n\n@mixin drag-stack($pseudo-element) {\n &::#{$pseudo-element} {\n content: ' ';\n background: $primary;\n box-shadow: $box-shadow;\n border-radius: $border-radius;\n position: absolute;\n height: 100%;\n width: 100%;\n @content;\n }\n}\n\n$focus-bg-transparency: 0.12;\n$hover-bg-transparency: 0.14;\n$active-bg-transparency: 0.28;\n$exception-transparency: 0.13;\n","// Styling overrides for bootstrap\n\n// Override / set color variables\n$red: #f95d84;\n$orange: #f37e3f;\n$yellow: #fcd65b;\n$green: #9edc6f;\n$blue: #76d9e4;\n$purple: #aa9af4;\n\n//Define some UI colors\n$interfacegray: #2d2a2e;\n$interfaceblue: #4878ea;\n$interfacewhite: #f0f0ee; //same as gray-200\n$interfaceblack: #1a171a;\n\n//Define our Gray scale\n$white: $interfacewhite;\n$gray-100: #fcfcfa;\n$gray-200: $interfacewhite;\n$gray-300: #c0bfbf;\n$gray-400: #929192;\n$gray-500: #5b5a5c;\n$gray-600: #555356;\n$gray-700: #403e41;\n$gray-800: #373438;\n$gray-850: #322f33;\n$gray-900: #211f22;\n$black: $interfaceblack;\n$content-bg: $interfacegray;\n$background: $interfaceblack;\n$foreground: $interfacewhite;\n\n//Load colors into map\n$colors: ();\n$colors: map-merge(\n (\n 'red': $red,\n 'orange': $orange,\n 'yellow': $yellow,\n 'green': $green,\n 'blue': $blue,\n 'purple': $purple,\n 'white': $white,\n 'black': $black,\n ),\n $colors\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: $interfaceblue;\n$primary-hover: darken($primary, 8%);\n$primary-dark: mix($primary, $content-bg, 25%);\n$primary-light: scale-color($primary, $lightness: -25%);\n$secondary: $gray-500;\n$secondary-hover: darken($secondary, 8%);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: $red;\n$danger-hover: darken($danger, 8%);\n$light: $gray-100;\n$mid: $gray-400; //Added a mid color, useful for input styling\n$dark: $gray-800;\n$green-dark: scale-color($green, $lightness: -45%, $saturation: -10%);\n\n$theme-colors: () !default;\n$theme-colors: map-merge(\n (\n 'primary': $primary,\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'secondary': $secondary,\n 'success': $success,\n 'info': $info,\n 'warning': $warning,\n 'danger': $danger,\n 'light': $light,\n 'dark': $dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n ),\n $theme-colors\n);\n\n$component-active-bg: $primary;\n$theme-color-interval: 9%;\n$yiq-contrasted-threshold: 180;\n\n// Override fonts\n$font-family-sans-serif: 'Fira Sans', -apple-system, blinkmacsystemfont,\n 'Segoe UI', 'Roboto', 'Helvetica Neue', arial, sans-serif; //fira sans then native system ui fallbacks\n$font-family-monospace: 'Fira Mono', menlo, monaco, consolas, 'Liberation Mono',\n 'Courier New', monospace;\n$font-family-base: $font-family-sans-serif;\n\n$headings-font-weight: 400;\n\n//Text overides\n$text-muted: $gray-400;\n\n//Style Selection highlight color\n//so browsers add alpha to your color by default, ignoring opacity 1\n//by setting rgba with 0.99 it tricks browser into thinking there is alpha applied\n$text-select-color: $primary-hover;\n$text-select-color-editor: lighten(\n $gray-700,\n 15%\n); //we lighten it abit to account for that 0.01 loss, and because it needs some anyways.\n\n//Grid variables, same value as default just making easily accessible\n$grid-gutter-width: 30px;\n\n//Visual Overrides\n$border-radius: 4px;\n$box-shadow: 0 0.1rem 1rem rgba($black, 45%); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem rgba(0, 0, 0, 45%); //darkest shadow for $black popups over $black UI\n\n//Override Btn\n$btn-border-radius: 4rem;\n$btn-padding-x: 1.5rem;\n$btn-transition: color 0.12s ease-in-out, background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out, box-shadow 0.12s ease-in-out; //default 0.15 is too long\n$btn-border-width: 2px;\n\n//Override Inputs\n$input-bg: $gray-600;\n$input-disabled-bg: $gray-800;\n$input-color: $foreground;\n$input-border-color: $gray-400;\n$input-placeholder-color: $gray-400;\n$input-focus-border-color: rgba($primary, 85%);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: rgba($component-active-bg, 35%);\n$input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color;\n\n//checkbox\n$custom-control-indicator-bg: $gray-600;\n$custom-control-indicator-bg-size: 75% 75%;\n$custom-control-indicator-disabled-bg: $gray-800;\n$custom-control-indicator-checked-disabled-bg: $gray-800;\n$custom-control-label-disabled-color: $gray-400;\n\n//Custom Select\n$custom-select-indicator-color: $gray-400;\n$custom-select-bg-size: 16px 16px;\n//dhSort icon encoded\n$custom-select-indicator: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='#{$custom-select-indicator-color}' d='M4 7l-.4-.8 4-3.7h.8l4 3.7-.4.8H4zm0 2l-.4.8 4 3.7h.8l4-3.7L12 9H4z'/%3E%3C/svg%3E\"),\n '#',\n '%23'\n);\n$custom-select-focus-box-shadow: $input-btn-focus-box-shadow;\n$custom-select-disabled-color: darken($gray-400, 5%);\n$custom-select-disabled-bg: $gray-800;\n\n//modal\n$modal-content-bg: $gray-200;\n$modal-content-border-width: 0;\n$modal-md: 550px;\n\n// Toast notification\n$toast-bg: $primary-dark;\n$toast-color: $foreground;\n$toast-error-bg: mix($danger, $content-bg, 15%);\n$toast-error-color: $foreground;\n\n//tooltips\n$tooltip-bg: $gray-700;\n$tooltip-color: $foreground;\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem rgba($black, 80%);\n\n//drowdowns\n$dropdown-bg: $gray-600;\n$dropdown-link-color: $foreground;\n$dropdown-link-hover-color: $foreground;\n$dropdown-link-hover-bg: $primary;\n$dropdown-divider-bg: $gray-700;\n\n//context menus\n$contextmenu-bg: $gray-600;\n$contextmenu-color: $foreground;\n$contextmenu-disabled-color: $text-muted;\n$contextmenu-keyboard-selected-bg: rgba($primary, 50%);\n$contextmenu-selected-bg: $primary;\n$contextmenu-selected-color: $foreground;\n\n//links\n$link-color: $gray-400;\n$link-hover-color: $foreground;\n\n//progress-bar\n$progress-bg: $gray-600;\n$progress-border-radius: 1rem;\n\n// Set global options\n$enable-shadows: false;\n$enable-gradients: false;\n$enable-print-styles: false; //I don't think anyone should expect to \"print\" this app.\n\n// Transition times\n$transition: 0.15s;\n$transition-mid: 0.2s;\n$transition-long: 0.3s;\n$transition-slow: 0.6s;\n\n//form-validation icon, uses vsWarning icon encoded here as svg\n$form-feedback-icon-invalid-color: theme-color('danger');\n$form-feedback-icon-invalid: str-replace(\n url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cg fill='none'%3E%3Cg fill='#{$form-feedback-icon-invalid-color}'%3E%3Cpath d='M7.56 1h.88l6.54 12.26-.44.74H1.44L1 13.26 7.56 1zM8 2.28 2.28 13H13.7L8 2.28zM8.625 12v-1h-1.25v1h1.25zm-1.25-2V6h1.25v4h-1.25z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E \"),\n '#',\n '%23'\n);\n"]}
package/dist/ComboBox.js DELETED
@@ -1,487 +0,0 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
3
- function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
4
- function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
5
- function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
6
- /**
7
- * Combobox that combines a input box with a searchable dropdown menu
8
- *
9
- * props:
10
- * @param {array} options :[{
11
- * title: 'option title for display',
12
- * value: 'option value' //option value
13
- * }]
14
- * @param {string} inputPlaceholder place holder for the input box
15
- * @param {string} searchPlaceholder place holder for the search box in drop down search box
16
- * @param {boolean} disabled disable both input & drop down
17
- *
18
- *
19
- */
20
- import React, { Component } from 'react';
21
- import PropTypes from 'prop-types';
22
- import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
23
- import { vsTriangleDown } from '@deephaven/icons';
24
- import memoize from 'memoizee';
25
- import classNames from 'classnames';
26
- import SearchInput from "./SearchInput.js";
27
- import { Popper } from "./popper/index.js";
28
- import "./ComboBox.css";
29
- var MENU_NAVIGATION_DIRECTION;
30
- (function (MENU_NAVIGATION_DIRECTION) {
31
- MENU_NAVIGATION_DIRECTION["UP"] = "UP";
32
- MENU_NAVIGATION_DIRECTION["DOWN"] = "DOWN";
33
- })(MENU_NAVIGATION_DIRECTION || (MENU_NAVIGATION_DIRECTION = {}));
34
- class ComboBox extends Component {
35
- constructor(props) {
36
- super(props);
37
- _defineProperty(this, "popper", void 0);
38
- _defineProperty(this, "cbContainer", void 0);
39
- _defineProperty(this, "toggleButton", void 0);
40
- _defineProperty(this, "menuContainer", void 0);
41
- _defineProperty(this, "input", void 0);
42
- _defineProperty(this, "searchInput", void 0);
43
- _defineProperty(this, "getCachedFilteredOptions", memoize((options, input) => options.filter(option => option.title.toLowerCase().indexOf(input.toLowerCase()) >= 0 || option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0)));
44
- this.state = {
45
- value: '',
46
- filter: '',
47
- filteredOptions: props.options,
48
- keyboardOptionIndex: -1,
49
- menuIsOpen: false,
50
- inputWidth: 100
51
- };
52
- this.toggleMenu = this.toggleMenu.bind(this);
53
- this.handleMenuKeyDown = this.handleMenuKeyDown.bind(this);
54
- this.handleMenuBlur = this.handleMenuBlur.bind(this);
55
- this.closeMenu = this.closeMenu.bind(this);
56
- this.handleInputChange = this.handleInputChange.bind(this);
57
- this.handleInputKeyDown = this.handleInputKeyDown.bind(this);
58
- this.handleInputBlur = this.handleInputBlur.bind(this);
59
- this.handleFilterChange = this.handleFilterChange.bind(this);
60
- this.handleOptionClick = this.handleOptionClick.bind(this);
61
- this.handleOptionFocus = this.handleOptionFocus.bind(this);
62
- this.handleMenuOpened = this.handleMenuOpened.bind(this);
63
- this.handleMenuExited = this.handleMenuExited.bind(this);
64
- this.popper = /*#__PURE__*/React.createRef();
65
- this.cbContainer = /*#__PURE__*/React.createRef();
66
- this.toggleButton = /*#__PURE__*/React.createRef();
67
- this.menuContainer = /*#__PURE__*/React.createRef();
68
- this.input = /*#__PURE__*/React.createRef();
69
- this.searchInput = /*#__PURE__*/React.createRef();
70
- }
71
- componentDidUpdate() {
72
- var {
73
- menuIsOpen,
74
- keyboardOptionIndex
75
- } = this.state;
76
- if (menuIsOpen && keyboardOptionIndex >= 0) {
77
- this.scrollOptionIntoView();
78
- }
79
- }
80
- setInputWidth() {
81
- if (this.cbContainer.current) {
82
- this.setState({
83
- inputWidth: this.cbContainer.current.getBoundingClientRect().width
84
- });
85
- }
86
- }
87
- focus() {
88
- var _this$input$current;
89
- (_this$input$current = this.input.current) === null || _this$input$current === void 0 ? void 0 : _this$input$current.focus();
90
- }
91
- resetValue() {
92
- this.setState({
93
- value: ''
94
- });
95
- }
96
- updateInputValue(value) {
97
- var {
98
- onChange
99
- } = this.props;
100
- this.setState({
101
- value
102
- });
103
- onChange(value);
104
- }
105
- handleResize() {
106
- this.setInputWidth();
107
- }
108
- handleMenuKeyDown(event) {
109
- var _menuOptions$keyboard, _this$input$current2;
110
- var {
111
- filter,
112
- filteredOptions,
113
- keyboardOptionIndex
114
- } = this.state;
115
- var {
116
- options
117
- } = this.props;
118
- var menuOptions = filter ? filteredOptions : options;
119
- switch (event.key) {
120
- case 'Enter':
121
- if (((_menuOptions$keyboard = menuOptions[keyboardOptionIndex]) === null || _menuOptions$keyboard === void 0 ? void 0 : _menuOptions$keyboard.value) != null) {
122
- this.updateInputValue(menuOptions[keyboardOptionIndex].value);
123
- }
124
- this.closeMenu();
125
- (_this$input$current2 = this.input.current) === null || _this$input$current2 === void 0 ? void 0 : _this$input$current2.focus();
126
- event.stopPropagation();
127
- event.preventDefault();
128
- break;
129
- case 'ArrowUp':
130
- this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.UP);
131
- event.stopPropagation();
132
- event.preventDefault();
133
- break;
134
- case 'ArrowDown':
135
- this.handleMenuNavigation(ComboBox.MENU_NAVIGATION_DIRECTION.DOWN);
136
- event.stopPropagation();
137
- event.preventDefault();
138
- break;
139
- case 'Escape':
140
- if (filter !== '') {
141
- this.setState({
142
- filter: ''
143
- });
144
- event.stopPropagation(); // Don't trigger blur on input element
145
- } else {
146
- this.closeMenu();
147
- }
148
- break;
149
- case 'Tab':
150
- if (!event.shiftKey && keyboardOptionIndex === menuOptions.length - 1) {
151
- this.closeMenu();
152
- }
153
- break;
154
- default:
155
- break;
156
- }
157
- }
158
- handleMenuNavigation(direction) {
159
- var {
160
- filter,
161
- filteredOptions,
162
- keyboardOptionIndex
163
- } = this.state;
164
- var {
165
- options
166
- } = this.props;
167
- var menuOptions = filter ? filteredOptions : options;
168
- var menuOptionsLength = menuOptions.length;
169
- var delta = 0;
170
- switch (direction) {
171
- case ComboBox.MENU_NAVIGATION_DIRECTION.UP:
172
- delta = -1;
173
- break;
174
- case ComboBox.MENU_NAVIGATION_DIRECTION.DOWN:
175
- delta = 1;
176
- break;
177
- }
178
- if (delta !== 0) {
179
- this.setState({
180
- keyboardOptionIndex: (keyboardOptionIndex + delta + menuOptionsLength) % menuOptionsLength
181
- });
182
- }
183
- }
184
- handleInputKeyDown(event) {
185
- var {
186
- onEnter
187
- } = this.props;
188
- var {
189
- menuIsOpen
190
- } = this.state;
191
- if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
192
- if (!menuIsOpen) {
193
- this.openMenu();
194
- }
195
- } else if (event.key === 'Enter') {
196
- onEnter();
197
- }
198
- }
199
- handleInputChange(event) {
200
- this.updateInputValue(event.target.value);
201
- }
202
- handleOptionClick(event) {
203
- var _this$input$current3;
204
- var optionIndex = Number(event.currentTarget.value);
205
- var {
206
- filter,
207
- filteredOptions
208
- } = this.state;
209
- var {
210
- options
211
- } = this.props;
212
- var menuOptions = filter ? filteredOptions : options;
213
- this.updateInputValue(menuOptions[optionIndex].value);
214
- this.closeMenu();
215
- (_this$input$current3 = this.input.current) === null || _this$input$current3 === void 0 ? void 0 : _this$input$current3.focus();
216
- }
217
- handleOptionFocus(event) {
218
- this.setState({
219
- keyboardOptionIndex: Number(event.target.value)
220
- });
221
- }
222
- handleFilterChange(event) {
223
- var _this$popper$current;
224
- var {
225
- options
226
- } = this.props;
227
- var filter = event.target.value;
228
- var filteredOptions = this.getCachedFilteredOptions(options, filter);
229
- this.setState({
230
- filter,
231
- filteredOptions,
232
- keyboardOptionIndex: 0
233
- });
234
- (_this$popper$current = this.popper.current) === null || _this$popper$current === void 0 ? void 0 : _this$popper$current.scheduleUpdate();
235
- }
236
- handleMenuBlur(event) {
237
- // close if menu blurs, unless its an internal option or the toggleButton which triggers close via click
238
- if (event.relatedTarget instanceof Element && this.popper.current != null && this.popper.current.element.contains(event.relatedTarget) || event.relatedTarget === this.toggleButton.current) {
239
- return;
240
- }
241
- this.closeMenu(false);
242
- }
243
- handleInputBlur(event) {
244
- // if blur event is caused by focusing on search input or open menu by keyboard, don't close the menu
245
- var {
246
- menuIsOpen
247
- } = this.state;
248
- if (menuIsOpen && event.relatedTarget instanceof Element && this.popper.current != null && this.popper.current.element.contains(event.relatedTarget)) {
249
- return;
250
- }
251
- this.closeMenu(false);
252
- }
253
- handleMenuOpened() {
254
- var _this$searchInput$cur;
255
- this.scrollOptionIntoView();
256
- (_this$searchInput$cur = this.searchInput.current) === null || _this$searchInput$cur === void 0 ? void 0 : _this$searchInput$cur.focus();
257
- }
258
- handleMenuExited() {
259
- var {
260
- menuIsOpen
261
- } = this.state;
262
- if (menuIsOpen) {
263
- var _this$popper$current2;
264
- this.setState({
265
- menuIsOpen: false
266
- });
267
- (_this$popper$current2 = this.popper.current) === null || _this$popper$current2 === void 0 ? void 0 : _this$popper$current2.hide();
268
- }
269
- this.setState({
270
- filter: ''
271
- });
272
- }
273
- toggleMenu(event) {
274
- var {
275
- menuIsOpen
276
- } = this.state;
277
- if (menuIsOpen) {
278
- this.closeMenu();
279
- } else {
280
- this.openMenu();
281
- }
282
- event.stopPropagation();
283
- }
284
- openMenu() {
285
- this.updateKeyboardIndex();
286
- this.setInputWidth();
287
- this.setState({
288
- menuIsOpen: true
289
- });
290
- window.requestAnimationFrame(() => {
291
- var _this$popper$current3;
292
- (_this$popper$current3 = this.popper.current) === null || _this$popper$current3 === void 0 ? void 0 : _this$popper$current3.show();
293
- });
294
- }
295
- closeMenu() {
296
- var _this$popper$current4;
297
- var focusInput = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
298
- this.setState({
299
- menuIsOpen: false
300
- });
301
- if (focusInput) {
302
- var _this$input$current4;
303
- (_this$input$current4 = this.input.current) === null || _this$input$current4 === void 0 ? void 0 : _this$input$current4.focus();
304
- }
305
- (_this$popper$current4 = this.popper.current) === null || _this$popper$current4 === void 0 ? void 0 : _this$popper$current4.hide();
306
- }
307
- updateKeyboardIndex() {
308
- var {
309
- value,
310
- filter,
311
- filteredOptions
312
- } = this.state;
313
- var {
314
- options
315
- } = this.props;
316
- var menuOptions = filter ? filteredOptions : options;
317
- var valueIndex = menuOptions.findIndex(option => option.value === value);
318
- this.setState({
319
- keyboardOptionIndex: valueIndex
320
- });
321
- }
322
- scrollOptionIntoView() {
323
- var _this$menuContainer$c;
324
- var activeOption = (_this$menuContainer$c = this.menuContainer.current) === null || _this$menuContainer$c === void 0 ? void 0 : _this$menuContainer$c.querySelector('.cb-option-btn.keyboard-active');
325
- if (activeOption instanceof HTMLElement) {
326
- activeOption.scrollIntoView({
327
- block: 'nearest',
328
- inline: 'nearest'
329
- });
330
- }
331
- }
332
- renderMenuElement() {
333
- var {
334
- searchPlaceholder
335
- } = this.props;
336
- var {
337
- filter,
338
- inputWidth
339
- } = this.state;
340
- return /*#__PURE__*/React.createElement("div", {
341
- className: "cb-menu-container",
342
- ref: this.menuContainer,
343
- role: "presentation",
344
- onKeyDown: this.handleMenuKeyDown,
345
- onClick: event => {
346
- event.stopPropagation();
347
- },
348
- style: {
349
- width: inputWidth
350
- },
351
- onBlur: this.handleMenuBlur
352
- }, /*#__PURE__*/React.createElement("div", {
353
- className: "cb-search-input-container"
354
- }, /*#__PURE__*/React.createElement(SearchInput, {
355
- value: filter,
356
- ref: this.searchInput,
357
- onChange: this.handleFilterChange,
358
- className: "cb-search-input",
359
- placeholder: searchPlaceholder
360
- })), /*#__PURE__*/React.createElement("div", {
361
- className: "cb-options-container"
362
- }, /*#__PURE__*/React.createElement("div", {
363
- className: "cb-options"
364
- }, this.renderOptions())));
365
- }
366
- renderOptions() {
367
- var {
368
- options
369
- } = this.props;
370
- var {
371
- keyboardOptionIndex,
372
- filter,
373
- filteredOptions
374
- } = this.state;
375
- var menuOptions = filter ? filteredOptions : options;
376
- return menuOptions.map((option, index) => {
377
- var key = "option-".concat(index, "-").concat(option.value);
378
- return /*#__PURE__*/React.createElement("button", {
379
- key: key,
380
- type: "button",
381
- value: index,
382
- className: classNames('cb-option-btn', {
383
- 'keyboard-active': keyboardOptionIndex === index
384
- }),
385
- onClick: this.handleOptionClick,
386
- onFocus: this.handleOptionFocus
387
- }, option.title);
388
- });
389
- }
390
- render() {
391
- var {
392
- options,
393
- inputPlaceholder,
394
- disabled,
395
- className,
396
- defaultValue,
397
- spellCheck,
398
- 'data-testid': dataTestId
399
- } = this.props;
400
- var {
401
- value
402
- } = this.state;
403
- var {
404
- popperOptions
405
- } = this.props;
406
- popperOptions = _objectSpread({
407
- placement: 'bottom-end',
408
- modifiers: {
409
- preventOverflow: {
410
- enabled: false
411
- }
412
- }
413
- }, popperOptions);
414
- return /*#__PURE__*/React.createElement("div", {
415
- className: "input-group cb-container",
416
- ref: this.cbContainer
417
- }, /*#__PURE__*/React.createElement("input", {
418
- value: value || defaultValue,
419
- className: classNames('form-control', className, 'cb-input'),
420
- ref: this.input,
421
- onChange: this.handleInputChange,
422
- placeholder: inputPlaceholder || (options[0] != null ? options[0].title : undefined),
423
- disabled: disabled,
424
- onBlur: this.handleInputBlur,
425
- onKeyDown: this.handleInputKeyDown,
426
- spellCheck: spellCheck,
427
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-input") : undefined
428
- }), /*#__PURE__*/React.createElement("div", {
429
- className: "input-group-append cb-dropdown"
430
- }, /*#__PURE__*/React.createElement("button", {
431
- type: "button",
432
- className: "btn cb-btn form-control",
433
- ref: this.toggleButton,
434
- onClick: this.toggleMenu,
435
- onKeyDown: this.handleInputKeyDown,
436
- disabled: disabled,
437
- "data-testid": dataTestId !== undefined ? "".concat(dataTestId, "-btn") : undefined
438
- }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
439
- icon: vsTriangleDown
440
- }), /*#__PURE__*/React.createElement(Popper, {
441
- ref: this.popper,
442
- options: popperOptions,
443
- className: classNames('combobox interactive'),
444
- onEntered: this.handleMenuOpened,
445
- onExited: this.handleMenuExited
446
- }, this.renderMenuElement()))));
447
- }
448
- }
449
- _defineProperty(ComboBox, "MENU_NAVIGATION_DIRECTION", MENU_NAVIGATION_DIRECTION);
450
- _defineProperty(ComboBox, "DROP_DOWN_MENU_HEIGHT", 200);
451
- _defineProperty(ComboBox, "propTypes", {
452
- options: PropTypes.arrayOf(PropTypes.shape({
453
- title: PropTypes.string.isRequired,
454
- value: PropTypes.string.isRequired
455
- })).isRequired,
456
- popperOptions: PropTypes.shape({
457
- title: PropTypes.string.isRequired,
458
- value: PropTypes.string.isRequired
459
- }),
460
- onChange: PropTypes.func,
461
- inputPlaceholder: PropTypes.string,
462
- searchPlaceholder: PropTypes.string,
463
- disabled: PropTypes.bool,
464
- className: PropTypes.string,
465
- defaultValue: PropTypes.string,
466
- spellCheck: PropTypes.bool,
467
- onEnter: PropTypes.func,
468
- 'data-testid': PropTypes.string
469
- });
470
- _defineProperty(ComboBox, "defaultProps", {
471
- onChange() {
472
- // no-op
473
- },
474
- inputPlaceholder: '',
475
- searchPlaceholder: 'Search',
476
- disabled: false,
477
- className: '',
478
- defaultValue: '',
479
- popperOptions: null,
480
- spellCheck: true,
481
- onEnter() {
482
- // no-op
483
- },
484
- 'data-testid': undefined
485
- });
486
- export default ComboBox;
487
- //# sourceMappingURL=ComboBox.js.map