@deephaven/components 0.55.0 → 0.55.1-alpha-theming-bootstrap.77
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.
- package/css/BaseStyleSheet.css +878 -3622
- package/css/BaseStyleSheet.css.map +1 -1
- package/dist/AutoCompleteInput.css +4 -4
- package/dist/AutoCompleteInput.css.map +1 -1
- package/dist/Button.d.ts.map +1 -1
- package/dist/Button.js +26 -2
- package/dist/Button.js.map +1 -1
- package/dist/ComboBox.css +26 -6
- package/dist/ComboBox.css.map +1 -1
- package/dist/ComboBox.d.ts.map +1 -1
- package/dist/ComboBox.js +2 -4
- package/dist/ComboBox.js.map +1 -1
- package/dist/CustomTimeSelect.css +23 -10
- package/dist/CustomTimeSelect.css.map +1 -1
- package/dist/CustomTimeSelect.d.ts.map +1 -1
- package/dist/CustomTimeSelect.js +2 -5
- package/dist/CustomTimeSelect.js.map +1 -1
- package/dist/DraggableItemList.css +14 -14
- package/dist/DraggableItemList.css.map +1 -1
- package/dist/HierarchicalCheckboxMenu.css +20 -6
- package/dist/HierarchicalCheckboxMenu.css.map +1 -1
- package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
- package/dist/HierarchicalCheckboxMenu.js +2 -4
- package/dist/HierarchicalCheckboxMenu.js.map +1 -1
- package/dist/ItemList.css +1 -1
- package/dist/ItemList.css.map +1 -1
- package/dist/ItemListItem.css +7 -7
- package/dist/ItemListItem.css.map +1 -1
- package/dist/LoadingOverlay.css +1 -1
- package/dist/LoadingOverlay.css.map +1 -1
- package/dist/LoadingSpinner.css +2 -8
- package/dist/LoadingSpinner.css.map +1 -1
- package/dist/MaskedInput.css.map +1 -1
- package/dist/RandomAreaPlotAnimation.d.ts +1 -1
- package/dist/RandomAreaPlotAnimation.d.ts.map +1 -1
- package/dist/RandomAreaPlotAnimation.js +32 -13
- package/dist/RandomAreaPlotAnimation.js.map +1 -1
- package/dist/SearchInput.css +28 -12
- package/dist/SearchInput.css.map +1 -1
- package/dist/SearchInput.d.ts +10 -1
- package/dist/SearchInput.d.ts.map +1 -1
- package/dist/SearchInput.js +73 -7
- package/dist/SearchInput.js.map +1 -1
- package/dist/SelectValueList.css +3 -3
- package/dist/SelectValueList.css.map +1 -1
- package/dist/SocketedButton.css +33 -33
- package/dist/SocketedButton.css.map +1 -1
- package/dist/ThemeExport.module.css +33 -33
- package/dist/ThemeExport.module.css.map +1 -1
- package/dist/TimeSlider.css +10 -10
- package/dist/TimeSlider.css.map +1 -1
- package/dist/TimeSlider.module.css +10 -10
- package/dist/TimeSlider.module.css.map +1 -1
- package/dist/ToastNotification.css +4 -4
- package/dist/ToastNotification.css.map +1 -1
- package/dist/UISwitch.css +19 -19
- package/dist/UISwitch.css.map +1 -1
- package/dist/ValidateLabelInput.css +1 -1
- package/dist/ValidateLabelInput.css.map +1 -1
- package/dist/context-actions/ContextActions.css +19 -19
- package/dist/context-actions/ContextActions.css.map +1 -1
- package/dist/menu-actions/DropdownMenu.css +2 -2
- package/dist/menu-actions/DropdownMenu.css.map +1 -1
- package/dist/navigation/MenuItem.css +9 -9
- package/dist/navigation/MenuItem.css.map +1 -1
- package/dist/navigation/Page.css.map +1 -1
- package/dist/navigation/Stack.css +2 -2
- package/dist/navigation/Stack.css.map +1 -1
- package/dist/popper/Popper.css +4 -4
- package/dist/popper/Popper.css.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.d.ts +2 -0
- package/dist/shortcuts/GlobalShortcuts.d.ts.map +1 -1
- package/dist/shortcuts/GlobalShortcuts.js +14 -0
- package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
- package/dist/theme/SpectrumThemeProvider.d.ts.map +1 -1
- package/dist/theme/SpectrumThemeProvider.js +1 -0
- package/dist/theme/SpectrumThemeProvider.js.map +1 -1
- package/dist/theme/ThemeModel.d.ts +23 -5
- package/dist/theme/ThemeModel.d.ts.map +1 -1
- package/dist/theme/ThemeModel.js +67 -3
- package/dist/theme/ThemeModel.js.map +1 -1
- package/dist/theme/ThemePicker.d.ts +4 -0
- package/dist/theme/ThemePicker.d.ts.map +1 -0
- package/dist/theme/ThemePicker.js +25 -0
- package/dist/theme/ThemePicker.js.map +1 -0
- package/dist/theme/ThemeProvider.d.ts +3 -1
- package/dist/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/theme/ThemeProvider.js +16 -9
- package/dist/theme/ThemeProvider.js.map +1 -1
- package/dist/theme/ThemeUtils.d.ts +46 -8
- package/dist/theme/ThemeUtils.d.ts.map +1 -1
- package/dist/theme/ThemeUtils.js +104 -36
- package/dist/theme/ThemeUtils.js.map +1 -1
- package/dist/theme/index.d.ts +1 -0
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/theme-dark/theme-dark-components.css +1 -1
- package/dist/theme/theme-dark/theme-dark-components.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-palette.css +1 -1
- package/dist/theme/theme-dark/theme-dark-palette.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-chart.css +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-chart.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-editor.css +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-editor.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-grid.css +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic-grid.css.map +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic.css +1 -1
- package/dist/theme/theme-dark/theme-dark-semantic.css.map +1 -1
- package/dist/theme/theme-light/theme-light-palette.css +1 -1
- package/dist/theme/theme-light/theme-light-palette.css.map +1 -1
- package/dist/theme/theme-spectrum/index.d.ts +1 -0
- package/dist/theme/theme-spectrum/index.d.ts.map +1 -1
- package/dist/theme/theme-spectrum/index.js +3 -3
- package/dist/theme/theme-spectrum/index.js.map +1 -1
- package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css +1 -1
- package/dist/theme/theme-spectrum/theme-spectrum-alias.module.css.map +1 -1
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.css +1 -0
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.css.map +1 -0
- package/dist/theme/theme-svg.css +1 -0
- package/dist/theme/theme-svg.css.map +1 -0
- package/package.json +7 -7
- package/scss/BaseStyleSheet.scss +169 -82
- package/scss/bootstrap_imports.scss +49 -0
- package/scss/bootstrap_override_functions.scss +31 -0
- package/scss/bootstrap_override_mixins_background_variant.scss +16 -0
- package/scss/bootstrap_override_mixins_buttons.scss +123 -0
- package/scss/bootstrap_override_mixins_forms.scss +231 -0
- package/scss/bootstrap_override_mixins_text_emphasis.scss +21 -0
- package/scss/bootstrap_overrides.scss +144 -101
- package/scss/new_variables.scss +18 -0
- package/scss/util.scss +27 -0
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css +0 -1
- package/dist/theme/theme-spectrum/theme-spectrum-overrides.module.css.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchicalCheckboxMenu.js","names":["React","Component","FontAwesomeIcon","dhSort","classNames","Checkbox","Popper","Button","jsx","_jsx","jsxs","_jsxs","HierarchicalCheckboxMenu","isParentSelected","parent","valueMap","children","get","undefined","includesTrue","Array","from","values","includes","includesFalse","constructor","props","toggleMenu","bind","toggleValueFor","selectAll","clear","state","menuIsOpen","event","stopPropagation","preventDefault","setState","child","onUpdateValueMap","map","Map","newChildren","set","parentSelected","newChildValue","forEach","_","key","currentChildren","setAllValues","value","copy","renderMenuElement","dataTestId","className","entries","_ref","checked","onChange","_ref2","kind","onClick","concat","render","menuText","icon","id","type","options","placement","isShown","onExited","closeOnBlur","interactive","_defineProperty"],"sources":["../src/HierarchicalCheckboxMenu.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { dhSort, IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\nimport Button from './Button';\n\nexport type HierarchicalCheckboxValueMap = Map<\n string,\n boolean | Map<string, boolean>\n>;\n\ntype HierarchicalCheckboxMenuProps = {\n className: string;\n menuText: string;\n valueMap: HierarchicalCheckboxValueMap;\n onUpdateValueMap: (map: HierarchicalCheckboxValueMap) => void;\n icon: IconDefinition | null;\n id: string;\n 'data-testid'?: string;\n};\n\ntype HierarchicalCheckboxMenuState = {\n menuIsOpen: boolean;\n};\n\n/**\n * A pull down menu that displays a hierarchy of checkboxes.\n *\n * Currently supports only two levels of check boxes. The input should be a Map\n * where the keys are the parent names. The values can a boolean if the parent\n * has no children or another Map where keys are child names and values are booleans.\n *\n * Here is an example:\n * const INITIAL_TYPE_MAP = new Map([\n * ['Queries', new Map([['Live', true], ['Batch', true]])],\n * [\n * 'DBA Queries',\n * new Map([\n * ['Data Merge', true],\n * ['Data Validation', true],\n * ['Imports', true],\n * ['Data Services', true],\n * ]),\n * ],\n * ['Helper Queries', true],\n * ]);\n *\n * When a checkbox is changed, this component will make a deep copy of the Map\n * with the appropriate booleans changed. It will then call onUpdateValueMap\n * with the new Map.\n */\nclass HierarchicalCheckboxMenu extends Component<\n HierarchicalCheckboxMenuProps,\n HierarchicalCheckboxMenuState\n> {\n static defaultProps: Partial<HierarchicalCheckboxMenuProps> = {\n className: '',\n icon: null,\n id: '',\n 'data-testid': undefined,\n };\n\n static isParentSelected(\n parent: string,\n valueMap: HierarchicalCheckboxValueMap\n ): boolean | null {\n const children = valueMap.get(parent);\n if (children === undefined) {\n return false;\n }\n if (typeof children === 'boolean') {\n // This parent has no children\n return children;\n }\n const includesTrue = Array.from(children.values()).includes(true);\n const includesFalse = Array.from(children.values()).includes(false);\n if (includesTrue && includesFalse) {\n // Indeterminate\n return null;\n }\n return includesTrue;\n }\n\n constructor(props: HierarchicalCheckboxMenuProps) {\n super(props);\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.toggleValueFor = this.toggleValueFor.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n\n this.state = {\n menuIsOpen: false,\n };\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n event.preventDefault();\n this.setState(state => {\n const { menuIsOpen } = state;\n return { menuIsOpen: !menuIsOpen };\n });\n }\n\n toggleValueFor(parent: string, child?: string): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and toggle the boolean for parent / child\n const map = new Map(valueMap);\n const children = map.get(parent);\n if (children instanceof Map) {\n const newChildren = new Map(children);\n if (child != null) {\n newChildren.set(child, children.get(child) === undefined);\n } else {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n const newChildValue = parentSelected == null || !parentSelected;\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, children == null || !children);\n }\n\n // The parent was clicked so all children must be toggled\n const currentChildren = map.get(parent);\n if (\n child === undefined &&\n currentChildren !== undefined &&\n typeof currentChildren !== 'boolean'\n ) {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n );\n if (parentSelected != null && parentSelected) {\n currentChildren.forEach((_, key) => currentChildren.set(key, false));\n } else {\n // for parent selection of false or null (indeterminate), select everything\n currentChildren.forEach((_, key) => currentChildren.set(key, true));\n }\n }\n\n onUpdateValueMap(map);\n }\n\n setAllValues(value: boolean): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and set everything\n const copy = new Map();\n valueMap.forEach((child, parent) => {\n if (typeof child === 'boolean') {\n copy.set(parent, value);\n } else {\n const children = new Map();\n child.forEach((_, key) => children.set(key, value));\n copy.set(parent, children);\n }\n });\n\n onUpdateValueMap(copy);\n }\n\n selectAll(): void {\n this.setAllValues(true);\n }\n\n clear(): void {\n this.setAllValues(false);\n }\n\n renderMenuElement(): React.ReactNode {\n const { valueMap, 'data-testid': dataTestId } = this.props;\n return (\n <div className=\"hcm-menu-container\">\n {Array.from(valueMap.entries()).map(([parent, children]) => (\n <div key={parent}>\n <Checkbox\n className=\"hcm-parent\"\n checked={HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n )}\n onChange={() => this.toggleValueFor(parent)}\n >\n {parent}\n </Checkbox>\n {children !== undefined &&\n typeof children !== 'boolean' &&\n Array.from(children.entries()).map(([child, value]) => (\n <Checkbox\n className=\"hcm-child\"\n key={child}\n checked={value}\n onChange={() => this.toggleValueFor(parent, child)}\n >\n {child}\n </Checkbox>\n ))}\n </div>\n ))}\n <Button\n kind=\"ghost\"\n onClick={this.selectAll}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-btn-select-all`\n : undefined\n }\n >\n Select All\n </Button>\n <Button\n kind=\"ghost\"\n onClick={this.clear}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-clear` : undefined\n }\n >\n Clear\n </Button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n menuText,\n className,\n icon,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuIsOpen } = this.state;\n\n return (\n <button\n type=\"button\"\n className={classNames('btn hcm-btn', className)}\n onClick={this.toggleMenu}\n id={id}\n data-testid={dataTestId}\n >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <FontAwesomeIcon icon={dhSort} className=\"hcm-icon ml-1\" />\n <Popper\n options={{ placement: 'bottom' }}\n isShown={menuIsOpen}\n onExited={() => {\n this.setState({ menuIsOpen: false });\n }}\n closeOnBlur\n interactive\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n );\n }\n}\n\nexport default HierarchicalCheckboxMenu;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HierarchicalCheckboxMenu.js","names":["React","Component","FontAwesomeIcon","classNames","Checkbox","Popper","Button","jsx","_jsx","jsxs","_jsxs","HierarchicalCheckboxMenu","isParentSelected","parent","valueMap","children","get","undefined","includesTrue","Array","from","values","includes","includesFalse","constructor","props","toggleMenu","bind","toggleValueFor","selectAll","clear","state","menuIsOpen","event","stopPropagation","preventDefault","setState","child","onUpdateValueMap","map","Map","newChildren","set","parentSelected","newChildValue","forEach","_","key","currentChildren","setAllValues","value","copy","renderMenuElement","dataTestId","className","entries","_ref","checked","onChange","_ref2","kind","onClick","concat","render","menuText","icon","id","type","options","placement","isShown","onExited","closeOnBlur","interactive","_defineProperty"],"sources":["../src/HierarchicalCheckboxMenu.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { IconDefinition } from '@deephaven/icons';\nimport classNames from 'classnames';\nimport Checkbox from './Checkbox';\nimport Popper from './popper/Popper';\nimport './HierarchicalCheckboxMenu.scss';\nimport Button from './Button';\n\nexport type HierarchicalCheckboxValueMap = Map<\n string,\n boolean | Map<string, boolean>\n>;\n\ntype HierarchicalCheckboxMenuProps = {\n className: string;\n menuText: string;\n valueMap: HierarchicalCheckboxValueMap;\n onUpdateValueMap: (map: HierarchicalCheckboxValueMap) => void;\n icon: IconDefinition | null;\n id: string;\n 'data-testid'?: string;\n};\n\ntype HierarchicalCheckboxMenuState = {\n menuIsOpen: boolean;\n};\n\n/**\n * A pull down menu that displays a hierarchy of checkboxes.\n *\n * Currently supports only two levels of check boxes. The input should be a Map\n * where the keys are the parent names. The values can a boolean if the parent\n * has no children or another Map where keys are child names and values are booleans.\n *\n * Here is an example:\n * const INITIAL_TYPE_MAP = new Map([\n * ['Queries', new Map([['Live', true], ['Batch', true]])],\n * [\n * 'DBA Queries',\n * new Map([\n * ['Data Merge', true],\n * ['Data Validation', true],\n * ['Imports', true],\n * ['Data Services', true],\n * ]),\n * ],\n * ['Helper Queries', true],\n * ]);\n *\n * When a checkbox is changed, this component will make a deep copy of the Map\n * with the appropriate booleans changed. It will then call onUpdateValueMap\n * with the new Map.\n */\nclass HierarchicalCheckboxMenu extends Component<\n HierarchicalCheckboxMenuProps,\n HierarchicalCheckboxMenuState\n> {\n static defaultProps: Partial<HierarchicalCheckboxMenuProps> = {\n className: '',\n icon: null,\n id: '',\n 'data-testid': undefined,\n };\n\n static isParentSelected(\n parent: string,\n valueMap: HierarchicalCheckboxValueMap\n ): boolean | null {\n const children = valueMap.get(parent);\n if (children === undefined) {\n return false;\n }\n if (typeof children === 'boolean') {\n // This parent has no children\n return children;\n }\n const includesTrue = Array.from(children.values()).includes(true);\n const includesFalse = Array.from(children.values()).includes(false);\n if (includesTrue && includesFalse) {\n // Indeterminate\n return null;\n }\n return includesTrue;\n }\n\n constructor(props: HierarchicalCheckboxMenuProps) {\n super(props);\n\n this.toggleMenu = this.toggleMenu.bind(this);\n this.toggleValueFor = this.toggleValueFor.bind(this);\n this.selectAll = this.selectAll.bind(this);\n this.clear = this.clear.bind(this);\n\n this.state = {\n menuIsOpen: false,\n };\n }\n\n toggleMenu(event: React.MouseEvent<HTMLButtonElement>): void {\n event.stopPropagation();\n event.preventDefault();\n this.setState(state => {\n const { menuIsOpen } = state;\n return { menuIsOpen: !menuIsOpen };\n });\n }\n\n toggleValueFor(parent: string, child?: string): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and toggle the boolean for parent / child\n const map = new Map(valueMap);\n const children = map.get(parent);\n if (children instanceof Map) {\n const newChildren = new Map(children);\n if (child != null) {\n newChildren.set(child, children.get(child) === undefined);\n } else {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n map\n );\n const newChildValue = parentSelected == null || !parentSelected;\n children.forEach((_, key) => newChildren.set(key, newChildValue));\n }\n map.set(parent, newChildren);\n } else {\n map.set(parent, children == null || !children);\n }\n\n // The parent was clicked so all children must be toggled\n const currentChildren = map.get(parent);\n if (\n child === undefined &&\n currentChildren !== undefined &&\n typeof currentChildren !== 'boolean'\n ) {\n const parentSelected = HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n );\n if (parentSelected != null && parentSelected) {\n currentChildren.forEach((_, key) => currentChildren.set(key, false));\n } else {\n // for parent selection of false or null (indeterminate), select everything\n currentChildren.forEach((_, key) => currentChildren.set(key, true));\n }\n }\n\n onUpdateValueMap(map);\n }\n\n setAllValues(value: boolean): void {\n const { valueMap, onUpdateValueMap } = this.props;\n\n // Make a deep copy of the Map and set everything\n const copy = new Map();\n valueMap.forEach((child, parent) => {\n if (typeof child === 'boolean') {\n copy.set(parent, value);\n } else {\n const children = new Map();\n child.forEach((_, key) => children.set(key, value));\n copy.set(parent, children);\n }\n });\n\n onUpdateValueMap(copy);\n }\n\n selectAll(): void {\n this.setAllValues(true);\n }\n\n clear(): void {\n this.setAllValues(false);\n }\n\n renderMenuElement(): React.ReactNode {\n const { valueMap, 'data-testid': dataTestId } = this.props;\n return (\n <div className=\"hcm-menu-container\">\n {Array.from(valueMap.entries()).map(([parent, children]) => (\n <div key={parent}>\n <Checkbox\n className=\"hcm-parent\"\n checked={HierarchicalCheckboxMenu.isParentSelected(\n parent,\n valueMap\n )}\n onChange={() => this.toggleValueFor(parent)}\n >\n {parent}\n </Checkbox>\n {children !== undefined &&\n typeof children !== 'boolean' &&\n Array.from(children.entries()).map(([child, value]) => (\n <Checkbox\n className=\"hcm-child\"\n key={child}\n checked={value}\n onChange={() => this.toggleValueFor(parent, child)}\n >\n {child}\n </Checkbox>\n ))}\n </div>\n ))}\n <Button\n kind=\"ghost\"\n onClick={this.selectAll}\n data-testid={\n dataTestId !== undefined\n ? `${dataTestId}-btn-select-all`\n : undefined\n }\n >\n Select All\n </Button>\n <Button\n kind=\"ghost\"\n onClick={this.clear}\n data-testid={\n dataTestId !== undefined ? `${dataTestId}-btn-clear` : undefined\n }\n >\n Clear\n </Button>\n </div>\n );\n }\n\n render(): JSX.Element {\n const {\n menuText,\n className,\n icon,\n id,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuIsOpen } = this.state;\n\n return (\n <button\n type=\"button\"\n className={classNames('btn hcm-btn', className)}\n onClick={this.toggleMenu}\n id={id}\n data-testid={dataTestId}\n >\n <span>\n {icon && <FontAwesomeIcon icon={icon} className=\"hcm-icon mr-1\" />}\n {menuText}\n </span>\n <span className=\"cs-caret\" />\n <Popper\n options={{ placement: 'bottom' }}\n isShown={menuIsOpen}\n onExited={() => {\n this.setState({ menuIsOpen: false });\n }}\n closeOnBlur\n interactive\n >\n {this.renderMenuElement()}\n </Popper>\n </button>\n );\n }\n}\n\nexport default HierarchicalCheckboxMenu;\n"],"mappings":"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"}
|
package/dist/ItemList.css
CHANGED
package/dist/ItemList.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/ItemList.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACCA;EAEE;EACA,eC4Hc;;AD3Hd;EACE;;AAEF;EACE","file":"ItemList.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.item-list-scroll-pane {\n // no point in padding, it will be ignored by list scrollToItem(last)\n border: 1px solid $input-border-color;\n border-radius: $input-border-radius;\n &:focus {\n outline: none;\n }\n .item-list-inner-element {\n position: relative;\n }\n}\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:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n 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:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n 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"]}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/ItemList.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACCA;EAEE;EACA,eCsJc;;ADrJd;EACE;;AAEF;EACE","file":"ItemList.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.item-list-scroll-pane {\n // no point in padding, it will be ignored by list scrollToItem(last)\n border: 1px solid $input-border-color;\n border-radius: $input-border-radius;\n &:focus {\n outline: none;\n }\n .item-list-inner-element {\n position: relative;\n }\n}\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg);\n$foreground: var(--dh-color-fg);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$primary-light: var(--dh-color-accent-1100);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\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:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n 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$text-select-color: var(--dh-color-text-highlight);\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 hsla(var(--dh-color-black-hsl), 0.45); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem hsla(var(--dh-color-true-black-hsl), 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:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n 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: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: hsla(var(--dh-color-accent-hsl), 0.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-active-bg: var(--dh-color-accent-1100);\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// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\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: $gray-500;\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: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\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: hsla(var(--dh-color-accent-hsl), 0.5);\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: $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\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n"]}
|
package/dist/ItemListItem.css
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
padding: 0;
|
|
9
9
|
white-space: nowrap;
|
|
10
10
|
text-decoration: none;
|
|
11
|
-
background-color:
|
|
11
|
+
background-color: var(--dh-color-item-list-bg);
|
|
12
12
|
text-align: left;
|
|
13
13
|
user-select: none;
|
|
14
14
|
}
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
.item-list-item-content:hover {
|
|
29
|
-
background-color:
|
|
30
|
-
color:
|
|
29
|
+
background-color: var(--dh-color-item-list-selected-bg);
|
|
30
|
+
color: var(--dh-color-item-list-selected-fg);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
.item-list-item.is-focused .item-list-item-content {
|
|
34
|
-
background-color:
|
|
35
|
-
color:
|
|
34
|
+
background-color: var(--dh-color-item-list-keyboard-selected-bg);
|
|
35
|
+
color: var(--dh-color-item-list-selected-fg);
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.item-list-item.active .item-list-item-content {
|
|
39
|
-
background-color:
|
|
40
|
-
color:
|
|
39
|
+
background-color: var(--dh-color-item-list-selected-bg);
|
|
40
|
+
color: var(--dh-color-item-list-selected-fg);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
.item-list-item:focus {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/ItemListItem.scss"
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/ItemListItem.scss"],"names":[],"mappings":"AAAA;ACEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;EACA;;;AAIA;EACE;EACA;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA","file":"ItemListItem.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.item-list-item {\n border: none;\n border-radius: 0;\n display: flex;\n flex-direction: row;\n width: 100%;\n padding: 0;\n white-space: nowrap;\n text-decoration: none;\n background-color: var(--dh-color-item-list-bg);\n text-align: left;\n user-select: none;\n}\n\n.item-list-item-content {\n display: flex;\n flex-direction: row;\n flex-grow: 1;\n padding: 0 $input-btn-padding-x;\n justify-content: space-between;\n cursor: pointer;\n\n .title {\n flex-grow: 1;\n }\n}\n\n.item-list-item-content:hover {\n background-color: var(--dh-color-item-list-selected-bg);\n color: var(--dh-color-item-list-selected-fg);\n}\n\n.item-list-item.is-focused {\n .item-list-item-content {\n background-color: var(--dh-color-item-list-keyboard-selected-bg);\n color: var(--dh-color-item-list-selected-fg);\n }\n}\n\n.item-list-item.active {\n .item-list-item-content {\n background-color: var(--dh-color-item-list-selected-bg);\n color: var(--dh-color-item-list-selected-fg);\n }\n}\n\n.item-list-item:focus {\n outline: none;\n box-shadow: none;\n}\n"]}
|
package/dist/LoadingOverlay.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/LoadingOverlay.scss"],"names":[],"mappings":"AAAA;ACMA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,WAf2B;EAgB3B;;AACA;EACE,WAjBsB;EAkBtB,QAlBsB;EAmBtB,aAnBsB;;AAoBtB;EACE;;;AAMR;EACE,YA3BoB","file":"LoadingOverlay.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$iris-panel-message-font-size: 1.2rem;\n$iris-panel-icon-font-size: 64px;\n$iris-panel-scrim-bg:
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/LoadingOverlay.scss"],"names":[],"mappings":"AAAA;ACMA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,WAf2B;EAgB3B;;AACA;EACE,WAjBsB;EAkBtB,QAlBsB;EAmBtB,aAnBsB;;AAoBtB;EACE;;;AAMR;EACE,YA3BoB","file":"LoadingOverlay.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$iris-panel-message-font-size: 1.2rem;\n$iris-panel-icon-font-size: 64px;\n$iris-panel-scrim-bg: hsla(var(--dh-color-black-hsl), 0.1);\n\n.iris-panel-message-overlay {\n text-align: center;\n display: flex;\n flex-direction: column;\n justify-content: center;\n white-space: pre-line;\n overflow: hidden;\n\n .message-content {\n display: flex;\n flex-direction: column;\n font-size: $iris-panel-message-font-size;\n gap: 20px;\n .message-icon {\n font-size: $iris-panel-icon-font-size;\n height: $iris-panel-icon-font-size;\n line-height: $iris-panel-icon-font-size;\n .svg-inline--fa {\n font-size: inherit;\n }\n }\n }\n}\n\n.iris-panel-scrim-background {\n background: $iris-panel-scrim-bg;\n}\n"]}
|
package/dist/LoadingSpinner.css
CHANGED
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
/* stylelint-disable alpha-value-notation */
|
|
2
2
|
.loading-spinner {
|
|
3
|
-
--primary-color: var(
|
|
4
|
-
|
|
5
|
-
var(--dh-color-accent, #4c7dee)
|
|
6
|
-
);
|
|
7
|
-
--secondary-color: var(
|
|
8
|
-
--dh-loading-spinner-secondary-color,
|
|
9
|
-
rgba(240, 240, 240, 0.5)
|
|
10
|
-
);
|
|
3
|
+
--primary-color: var(--dh-color-loading-spinner-primary);
|
|
4
|
+
--secondary-color: var(--dh-color-loading-spinner-secondary);
|
|
11
5
|
--border-width: 1px;
|
|
12
6
|
--size: 14px;
|
|
13
7
|
box-sizing: border-box;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../src/LoadingSpinner.scss"],"names":[],"mappings":"AAAA;AACA;EACE;
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../src/LoadingSpinner.scss"],"names":[],"mappings":"AAAA;AACA;EACE;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EAKE;;;AAKF;EACE;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;IACE;;EAEF;IACE","file":"LoadingSpinner.css","sourcesContent":["/* stylelint-disable alpha-value-notation */\n.loading-spinner {\n --primary-color: var(--dh-color-loading-spinner-primary);\n --secondary-color: var(--dh-color-loading-spinner-secondary);\n --border-width: 1px;\n --size: 14px;\n\n box-sizing: border-box;\n display: inline-block;\n margin: 0 auto;\n width: var(--size);\n height: var(--size);\n}\n\n.loading-spinner-large {\n --border-width: 4px;\n --size: 56px;\n}\n\n.loading-spinner-vertical-align {\n // The original LoadingSpinner used `.fa-layers` to create the spinner icon.\n // This includes a vertical aligment adjustment to center the spinner along\n // side of other inline content. Copying this value from the `.fa-layers`\n // class to avoid breaking alignment of the new spinner.\n vertical-align: -0.125em;\n}\n\n// Spinning circle with colored border and transparent center. Half of the\n// circle is the primary color. The other half is the secondary color.\n.loading-spinner::after {\n animation: loading-spinner-rotate 2s linear infinite;\n border: var(--border-width) solid;\n border-color: var(--primary-color) var(--primary-color) var(--secondary-color)\n var(--secondary-color);\n border-radius: 50%;\n box-sizing: border-box;\n content: '';\n display: inline-block;\n width: var(--size);\n height: var(--size);\n}\n\n@keyframes loading-spinner-rotate {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(359deg);\n }\n}\n"]}
|
package/dist/MaskedInput.css.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/MaskedInput.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,aC+FA;ED9FA","file":"MaskedInput.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.masked-input {\n font-family: $font-family-sans-serif;\n font-variant-numeric: tabular-nums;\n}\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:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n 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:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n 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"]}
|
|
1
|
+
{"version":3,"sourceRoot":"","sources":["../scss/custom.scss","../src/MaskedInput.scss","../scss/bootstrap_overrides.scss"],"names":[],"mappings":"AAAA;ACEA;EACE,aC+HA;ED9HA","file":"MaskedInput.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.masked-input {\n font-family: $font-family-sans-serif;\n font-variant-numeric: tabular-nums;\n}\n","// Styling overrides for bootstrap\n@use 'sass:map';\n\n// Override / set color variables\n$red: var(--dh-color-visual-red);\n$orange: var(--dh-color-visual-orange);\n$yellow: var(--dh-color-visual-yellow);\n$green: var(--dh-color-visual-green);\n$blue: var(--dh-color-visual-blue);\n$purple: var(--dh-color-visual-purple);\n\n//Define our Gray scale\n$gray-100: var(--dh-color-gray-900, #fcfcfa);\n$gray-200: var(--dh-color-gray-800);\n$gray-300: var(--dh-color-gray-700);\n$gray-400: var(--dh-color-gray-600);\n$gray-500: var(--dh-color-gray-500);\n// intentional duplicate, scale doesn't line up otherwise\n// as we have gray-850 and spectrum doesn't and it is needed\n$gray-600: var(--dh-color-gray-500);\n$gray-700: var(--dh-color-gray-400);\n$gray-800: var(--dh-color-gray-300);\n$gray-850: var(--dh-color-gray-200);\n$gray-900: var(--dh-color-gray-75);\n$black: var(--dh-color-black, #1a171a);\n$white: var(--dh-color-white, #f0f0ee);\n\n//Define some UI colors\n$interfacegray: var(--dh-color-content-bg, #2d2a2e);\n$interfaceblue: var(--dh-color-accent-bg);\n$interfacewhite: $white;\n$interfaceblack: $black;\n$content-bg: var(--dh-color-content-bg, #2d2a2e);\n$background: var(--dh-color-bg);\n$foreground: var(--dh-color-fg);\n\n// Extend default Bootstrap $grays map\n$grays-custom: (\n '850': $gray-850,\n);\n$grays: () !default;\n$grays: map-merge($grays, $grays-custom);\n\n// Extend default Bootstrap $colors map\n$colors-custom: (\n 'black': $black,\n);\n$colors: () !default;\n$colors: map-merge($colors, $colors-custom);\n\n// Override default Bootstrap $theme-colors map by mapping each key to itself.\n// These will then be re-mapped inside of `button-outline-variant` and\n// `button-outline-variant` mixins in `bootstrap_override_mixins_buttons.scss`\n$theme-colors-self-map: ();\n@each $key\n in (\n 'primary',\n 'secondary',\n 'success',\n 'info',\n 'warning',\n 'danger',\n 'light',\n 'dark'\n )\n{\n $theme-colors-self-map: map.set($theme-colors-self-map, $key, $key);\n}\n$theme-colors: () !default;\n$theme-colors: map-merge($theme-colors, $theme-colors-self-map);\n\n// Used by bootstrap_override_mixins_buttons.scss to map Bootstrap colors to\n// DH semantic colors\n$bootstrap-dh-semantic-map: (\n 'primary': 'accent',\n 'secondary': 'neutral',\n 'success': 'positive',\n 'info': 'info',\n 'warning': 'notice',\n 'danger': 'negative',\n // We shouldn't be using these, but mapping so they work with our custom\n // `color-yiq` mixin. If we find a way to remove $light + $dark that are\n // defined in Bootstrap _variables.scss, we should remove these\n 'light': 'neutral',\n 'dark': 'neutral',\n);\n\n//Set default colors\n$body-bg: $black;\n$body-color: $interfacewhite;\n\n// Set brand colors\n$primary: var(--dh-color-accent-bg);\n$primary-hover: var(--dh-color-accent-hover-bg);\n$primary-dark: var(--dh-color-accent-down-bg);\n$primary-light: var(--dh-color-accent-1100);\n$secondary: var(--dh-color-neutral-bg);\n$secondary-hover: var(--dh-color-neutral-hover-bg);\n$success: $green;\n$info: $yellow;\n$warning: $orange;\n$danger: var(--dh-color-negative-bg);\n$danger-hover: var(--dh-color-negative-hover-bg);\n// We really don't want to use $light or $dark variables, but Bootstrap defines\n// them in _variables.scss. Explicitly setting them to ensure we are in control\n// of their values. If we can find a way to remove them, we should\n$light: var(--dh-color-gray-light);\n$dark: var(--dh-color-gray-dark);\n// Bootstrap doesn't define $mid, and we want to move away from this particular\n// semantic. Should be deleted by #1635\n$mid: var(--dh-color-gray-mid);\n\n$semantic-colors: (\n 'primary-hover': $primary-hover,\n 'primary-light': $primary-light,\n 'primary-dark': $primary-dark,\n 'mid': $mid,\n 'content-bg': $interfacegray,\n 'background': $interfaceblack,\n 'foreground': $interfacewhite,\n 'secondary-hover': $secondary-hover,\n 'danger-hover': $danger-hover,\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:\n 'Fira Sans',\n -apple-system,\n blinkmacsystemfont,\n 'Segoe UI',\n 'Roboto',\n 'Helvetica Neue',\n arial,\n 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$text-select-color: var(--dh-color-text-highlight);\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 hsla(var(--dh-color-black-hsl), 0.45); //because our UI is so dark, we need darker default shadows\n$box-shadow-900: 0 0.1rem 1rem hsla(var(--dh-color-true-black-hsl), 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:\n color 0.12s ease-in-out,\n background-color 0.12s ease-in-out,\n border-color 0.12s ease-in-out,\n 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: var(--dh-color-input-bg);\n$input-disabled-bg: var(--dh-color-input-disabled-bg);\n$input-color: var(--dh-color-input-fg);\n$input-border-color: var(--dh-color-input-border);\n$input-placeholder-color: var(--dh-color-input-placeholder);\n$input-focus-border-color: var(--dh-color-input-focus-border);\n\n$input-btn-focus-width: 0.2rem;\n$input-btn-focus-color: hsla(var(--dh-color-accent-hsl), 0.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-active-bg: var(--dh-color-accent-1100);\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// The $custom-select-indicator variable is used by Bootstrap to provide the\n// icon for the select dropdown. Inline svgs can't use CSS variables, so we hard\n// code the color to #929192 (the default value of --dh-color-gray-600). PR #1651\n// overrides this icon altogether for known dropdowns, so technically we may not\n// need this, but it's here in case there are any remaining instances.\n$custom-select-indicator-color: #929192;\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: $gray-500;\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: var(--dh-color-accent-100);\n$toast-color: var(--dh-color-text);\n$toast-error-bg: var(--dh-color-negative-bg);\n$toast-error-color: var(--dh-color-text);\n\n//tooltips\n$tooltip-bg: var(--dh-color-tooltip-bg);\n$tooltip-color: var(--dh-color-tooltip-fg);\n$tooltip-box-shadow: 0 0.1rem 1.5rem 0.1rem var(--dh-color-tooltip-box-shadow);\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: hsla(var(--dh-color-accent-hsl), 0.5);\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: $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\n// This section of variables is not consumed directly by DH, but they need to be\n// defined for sass to compile _variables\n$table-dark-bg: $gray-800;\n$table-dark-accent-bg: var(--dh-color-highlight-hover);\n$table-dark-hover-bg: var(--dh-color-highlight-active);\n$table-dark-border-color: $gray-700;\n$popover-bg: var(--dh-color-tooltip-bg);\n$popover-border-color: var(--dh-color-overlay-modal-bg);\n$popover-header-bg: #000;\n$popover-arrow-outer-color: var(--dh-color-dropshadow);\n$custom-range-thumb-active-bg: var(--dh-color-accent-1100);\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import './RandomAreaPlotAnimation.scss';
|
|
3
|
-
declare const RandomAreaPlotAnimation: React.MemoExoticComponent<() => JSX.Element>;
|
|
3
|
+
declare const RandomAreaPlotAnimation: React.MemoExoticComponent<() => JSX.Element | null>;
|
|
4
4
|
export default RandomAreaPlotAnimation;
|
|
5
5
|
//# sourceMappingURL=RandomAreaPlotAnimation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomAreaPlotAnimation.d.ts","sourceRoot":"","sources":["../src/RandomAreaPlotAnimation.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"RandomAreaPlotAnimation.d.ts","sourceRoot":"","sources":["../src/RandomAreaPlotAnimation.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,gCAAgC,CAAC;AAkBxC,QAAA,MAAM,uBAAuB,qDAoT3B,CAAC;AAEH,eAAe,uBAAuB,CAAC"}
|
|
@@ -5,20 +5,16 @@ import React, { useEffect, useState, useRef } from 'react';
|
|
|
5
5
|
import debounce from 'lodash.debounce';
|
|
6
6
|
import { assertNotNull } from '@deephaven/utils';
|
|
7
7
|
import "./RandomAreaPlotAnimation.css";
|
|
8
|
-
import
|
|
8
|
+
import { getRandomAreaPlotAnimationThemeColors, useTheme } from "./theme/index.js";
|
|
9
9
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
10
|
var VOLATILITY = 0.025; // how spikey the data gets
|
|
11
11
|
var LOW = 0.9;
|
|
12
12
|
var HIGH = 0.1;
|
|
13
13
|
var START_Y = 0.618;
|
|
14
|
-
var FOREGROUND = ThemeExport['primary-dark'];
|
|
15
14
|
var GRID_SIZE = 80;
|
|
16
|
-
var GRID_COLOR = ThemeExport['gray-800'];
|
|
17
|
-
var BACKGROUND = ThemeExport['gray-900'];
|
|
18
15
|
var PATTERN = {
|
|
19
16
|
SIZE: 8,
|
|
20
|
-
DOT_SIZE: 2
|
|
21
|
-
FILL_OPACITY: 0.25
|
|
17
|
+
DOT_SIZE: 2
|
|
22
18
|
};
|
|
23
19
|
var PX_PER_SECOND = 18;
|
|
24
20
|
var RESIZE_DEBOUNCE = 250;
|
|
@@ -26,6 +22,13 @@ var INTERACTION_TIMEOUT = 60 * 1000;
|
|
|
26
22
|
|
|
27
23
|
// Draw a background canvas, paint it with a fun chart looking animation
|
|
28
24
|
var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
25
|
+
var {
|
|
26
|
+
activeThemes
|
|
27
|
+
} = useTheme();
|
|
28
|
+
var [themeColors, setThemeColors] = useState(null);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
setThemeColors(getRandomAreaPlotAnimationThemeColors());
|
|
31
|
+
}, [activeThemes]);
|
|
29
32
|
var canvas = useRef(null);
|
|
30
33
|
var container = useRef(null);
|
|
31
34
|
var [shade, setShade] = useState(false);
|
|
@@ -55,6 +58,14 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
|
55
58
|
|
|
56
59
|
// Returns the background fill create offscreen as pattern
|
|
57
60
|
function createPatternFill() {
|
|
61
|
+
if (themeColors == null) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
var {
|
|
65
|
+
foregroundFill,
|
|
66
|
+
foregroundStroke
|
|
67
|
+
} = themeColors;
|
|
68
|
+
|
|
58
69
|
// create the off-screen canvas
|
|
59
70
|
var canvasPattern = document.createElement('canvas');
|
|
60
71
|
canvasPattern.width = PATTERN.SIZE;
|
|
@@ -63,11 +74,11 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
|
63
74
|
|
|
64
75
|
// draw pattern to off-screen context
|
|
65
76
|
if (contextPattern != null) {
|
|
66
|
-
contextPattern.fillStyle =
|
|
77
|
+
contextPattern.fillStyle = foregroundStroke;
|
|
67
78
|
contextPattern.fillRect(0, 0, PATTERN.DOT_SIZE, PATTERN.DOT_SIZE);
|
|
68
79
|
|
|
69
80
|
// add an overlay fill
|
|
70
|
-
contextPattern.fillStyle =
|
|
81
|
+
contextPattern.fillStyle = foregroundFill;
|
|
71
82
|
contextPattern.fillRect(0, 0, PATTERN.SIZE, PATTERN.SIZE);
|
|
72
83
|
}
|
|
73
84
|
return contextPattern === null || contextPattern === void 0 ? void 0 : contextPattern.createPattern(canvasPattern, 'repeat');
|
|
@@ -146,14 +157,22 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
|
146
157
|
*/
|
|
147
158
|
function drawCanvas(timestamp) {
|
|
148
159
|
var _lastTimestamp, _lastTimestamp2, _lastTimestamp3;
|
|
160
|
+
if (themeColors == null) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
149
163
|
lastTimestamp = (_lastTimestamp = lastTimestamp) !== null && _lastTimestamp !== void 0 ? _lastTimestamp : timestamp;
|
|
164
|
+
var {
|
|
165
|
+
background,
|
|
166
|
+
foregroundStroke,
|
|
167
|
+
gridColor
|
|
168
|
+
} = themeColors;
|
|
150
169
|
assertNotNull(ctx);
|
|
151
170
|
// clear the canvas
|
|
152
|
-
ctx.fillStyle =
|
|
171
|
+
ctx.fillStyle = background;
|
|
153
172
|
ctx.fillRect(0, 0, width, height);
|
|
154
173
|
drawGridLines(ctx);
|
|
155
174
|
ctx.lineWidth = 1;
|
|
156
|
-
ctx.strokeStyle =
|
|
175
|
+
ctx.strokeStyle = gridColor;
|
|
157
176
|
ctx.stroke();
|
|
158
177
|
|
|
159
178
|
// for speeds less then 60 px per second, subpixel motion is required to look smooth
|
|
@@ -161,7 +180,7 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
|
161
180
|
ctx.translate(subPixelMotion, 0);
|
|
162
181
|
drawAreaLine(data, ctx);
|
|
163
182
|
ctx.lineWidth = 2;
|
|
164
|
-
ctx.strokeStyle =
|
|
183
|
+
ctx.strokeStyle = foregroundStroke;
|
|
165
184
|
ctx.stroke();
|
|
166
185
|
ctx.translate(-subPixelMotion, 0); // we don't pattern to shift however
|
|
167
186
|
if (pattern != null) {
|
|
@@ -278,8 +297,8 @@ var RandomAreaPlotAnimation = /*#__PURE__*/React.memo(() => {
|
|
|
278
297
|
resetIdleTimeout.cancel();
|
|
279
298
|
debouncedHandleResize.cancel();
|
|
280
299
|
};
|
|
281
|
-
}, []);
|
|
282
|
-
return /*#__PURE__*/_jsx("div", {
|
|
300
|
+
}, [themeColors]);
|
|
301
|
+
return themeColors && /*#__PURE__*/_jsx("div", {
|
|
283
302
|
className: "random-area-plot-animation-container",
|
|
284
303
|
ref: container,
|
|
285
304
|
children: /*#__PURE__*/_jsx("canvas", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RandomAreaPlotAnimation.js","names":["React","useEffect","useState","useRef","debounce","assertNotNull","ThemeExport","jsx","_jsx","VOLATILITY","LOW","HIGH","START_Y","FOREGROUND","GRID_SIZE","GRID_COLOR","BACKGROUND","PATTERN","SIZE","DOT_SIZE","FILL_OPACITY","PX_PER_SECOND","RESIZE_DEBOUNCE","INTERACTION_TIMEOUT","RandomAreaPlotAnimation","memo","canvas","container","shade","setShade","scale","window","devicePixelRatio","ctx","pattern","width","height","rAF","lastTimestamp","data","setCanvasSize","_ctx","current","offsetWidth","offsetHeight","style","concat","createPatternFill","canvasPattern","document","createElement","contextPattern","getContext","fillStyle","fillRect","Math","round","toString","padStart","createPattern","randomWalk","prev","rand","random","change","abs","initData","startingData","y","x","push","setDataSize","length","pop","drawAreaLine","path","context","beginPath","moveTo","lineTo","i","closePath","drawGridLines","drawCanvas","timestamp","_lastTimestamp","_lastTimestamp2","_lastTimestamp3","lineWidth","strokeStyle","stroke","subPixelMotion","translate","fill","setTransform","_lastTimestamp4","numberOfPoints","floor","shift","cancelAnimationFrame","requestAnimationFrame","debouncedHandleResize","leading","pauseAnimation","resetIdleTimeout","startAnimation","handleActivity","hasFocus","handleResize","_canvas$current","alpha","addEventListener","removeEventListener","cancel","className","ref","children"],"sources":["../src/RandomAreaPlotAnimation.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/display-name */\n\nimport React, { useEffect, useState, useRef } from 'react';\nimport debounce from 'lodash.debounce';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RandomAreaPlotAnimation.scss';\nimport ThemeExport from './ThemeExport';\n\nconst VOLATILITY = 0.025; // how spikey the data gets\nconst LOW = 0.9;\nconst HIGH = 0.1;\nconst START_Y = 0.618;\nconst FOREGROUND = ThemeExport['primary-dark'];\nconst GRID_SIZE = 80;\nconst GRID_COLOR = ThemeExport['gray-800'];\nconst BACKGROUND = ThemeExport['gray-900'];\nconst PATTERN = { SIZE: 8, DOT_SIZE: 2, FILL_OPACITY: 0.25 };\nconst PX_PER_SECOND = 18;\nconst RESIZE_DEBOUNCE = 250;\nconst INTERACTION_TIMEOUT = 60 * 1000;\n\n// Draw a background canvas, paint it with a fun chart looking animation\nconst RandomAreaPlotAnimation = React.memo(() => {\n const canvas = useRef<HTMLCanvasElement>(null);\n const container = useRef<HTMLDivElement>(null);\n const [shade, setShade] = useState(false);\n const scale = window.devicePixelRatio;\n\n let ctx: CanvasRenderingContext2D | null | undefined;\n let pattern: CanvasPattern | null | undefined;\n let width: number;\n let height: number;\n let rAF: number | null;\n\n let lastTimestamp: DOMHighResTimeStamp | null | undefined = null;\n let data: number[] = [];\n\n function setCanvasSize(): void {\n // Set canvas size to fill screen\n if (container.current != null) {\n width = container.current.offsetWidth;\n height = container.current.offsetHeight;\n }\n\n if (canvas.current != null) {\n canvas.current.style.width = `${width}px`;\n canvas.current.style.height = `${height}px`;\n\n canvas.current.width = width * scale;\n canvas.current.height = height * scale;\n }\n\n ctx?.scale(scale, scale);\n }\n\n // Returns the background fill create offscreen as pattern\n function createPatternFill(): CanvasPattern | null | undefined {\n // create the off-screen canvas\n const canvasPattern = document.createElement('canvas');\n canvasPattern.width = PATTERN.SIZE;\n canvasPattern.height = PATTERN.SIZE;\n const contextPattern = canvasPattern.getContext('2d');\n\n // draw pattern to off-screen context\n if (contextPattern != null) {\n contextPattern.fillStyle = FOREGROUND;\n contextPattern.fillRect(0, 0, PATTERN.DOT_SIZE, PATTERN.DOT_SIZE);\n\n // add an overlay fill\n contextPattern.fillStyle =\n FOREGROUND +\n Math.round(255 * PATTERN.FILL_OPACITY)\n .toString(16)\n .padStart(2, '0'); // adds opacity in hex to color\n contextPattern.fillRect(0, 0, PATTERN.SIZE, PATTERN.SIZE);\n }\n return contextPattern?.createPattern(canvasPattern, 'repeat');\n }\n\n /**\n * Generates a step in a random walk between LOW - HIGH given a previous value\n * data is always in 0-1 data space so its scaleable\n * data space is converted to screen space inside draw functions\n * @param prev previous random walk step\n * @return new random walk step\n */\n function randomWalk(prev: number): number {\n const rand = Math.random() - 0.5; // give it directionality\n let change = VOLATILITY * rand; // scale by volatity constant\n\n // ensure directional bounce off approaching edges\n if (prev < HIGH) {\n change = Math.abs(change);\n } else if (prev > LOW) {\n change = -Math.abs(change);\n }\n\n return prev + change;\n }\n\n function initData(): number[] {\n const startingData = [];\n let y = START_Y; // always start towards the bottom of the screen\n for (let x = 0; x < width + PX_PER_SECOND; x += 1) {\n y = randomWalk(y);\n startingData.push(y);\n }\n return startingData;\n }\n\n function setDataSize(): void {\n while (data.length >= width + PX_PER_SECOND) {\n data.pop();\n }\n while (data.length < width + PX_PER_SECOND) {\n data.push(randomWalk(data[data.length - 1]));\n }\n }\n\n function drawAreaLine(\n path: number[],\n context: CanvasRenderingContext2D\n ): void {\n context.beginPath();\n // start offscreen\n context.moveTo(-1, height + 1);\n context.lineTo(-1, height * path[0]);\n\n // draw the line\n for (let i = 0; i < path.length; i += 1) {\n context.lineTo(i, height * path[i]);\n }\n\n // close offscreen\n context.lineTo(width + PX_PER_SECOND, height * path[path.length - 1]);\n context.lineTo(width + PX_PER_SECOND, height + 1);\n context.closePath();\n }\n\n function drawGridLines(context: CanvasRenderingContext2D): void {\n context.beginPath();\n // draw verticals\n for (let x = 1; x < width; x += GRID_SIZE) {\n context.moveTo(x, 0);\n context.lineTo(x, height);\n }\n // draw horizontals\n for (let y = 1; y < height; y += GRID_SIZE) {\n context.moveTo(0, y);\n context.lineTo(width, y);\n }\n }\n\n /**\n * Main draw loop for where the animation happens\n * all the styling happens within drawCanvas from paths generated by other functions\n * @param timestamp passed in callback from requestAnimationFrame\n */\n function drawCanvas(timestamp?: DOMHighResTimeStamp): void {\n lastTimestamp = lastTimestamp ?? timestamp;\n\n assertNotNull(ctx);\n // clear the canvas\n ctx.fillStyle = BACKGROUND;\n ctx.fillRect(0, 0, width, height);\n\n drawGridLines(ctx);\n ctx.lineWidth = 1;\n ctx.strokeStyle = GRID_COLOR;\n ctx.stroke();\n\n // for speeds less then 60 px per second, subpixel motion is required to look smooth\n const subPixelMotion =\n ((lastTimestamp ?? 0) - (timestamp ?? 0)) / (1000 / PX_PER_SECOND);\n ctx.translate(subPixelMotion, 0);\n\n drawAreaLine(data, ctx);\n ctx.lineWidth = 2;\n ctx.strokeStyle = FOREGROUND;\n ctx.stroke();\n\n ctx.translate(-subPixelMotion, 0); // we don't pattern to shift however\n if (pattern != null) {\n ctx.fillStyle = pattern;\n }\n ctx.fill();\n ctx.setTransform(scale, 0, 0, scale, 0, 0); // reset the translate matrix to normal\n\n // generate new data points\n if ((timestamp ?? 0) - (lastTimestamp ?? 0) > 1000 / PX_PER_SECOND) {\n // number of points to add since last update\n const numberOfPoints = Math.floor(\n ((timestamp ?? 0) - (lastTimestamp ?? 0)) / (1000 / PX_PER_SECOND)\n );\n for (let i = 0; i < numberOfPoints; i += 1) {\n data.shift();\n data.push(randomWalk(data[data.length - 1]));\n }\n lastTimestamp = timestamp;\n }\n\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = requestAnimationFrame(drawCanvas);\n }\n\n // debounce the resize so its not overly aggresive\n const debouncedHandleResize = debounce(\n () => {\n rAF = requestAnimationFrame(timestamp => {\n setCanvasSize(); // setCanvas can cause lag if not debounced\n\n // fill or remove extra data points\n setDataSize();\n\n // opening devtools triggers a blur then resize,\n // need to reset shade as we are restarting animation\n setShade(false);\n drawCanvas(timestamp);\n });\n },\n RESIZE_DEBOUNCE,\n { leading: true } // resize immediately, once.\n );\n\n function pauseAnimation(): void {\n // pause animation when browser window is blurred to conserve CPU usage\n setShade(true);\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = null;\n lastTimestamp = null;\n }\n\n // when timeout expires, pause animation\n const resetIdleTimeout = debounce(() => {\n pauseAnimation();\n }, INTERACTION_TIMEOUT);\n\n function startAnimation(): void {\n // can fire multiple times, check if rAF is null first\n // restart animation loop, and fade back in\n if (rAF == null) {\n setShade(false);\n setCanvasSize();\n setDataSize();\n rAF = requestAnimationFrame(drawCanvas);\n }\n resetIdleTimeout();\n }\n\n function handleActivity(): void {\n if (document.hasFocus()) {\n // only if document has focus (mousemove can fire on non-focused tabs)\n startAnimation();\n }\n }\n\n function handleResize(): void {\n // pause and debounce animation during resize for better resizing performance\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n resetIdleTimeout(); // treat resizing as a form of activity\n debouncedHandleResize();\n }\n\n // react mount/unmount hooks\n useEffect(() => {\n ctx = canvas.current?.getContext('2d', { alpha: false });\n setCanvasSize();\n data = initData();\n pattern = createPatternFill();\n\n // start draw loop\n drawCanvas();\n resetIdleTimeout();\n\n window.addEventListener('resize', handleResize);\n\n window.addEventListener('focus', startAnimation);\n window.addEventListener('blur', pauseAnimation);\n\n // don't burn cpu if the user is \"idle\", start a timer that resets\n // on any user activity, and on timeout expiry pause the animation\n window.addEventListener('mousemove', handleActivity);\n window.addEventListener('keydown', handleActivity);\n\n return () => {\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('focus', startAnimation);\n window.removeEventListener('blur', pauseAnimation);\n\n window.removeEventListener('mousemove', handleActivity);\n window.removeEventListener('keydown', handleActivity);\n\n resetIdleTimeout.cancel();\n debouncedHandleResize.cancel();\n };\n }, []);\n\n return (\n <div className=\"random-area-plot-animation-container\" ref={container}>\n <canvas ref={canvas} className={shade ? 'shade' : ''} />\n </div>\n );\n});\n\nexport default RandomAreaPlotAnimation;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RandomAreaPlotAnimation.js","names":["React","useEffect","useState","useRef","debounce","assertNotNull","getRandomAreaPlotAnimationThemeColors","useTheme","jsx","_jsx","VOLATILITY","LOW","HIGH","START_Y","GRID_SIZE","PATTERN","SIZE","DOT_SIZE","PX_PER_SECOND","RESIZE_DEBOUNCE","INTERACTION_TIMEOUT","RandomAreaPlotAnimation","memo","activeThemes","themeColors","setThemeColors","canvas","container","shade","setShade","scale","window","devicePixelRatio","ctx","pattern","width","height","rAF","lastTimestamp","data","setCanvasSize","_ctx","current","offsetWidth","offsetHeight","style","concat","createPatternFill","foregroundFill","foregroundStroke","canvasPattern","document","createElement","contextPattern","getContext","fillStyle","fillRect","createPattern","randomWalk","prev","rand","Math","random","change","abs","initData","startingData","y","x","push","setDataSize","length","pop","drawAreaLine","path","context","beginPath","moveTo","lineTo","i","closePath","drawGridLines","drawCanvas","timestamp","_lastTimestamp","_lastTimestamp2","_lastTimestamp3","background","gridColor","lineWidth","strokeStyle","stroke","subPixelMotion","translate","fill","setTransform","_lastTimestamp4","numberOfPoints","floor","shift","cancelAnimationFrame","requestAnimationFrame","debouncedHandleResize","leading","pauseAnimation","resetIdleTimeout","startAnimation","handleActivity","hasFocus","handleResize","_canvas$current","alpha","addEventListener","removeEventListener","cancel","className","ref","children"],"sources":["../src/RandomAreaPlotAnimation.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n/* eslint-disable react/display-name */\n\nimport React, { useEffect, useState, useRef } from 'react';\nimport debounce from 'lodash.debounce';\nimport { assertNotNull } from '@deephaven/utils';\nimport './RandomAreaPlotAnimation.scss';\nimport {\n getRandomAreaPlotAnimationThemeColors,\n RandomAreaPlotAnimationThemeColors,\n useTheme,\n} from './theme';\n\nconst VOLATILITY = 0.025; // how spikey the data gets\nconst LOW = 0.9;\nconst HIGH = 0.1;\nconst START_Y = 0.618;\nconst GRID_SIZE = 80;\nconst PATTERN = { SIZE: 8, DOT_SIZE: 2 };\nconst PX_PER_SECOND = 18;\nconst RESIZE_DEBOUNCE = 250;\nconst INTERACTION_TIMEOUT = 60 * 1000;\n\n// Draw a background canvas, paint it with a fun chart looking animation\nconst RandomAreaPlotAnimation = React.memo(() => {\n const { activeThemes } = useTheme();\n\n const [themeColors, setThemeColors] =\n useState<RandomAreaPlotAnimationThemeColors | null>(null);\n\n useEffect(() => {\n setThemeColors(getRandomAreaPlotAnimationThemeColors());\n }, [activeThemes]);\n\n const canvas = useRef<HTMLCanvasElement>(null);\n const container = useRef<HTMLDivElement>(null);\n const [shade, setShade] = useState(false);\n const scale = window.devicePixelRatio;\n\n let ctx: CanvasRenderingContext2D | null | undefined;\n let pattern: CanvasPattern | null | undefined;\n let width: number;\n let height: number;\n let rAF: number | null;\n\n let lastTimestamp: DOMHighResTimeStamp | null | undefined = null;\n let data: number[] = [];\n\n function setCanvasSize(): void {\n // Set canvas size to fill screen\n if (container.current != null) {\n width = container.current.offsetWidth;\n height = container.current.offsetHeight;\n }\n\n if (canvas.current != null) {\n canvas.current.style.width = `${width}px`;\n canvas.current.style.height = `${height}px`;\n\n canvas.current.width = width * scale;\n canvas.current.height = height * scale;\n }\n\n ctx?.scale(scale, scale);\n }\n\n // Returns the background fill create offscreen as pattern\n function createPatternFill(): CanvasPattern | null | undefined {\n if (themeColors == null) {\n return null;\n }\n\n const { foregroundFill, foregroundStroke } = themeColors;\n\n // create the off-screen canvas\n const canvasPattern = document.createElement('canvas');\n canvasPattern.width = PATTERN.SIZE;\n canvasPattern.height = PATTERN.SIZE;\n const contextPattern = canvasPattern.getContext('2d');\n\n // draw pattern to off-screen context\n if (contextPattern != null) {\n contextPattern.fillStyle = foregroundStroke;\n contextPattern.fillRect(0, 0, PATTERN.DOT_SIZE, PATTERN.DOT_SIZE);\n\n // add an overlay fill\n contextPattern.fillStyle = foregroundFill;\n contextPattern.fillRect(0, 0, PATTERN.SIZE, PATTERN.SIZE);\n }\n return contextPattern?.createPattern(canvasPattern, 'repeat');\n }\n\n /**\n * Generates a step in a random walk between LOW - HIGH given a previous value\n * data is always in 0-1 data space so its scaleable\n * data space is converted to screen space inside draw functions\n * @param prev previous random walk step\n * @return new random walk step\n */\n function randomWalk(prev: number): number {\n const rand = Math.random() - 0.5; // give it directionality\n let change = VOLATILITY * rand; // scale by volatity constant\n\n // ensure directional bounce off approaching edges\n if (prev < HIGH) {\n change = Math.abs(change);\n } else if (prev > LOW) {\n change = -Math.abs(change);\n }\n\n return prev + change;\n }\n\n function initData(): number[] {\n const startingData = [];\n let y = START_Y; // always start towards the bottom of the screen\n for (let x = 0; x < width + PX_PER_SECOND; x += 1) {\n y = randomWalk(y);\n startingData.push(y);\n }\n return startingData;\n }\n\n function setDataSize(): void {\n while (data.length >= width + PX_PER_SECOND) {\n data.pop();\n }\n while (data.length < width + PX_PER_SECOND) {\n data.push(randomWalk(data[data.length - 1]));\n }\n }\n\n function drawAreaLine(\n path: number[],\n context: CanvasRenderingContext2D\n ): void {\n context.beginPath();\n // start offscreen\n context.moveTo(-1, height + 1);\n context.lineTo(-1, height * path[0]);\n\n // draw the line\n for (let i = 0; i < path.length; i += 1) {\n context.lineTo(i, height * path[i]);\n }\n\n // close offscreen\n context.lineTo(width + PX_PER_SECOND, height * path[path.length - 1]);\n context.lineTo(width + PX_PER_SECOND, height + 1);\n context.closePath();\n }\n\n function drawGridLines(context: CanvasRenderingContext2D): void {\n context.beginPath();\n // draw verticals\n for (let x = 1; x < width; x += GRID_SIZE) {\n context.moveTo(x, 0);\n context.lineTo(x, height);\n }\n // draw horizontals\n for (let y = 1; y < height; y += GRID_SIZE) {\n context.moveTo(0, y);\n context.lineTo(width, y);\n }\n }\n\n /**\n * Main draw loop for where the animation happens\n * all the styling happens within drawCanvas from paths generated by other functions\n * @param timestamp passed in callback from requestAnimationFrame\n */\n function drawCanvas(timestamp?: DOMHighResTimeStamp): void {\n if (themeColors == null) {\n return;\n }\n\n lastTimestamp = lastTimestamp ?? timestamp;\n\n const { background, foregroundStroke, gridColor } = themeColors;\n\n assertNotNull(ctx);\n // clear the canvas\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, width, height);\n\n drawGridLines(ctx);\n ctx.lineWidth = 1;\n ctx.strokeStyle = gridColor;\n ctx.stroke();\n\n // for speeds less then 60 px per second, subpixel motion is required to look smooth\n const subPixelMotion =\n ((lastTimestamp ?? 0) - (timestamp ?? 0)) / (1000 / PX_PER_SECOND);\n ctx.translate(subPixelMotion, 0);\n\n drawAreaLine(data, ctx);\n ctx.lineWidth = 2;\n ctx.strokeStyle = foregroundStroke;\n ctx.stroke();\n\n ctx.translate(-subPixelMotion, 0); // we don't pattern to shift however\n if (pattern != null) {\n ctx.fillStyle = pattern;\n }\n ctx.fill();\n ctx.setTransform(scale, 0, 0, scale, 0, 0); // reset the translate matrix to normal\n\n // generate new data points\n if ((timestamp ?? 0) - (lastTimestamp ?? 0) > 1000 / PX_PER_SECOND) {\n // number of points to add since last update\n const numberOfPoints = Math.floor(\n ((timestamp ?? 0) - (lastTimestamp ?? 0)) / (1000 / PX_PER_SECOND)\n );\n for (let i = 0; i < numberOfPoints; i += 1) {\n data.shift();\n data.push(randomWalk(data[data.length - 1]));\n }\n lastTimestamp = timestamp;\n }\n\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = requestAnimationFrame(drawCanvas);\n }\n\n // debounce the resize so its not overly aggresive\n const debouncedHandleResize = debounce(\n () => {\n rAF = requestAnimationFrame(timestamp => {\n setCanvasSize(); // setCanvas can cause lag if not debounced\n\n // fill or remove extra data points\n setDataSize();\n\n // opening devtools triggers a blur then resize,\n // need to reset shade as we are restarting animation\n setShade(false);\n drawCanvas(timestamp);\n });\n },\n RESIZE_DEBOUNCE,\n { leading: true } // resize immediately, once.\n );\n\n function pauseAnimation(): void {\n // pause animation when browser window is blurred to conserve CPU usage\n setShade(true);\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n rAF = null;\n lastTimestamp = null;\n }\n\n // when timeout expires, pause animation\n const resetIdleTimeout = debounce(() => {\n pauseAnimation();\n }, INTERACTION_TIMEOUT);\n\n function startAnimation(): void {\n // can fire multiple times, check if rAF is null first\n // restart animation loop, and fade back in\n if (rAF == null) {\n setShade(false);\n setCanvasSize();\n setDataSize();\n rAF = requestAnimationFrame(drawCanvas);\n }\n resetIdleTimeout();\n }\n\n function handleActivity(): void {\n if (document.hasFocus()) {\n // only if document has focus (mousemove can fire on non-focused tabs)\n startAnimation();\n }\n }\n\n function handleResize(): void {\n // pause and debounce animation during resize for better resizing performance\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n resetIdleTimeout(); // treat resizing as a form of activity\n debouncedHandleResize();\n }\n\n // react mount/unmount hooks\n useEffect(() => {\n ctx = canvas.current?.getContext('2d', { alpha: false });\n setCanvasSize();\n data = initData();\n pattern = createPatternFill();\n\n // start draw loop\n drawCanvas();\n resetIdleTimeout();\n\n window.addEventListener('resize', handleResize);\n\n window.addEventListener('focus', startAnimation);\n window.addEventListener('blur', pauseAnimation);\n\n // don't burn cpu if the user is \"idle\", start a timer that resets\n // on any user activity, and on timeout expiry pause the animation\n window.addEventListener('mousemove', handleActivity);\n window.addEventListener('keydown', handleActivity);\n\n return () => {\n if (rAF != null) {\n cancelAnimationFrame(rAF);\n }\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('focus', startAnimation);\n window.removeEventListener('blur', pauseAnimation);\n\n window.removeEventListener('mousemove', handleActivity);\n window.removeEventListener('keydown', handleActivity);\n\n resetIdleTimeout.cancel();\n debouncedHandleResize.cancel();\n };\n }, [themeColors]);\n\n return (\n themeColors && (\n <div className=\"random-area-plot-animation-container\" ref={container}>\n <canvas ref={canvas} className={shade ? 'shade' : ''} />\n </div>\n )\n );\n});\n\nexport default RandomAreaPlotAnimation;\n"],"mappings":"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"}
|
package/dist/SearchInput.css
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
padding-right: 1.75rem;
|
|
7
7
|
}
|
|
8
8
|
.search-group .search-icon {
|
|
9
|
+
color: var(--dh-color-search-icon);
|
|
9
10
|
pointer-events: none;
|
|
10
11
|
position: absolute;
|
|
11
12
|
right: 0.5rem;
|
|
@@ -16,28 +17,43 @@
|
|
|
16
17
|
align-items: center;
|
|
17
18
|
}
|
|
18
19
|
.search-group ::-webkit-search-cancel-button {
|
|
20
|
+
background-size: 16px;
|
|
21
|
+
background-color: var(--dh-color-fg);
|
|
22
|
+
mask-image: var(--dh-svg-icon-search-cancel);
|
|
23
|
+
mask-position: center center;
|
|
24
|
+
mask-repeat: no-repeat;
|
|
25
|
+
mask-size: 16px;
|
|
19
26
|
-webkit-appearance: none;
|
|
20
27
|
height: 16px;
|
|
21
28
|
width: 16px;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
transition: background-image 0.15s;
|
|
29
|
+
opacity: 0.4;
|
|
30
|
+
transition: opacity 300ms ease;
|
|
25
31
|
}
|
|
26
32
|
.search-group ::-webkit-search-cancel-button:hover {
|
|
27
|
-
|
|
33
|
+
opacity: 1;
|
|
28
34
|
}
|
|
29
|
-
.search-group .search-
|
|
30
|
-
pointer-events: none;
|
|
35
|
+
.search-group .search-change-selection {
|
|
31
36
|
position: absolute;
|
|
32
|
-
right:
|
|
37
|
+
right: 0.25rem;
|
|
33
38
|
top: 15%;
|
|
34
39
|
bottom: 15%;
|
|
35
40
|
height: 70%;
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
border
|
|
40
|
-
|
|
41
|
+
}
|
|
42
|
+
.search-group .search-change-button {
|
|
43
|
+
background: none;
|
|
44
|
+
border: none;
|
|
45
|
+
padding: 1px 2px;
|
|
46
|
+
}
|
|
47
|
+
.search-group .search-change-text {
|
|
48
|
+
background-color: hsla(var(--dh-color-white-hsl), 0.2);
|
|
49
|
+
border-radius: 10px;
|
|
50
|
+
padding: 1px 5px;
|
|
51
|
+
}
|
|
52
|
+
.search-group .search-match {
|
|
53
|
+
background-color: hsla(var(--dh-color-white-hsl), 0.2);
|
|
54
|
+
border-radius: 10px;
|
|
55
|
+
padding: 1px 5px;
|
|
56
|
+
margin: 0 5px;
|
|
41
57
|
}
|
|
42
58
|
|
|
43
59
|
/*# sourceMappingURL=SearchInput.css.map */
|