@splunk/dynamic-editors 0.38.1 → 0.38.3
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/CHANGELOG.md +16 -0
- package/DynamicEditor.js +1 -1
- package/DynamicEditor.js.map +1 -1
- package/containers/EditorItem.js +1 -1
- package/containers/EditorItem.js.map +1 -1
- package/containers/EditorLayout.js +1 -1
- package/containers/EditorLayout.js.map +1 -1
- package/containers/EditorLayoutItem.js +1 -1
- package/containers/EditorLayoutItem.js.map +1 -1
- package/editors/AdvancedConfigCard.js.map +1 -1
- package/editors/ArrayOfStringsEditor.js.map +1 -1
- package/editors/CheckboxEditor.js.map +1 -1
- package/editors/ColorEditor.js.map +1 -1
- package/editors/ColumnMultiSelectionByFieldNameEditor.js.map +1 -1
- package/editors/ColumnMultiSelectionEditor.js.map +1 -1
- package/editors/ColumnSelectionEditor.js.map +1 -1
- package/editors/DynamicColorEditor.js.map +1 -1
- package/editors/DynamicColorEditorWithPrecedence.js.map +1 -1
- package/editors/DynamicItemEditor.js.map +1 -1
- package/editors/ImageEditor.js.map +1 -1
- package/editors/MultiColorPickerEditor.js.map +1 -1
- package/editors/NumberEditor.js.map +1 -1
- package/editors/PercentEditor.js.map +1 -1
- package/editors/PresetSelectorEditor.js.map +1 -1
- package/editors/RadioBarEditor.js.map +1 -1
- package/editors/SelectEditor.js.map +1 -1
- package/editors/SeriesColorsByFieldEditor.js.map +1 -1
- package/editors/SeriesColorsEditor.js.map +1 -1
- package/editors/SliderEditor.js.map +1 -1
- package/editors/StaticItemEditor.js.map +1 -1
- package/editors/TableColumnFormatterEditor.js +1 -1
- package/editors/TableColumnFormatterEditor.js.map +1 -1
- package/editors/TableDynamicColorEditor.js.map +1 -1
- package/editors/TextAreaEditor.js.map +1 -1
- package/editors/TextEditor.js.map +1 -1
- package/editors/ThresholdEditor.js.map +1 -1
- package/editors/ToggleEditor.js.map +1 -1
- package/editors/useColumnSelectorFooterMessage.js.map +1 -1
- package/package.json +17 -17
- package/shared/AdvancedControlGroup.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SeriesColorsEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ScreenReaderContent\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualizations-shared/colorConstants\"","webpack://@splunk/dynamic-editors/./src/editors/ColorEditor.jsx","webpack://@splunk/dynamic-editors/./src/editors/MultiColorPickerEditor.tsx","webpack://@splunk/dynamic-editors/./src/editors/SeriesColorsEditor.tsx","webpack://@splunk/dynamic-editors/./src/editors/formatters/ColorPreview.tsx","webpack://@splunk/dynamic-editors/./src/interfaces/BaseEditorProps.ts","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/./src/shared/PreviewWrapper.tsx","webpack://@splunk/dynamic-editors/./src/shared/dimensionConstants.ts","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Color\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ColumnLayout\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Dropdown\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/FormRows\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Menu\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Popover\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Text\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes/variables\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/id\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualization-color-palettes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualizations-shared/colorUtils\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/runtime/compat get default export","webpack://@splunk/dynamic-editors/webpack/runtime/define property getters","webpack://@splunk/dynamic-editors/webpack/runtime/hasOwnProperty shorthand","webpack://@splunk/dynamic-editors/webpack/runtime/make namespace object","webpack://@splunk/dynamic-editors/webpack/startup"],"sourcesContent":["const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@splunk/react-ui/ScreenReaderContent\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@splunk/visualizations-shared/colorConstants\");","import React, { useEffect, useCallback, useState, useMemo } from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { debounce, noop, toLower } from 'lodash';\nimport { variables } from '@splunk/themes';\nimport Color from '@splunk/react-ui/Color';\nimport Text from '@splunk/react-ui/Text';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport { COLOR_EDITOR_PALETTE } from '@splunk/visualizations-shared/colorConstants';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport ControlGroup from '../shared/AdvancedControlGroup';\n\nconst TextContainer = styled.div`\n max-height: ${variables.inputHeight};\n width: 100%;\n min-width: 0;\n`;\n\n// hardcoded style to sync with SUI color picker's hardcoded dimensions\n// TODO(fkurniawan): see if we can leverage prisma's consolidated textInput out of the box instead of our own component\n// right now, we're using hideInput\nconst StyledText = styled(Text)`\n max-height: ${variables.inputHeight};\n`;\n\n/**\n * Trims the color input and returns the result, or default color if the default color is valid, or previous color\n * @param {String} color The color the user entered\n * @param {String} defaultColor The default color of the component\n * @param {String} prevColor The previous color of the component\n * @returns {String}\n */\nconst getColor = ({ color, defaultColor, prevColor }) => {\n const newColor = typeof color === 'string' ? color.trim() : color;\n\n // color === null is `N/A` in color picker\n if (isColor(newColor) || newColor === null) {\n return newColor;\n }\n\n if (isColor(defaultColor)) {\n return defaultColor;\n }\n\n if (isColor(prevColor) || prevColor === null) {\n return prevColor;\n }\n\n return 'transparent';\n};\n\nconst ColorAndTextWrapper = ({\n id,\n showTextInput,\n color,\n palette,\n handleColorChange,\n labelledBy,\n textWidth,\n value,\n name,\n handleTextColorChange,\n handleKeyPress,\n handleBlur,\n isDisabled,\n}) => {\n const textLabelId = useMemo(() => createDOMID('color-code'), []);\n\n return (\n <>\n <div>\n <Color\n key=\"color-editor\"\n append={showTextInput}\n value={getColor({ color })}\n palette={palette}\n onChange={handleColorChange}\n data-test={`color-picker-${name}`}\n disabled={isDisabled}\n hideInput\n labelledBy={labelledBy}\n />\n </div>\n {showTextInput && (\n <TextContainer data-test=\"text-container\" textWidth={textWidth}>\n <ScreenReaderContent id={textLabelId}>{_('Color code input')}</ScreenReaderContent>\n <StyledText\n key={value}\n data-test={name}\n prepend\n value={color === null ? 'N/A' : color}\n onChange={handleTextColorChange}\n onKeyDown={handleKeyPress}\n onBlur={handleBlur}\n disabled={isDisabled}\n // hardcoded style to sync with SUI color picker's hardcoded dimensions\n // TODO(fkurniawan): see if we can leverage prisma's consolidated textInput out of the box\n style={{ height: '32px' }}\n labelledBy={`${labelledBy} ${textLabelId}`}\n inputId={id}\n />\n </TextContainer>\n )}\n </>\n );\n};\n\nColorAndTextWrapper.propTypes = {\n id: T.string,\n showTextInput: T.bool,\n color: T.string,\n palette: T.arrayOf(T.string),\n handleColorChange: T.func,\n labelledBy: T.string,\n textWidth: T.oneOfType([T.string, T.number]),\n value: T.string,\n name: T.string.isRequired,\n handleTextColorChange: T.func,\n handleKeyPress: T.func,\n handleBlur: T.func,\n isDisabled: T.bool,\n};\n\nconst defaultItemSchema = { default: 'transparent' };\nconst emptyStyle = {};\n\n// The propTypes typing for TS callers isn't working for the onChange callback\n/**\n * @param {Object} props\n * @param {(e: import('react').SyntheticEvent, name: string, value: string) => void} [props.onChange]\n * @returns\n */\nconst ColorEditor = ({\n name = 'color',\n value = 'transparent',\n label = '',\n labelPosition = 'top',\n labelWidth,\n palette = COLOR_EDITOR_PALETTE,\n onChange = noop,\n itemSchema = defaultItemSchema,\n isDisabled = false,\n textWidth = 'auto',\n hideLabel = false,\n showTextInput = true,\n style: customEditorStyle = emptyStyle,\n}) => {\n const [color, setColor] = useState(value);\n\n useEffect(() => {\n setColor(value);\n }, [value]);\n\n const debouncedOnChange = useMemo(() => debounce(onChange, 250), [onChange]);\n\n const handleColorChange = useCallback(\n ({ value: val }) => {\n const newColor = getColor({ color: val, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (value !== newColor) {\n // No event to pass back, so it is null\n debouncedOnChange(null, name, newColor);\n }\n },\n [debouncedOnChange, itemSchema.default, name, value]\n );\n\n const handleTextColorChange = useCallback((_event, { value: val }) => {\n const colorToValue = toLower(val).trim() === 'n/a' ? null : val;\n setColor(colorToValue);\n }, []);\n\n const handleKeyPress = useCallback(\n event => {\n if (event.key === 'Escape') {\n setColor(value);\n return;\n }\n if (event.key !== 'Enter') {\n return;\n }\n\n if (value !== color) {\n const newColor = getColor({ color, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (newColor !== value) {\n onChange(event, name, newColor);\n }\n }\n },\n [name, color, value, onChange, itemSchema.default]\n );\n\n const handleBlur = useCallback(\n event => {\n if (color !== value) {\n const newColor = getColor({ color, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (newColor !== value) {\n onChange(event, name, newColor);\n }\n }\n },\n [name, color, value, onChange, itemSchema.default]\n );\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n style={customEditorStyle}\n hideLabel={hideLabel}\n controlsLayout=\"fillJoin\"\n >\n <ColorAndTextWrapper\n showTextInput={showTextInput}\n color={color}\n palette={palette}\n handleColorChange={handleColorChange}\n name={name}\n isDisabled={isDisabled}\n textWidth={textWidth}\n value={value}\n handleTextColorChange={handleTextColorChange}\n handleKeyPress={handleKeyPress}\n handleBlur={handleBlur}\n />\n </ControlGroup>\n );\n};\n\nColorEditor.propTypes = {\n /**\n * The option name\n */\n name: T.string.isRequired,\n\n /**\n * The option value\n */\n value: T.string,\n\n /**\n * @param {Object} itemSchema Either the dataContract or schema for the selected item\n */\n itemSchema: T.object,\n\n /**\n * A human readable label for the option\n */\n label: T.string.isRequired,\n\n /**\n * Flag to hide the editor label\n */\n hideLabel: T.bool,\n\n /**\n * Flag to hide the color text input\n */\n showTextInput: T.bool,\n\n /**\n * Custom styling for the editor layout, eg: setting margin-bottom to 0px for ControlGroup, SUI has it at 15px\n */\n style: T.object,\n\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n\n /**\n * Label position\n */\n labelWidth: T.number,\n\n /**\n * An array of color swatch values\n */\n palette: T.arrayOf(T.string),\n\n /**\n * Callback when changing the text value\n *\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {string} name The option name\n * @param {string} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * Disabled state of component\n */\n isDisabled: T.bool,\n textWidth: T.oneOfType([T.string, T.number]),\n};\n\nexport default ColorEditor;\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { noop } from 'lodash';\nimport variables from '@splunk/themes/variables';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FormRows from '@splunk/react-ui/FormRows';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport Button from '@splunk/react-ui/Button';\nimport Popover, { PopoverRequestCloseHandler } from '@splunk/react-ui/Popover';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport { BaseEditorProps, BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport ColorEditor from './ColorEditor';\n\nconst popoverStyle = { padding: '10px' };\nconst colorButtonStyle = { width: '314px' };\n\nconst StyledButton = styled(Button)`\n padding: 8px;\n width: 100%;\n min-height: 40px;\n & > span {\n display: grid;\n grid-template-columns: repeat(auto-fill, 26px);\n justify-content: space-evenly;\n grid-gap: 4px;\n }\n background-color: ${variables.interactiveColorBackground};\n`;\n\nconst ColorChip = styled.div`\n width: 26px;\n height: 24px;\n background-color: ${(props): string => props.color};\n border-radius: 2px;\n`;\n\nconst StyledFlyoutContent = styled.div`\n box-sizing: border-box;\n padding: 8px;\n width: 312px;\n max-height: 484px;\n background-color: ${variables.backgroundColorPopup};\n`;\n\nconst FlyoutHeader = styled.div`\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n padding: 8px 8px 0 8px;\n font-family: ${variables.fontFamily};\n color: ${variables.contentColorActive};\n`;\n\nconst ColorListEditor = styled.div`\n height: 412px;\n overflow-y: auto;\n padding: 8px 10px;\n`;\n\nexport interface ColorFlyoutEditorProps {\n colors: string[];\n handleColorRemove: (_e, { index }: { index: number }) => void;\n handleColorChange: (idx: number) => (_evt, name: string, value: string) => void;\n CustomColorMatchEditor?: (props: { index: number }) => React.ReactNode;\n flyoutTitle: string;\n addColorButtonLabel: string;\n handleColorAdd: () => void;\n handleColorMove: (data: { fromIndex: number; toIndex: number }) => void;\n}\n\nexport const ColorFlyoutEditor = ({\n colors,\n CustomColorMatchEditor,\n handleColorRemove,\n handleColorChange,\n flyoutTitle,\n addColorButtonLabel,\n handleColorAdd,\n handleColorMove,\n}: ColorFlyoutEditorProps) => {\n const ColorRowItems = useMemo(() => {\n return colors.map((color, idx) => {\n // disable the color editor's text input when a custom input editor is available to render adjacently\n const showTextInput = CustomColorMatchEditor == null;\n return (\n <FormRows.Row\n index={idx}\n key={createDOMID()}\n data-color={color}\n onRequestRemove={handleColorRemove}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <ColorEditor\n value={color}\n key={createDOMID()}\n onChange={handleColorChange(idx)}\n hideLabel\n label=\" \"\n name=\"color\"\n style={{ marginBottom: 0, marginTop: 0, width: showTextInput ? '100%' : 32 }}\n showTextInput={showTextInput}\n />\n {typeof CustomColorMatchEditor === 'function' && (\n <CustomColorMatchEditor index={idx} />\n )}\n </div>\n </FormRows.Row>\n );\n });\n }, [colors, CustomColorMatchEditor, handleColorRemove, handleColorChange]);\n\n return (\n <StyledFlyoutContent data-test=\"MultiColorPickerFlyoutContent\">\n <FlyoutHeader data-test=\"MultiColorPickerFlyoutTitle\">{flyoutTitle}</FlyoutHeader>\n <ColorListEditor>\n <FormRows\n addLabel={addColorButtonLabel}\n onRequestAdd={handleColorAdd}\n onRequestMove={handleColorMove}\n data-test=\"ColorListEditor\"\n >\n {ColorRowItems}\n </FormRows>\n </ColorListEditor>\n </StyledFlyoutContent>\n );\n};\n\nexport interface MultiColorPickerEditorProps extends BaseEditorProps {\n CustomColorMatchEditor?: (props: { index: number }) => React.ReactNode;\n canReorderColors?: boolean;\n value: string[];\n flyoutTitle?: string;\n addColorButtonLabel?: string;\n hideLabel?: boolean;\n canAddNewColors?: boolean;\n}\n\nconst MultiColorPickerEditor: React.FunctionComponent<MultiColorPickerEditorProps> = ({\n CustomColorMatchEditor,\n onChange = noop,\n canReorderColors = true,\n value: vizColors = VIZ_CATEGORICAL,\n flyoutTitle = _('Customize colors'),\n addColorButtonLabel = _('Add color'),\n name = 'seriesColors',\n label = '',\n labelPosition = 'top',\n labelWidth,\n isDisabled = false,\n hideLabel = true,\n canAddNewColors = true,\n}) => {\n const [showFlyout, setShowFlyout] = useState(false);\n const [colors, setColors] = useState(vizColors);\n const buttonRef = useRef(null);\n\n useEffect(() => {\n setColors(vizColors);\n }, [vizColors]);\n\n // callbacks to add, remove, update and reorder a color form row\n const handleColorAdd = useCallback(() => {\n const userColorsSet = new Set(colors);\n let nextColor = VIZ_CATEGORICAL.find(color => !userColorsSet.has(color));\n if (!nextColor) {\n // All picked, count appearances\n const countMap = new Map<string, number>();\n VIZ_CATEGORICAL.forEach(color => countMap.set(color, 0));\n colors.forEach(color => {\n countMap.set(color, (countMap.get(color) || 0) + 1);\n });\n // Find color with minimum appearances\n let minCount = Infinity;\n VIZ_CATEGORICAL.forEach(color => {\n const count = countMap.get(color) || 0;\n if (count < minCount) {\n minCount = count;\n nextColor = color;\n }\n });\n }\n onChange(null, name, [...colors, nextColor]);\n }, [name, onChange, colors]);\n\n const handleColorChange = useCallback(\n idx => (_evt, _name, value) => {\n const colorsCopy = [...colors];\n colorsCopy.splice(idx, 1, value);\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n const handleColorRemove = useCallback(\n (e, { index }) => {\n const colorsCopy = [...colors];\n colorsCopy.splice(index, 1);\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n const handleColorMove = useCallback(\n ({ fromIndex, toIndex }) => {\n const colorsCopy = [...colors];\n const movedColor = colorsCopy[fromIndex];\n colorsCopy.splice(fromIndex, 1); // first, delete the color at the original position\n colorsCopy.splice(toIndex, 0, movedColor); // then reinsert it at the new position\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n /**\n * custom logic is required for closing the flyout as the FormRows component is rendered inside a Popover, and\n * when we sort the form rows, the popover closes mid-sorting (closeReason=\"clickAway\") as the dragged element is\n * taken out of the flow. Current workaround is to check if the event's source element has a sortable handle,\n * if yes, the flyout is kept open.\n *\n * Additionally, focus is returned to the trigger button when exiting through escape key press\n */\n const handleFlyoutClose: PopoverRequestCloseHandler = useCallback(({ event, reason }) => {\n // @ts-ignore\n if (!event?.srcElement?.sortableHandle) {\n setShowFlyout(false);\n }\n if (reason === 'escapeKey') {\n buttonRef.current.focus();\n }\n }, []);\n\n const ColorChips = useMemo(\n () => colors.map(color => <ColorChip color={color} key={createDOMID()} />),\n [colors]\n );\n\n const toggleShowFlyout = useCallback(() => {\n setShowFlyout(isShown => !isShown);\n }, []);\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n hideLabel={hideLabel}\n data-test=\"MultiColorPickerEditor\"\n >\n <StyledButton\n inline={false}\n data-test=\"MultiColorPickerButton\"\n appearance=\"default\"\n ref={buttonRef}\n onClick={toggleShowFlyout}\n disabled={isDisabled}\n style={colorButtonStyle}\n >\n {ColorChips}\n </StyledButton>\n <Popover\n data-test=\"MultiColorPickerFlyout\"\n open={showFlyout}\n anchor={buttonRef.current}\n defaultPlacement=\"horizontal\"\n style={popoverStyle}\n onRequestClose={handleFlyoutClose}\n takeFocus\n >\n <ColorFlyoutEditor\n colors={colors}\n CustomColorMatchEditor={CustomColorMatchEditor}\n handleColorRemove={handleColorRemove}\n handleColorChange={handleColorChange}\n handleColorAdd={canAddNewColors ? handleColorAdd : undefined}\n handleColorMove={canReorderColors ? handleColorMove : undefined}\n flyoutTitle={flyoutTitle}\n addColorButtonLabel={addColorButtonLabel}\n />\n </Popover>\n </ControlGroup>\n );\n};\n\nMultiColorPickerEditor.propTypes = {\n ...BaseEditorPropTypes,\n /**\n * Colors can be reordered manually\n */\n canReorderColors: T.bool,\n /**\n * Can add a new color\n */\n canAddNewColors: T.bool,\n /**\n * List of colors\n */\n value: T.arrayOf(T.string),\n /**\n * Title of the flyout editor\n */\n flyoutTitle: T.string,\n /**\n * Button label for adding a new color row\n */\n addColorButtonLabel: T.string,\n /**\n * Custom input editor for mapping a value to color, eg: dropdown for field -> color\n */\n CustomColorMatchEditor: T.func,\n /**\n * Flag to hide the editor label\n */\n hideLabel: T.bool,\n};\n\nexport default MultiColorPickerEditor;\n","import React, { useState, useCallback, useMemo } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { isEqual } from 'lodash';\nimport Button from '@splunk/react-ui/Button';\nimport ColumnLayout from '@splunk/react-ui/ColumnLayout';\nimport Dropdown from '@splunk/react-ui/Dropdown';\nimport Menu from '@splunk/react-ui/Menu';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport MultiColorPickerEditor from './MultiColorPickerEditor';\nimport { ColorPreview } from './formatters/ColorPreview';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport PreviewWrapper from '../shared/PreviewWrapper';\nimport { VERTICAL_EDITOR_SPACING, DROPDOWN_MENU_WIDTH } from '../shared/dimensionConstants';\nimport { BaseEditorProps, BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\n\nconst MAX_PREVIEW_COLOR_COUNT = 8;\n\n// to add more warm/cold... palettes\nexport type PaletteType = 'default' | 'custom';\n\nexport interface PaletteDefinition<P extends PaletteType = PaletteType> {\n id: P;\n name: string;\n palette: string[];\n}\n\ntype Palettes = {\n [P in PaletteType]: PaletteDefinition<P>;\n};\n\nexport const PALETTES = {\n default: { id: 'default', name: _('Default'), palette: VIZ_CATEGORICAL },\n custom: { id: 'custom', name: _('Custom'), palette: [] },\n} satisfies Palettes;\n\nconst NameWrapper = styled.div`\n width: 120px;\n margin-right: 20px;\n display: flex;\n`;\n\nconst PaletteWrapper = styled(PreviewWrapper)`\n display: flex;\n align-items: center;\n`;\n\nconst ColorPreviewWrapper = styled.div`\n flex: 1 0 1px;\n height: 100%;\n`;\n\nconst SeriesColorsEditor = ({ label, value, name, onChange }: BaseEditorProps) => {\n const overrideCustomPalette = useMemo(() => !!value?.length && !isEqual(value, VIZ_CATEGORICAL), [value]);\n\n // use `value` to override the custom palette if value is not empty\n const originalPalettes = useMemo(() => {\n if (overrideCustomPalette) {\n return {\n ...PALETTES,\n custom: { ...PALETTES.custom, palette: value },\n };\n }\n return PALETTES;\n }, [overrideCustomPalette, value]);\n\n // selected palette ID\n const [selectedPalette, setSelectedPalette] = useState<PaletteType>(\n overrideCustomPalette ? 'custom' : 'default'\n );\n // current palettes on update\n const [palettes, setPalettes] = useState(originalPalettes);\n\n const handleMenuSelect = useCallback(\n (paletteId: PaletteType) => {\n setSelectedPalette(paletteId);\n onChange(null, name, palettes[paletteId].palette);\n },\n [name, onChange, palettes]\n );\n\n const handleColorChange = useCallback(\n (_evt, _name, newColors) => {\n if (newColors.length) {\n // override the previous custom palette\n setPalettes(prev => ({\n ...prev,\n custom: { ...PALETTES.custom, palette: newColors },\n }));\n setSelectedPalette('custom');\n onChange(null, name, newColors);\n } else {\n // set the colors to `Default` if MultiColorPicker returns empty array\n setPalettes(prev => ({\n ...prev,\n custom: PALETTES.custom,\n }));\n setSelectedPalette('default');\n onChange(null, name, PALETTES.default.palette);\n }\n },\n [name, onChange]\n );\n\n const toggle = (\n <Button\n appearance=\"default\"\n data-test=\"palette-dropdown-button\"\n label={palettes[selectedPalette].name}\n isMenu\n />\n );\n\n const renderMenuItem = (paletteConfig: PaletteDefinition) => {\n const { id, palette, name: paletteName } = paletteConfig;\n return (\n <Menu.Item\n key={`SeriesColorsDropdownMenuItem-${id}`}\n data-test={`palette-dropdown-menu-${id}`}\n selectable\n selected={selectedPalette === id}\n onClick={() => handleMenuSelect(id)}\n >\n <PaletteWrapper>\n <NameWrapper>{paletteName}</NameWrapper>\n <ColorPreviewWrapper>\n <ColorPreview\n colors={palette.slice(0, MAX_PREVIEW_COLOR_COUNT)}\n maxColorCount={MAX_PREVIEW_COLOR_COUNT}\n expandToFillHorizontalSpace={false}\n />\n </ColorPreviewWrapper>\n </PaletteWrapper>\n </Menu.Item>\n );\n };\n\n const isCustomPaletteAvailable = palettes.custom.palette.length > 0;\n\n return (\n <ColumnLayout gutter={VERTICAL_EDITOR_SPACING}>\n <ColumnLayout.Row>\n <ControlGroup\n label={label || _('Series colors')}\n labelPosition=\"top\"\n data-test=\"series-colors-editor\"\n >\n <Dropdown toggle={toggle}>\n <Menu style={{ width: DROPDOWN_MENU_WIDTH }}>\n {isCustomPaletteAvailable && renderMenuItem(palettes.custom)}\n {isCustomPaletteAvailable && <Menu.Divider />}\n {renderMenuItem(PALETTES.default)}\n </Menu>\n </Dropdown>\n </ControlGroup>\n </ColumnLayout.Row>\n <ColumnLayout.Row>\n <MultiColorPickerEditor\n name=\"series-colors\"\n value={palettes[selectedPalette].palette}\n flyoutTitle={_('Customize colors')}\n addColorButtonLabel={_('Add color')}\n onChange={handleColorChange}\n />\n </ColumnLayout.Row>\n </ColumnLayout>\n );\n};\n\nSeriesColorsEditor.propTypes = {\n ...BaseEditorPropTypes,\n value: T.arrayOf(T.string),\n};\n\nexport default SeriesColorsEditor;\n","import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { createDOMID } from '@splunk/ui-utils/id';\n\nconst DEFAULT_MAX_COLOR_COUNT = 7;\n\ninterface ColorPreviewWrapperProps {\n isReversed?: boolean;\n}\n\nconst ColorPreviewWrapper = styled.div.attrs<ColorPreviewWrapperProps>(props => ({\n 'data-test': 'ColorPreviewWrapper',\n isReversed: props.isReversed,\n}))<ColorPreviewWrapperProps>`\n display: flex;\n flex-direction: row;\n height: 100%;\n`;\n\ninterface ColorPreviewItemProps {\n color: string;\n widthGrow?: boolean;\n maxColorCount?: number;\n}\n\nconst ColorPreviewItem = styled.div.attrs<ColorPreviewItemProps>(() => ({\n 'data-test': 'ColorPreviewItem',\n}))<ColorPreviewItemProps>`\n flex-grow: ${({ widthGrow }): number => (widthGrow ? 1 : 0)};\n width: ${({ maxColorCount }): string => `calc(100% / ${maxColorCount})`};\n margin-right: 1px;\n background-color: ${({ color }): string => color};\n &:last-of-type {\n margin-right: 0;\n }\n`;\n\ninterface ColorPreviewProps {\n colors: string[];\n maxColorCount?: number;\n expandToFillHorizontalSpace?: boolean;\n isReversed?: boolean;\n}\nconst propTypes: Record<keyof ColorPreviewProps, T.Validator<any>> = {\n colors: T.arrayOf(T.string).isRequired,\n maxColorCount: T.number,\n expandToFillHorizontalSpace: T.bool,\n isReversed: T.bool,\n};\n\nexport const ColorPreview: React.FunctionComponent<ColorPreviewProps> = ({\n colors = [],\n maxColorCount = DEFAULT_MAX_COLOR_COUNT,\n expandToFillHorizontalSpace = true,\n isReversed = false,\n}): React.ReactElement => {\n const trueColors = isReversed ? [...colors].reverse() : [...colors];\n return (\n <ColorPreviewWrapper isReversed={isReversed}>\n {trueColors.map(\n (color, _i): React.ReactElement =>\n isColor(color) && (\n <ColorPreviewItem\n key={createDOMID()}\n color={color}\n widthGrow={expandToFillHorizontalSpace}\n maxColorCount={maxColorCount}\n />\n )\n )}\n </ColorPreviewWrapper>\n );\n};\nColorPreview.propTypes = propTypes;\n","import * as T from 'prop-types';\nimport type { JSONSchema7 } from 'json-schema';\n\nexport interface BaseEditorProps {\n name: string;\n value: any;\n onChange?: (...args: any[]) => void;\n label?: string; // @TODO(pwied): this should not live in editor props\n labelPosition?: 'top' | 'left'; // ^^^\n context?: Record<string, any>;\n labelWidth?: number;\n isAdvanced?: boolean;\n isDisabled?: boolean;\n dataSourceBindings?: Record<string, any>;\n options?: { [k: string]: any };\n optionsSchema?: {\n [key: string]: JSONSchema7;\n };\n}\n\nexport const BaseEditorPropTypes: Record<keyof BaseEditorProps, T.Validator<any>> = {\n name: T.string.isRequired,\n value: T.oneOfType([T.string, T.object, T.arrayOf(T.string)]),\n context: T.object,\n label: T.string,\n labelPosition: T.oneOf(['top', 'left']),\n labelWidth: T.number,\n onChange: T.func,\n isAdvanced: T.bool,\n isDisabled: T.bool,\n dataSourceBindings: T.object,\n options: T.object,\n optionsSchema: T.object,\n};\n","import React, { Children, cloneElement, ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup, { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","import styled from 'styled-components';\n\nexport default styled.div`\n border-radius: 3px; /* @TODO(pwied): should this be imported from SUI variables? */\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 20px;\n`;\n","export const FLYOUT_PADDING = 21;\nexport const COLUMN_FLYOUT_PADDING = 16;\nexport const FLYOUT_WIDTH = 344;\n\nexport const VERTICAL_EDITOR_SPACING = 16;\n\nexport const DROPDOWN_MENU_WIDTH = 327;\n\nexport const editorStyle = { width: '100%' };\n","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/Color\");","module.exports = require(\"@splunk/react-ui/ColumnLayout\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/Dropdown\");","module.exports = require(\"@splunk/react-ui/FormRows\");","module.exports = require(\"@splunk/react-ui/Menu\");","module.exports = require(\"@splunk/react-ui/Popover\");","module.exports = require(\"@splunk/react-ui/Text\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/themes/variables\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"@splunk/ui-utils/id\");","module.exports = require(\"@splunk/visualization-color-palettes\");","module.exports = require(\"@splunk/visualizations-shared/colorUtils\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(5695);\n"],"names":["require","TextContainer","styled","variables","inputHeight","StyledText","Text","getColor","color","defaultColor","prevColor","newColor","trim","isColor","ColorAndTextWrapper","id","showTextInput","palette","handleColorChange","labelledBy","textWidth","value","name","handleTextColorChange","handleKeyPress","handleBlur","isDisabled","textLabelId","useMemo","createDOMID","React","Color","key","append","onChange","disabled","hideInput","ScreenReaderContent","_","prepend","onKeyDown","onBlur","style","height","inputId","propTypes","T","isRequired","defaultItemSchema","default","emptyStyle","ColorEditor","label","labelPosition","labelWidth","COLOR_EDITOR_PALETTE","noop","itemSchema","hideLabel","customEditorStyle","setColor","useState","useEffect","debouncedOnChange","debounce","useCallback","val","_event","colorToValue","toLower","event","ControlGroup","controlsLayout","popoverStyle","padding","colorButtonStyle","width","StyledButton","interactiveColorBackground","ColorChip","div","props","StyledFlyoutContent","backgroundColorPopup","FlyoutHeader","fontFamily","contentColorActive","ColorListEditor","ColorFlyoutEditor","colors","CustomColorMatchEditor","handleColorRemove","flyoutTitle","addColorButtonLabel","handleColorAdd","handleColorMove","ColorRowItems","map","idx","Row","index","onRequestRemove","display","justifyContent","marginBottom","marginTop","addLabel","onRequestAdd","onRequestMove","MultiColorPickerEditor","canReorderColors","vizColors","VIZ_CATEGORICAL","canAddNewColors","showFlyout","setShowFlyout","setColors","buttonRef","useRef","userColorsSet","Set","nextColor","find","has","countMap","Map","forEach","set","get","minCount","Infinity","count","_evt","_name","colorsCopy","splice","e","fromIndex","toIndex","movedColor","handleFlyoutClose","reason","srcElement","sortableHandle","current","focus","ColorChips","toggleShowFlyout","isShown","inline","appearance","ref","onClick","open","anchor","defaultPlacement","onRequestClose","takeFocus","undefined","BaseEditorPropTypes","bool","arrayOf","string","func","PALETTES","custom","NameWrapper","PaletteWrapper","ColorPreviewWrapper","SeriesColorsEditor","overrideCustomPalette","length","isEqual","originalPalettes","selectedPalette","setSelectedPalette","palettes","setPalettes","handleMenuSelect","paletteId","newColors","prev","toggle","isMenu","renderMenuItem","paletteConfig","paletteName","Item","selectable","selected","ColorPreview","slice","maxColorCount","expandToFillHorizontalSpace","isCustomPaletteAvailable","gutter","VERTICAL_EDITOR_SPACING","DROPDOWN_MENU_WIDTH","Divider","attrs","isReversed","ColorPreviewItem","widthGrow","number","trueColors","reverse","_i","oneOfType","object","context","oneOf","isAdvanced","dataSourceBindings","options","optionsSchema","ControlGroupContainer","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","interactiveColorOverlayDrag","AdvancedConfigButton","content","icon","AdvancedControlGroup","dataTest","children","tooltip","help","error","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","child","cloneElement","flex","FLYOUT_PADDING","COLUMN_FLYOUT_PADDING","FLYOUT_WIDTH","editorStyle","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","__webpack_exports__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"SeriesColorsEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ScreenReaderContent\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualizations-shared/colorConstants\"","webpack://@splunk/dynamic-editors/./src/editors/ColorEditor.jsx","webpack://@splunk/dynamic-editors/./src/editors/MultiColorPickerEditor.tsx","webpack://@splunk/dynamic-editors/./src/editors/SeriesColorsEditor.tsx","webpack://@splunk/dynamic-editors/./src/editors/formatters/ColorPreview.tsx","webpack://@splunk/dynamic-editors/./src/interfaces/BaseEditorProps.ts","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/./src/shared/PreviewWrapper.tsx","webpack://@splunk/dynamic-editors/./src/shared/dimensionConstants.ts","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Color\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ColumnLayout\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Dropdown\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/FormRows\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Menu\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Popover\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Text\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes/variables\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/id\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualization-color-palettes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/visualizations-shared/colorUtils\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/runtime/compat get default export","webpack://@splunk/dynamic-editors/webpack/runtime/define property getters","webpack://@splunk/dynamic-editors/webpack/runtime/hasOwnProperty shorthand","webpack://@splunk/dynamic-editors/webpack/runtime/make namespace object","webpack://@splunk/dynamic-editors/webpack/startup"],"sourcesContent":["const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@splunk/react-ui/ScreenReaderContent\");","const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@splunk/visualizations-shared/colorConstants\");","import React, { useEffect, useCallback, useState, useMemo } from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { debounce, noop, toLower } from 'lodash';\nimport { variables } from '@splunk/themes';\nimport Color from '@splunk/react-ui/Color';\nimport Text from '@splunk/react-ui/Text';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport ScreenReaderContent from '@splunk/react-ui/ScreenReaderContent';\nimport { COLOR_EDITOR_PALETTE } from '@splunk/visualizations-shared/colorConstants';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport ControlGroup from '../shared/AdvancedControlGroup';\n\nconst TextContainer = styled.div`\n max-height: ${variables.inputHeight};\n width: 100%;\n min-width: 0;\n`;\n\n// hardcoded style to sync with SUI color picker's hardcoded dimensions\n// TODO(fkurniawan): see if we can leverage prisma's consolidated textInput out of the box instead of our own component\n// right now, we're using hideInput\nconst StyledText = styled(Text)`\n max-height: ${variables.inputHeight};\n`;\n\n/**\n * Trims the color input and returns the result, or default color if the default color is valid, or previous color\n * @param {String} color The color the user entered\n * @param {String} defaultColor The default color of the component\n * @param {String} prevColor The previous color of the component\n * @returns {String}\n */\nconst getColor = ({ color, defaultColor, prevColor }) => {\n const newColor = typeof color === 'string' ? color.trim() : color;\n\n // color === null is `N/A` in color picker\n if (isColor(newColor) || newColor === null) {\n return newColor;\n }\n\n if (isColor(defaultColor)) {\n return defaultColor;\n }\n\n if (isColor(prevColor) || prevColor === null) {\n return prevColor;\n }\n\n return 'transparent';\n};\n\nconst ColorAndTextWrapper = ({\n id,\n showTextInput,\n color,\n palette,\n handleColorChange,\n labelledBy,\n textWidth,\n value,\n name,\n handleTextColorChange,\n handleKeyPress,\n handleBlur,\n isDisabled,\n}) => {\n const textLabelId = useMemo(() => createDOMID('color-code'), []);\n\n return (\n <>\n <div>\n <Color\n key=\"color-editor\"\n append={showTextInput}\n value={getColor({ color })}\n palette={palette}\n onChange={handleColorChange}\n data-test={`color-picker-${name}`}\n disabled={isDisabled}\n hideInput\n labelledBy={labelledBy}\n />\n </div>\n {showTextInput && (\n <TextContainer data-test=\"text-container\" textWidth={textWidth}>\n <ScreenReaderContent id={textLabelId}>{_('Color code input')}</ScreenReaderContent>\n <StyledText\n key={value}\n data-test={name}\n prepend\n value={color === null ? 'N/A' : color}\n onChange={handleTextColorChange}\n onKeyDown={handleKeyPress}\n onBlur={handleBlur}\n disabled={isDisabled}\n // hardcoded style to sync with SUI color picker's hardcoded dimensions\n // TODO(fkurniawan): see if we can leverage prisma's consolidated textInput out of the box\n style={{ height: '32px' }}\n labelledBy={`${labelledBy} ${textLabelId}`}\n inputId={id}\n />\n </TextContainer>\n )}\n </>\n );\n};\n\nColorAndTextWrapper.propTypes = {\n id: T.string,\n showTextInput: T.bool,\n color: T.string,\n palette: T.arrayOf(T.string),\n handleColorChange: T.func,\n labelledBy: T.string,\n textWidth: T.oneOfType([T.string, T.number]),\n value: T.string,\n name: T.string.isRequired,\n handleTextColorChange: T.func,\n handleKeyPress: T.func,\n handleBlur: T.func,\n isDisabled: T.bool,\n};\n\nconst defaultItemSchema = { default: 'transparent' };\nconst emptyStyle = {};\n\n// The propTypes typing for TS callers isn't working for the onChange callback\n/**\n * @param {Object} props\n * @param {(e: import('react').SyntheticEvent, name: string, value: string) => void} [props.onChange]\n * @returns\n */\nconst ColorEditor = ({\n name = 'color',\n value = 'transparent',\n label = '',\n labelPosition = 'top',\n labelWidth,\n palette = COLOR_EDITOR_PALETTE,\n onChange = noop,\n itemSchema = defaultItemSchema,\n isDisabled = false,\n textWidth = 'auto',\n hideLabel = false,\n showTextInput = true,\n style: customEditorStyle = emptyStyle,\n}) => {\n const [color, setColor] = useState(value);\n\n useEffect(() => {\n setColor(value);\n }, [value]);\n\n const debouncedOnChange = useMemo(() => debounce(onChange, 250), [onChange]);\n\n const handleColorChange = useCallback(\n ({ value: val }) => {\n const newColor = getColor({ color: val, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (value !== newColor) {\n // No event to pass back, so it is null\n debouncedOnChange(null, name, newColor);\n }\n },\n [debouncedOnChange, itemSchema.default, name, value]\n );\n\n const handleTextColorChange = useCallback((_event, { value: val }) => {\n const colorToValue = toLower(val).trim() === 'n/a' ? null : val;\n setColor(colorToValue);\n }, []);\n\n const handleKeyPress = useCallback(\n event => {\n if (event.key === 'Escape') {\n setColor(value);\n return;\n }\n if (event.key !== 'Enter') {\n return;\n }\n\n if (value !== color) {\n const newColor = getColor({ color, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (newColor !== value) {\n onChange(event, name, newColor);\n }\n }\n },\n [name, color, value, onChange, itemSchema.default]\n );\n\n const handleBlur = useCallback(\n event => {\n if (color !== value) {\n const newColor = getColor({ color, defaultColor: itemSchema.default, prevColor: value });\n setColor(newColor);\n if (newColor !== value) {\n onChange(event, name, newColor);\n }\n }\n },\n [name, color, value, onChange, itemSchema.default]\n );\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n style={customEditorStyle}\n hideLabel={hideLabel}\n controlsLayout=\"fillJoin\"\n >\n <ColorAndTextWrapper\n showTextInput={showTextInput}\n color={color}\n palette={palette}\n handleColorChange={handleColorChange}\n name={name}\n isDisabled={isDisabled}\n textWidth={textWidth}\n value={value}\n handleTextColorChange={handleTextColorChange}\n handleKeyPress={handleKeyPress}\n handleBlur={handleBlur}\n />\n </ControlGroup>\n );\n};\n\nColorEditor.propTypes = {\n /**\n * The option name\n */\n name: T.string.isRequired,\n\n /**\n * The option value\n */\n value: T.string,\n\n /**\n * @param {Object} itemSchema Either the dataContract or schema for the selected item\n */\n itemSchema: T.object,\n\n /**\n * A human readable label for the option\n */\n label: T.string.isRequired,\n\n /**\n * Flag to hide the editor label\n */\n hideLabel: T.bool,\n\n /**\n * Flag to hide the color text input\n */\n showTextInput: T.bool,\n\n /**\n * Custom styling for the editor layout, eg: setting margin-bottom to 0px for ControlGroup, SUI has it at 15px\n */\n style: T.object,\n\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n\n /**\n * Label position\n */\n labelWidth: T.number,\n\n /**\n * An array of color swatch values\n */\n palette: T.arrayOf(T.string),\n\n /**\n * Callback when changing the text value\n *\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {string} name The option name\n * @param {string} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * Disabled state of component\n */\n isDisabled: T.bool,\n textWidth: T.oneOfType([T.string, T.number]),\n};\n\nexport default ColorEditor;\n","import React, { useState, useRef, useEffect, useCallback, useMemo } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { noop } from 'lodash';\nimport variables from '@splunk/themes/variables';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FormRows from '@splunk/react-ui/FormRows';\nimport { createDOMID } from '@splunk/ui-utils/id';\nimport Button from '@splunk/react-ui/Button';\nimport Popover, { PopoverRequestCloseHandler } from '@splunk/react-ui/Popover';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport { BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\nimport type { BaseEditorProps } from '../interfaces/BaseEditorProps';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport ColorEditor from './ColorEditor';\n\nconst popoverStyle = { padding: '10px' };\nconst colorButtonStyle = { width: '314px' };\n\nconst StyledButton = styled(Button)`\n padding: 8px;\n width: 100%;\n min-height: 40px;\n & > span {\n display: grid;\n grid-template-columns: repeat(auto-fill, 26px);\n justify-content: space-evenly;\n grid-gap: 4px;\n }\n background-color: ${variables.interactiveColorBackground};\n`;\n\nconst ColorChip = styled.div`\n width: 26px;\n height: 24px;\n background-color: ${(props): string => props.color};\n border-radius: 2px;\n`;\n\nconst StyledFlyoutContent = styled.div`\n box-sizing: border-box;\n padding: 8px;\n width: 312px;\n max-height: 484px;\n background-color: ${variables.backgroundColorPopup};\n`;\n\nconst FlyoutHeader = styled.div`\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n padding: 8px 8px 0 8px;\n font-family: ${variables.fontFamily};\n color: ${variables.contentColorActive};\n`;\n\nconst ColorListEditor = styled.div`\n height: 412px;\n overflow-y: auto;\n padding: 8px 10px;\n`;\n\nexport interface ColorFlyoutEditorProps {\n colors: string[];\n handleColorRemove: (_e, { index }: { index: number }) => void;\n handleColorChange: (idx: number) => (_evt, name: string, value: string) => void;\n CustomColorMatchEditor?: (props: { index: number }) => React.ReactNode;\n flyoutTitle: string;\n addColorButtonLabel: string;\n handleColorAdd: () => void;\n handleColorMove: (data: { fromIndex: number; toIndex: number }) => void;\n}\n\nexport const ColorFlyoutEditor = ({\n colors,\n CustomColorMatchEditor,\n handleColorRemove,\n handleColorChange,\n flyoutTitle,\n addColorButtonLabel,\n handleColorAdd,\n handleColorMove,\n}: ColorFlyoutEditorProps) => {\n const ColorRowItems = useMemo(() => {\n return colors.map((color, idx) => {\n // disable the color editor's text input when a custom input editor is available to render adjacently\n const showTextInput = CustomColorMatchEditor == null;\n return (\n <FormRows.Row\n index={idx}\n key={createDOMID()}\n data-color={color}\n onRequestRemove={handleColorRemove}\n >\n <div style={{ display: 'flex', justifyContent: 'space-between' }}>\n <ColorEditor\n value={color}\n key={createDOMID()}\n onChange={handleColorChange(idx)}\n hideLabel\n label=\" \"\n name=\"color\"\n style={{ marginBottom: 0, marginTop: 0, width: showTextInput ? '100%' : 32 }}\n showTextInput={showTextInput}\n />\n {typeof CustomColorMatchEditor === 'function' && (\n <CustomColorMatchEditor index={idx} />\n )}\n </div>\n </FormRows.Row>\n );\n });\n }, [colors, CustomColorMatchEditor, handleColorRemove, handleColorChange]);\n\n return (\n <StyledFlyoutContent data-test=\"MultiColorPickerFlyoutContent\">\n <FlyoutHeader data-test=\"MultiColorPickerFlyoutTitle\">{flyoutTitle}</FlyoutHeader>\n <ColorListEditor>\n <FormRows\n addLabel={addColorButtonLabel}\n onRequestAdd={handleColorAdd}\n onRequestMove={handleColorMove}\n data-test=\"ColorListEditor\"\n >\n {ColorRowItems}\n </FormRows>\n </ColorListEditor>\n </StyledFlyoutContent>\n );\n};\n\nexport interface MultiColorPickerEditorProps extends BaseEditorProps {\n CustomColorMatchEditor?: (props: { index: number }) => React.ReactNode;\n canReorderColors?: boolean;\n value: string[];\n flyoutTitle?: string;\n addColorButtonLabel?: string;\n hideLabel?: boolean;\n canAddNewColors?: boolean;\n}\n\nconst MultiColorPickerEditor: React.FunctionComponent<MultiColorPickerEditorProps> = ({\n CustomColorMatchEditor,\n onChange = noop,\n canReorderColors = true,\n value: vizColors = VIZ_CATEGORICAL,\n flyoutTitle = _('Customize colors'),\n addColorButtonLabel = _('Add color'),\n name = 'seriesColors',\n label = '',\n labelPosition = 'top',\n labelWidth,\n isDisabled = false,\n hideLabel = true,\n canAddNewColors = true,\n}) => {\n const [showFlyout, setShowFlyout] = useState(false);\n const [colors, setColors] = useState(vizColors);\n const buttonRef = useRef(null);\n\n useEffect(() => {\n setColors(vizColors);\n }, [vizColors]);\n\n // callbacks to add, remove, update and reorder a color form row\n const handleColorAdd = useCallback(() => {\n const userColorsSet = new Set(colors);\n let nextColor = VIZ_CATEGORICAL.find(color => !userColorsSet.has(color));\n if (!nextColor) {\n // All picked, count appearances\n const countMap = new Map<string, number>();\n VIZ_CATEGORICAL.forEach(color => countMap.set(color, 0));\n colors.forEach(color => {\n countMap.set(color, (countMap.get(color) || 0) + 1);\n });\n // Find color with minimum appearances\n let minCount = Infinity;\n VIZ_CATEGORICAL.forEach(color => {\n const count = countMap.get(color) || 0;\n if (count < minCount) {\n minCount = count;\n nextColor = color;\n }\n });\n }\n onChange(null, name, [...colors, nextColor]);\n }, [name, onChange, colors]);\n\n const handleColorChange = useCallback(\n idx => (_evt, _name, value) => {\n const colorsCopy = [...colors];\n colorsCopy.splice(idx, 1, value);\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n const handleColorRemove = useCallback(\n (e, { index }) => {\n const colorsCopy = [...colors];\n colorsCopy.splice(index, 1);\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n const handleColorMove = useCallback(\n ({ fromIndex, toIndex }) => {\n const colorsCopy = [...colors];\n const movedColor = colorsCopy[fromIndex];\n colorsCopy.splice(fromIndex, 1); // first, delete the color at the original position\n colorsCopy.splice(toIndex, 0, movedColor); // then reinsert it at the new position\n onChange(null, name, colorsCopy);\n },\n [name, onChange, colors]\n );\n\n /**\n * custom logic is required for closing the flyout as the FormRows component is rendered inside a Popover, and\n * when we sort the form rows, the popover closes mid-sorting (closeReason=\"clickAway\") as the dragged element is\n * taken out of the flow. Current workaround is to check if the event's source element has a sortable handle,\n * if yes, the flyout is kept open.\n *\n * Additionally, focus is returned to the trigger button when exiting through escape key press\n */\n const handleFlyoutClose: PopoverRequestCloseHandler = useCallback(({ event, reason }) => {\n // @ts-ignore\n if (!event?.srcElement?.sortableHandle) {\n setShowFlyout(false);\n }\n if (reason === 'escapeKey') {\n buttonRef.current.focus();\n }\n }, []);\n\n const ColorChips = useMemo(\n () => colors.map(color => <ColorChip color={color} key={createDOMID()} />),\n [colors]\n );\n\n const toggleShowFlyout = useCallback(() => {\n setShowFlyout(isShown => !isShown);\n }, []);\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n hideLabel={hideLabel}\n data-test=\"MultiColorPickerEditor\"\n >\n <StyledButton\n inline={false}\n data-test=\"MultiColorPickerButton\"\n appearance=\"default\"\n ref={buttonRef}\n onClick={toggleShowFlyout}\n disabled={isDisabled}\n style={colorButtonStyle}\n >\n {ColorChips}\n </StyledButton>\n <Popover\n data-test=\"MultiColorPickerFlyout\"\n open={showFlyout}\n anchor={buttonRef.current}\n defaultPlacement=\"horizontal\"\n style={popoverStyle}\n onRequestClose={handleFlyoutClose}\n takeFocus\n >\n <ColorFlyoutEditor\n colors={colors}\n CustomColorMatchEditor={CustomColorMatchEditor}\n handleColorRemove={handleColorRemove}\n handleColorChange={handleColorChange}\n handleColorAdd={canAddNewColors ? handleColorAdd : undefined}\n handleColorMove={canReorderColors ? handleColorMove : undefined}\n flyoutTitle={flyoutTitle}\n addColorButtonLabel={addColorButtonLabel}\n />\n </Popover>\n </ControlGroup>\n );\n};\n\nMultiColorPickerEditor.propTypes = {\n ...BaseEditorPropTypes,\n /**\n * Colors can be reordered manually\n */\n canReorderColors: T.bool,\n /**\n * Can add a new color\n */\n canAddNewColors: T.bool,\n /**\n * List of colors\n */\n value: T.arrayOf(T.string),\n /**\n * Title of the flyout editor\n */\n flyoutTitle: T.string,\n /**\n * Button label for adding a new color row\n */\n addColorButtonLabel: T.string,\n /**\n * Custom input editor for mapping a value to color, eg: dropdown for field -> color\n */\n CustomColorMatchEditor: T.func,\n /**\n * Flag to hide the editor label\n */\n hideLabel: T.bool,\n};\n\nexport default MultiColorPickerEditor;\n","import React, { useState, useCallback, useMemo } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { isEqual } from 'lodash';\nimport Button from '@splunk/react-ui/Button';\nimport ColumnLayout from '@splunk/react-ui/ColumnLayout';\nimport Dropdown from '@splunk/react-ui/Dropdown';\nimport Menu from '@splunk/react-ui/Menu';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport { VIZ_CATEGORICAL } from '@splunk/visualization-color-palettes';\nimport MultiColorPickerEditor from './MultiColorPickerEditor';\nimport { ColorPreview } from './formatters/ColorPreview';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport PreviewWrapper from '../shared/PreviewWrapper';\nimport { VERTICAL_EDITOR_SPACING, DROPDOWN_MENU_WIDTH } from '../shared/dimensionConstants';\nimport { BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\nimport type { BaseEditorProps } from '../interfaces/BaseEditorProps';\n\nconst MAX_PREVIEW_COLOR_COUNT = 8;\n\n// to add more warm/cold... palettes\nexport type PaletteType = 'default' | 'custom';\n\nexport interface PaletteDefinition<P extends PaletteType = PaletteType> {\n id: P;\n name: string;\n palette: string[];\n}\n\ntype Palettes = {\n [P in PaletteType]: PaletteDefinition<P>;\n};\n\nexport const PALETTES = {\n default: { id: 'default', name: _('Default'), palette: VIZ_CATEGORICAL },\n custom: { id: 'custom', name: _('Custom'), palette: [] },\n} satisfies Palettes;\n\nconst NameWrapper = styled.div`\n width: 120px;\n margin-right: 20px;\n display: flex;\n`;\n\nconst PaletteWrapper = styled(PreviewWrapper)`\n display: flex;\n align-items: center;\n`;\n\nconst ColorPreviewWrapper = styled.div`\n flex: 1 0 1px;\n height: 100%;\n`;\n\nconst SeriesColorsEditor = ({ label, value, name, onChange }: BaseEditorProps) => {\n const overrideCustomPalette = useMemo(() => !!value?.length && !isEqual(value, VIZ_CATEGORICAL), [value]);\n\n // use `value` to override the custom palette if value is not empty\n const originalPalettes = useMemo(() => {\n if (overrideCustomPalette) {\n return {\n ...PALETTES,\n custom: { ...PALETTES.custom, palette: value },\n };\n }\n return PALETTES;\n }, [overrideCustomPalette, value]);\n\n // selected palette ID\n const [selectedPalette, setSelectedPalette] = useState<PaletteType>(\n overrideCustomPalette ? 'custom' : 'default'\n );\n // current palettes on update\n const [palettes, setPalettes] = useState(originalPalettes);\n\n const handleMenuSelect = useCallback(\n (paletteId: PaletteType) => {\n setSelectedPalette(paletteId);\n onChange(null, name, palettes[paletteId].palette);\n },\n [name, onChange, palettes]\n );\n\n const handleColorChange = useCallback(\n (_evt, _name, newColors) => {\n if (newColors.length) {\n // override the previous custom palette\n setPalettes(prev => ({\n ...prev,\n custom: { ...PALETTES.custom, palette: newColors },\n }));\n setSelectedPalette('custom');\n onChange(null, name, newColors);\n } else {\n // set the colors to `Default` if MultiColorPicker returns empty array\n setPalettes(prev => ({\n ...prev,\n custom: PALETTES.custom,\n }));\n setSelectedPalette('default');\n onChange(null, name, PALETTES.default.palette);\n }\n },\n [name, onChange]\n );\n\n const toggle = (\n <Button\n appearance=\"default\"\n data-test=\"palette-dropdown-button\"\n label={palettes[selectedPalette].name}\n isMenu\n />\n );\n\n const renderMenuItem = (paletteConfig: PaletteDefinition) => {\n const { id, palette, name: paletteName } = paletteConfig;\n return (\n <Menu.Item\n key={`SeriesColorsDropdownMenuItem-${id}`}\n data-test={`palette-dropdown-menu-${id}`}\n selectable\n selected={selectedPalette === id}\n onClick={() => handleMenuSelect(id)}\n >\n <PaletteWrapper>\n <NameWrapper>{paletteName}</NameWrapper>\n <ColorPreviewWrapper>\n <ColorPreview\n colors={palette.slice(0, MAX_PREVIEW_COLOR_COUNT)}\n maxColorCount={MAX_PREVIEW_COLOR_COUNT}\n expandToFillHorizontalSpace={false}\n />\n </ColorPreviewWrapper>\n </PaletteWrapper>\n </Menu.Item>\n );\n };\n\n const isCustomPaletteAvailable = palettes.custom.palette.length > 0;\n\n return (\n <ColumnLayout gutter={VERTICAL_EDITOR_SPACING}>\n <ColumnLayout.Row>\n <ControlGroup\n label={label || _('Series colors')}\n labelPosition=\"top\"\n data-test=\"series-colors-editor\"\n >\n <Dropdown toggle={toggle}>\n <Menu style={{ width: DROPDOWN_MENU_WIDTH }}>\n {isCustomPaletteAvailable && renderMenuItem(palettes.custom)}\n {isCustomPaletteAvailable && <Menu.Divider />}\n {renderMenuItem(PALETTES.default)}\n </Menu>\n </Dropdown>\n </ControlGroup>\n </ColumnLayout.Row>\n <ColumnLayout.Row>\n <MultiColorPickerEditor\n name=\"series-colors\"\n value={palettes[selectedPalette].palette}\n flyoutTitle={_('Customize colors')}\n addColorButtonLabel={_('Add color')}\n onChange={handleColorChange}\n />\n </ColumnLayout.Row>\n </ColumnLayout>\n );\n};\n\nSeriesColorsEditor.propTypes = {\n ...BaseEditorPropTypes,\n value: T.arrayOf(T.string),\n};\n\nexport default SeriesColorsEditor;\n","import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { isColor } from '@splunk/visualizations-shared/colorUtils';\nimport { createDOMID } from '@splunk/ui-utils/id';\n\nconst DEFAULT_MAX_COLOR_COUNT = 7;\n\ninterface ColorPreviewWrapperProps {\n isReversed?: boolean;\n}\n\nconst ColorPreviewWrapper = styled.div.attrs<ColorPreviewWrapperProps>(props => ({\n 'data-test': 'ColorPreviewWrapper',\n isReversed: props.isReversed,\n}))<ColorPreviewWrapperProps>`\n display: flex;\n flex-direction: row;\n height: 100%;\n`;\n\ninterface ColorPreviewItemProps {\n color: string;\n widthGrow?: boolean;\n maxColorCount?: number;\n}\n\nconst ColorPreviewItem = styled.div.attrs<ColorPreviewItemProps>(() => ({\n 'data-test': 'ColorPreviewItem',\n}))<ColorPreviewItemProps>`\n flex-grow: ${({ widthGrow }): number => (widthGrow ? 1 : 0)};\n width: ${({ maxColorCount }): string => `calc(100% / ${maxColorCount})`};\n margin-right: 1px;\n background-color: ${({ color }): string => color};\n &:last-of-type {\n margin-right: 0;\n }\n`;\n\ninterface ColorPreviewProps {\n colors: string[];\n maxColorCount?: number;\n expandToFillHorizontalSpace?: boolean;\n isReversed?: boolean;\n}\nconst propTypes: Record<keyof ColorPreviewProps, T.Validator<any>> = {\n colors: T.arrayOf(T.string).isRequired,\n maxColorCount: T.number,\n expandToFillHorizontalSpace: T.bool,\n isReversed: T.bool,\n};\n\nexport const ColorPreview: React.FunctionComponent<ColorPreviewProps> = ({\n colors = [],\n maxColorCount = DEFAULT_MAX_COLOR_COUNT,\n expandToFillHorizontalSpace = true,\n isReversed = false,\n}): React.ReactElement => {\n const trueColors = isReversed ? [...colors].reverse() : [...colors];\n return (\n <ColorPreviewWrapper isReversed={isReversed}>\n {trueColors.map(\n (color, _i): React.ReactElement =>\n isColor(color) && (\n <ColorPreviewItem\n key={createDOMID()}\n color={color}\n widthGrow={expandToFillHorizontalSpace}\n maxColorCount={maxColorCount}\n />\n )\n )}\n </ColorPreviewWrapper>\n );\n};\nColorPreview.propTypes = propTypes;\n","import * as T from 'prop-types';\nimport type { JSONSchema7 } from 'json-schema';\n\nexport interface BaseEditorProps {\n name: string;\n value: any;\n onChange?: (...args: any[]) => void;\n label?: string; // @TODO(pwied): this should not live in editor props\n labelPosition?: 'top' | 'left'; // ^^^\n context?: Record<string, any>;\n labelWidth?: number;\n isAdvanced?: boolean;\n isDisabled?: boolean;\n dataSourceBindings?: Record<string, any>;\n options?: { [k: string]: any };\n optionsSchema?: {\n [key: string]: JSONSchema7;\n };\n}\n\nexport const BaseEditorPropTypes: Record<keyof BaseEditorProps, T.Validator<any>> = {\n name: T.string.isRequired,\n value: T.oneOfType([T.string, T.object, T.arrayOf(T.string)]),\n context: T.object,\n label: T.string,\n labelPosition: T.oneOf(['top', 'left']),\n labelWidth: T.number,\n onChange: T.func,\n isAdvanced: T.bool,\n isDisabled: T.bool,\n dataSourceBindings: T.object,\n options: T.object,\n optionsSchema: T.object,\n};\n","import React, { Children, cloneElement } from 'react';\nimport type { ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup from '@splunk/react-ui/ControlGroup';\nimport type { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","import styled from 'styled-components';\n\nexport default styled.div`\n border-radius: 3px; /* @TODO(pwied): should this be imported from SUI variables? */\n overflow: hidden;\n position: relative;\n width: 100%;\n height: 20px;\n`;\n","export const FLYOUT_PADDING = 21;\nexport const COLUMN_FLYOUT_PADDING = 16;\nexport const FLYOUT_WIDTH = 344;\n\nexport const VERTICAL_EDITOR_SPACING = 16;\n\nexport const DROPDOWN_MENU_WIDTH = 327;\n\nexport const editorStyle = { width: '100%' };\n","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/Color\");","module.exports = require(\"@splunk/react-ui/ColumnLayout\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/Dropdown\");","module.exports = require(\"@splunk/react-ui/FormRows\");","module.exports = require(\"@splunk/react-ui/Menu\");","module.exports = require(\"@splunk/react-ui/Popover\");","module.exports = require(\"@splunk/react-ui/Text\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/themes/variables\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"@splunk/ui-utils/id\");","module.exports = require(\"@splunk/visualization-color-palettes\");","module.exports = require(\"@splunk/visualizations-shared/colorUtils\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(5695);\n"],"names":["require","TextContainer","styled","variables","inputHeight","StyledText","Text","getColor","color","defaultColor","prevColor","newColor","trim","isColor","ColorAndTextWrapper","id","showTextInput","palette","handleColorChange","labelledBy","textWidth","value","name","handleTextColorChange","handleKeyPress","handleBlur","isDisabled","textLabelId","useMemo","createDOMID","React","Color","key","append","onChange","disabled","hideInput","ScreenReaderContent","_","prepend","onKeyDown","onBlur","style","height","inputId","propTypes","T","isRequired","defaultItemSchema","default","emptyStyle","ColorEditor","label","labelPosition","labelWidth","COLOR_EDITOR_PALETTE","noop","itemSchema","hideLabel","customEditorStyle","setColor","useState","useEffect","debouncedOnChange","debounce","useCallback","val","_event","colorToValue","toLower","event","ControlGroup","controlsLayout","popoverStyle","padding","colorButtonStyle","width","StyledButton","interactiveColorBackground","ColorChip","div","props","StyledFlyoutContent","backgroundColorPopup","FlyoutHeader","fontFamily","contentColorActive","ColorListEditor","ColorFlyoutEditor","colors","CustomColorMatchEditor","handleColorRemove","flyoutTitle","addColorButtonLabel","handleColorAdd","handleColorMove","ColorRowItems","map","idx","Row","index","onRequestRemove","display","justifyContent","marginBottom","marginTop","addLabel","onRequestAdd","onRequestMove","MultiColorPickerEditor","canReorderColors","vizColors","VIZ_CATEGORICAL","canAddNewColors","showFlyout","setShowFlyout","setColors","buttonRef","useRef","userColorsSet","Set","nextColor","find","has","countMap","Map","forEach","set","get","minCount","Infinity","count","_evt","_name","colorsCopy","splice","e","fromIndex","toIndex","movedColor","handleFlyoutClose","reason","srcElement","sortableHandle","current","focus","ColorChips","toggleShowFlyout","isShown","inline","appearance","ref","onClick","open","anchor","defaultPlacement","onRequestClose","takeFocus","undefined","BaseEditorPropTypes","bool","arrayOf","string","func","PALETTES","custom","NameWrapper","PaletteWrapper","ColorPreviewWrapper","SeriesColorsEditor","overrideCustomPalette","length","isEqual","originalPalettes","selectedPalette","setSelectedPalette","palettes","setPalettes","handleMenuSelect","paletteId","newColors","prev","toggle","isMenu","renderMenuItem","paletteConfig","paletteName","Item","selectable","selected","ColorPreview","slice","maxColorCount","expandToFillHorizontalSpace","isCustomPaletteAvailable","gutter","VERTICAL_EDITOR_SPACING","DROPDOWN_MENU_WIDTH","Divider","attrs","isReversed","ColorPreviewItem","widthGrow","number","trueColors","reverse","_i","oneOfType","object","context","oneOf","isAdvanced","dataSourceBindings","options","optionsSchema","ControlGroupContainer","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","interactiveColorOverlayDrag","AdvancedConfigButton","content","icon","AdvancedControlGroup","dataTest","children","tooltip","help","error","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","child","cloneElement","flex","FLYOUT_PADDING","COLUMN_FLYOUT_PADDING","FLYOUT_WIDTH","editorStyle","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","__webpack_exports__"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SliderEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/./src/editors/SliderEditor.tsx","webpack://@splunk/dynamic-editors/./src/hooks/useNumberInput.ts","webpack://@splunk/dynamic-editors/./src/interfaces/BaseEditorProps.ts","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Number\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Slider\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/startup"],"sourcesContent":["import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport Slider from '@splunk/react-ui/Slider';\nimport NumberInput from '@splunk/react-ui/Number';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport { BaseEditorProps, BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\nimport { useNumberInput } from '../hooks/useNumberInput';\n\nconst numberStyle = { flexBasis: 92, flexGrow: 0, flexShrink: 0 };\n\nconst StyledSlider = styled(Slider)`\n div:has(> [data-test='bar']) {\n min-width: 0;\n }\n`;\n\ninterface SliderEditorProps extends BaseEditorProps {\n /** help text under controls */\n help?: string;\n /** max value for slider */\n max?: number;\n /** label for max value */\n maxLabel?: React.ReactNode;\n /** min value for slider */\n min?: number;\n /** label for min value */\n minLabel?: React.ReactNode;\n /** units to skip when moving slider */\n step?: number;\n /** display sections for drag bar */\n stepMarks?: 'focus' | 'always' | 'none';\n /** current value of field */\n value: number;\n /** default value of the option */\n defaultValue?: number;\n}\n\nconst propTypes: Record<keyof SliderEditorProps, T.Validator<any>> = {\n ...BaseEditorPropTypes,\n help: T.string,\n max: T.number,\n maxLabel: T.oneOfType([T.element, T.string]),\n min: T.number,\n minLabel: T.oneOfType([T.element, T.string]),\n step: T.number,\n stepMarks: T.oneOf(['focus', 'always', 'none']),\n value: T.number,\n defaultValue: T.number,\n};\n\nexport const SliderEditor = ({\n help,\n isDisabled = false,\n label,\n labelPosition = 'top',\n labelWidth,\n max,\n maxLabel = null,\n min,\n minLabel = null,\n name,\n onChange,\n step,\n stepMarks = 'focus',\n value = null,\n defaultValue,\n}: SliderEditorProps): JSX.Element => {\n const handleSliderChange = React.useCallback(\n (event, { value: v }) => {\n // emit onChange if value is a number\n if (parseFloat(v) || v === 0) {\n onChange(event, name, v);\n }\n },\n [onChange, name]\n );\n const handleNumberChange = React.useCallback(\n (event, v) => {\n // emit onChange if value is a number\n if (parseFloat(v) || v === 0) {\n onChange(event, name, v);\n }\n },\n [onChange, name]\n );\n\n const { currentValue, handleChange, handleBlur, handleFocus, handleKeyPress } = useNumberInput({\n value,\n min,\n max,\n defaultValue,\n onValueChange: handleNumberChange,\n });\n\n // if there is no value show input as blank by passing undefined\n const displayValue = currentValue != null ? Number(currentValue) : undefined;\n\n // stepMarks = 'none'is not valid for react-ui/Slider\n const suiStepMarks = stepMarks === 'none' ? 'never' : stepMarks;\n return (\n <ControlGroup label={label} labelPosition={labelPosition} labelWidth={labelWidth} help={help}>\n <StyledSlider\n data-test={name}\n min={min}\n minLabel={minLabel}\n max={max}\n maxLabel={maxLabel}\n step={step}\n stepMarks={suiStepMarks}\n value={displayValue}\n disabled={isDisabled}\n onChange={handleSliderChange}\n />\n <NumberInput\n inline\n min={min}\n max={max}\n step={step}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyPress}\n value={displayValue}\n disabled={isDisabled}\n style={numberStyle}\n />\n </ControlGroup>\n );\n};\nSliderEditor.propTypes = propTypes;\n\nexport default SliderEditor;\n","import type React from 'react';\nimport { useCallback, useRef, useLayoutEffect, useState, useMemo } from 'react';\nimport {\n type NumberBlurHandler,\n type NumberChangeHandler,\n type NumberFocusHandler,\n type NumberPropsBase,\n} from '@splunk/react-ui/Number';\nimport { clamp, debounce, noop } from 'lodash';\n\nexport type OnValueChangeType = (e: Parameters<NumberChangeHandler>[0], newValue?: string | number) => void;\n\ninterface UseNumberInputArgs extends Pick<NumberPropsBase, 'value' | 'defaultValue' | 'min' | 'max'> {\n onValueChange: OnValueChangeType;\n}\n\nexport const useNumberInput = ({\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n value,\n defaultValue,\n onValueChange = noop,\n}: UseNumberInputArgs) => {\n const [currentValue, setCurrentValue] = useState(value);\n const isFocusedRef = useRef(false);\n\n const commitValue = useCallback(\n (e, newValue?: string | number) => {\n if (newValue == null) {\n // if we're clearing the input, revert local state back to default or old value\n setCurrentValue(defaultValue ?? value);\n }\n\n onValueChange(e, newValue);\n },\n [defaultValue, onValueChange, value]\n );\n\n const handleChangeDebounced = useMemo(\n () => debounce<NumberChangeHandler>((e, payload) => commitValue(e, payload.value), 250),\n [commitValue]\n );\n\n useLayoutEffect(() => {\n // layout effect prevents double-render during external change to derived state\n setCurrentValue(value);\n }, [value]);\n\n const handleChange = useCallback<NumberChangeHandler>(\n (e, payload) => {\n setCurrentValue(payload.value);\n if (isFocusedRef.current) {\n // if focus is in the text box of the number input, don't commit the state yet\n // this includes being focused inside the text box and using UP + DOWN arrow keys to increment/decrement. It will only\n // commit the value on blur or Enter key.\n return;\n }\n\n // if the focus is outside, it's because the user is clicking the increment/decrement buttons directly\n handleChangeDebounced(e, payload);\n },\n [handleChangeDebounced]\n );\n\n const handleBlur = useCallback<NumberBlurHandler>(\n e => {\n isFocusedRef.current = false;\n if (value !== currentValue) {\n commitValue(e, currentValue);\n }\n },\n [currentValue, commitValue, value]\n );\n\n const handleFocus = useCallback<NumberFocusHandler>(() => {\n isFocusedRef.current = true;\n }, []);\n\n const handleKeyPress = useCallback<React.KeyboardEventHandler<HTMLInputElement>>(\n e => {\n if (typeof e.key === 'string' && e.key.toLowerCase() === 'enter') {\n const targetValue = (e.target as HTMLInputElement)?.value;\n const eventValue = targetValue ? Number(targetValue) : undefined;\n\n // the raw input value will not have min/max clamp applied from the SUINumber component\n const clampedValue = typeof eventValue === 'number' ? clamp(eventValue, min, max) : undefined;\n\n if (value !== clampedValue) {\n commitValue(e, clampedValue);\n }\n }\n // if pressing the ESC key, revert value to the initial one before editing\n if (typeof e.key === 'string' && e.key.toLowerCase() === 'escape') {\n // This key doesn't work with Chrome 75\n setCurrentValue(value);\n }\n },\n [commitValue, value, min, max]\n );\n\n return {\n handleChange,\n handleBlur,\n handleFocus,\n handleKeyPress,\n currentValue,\n };\n};\n","import * as T from 'prop-types';\nimport type { JSONSchema7 } from 'json-schema';\n\nexport interface BaseEditorProps {\n name: string;\n value: any;\n onChange?: (...args: any[]) => void;\n label?: string; // @TODO(pwied): this should not live in editor props\n labelPosition?: 'top' | 'left'; // ^^^\n context?: Record<string, any>;\n labelWidth?: number;\n isAdvanced?: boolean;\n isDisabled?: boolean;\n dataSourceBindings?: Record<string, any>;\n options?: { [k: string]: any };\n optionsSchema?: {\n [key: string]: JSONSchema7;\n };\n}\n\nexport const BaseEditorPropTypes: Record<keyof BaseEditorProps, T.Validator<any>> = {\n name: T.string.isRequired,\n value: T.oneOfType([T.string, T.object, T.arrayOf(T.string)]),\n context: T.object,\n label: T.string,\n labelPosition: T.oneOf(['top', 'left']),\n labelWidth: T.number,\n onChange: T.func,\n isAdvanced: T.bool,\n isDisabled: T.bool,\n dataSourceBindings: T.object,\n options: T.object,\n optionsSchema: T.object,\n};\n","import React, { Children, cloneElement, ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup, { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/Number\");","module.exports = require(\"@splunk/react-ui/Slider\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(148);\n"],"names":["numberStyle","flexBasis","flexGrow","flexShrink","StyledSlider","propTypes","BaseEditorPropTypes","help","T","string","max","number","maxLabel","oneOfType","element","min","minLabel","step","stepMarks","oneOf","value","defaultValue","SliderEditor","isDisabled","label","labelPosition","labelWidth","name","onChange","handleSliderChange","React","useCallback","event","v","parseFloat","handleNumberChange","currentValue","handleChange","handleBlur","handleFocus","handleKeyPress","useNumberInput","onValueChange","displayValue","Number","undefined","suiStepMarks","disabled","inline","onBlur","onFocus","onKeyDown","style","NEGATIVE_INFINITY","POSITIVE_INFINITY","noop","setCurrentValue","useState","isFocusedRef","useRef","commitValue","e","newValue","handleChangeDebounced","useMemo","debounce","payload","useLayoutEffect","current","key","toLowerCase","targetValue","target","eventValue","clampedValue","clamp","isRequired","object","arrayOf","context","func","isAdvanced","bool","dataSourceBindings","options","optionsSchema","ControlGroupContainer","variables","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","contentColorActive","interactiveColorOverlayDrag","AdvancedConfigButton","onClick","content","_","icon","appearance","AdvancedControlGroup","dataTest","children","hideLabel","tooltip","error","controlsLayout","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","map","child","cloneElement","flex","module","exports","require","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"SliderEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/./src/editors/SliderEditor.tsx","webpack://@splunk/dynamic-editors/./src/hooks/useNumberInput.ts","webpack://@splunk/dynamic-editors/./src/interfaces/BaseEditorProps.ts","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Number\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Slider\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/startup"],"sourcesContent":["import * as React from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport Slider from '@splunk/react-ui/Slider';\nimport NumberInput from '@splunk/react-ui/Number';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport { BaseEditorPropTypes } from '../interfaces/BaseEditorProps';\nimport type { BaseEditorProps } from '../interfaces/BaseEditorProps';\nimport { useNumberInput } from '../hooks/useNumberInput';\n\nconst numberStyle = { flexBasis: 92, flexGrow: 0, flexShrink: 0 };\n\nconst StyledSlider = styled(Slider)`\n div:has(> [data-test='bar']) {\n min-width: 0;\n }\n`;\n\ninterface SliderEditorProps extends BaseEditorProps {\n /** help text under controls */\n help?: string;\n /** max value for slider */\n max?: number;\n /** label for max value */\n maxLabel?: React.ReactNode;\n /** min value for slider */\n min?: number;\n /** label for min value */\n minLabel?: React.ReactNode;\n /** units to skip when moving slider */\n step?: number;\n /** display sections for drag bar */\n stepMarks?: 'focus' | 'always' | 'none';\n /** current value of field */\n value: number;\n /** default value of the option */\n defaultValue?: number;\n}\n\nconst propTypes: Record<keyof SliderEditorProps, T.Validator<any>> = {\n ...BaseEditorPropTypes,\n help: T.string,\n max: T.number,\n maxLabel: T.oneOfType([T.element, T.string]),\n min: T.number,\n minLabel: T.oneOfType([T.element, T.string]),\n step: T.number,\n stepMarks: T.oneOf(['focus', 'always', 'none']),\n value: T.number,\n defaultValue: T.number,\n};\n\nexport const SliderEditor = ({\n help,\n isDisabled = false,\n label,\n labelPosition = 'top',\n labelWidth,\n max,\n maxLabel = null,\n min,\n minLabel = null,\n name,\n onChange,\n step,\n stepMarks = 'focus',\n value = null,\n defaultValue,\n}: SliderEditorProps): JSX.Element => {\n const handleSliderChange = React.useCallback(\n (event, { value: v }) => {\n // emit onChange if value is a number\n if (parseFloat(v) || v === 0) {\n onChange(event, name, v);\n }\n },\n [onChange, name]\n );\n const handleNumberChange = React.useCallback(\n (event, v) => {\n // emit onChange if value is a number\n if (parseFloat(v) || v === 0) {\n onChange(event, name, v);\n }\n },\n [onChange, name]\n );\n\n const { currentValue, handleChange, handleBlur, handleFocus, handleKeyPress } = useNumberInput({\n value,\n min,\n max,\n defaultValue,\n onValueChange: handleNumberChange,\n });\n\n // if there is no value show input as blank by passing undefined\n const displayValue = currentValue != null ? Number(currentValue) : undefined;\n\n // stepMarks = 'none'is not valid for react-ui/Slider\n const suiStepMarks = stepMarks === 'none' ? 'never' : stepMarks;\n return (\n <ControlGroup label={label} labelPosition={labelPosition} labelWidth={labelWidth} help={help}>\n <StyledSlider\n data-test={name}\n min={min}\n minLabel={minLabel}\n max={max}\n maxLabel={maxLabel}\n step={step}\n stepMarks={suiStepMarks}\n value={displayValue}\n disabled={isDisabled}\n onChange={handleSliderChange}\n />\n <NumberInput\n inline\n min={min}\n max={max}\n step={step}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyPress}\n value={displayValue}\n disabled={isDisabled}\n style={numberStyle}\n />\n </ControlGroup>\n );\n};\nSliderEditor.propTypes = propTypes;\n\nexport default SliderEditor;\n","import type React from 'react';\nimport { useCallback, useRef, useLayoutEffect, useState, useMemo } from 'react';\nimport {\n type NumberBlurHandler,\n type NumberChangeHandler,\n type NumberFocusHandler,\n type NumberPropsBase,\n} from '@splunk/react-ui/Number';\nimport { clamp, debounce, noop } from 'lodash';\n\nexport type OnValueChangeType = (e: Parameters<NumberChangeHandler>[0], newValue?: string | number) => void;\n\ninterface UseNumberInputArgs extends Pick<NumberPropsBase, 'value' | 'defaultValue' | 'min' | 'max'> {\n onValueChange: OnValueChangeType;\n}\n\nexport const useNumberInput = ({\n min = Number.NEGATIVE_INFINITY,\n max = Number.POSITIVE_INFINITY,\n value,\n defaultValue,\n onValueChange = noop,\n}: UseNumberInputArgs) => {\n const [currentValue, setCurrentValue] = useState(value);\n const isFocusedRef = useRef(false);\n\n const commitValue = useCallback(\n (e, newValue?: string | number) => {\n if (newValue == null) {\n // if we're clearing the input, revert local state back to default or old value\n setCurrentValue(defaultValue ?? value);\n }\n\n onValueChange(e, newValue);\n },\n [defaultValue, onValueChange, value]\n );\n\n const handleChangeDebounced = useMemo(\n () => debounce<NumberChangeHandler>((e, payload) => commitValue(e, payload.value), 250),\n [commitValue]\n );\n\n useLayoutEffect(() => {\n // layout effect prevents double-render during external change to derived state\n setCurrentValue(value);\n }, [value]);\n\n const handleChange = useCallback<NumberChangeHandler>(\n (e, payload) => {\n setCurrentValue(payload.value);\n if (isFocusedRef.current) {\n // if focus is in the text box of the number input, don't commit the state yet\n // this includes being focused inside the text box and using UP + DOWN arrow keys to increment/decrement. It will only\n // commit the value on blur or Enter key.\n return;\n }\n\n // if the focus is outside, it's because the user is clicking the increment/decrement buttons directly\n handleChangeDebounced(e, payload);\n },\n [handleChangeDebounced]\n );\n\n const handleBlur = useCallback<NumberBlurHandler>(\n e => {\n isFocusedRef.current = false;\n if (value !== currentValue) {\n commitValue(e, currentValue);\n }\n },\n [currentValue, commitValue, value]\n );\n\n const handleFocus = useCallback<NumberFocusHandler>(() => {\n isFocusedRef.current = true;\n }, []);\n\n const handleKeyPress = useCallback<React.KeyboardEventHandler<HTMLInputElement>>(\n e => {\n if (typeof e.key === 'string' && e.key.toLowerCase() === 'enter') {\n const targetValue = (e.target as HTMLInputElement)?.value;\n const eventValue = targetValue ? Number(targetValue) : undefined;\n\n // the raw input value will not have min/max clamp applied from the SUINumber component\n const clampedValue = typeof eventValue === 'number' ? clamp(eventValue, min, max) : undefined;\n\n if (value !== clampedValue) {\n commitValue(e, clampedValue);\n }\n }\n // if pressing the ESC key, revert value to the initial one before editing\n if (typeof e.key === 'string' && e.key.toLowerCase() === 'escape') {\n // This key doesn't work with Chrome 75\n setCurrentValue(value);\n }\n },\n [commitValue, value, min, max]\n );\n\n return {\n handleChange,\n handleBlur,\n handleFocus,\n handleKeyPress,\n currentValue,\n };\n};\n","import * as T from 'prop-types';\nimport type { JSONSchema7 } from 'json-schema';\n\nexport interface BaseEditorProps {\n name: string;\n value: any;\n onChange?: (...args: any[]) => void;\n label?: string; // @TODO(pwied): this should not live in editor props\n labelPosition?: 'top' | 'left'; // ^^^\n context?: Record<string, any>;\n labelWidth?: number;\n isAdvanced?: boolean;\n isDisabled?: boolean;\n dataSourceBindings?: Record<string, any>;\n options?: { [k: string]: any };\n optionsSchema?: {\n [key: string]: JSONSchema7;\n };\n}\n\nexport const BaseEditorPropTypes: Record<keyof BaseEditorProps, T.Validator<any>> = {\n name: T.string.isRequired,\n value: T.oneOfType([T.string, T.object, T.arrayOf(T.string)]),\n context: T.object,\n label: T.string,\n labelPosition: T.oneOf(['top', 'left']),\n labelWidth: T.number,\n onChange: T.func,\n isAdvanced: T.bool,\n isDisabled: T.bool,\n dataSourceBindings: T.object,\n options: T.object,\n optionsSchema: T.object,\n};\n","import React, { Children, cloneElement } from 'react';\nimport type { ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup from '@splunk/react-ui/ControlGroup';\nimport type { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/Number\");","module.exports = require(\"@splunk/react-ui/Slider\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(148);\n"],"names":["numberStyle","flexBasis","flexGrow","flexShrink","StyledSlider","propTypes","BaseEditorPropTypes","help","T","string","max","number","maxLabel","oneOfType","element","min","minLabel","step","stepMarks","oneOf","value","defaultValue","SliderEditor","isDisabled","label","labelPosition","labelWidth","name","onChange","handleSliderChange","React","useCallback","event","v","parseFloat","handleNumberChange","currentValue","handleChange","handleBlur","handleFocus","handleKeyPress","useNumberInput","onValueChange","displayValue","Number","undefined","suiStepMarks","disabled","inline","onBlur","onFocus","onKeyDown","style","NEGATIVE_INFINITY","POSITIVE_INFINITY","noop","setCurrentValue","useState","isFocusedRef","useRef","commitValue","e","newValue","handleChangeDebounced","useMemo","debounce","payload","useLayoutEffect","current","key","toLowerCase","targetValue","target","eventValue","clampedValue","clamp","isRequired","object","arrayOf","context","func","isAdvanced","bool","dataSourceBindings","options","optionsSchema","ControlGroupContainer","variables","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","contentColorActive","interactiveColorOverlayDrag","AdvancedConfigButton","onClick","content","_","icon","appearance","AdvancedControlGroup","dataTest","children","hideLabel","tooltip","error","controlsLayout","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","map","child","cloneElement","flex","module","exports","require","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","call"],"sourceRoot":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StaticItemEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/objectWithoutProperties\"","webpack://@splunk/dynamic-editors/./src/editors/TextEditor.jsx","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/./src/shared/dimensionConstants.ts","webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/defineProperty\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/extends\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/FormRows\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Text\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/runtime/compat get default export","webpack://@splunk/dynamic-editors/webpack/runtime/define property getters","webpack://@splunk/dynamic-editors/webpack/runtime/hasOwnProperty shorthand","webpack://@splunk/dynamic-editors/webpack/runtime/make namespace object","webpack://@splunk/dynamic-editors/./src/editors/StaticItemEditor.jsx"],"sourcesContent":["const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectWithoutProperties\");","import React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport T from 'prop-types';\nimport { debounce } from 'lodash';\nimport Text from '@splunk/react-ui/Text';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport { editorStyle } from '../shared/dimensionConstants';\n\nconst defaultLabelStyle = {};\n\nconst TextEditor = ({\n onChange,\n name,\n value = '',\n label,\n labelPosition = 'top',\n labelWidth,\n labelStyle = defaultLabelStyle,\n hideLabel = false,\n isAdvanced,\n isDisabled = false,\n help,\n tooltip,\n validate,\n error,\n ...otherProps\n}) => {\n const [val, setValueState] = useState(value);\n\n const handleValidate = useCallback(\n newValue => (typeof validate === 'function' ? validate({ value: newValue }) : null),\n [validate]\n );\n const [errorState, setErrorState] = useState(handleValidate(value));\n const debouncedHandleValidate = useMemo(\n () =>\n debounce(newVal => {\n setErrorState(handleValidate(newVal));\n }, 250),\n [handleValidate]\n );\n\n useEffect(\n () => () => {\n // cancel debounce on component unmount\n debouncedHandleValidate.cancel();\n },\n [debouncedHandleValidate]\n );\n\n useEffect(() => {\n setValueState(value);\n setErrorState(handleValidate(value));\n }, [handleValidate, value]);\n\n const handleChange = useCallback(\n (_event, { value: v }) => {\n setValueState(v);\n debouncedHandleValidate(v);\n },\n [debouncedHandleValidate]\n );\n\n const handleBlur = useCallback(\n event => {\n const newVal = val.trim();\n if (newVal === value) {\n return;\n }\n const newError = handleValidate(newVal);\n // set error if there is one, or clear an existing error\n setErrorState(newError);\n if (!newError) {\n // only change value if there is no validation error\n onChange(event, name, newVal);\n }\n },\n [val, value, handleValidate, onChange, name]\n );\n\n const handleKeyPress = useCallback(\n event => {\n if (event.key === 'Enter') {\n handleBlur(event);\n }\n },\n [handleBlur]\n );\n\n const style = useMemo(\n () =>\n !label || label === ''\n ? {\n ...labelStyle,\n }\n : labelStyle,\n [label, labelStyle]\n );\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n style={style}\n hideLabel={hideLabel}\n help={help}\n tooltip={tooltip}\n error={errorState?.message || error}\n isAdvanced={isAdvanced}\n >\n <Text\n key={value}\n data-test={name}\n style={editorStyle}\n onChange={handleChange}\n onKeyDown={handleKeyPress}\n onBlur={handleBlur}\n value={val}\n disabled={isDisabled}\n canClear\n {...otherProps}\n error={!!errorState || error}\n />\n </ControlGroup>\n );\n};\n\nTextEditor.propTypes = {\n /**\n * Callback when changing the text value\n *\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {string} name The option name\n * @param {string} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * The option name\n */\n name: T.string.isRequired,\n /**\n * A human readable label for the option\n */\n label: T.string.isRequired,\n /**\n * The option value\n */\n value: T.string,\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n /**\n * Label width\n */\n labelWidth: T.number,\n /**\n * Styles to be passed to the ControlGroup\n */\n labelStyle: T.object,\n /**\n * Visually hide the label, but render it for screen readers\n */\n hideLabel: T.bool,\n /**\n * As advanced editor to show advanced config button\n */\n isAdvanced: T.bool,\n /**\n * Disabled state of component\n */\n isDisabled: T.bool,\n /**\n * Validate the value of the editor\n */\n validate: T.func,\n /**\n * If the input should display error state\n */\n error: T.bool,\n /**\n * Text to display under the the input\n */\n help: T.string,\n /**\n * Text to display in a tooltip next to the label\n */\n tooltip: T.string,\n};\n\nexport default TextEditor;\n","import React, { Children, cloneElement, ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup, { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","export const FLYOUT_PADDING = 21;\nexport const COLUMN_FLYOUT_PADDING = 16;\nexport const FLYOUT_WIDTH = 344;\n\nexport const VERTICAL_EDITOR_SPACING = 16;\n\nexport const DROPDOWN_MENU_WIDTH = 327;\n\nexport const editorStyle = { width: '100%' };\n","module.exports = require(\"@babel/runtime/helpers/defineProperty\");","module.exports = require(\"@babel/runtime/helpers/extends\");","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/FormRows\");","module.exports = require(\"@splunk/react-ui/Text\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React, { useCallback, useState, useEffect } from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { isEqual, uniqBy } from 'lodash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FormRows from '@splunk/react-ui/FormRows';\nimport TextEditor from './TextEditor';\nimport ControlGroup from '../shared/AdvancedControlGroup';\n\nconst RowContainer = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n [data-test='control-group'] {\n margin: 0;\n }\n`;\n\nconst formRowHeader = (\n <RowContainer>\n <span data-test=\"form-row-header-label\">{_('Label')}</span>\n <span data-test=\"form-row-header-value\">{_('Value')}</span>\n </RowContainer>\n);\n\n/**\n * Remove an item from an array, return a new array\n * @param {Array} items The list of items\n * @param {Number} index The index of the item to remove\n * @returns {Array} list of items without the item at the specified index\n */\nconst removeItem = (items, index) => items.filter((_item, idx) => idx !== index);\n\n/**\n * Detect when a list of static items contains an invalid entry\n * @param {StaticItem[]} items List of static items\n * @returns {Boolean} true when no label or value is an empty string\n */\nconst isValid = items =>\n // exit early when an error found\n !items.some(\n ({ label, value }) =>\n typeof label !== 'string' ||\n label.trim() === '' ||\n typeof value !== 'string' ||\n value.trim() === ''\n ) &&\n uniqBy(items, item => item.value).length === items.length &&\n uniqBy(items, item => item.label).length === items.length;\n\n/**\n * Detect if a label or value in the list is an error case\n * @param {String} value either an item label or value\n * @param {StaticItem[]} items List of all items\n * @param {label | value} key The StaticItem key to check\n */\nconst isItemError = (value, items, key) => {\n // Just have an invalid type\n if (typeof value !== 'string' || value.trim() === '') {\n return true;\n }\n\n // Check the value is unique\n return items.filter(i => i[key] === value).length > 1;\n};\n\nconst isLabelError = (label, items) => isItemError(label, items, 'label');\nconst isValueError = (value, items) => isItemError(value, items, 'value');\n\nconst InputContainer = styled.div`\n width: 100%;\n`;\n\nconst defaultValue = [];\n\nconst StaticItemEditor = ({\n onChange,\n name,\n value = defaultValue,\n labelPosition = 'top',\n label = '',\n validate,\n}) => {\n const [staticItems, setItems] = useState(value);\n const [nextIndex, setIndex] = useState(value.length);\n\n useEffect(() => {\n setItems(value);\n if (value.length > nextIndex) {\n setIndex(value.length);\n }\n }, [value, nextIndex]);\n\n const handleChange = useCallback(\n newItems => {\n if (!isEqual(newItems, value) && isValid(newItems)) {\n // don't save newItems to state,\n // as this component will get a prop change as a result of the onChange call\n onChange(null, name, newItems);\n } else {\n // save invalid values so UI updates.\n setItems(newItems);\n }\n },\n [value, name, onChange]\n );\n\n const handleRequestRemove = useCallback(\n (_evt, { index }) => {\n const newItems = removeItem(staticItems, index);\n\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleRequestMove = useCallback(\n ({ fromIndex, toIndex }) => {\n const item = staticItems[fromIndex];\n const newItems = removeItem(staticItems, fromIndex);\n\n newItems.splice(toIndex, 0, item);\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleItemChange = useCallback(\n (idx, key) =>\n (_evt, _name, val = '') => {\n const item = staticItems[idx];\n const newItems = [...staticItems];\n\n newItems.splice(idx, 1, { ...item, [key]: val.trim() });\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleRequestAdd = useCallback(() => {\n const newItems = staticItems.concat({\n label: `Label ${nextIndex}`,\n value: `menu_v${nextIndex}`,\n });\n\n setIndex(nextIndex + 1);\n handleChange(newItems);\n }, [staticItems, nextIndex, handleChange]);\n\n const rows = staticItems.map((item, idx) => {\n const { label: l, value: v } = item;\n return (\n <FormRows.Row\n index={idx}\n // eslint-disable-next-line react/no-array-index-key\n key={`${l}_${v}_${idx}`} // NOSONAR\n onRequestRemove={handleRequestRemove}\n >\n <RowContainer>\n <TextEditor\n label={_('Label')}\n hideLabel\n value={l}\n onChange={handleItemChange(idx, 'label')}\n name=\"item-label-editor\"\n error={isLabelError(l, staticItems)}\n validate={validate}\n />\n <TextEditor\n label={_('Value')}\n hideLabel\n value={v}\n onChange={handleItemChange(idx, 'value')}\n name=\"item-value-editor\"\n error={isValueError(v, staticItems)}\n validate={validate}\n />\n </RowContainer>\n </FormRows.Row>\n );\n });\n\n return (\n <ControlGroup label={label} labelPosition={labelPosition}>\n <InputContainer>\n <FormRows\n addLabel={_('Add new')}\n header={formRowHeader}\n onRequestAdd={handleRequestAdd}\n onRequestMove={handleRequestMove}\n >\n {rows}\n </FormRows>\n </InputContainer>\n </ControlGroup>\n );\n};\n\nStaticItemEditor.propTypes = {\n /**\n * Callback when changing the text value\n *\n * onChange function has the following properties\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {String} name The option name\n * @param {StaticItem[]} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * The option name\n */\n name: T.string.isRequired,\n /**\n * A human readable label for the option\n */\n label: T.string,\n /**\n * The option value\n */\n value: T.arrayOf(T.exact({ label: T.string, value: T.string })),\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n /**\n * Validate the value of the editor\n */\n validate: T.func,\n};\n\nexport default StaticItemEditor;\n"],"names":["require","defaultLabelStyle","TextEditor","_ref","onChange","name","value","label","labelPosition","labelWidth","labelStyle","hideLabel","isAdvanced","isDisabled","help","tooltip","validate","error","otherProps","_objectWithoutProperties","_excluded","val","setValueState","useState","handleValidate","useCallback","newValue","errorState","setErrorState","debouncedHandleValidate","useMemo","debounce","newVal","useEffect","cancel","handleChange","_event","v","handleBlur","event","trim","newError","handleKeyPress","key","style","_objectSpread","React","ControlGroup","message","Text","_extends","editorStyle","onKeyDown","onBlur","disabled","canClear","propTypes","T","isRequired","ControlGroupContainer","variables","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","contentColorActive","interactiveColorOverlayDrag","AdvancedConfigButton","onClick","content","_","icon","appearance","AdvancedControlGroup","dataTest","children","controlsLayout","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","map","child","cloneElement","flex","object","bool","func","width","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","RowContainer","styled","formRowHeader","removeItem","items","index","_item","idx","isItemError","i","length","isLabelError","isValueError","InputContainer","defaultValue","StaticItemEditor","staticItems","setItems","nextIndex","setIndex","newItems","isEqual","some","uniqBy","item","handleRequestRemove","_evt","handleRequestMove","fromIndex","toIndex","splice","handleItemChange","_name","handleRequestAdd","concat","rows","l","FormRows","onRequestRemove","addLabel","header","onRequestAdd","onRequestMove"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"StaticItemEditor.js","mappings":"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","sources":["webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/objectWithoutProperties\"","webpack://@splunk/dynamic-editors/./src/editors/TextEditor.jsx","webpack://@splunk/dynamic-editors/./src/shared/AdvancedControlGroup.tsx","webpack://@splunk/dynamic-editors/./src/shared/dimensionConstants.ts","webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/defineProperty\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@babel/runtime/helpers/extends\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-icons/SlidersDoubleHorizontal\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Button\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/ControlGroup\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/FormRows\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Text\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/react-ui/Tooltip\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/themes\"","webpack://@splunk/dynamic-editors/external commonjs2 \"@splunk/ui-utils/i18n\"","webpack://@splunk/dynamic-editors/external commonjs2 \"lodash\"","webpack://@splunk/dynamic-editors/external commonjs2 \"prop-types\"","webpack://@splunk/dynamic-editors/external commonjs2 \"react\"","webpack://@splunk/dynamic-editors/external commonjs2 \"styled-components\"","webpack://@splunk/dynamic-editors/webpack/bootstrap","webpack://@splunk/dynamic-editors/webpack/runtime/compat get default export","webpack://@splunk/dynamic-editors/webpack/runtime/define property getters","webpack://@splunk/dynamic-editors/webpack/runtime/hasOwnProperty shorthand","webpack://@splunk/dynamic-editors/webpack/runtime/make namespace object","webpack://@splunk/dynamic-editors/./src/editors/StaticItemEditor.jsx"],"sourcesContent":["const __WEBPACK_NAMESPACE_OBJECT__ = require(\"@babel/runtime/helpers/objectWithoutProperties\");","import React, { useState, useCallback, useEffect, useMemo } from 'react';\nimport T from 'prop-types';\nimport { debounce } from 'lodash';\nimport Text from '@splunk/react-ui/Text';\nimport ControlGroup from '../shared/AdvancedControlGroup';\nimport { editorStyle } from '../shared/dimensionConstants';\n\nconst defaultLabelStyle = {};\n\nconst TextEditor = ({\n onChange,\n name,\n value = '',\n label,\n labelPosition = 'top',\n labelWidth,\n labelStyle = defaultLabelStyle,\n hideLabel = false,\n isAdvanced,\n isDisabled = false,\n help,\n tooltip,\n validate,\n error,\n ...otherProps\n}) => {\n const [val, setValueState] = useState(value);\n\n const handleValidate = useCallback(\n newValue => (typeof validate === 'function' ? validate({ value: newValue }) : null),\n [validate]\n );\n const [errorState, setErrorState] = useState(handleValidate(value));\n const debouncedHandleValidate = useMemo(\n () =>\n debounce(newVal => {\n setErrorState(handleValidate(newVal));\n }, 250),\n [handleValidate]\n );\n\n useEffect(\n () => () => {\n // cancel debounce on component unmount\n debouncedHandleValidate.cancel();\n },\n [debouncedHandleValidate]\n );\n\n useEffect(() => {\n setValueState(value);\n setErrorState(handleValidate(value));\n }, [handleValidate, value]);\n\n const handleChange = useCallback(\n (_event, { value: v }) => {\n setValueState(v);\n debouncedHandleValidate(v);\n },\n [debouncedHandleValidate]\n );\n\n const handleBlur = useCallback(\n event => {\n const newVal = val.trim();\n if (newVal === value) {\n return;\n }\n const newError = handleValidate(newVal);\n // set error if there is one, or clear an existing error\n setErrorState(newError);\n if (!newError) {\n // only change value if there is no validation error\n onChange(event, name, newVal);\n }\n },\n [val, value, handleValidate, onChange, name]\n );\n\n const handleKeyPress = useCallback(\n event => {\n if (event.key === 'Enter') {\n handleBlur(event);\n }\n },\n [handleBlur]\n );\n\n const style = useMemo(\n () =>\n !label || label === ''\n ? {\n ...labelStyle,\n }\n : labelStyle,\n [label, labelStyle]\n );\n\n return (\n <ControlGroup\n label={label}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n style={style}\n hideLabel={hideLabel}\n help={help}\n tooltip={tooltip}\n error={errorState?.message || error}\n isAdvanced={isAdvanced}\n >\n <Text\n key={value}\n data-test={name}\n style={editorStyle}\n onChange={handleChange}\n onKeyDown={handleKeyPress}\n onBlur={handleBlur}\n value={val}\n disabled={isDisabled}\n canClear\n {...otherProps}\n error={!!errorState || error}\n />\n </ControlGroup>\n );\n};\n\nTextEditor.propTypes = {\n /**\n * Callback when changing the text value\n *\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {string} name The option name\n * @param {string} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * The option name\n */\n name: T.string.isRequired,\n /**\n * A human readable label for the option\n */\n label: T.string.isRequired,\n /**\n * The option value\n */\n value: T.string,\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n /**\n * Label width\n */\n labelWidth: T.number,\n /**\n * Styles to be passed to the ControlGroup\n */\n labelStyle: T.object,\n /**\n * Visually hide the label, but render it for screen readers\n */\n hideLabel: T.bool,\n /**\n * As advanced editor to show advanced config button\n */\n isAdvanced: T.bool,\n /**\n * Disabled state of component\n */\n isDisabled: T.bool,\n /**\n * Validate the value of the editor\n */\n validate: T.func,\n /**\n * If the input should display error state\n */\n error: T.bool,\n /**\n * Text to display under the the input\n */\n help: T.string,\n /**\n * Text to display in a tooltip next to the label\n */\n tooltip: T.string,\n};\n\nexport default TextEditor;\n","import React, { Children, cloneElement } from 'react';\nimport type { ReactElement } from 'react';\nimport * as T from 'prop-types';\nimport styled from 'styled-components';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport AdvancedConfigIcon from '@splunk/react-icons/SlidersDoubleHorizontal';\nimport { variables } from '@splunk/themes';\nimport Tooltip from '@splunk/react-ui/Tooltip';\nimport Button, { ButtonClickHandler, ButtonProps } from '@splunk/react-ui/Button';\nimport SUIControlGroup from '@splunk/react-ui/ControlGroup';\nimport type { ControlGroupPropsBase } from '@splunk/react-ui/ControlGroup';\n\ninterface AdvancedControlGroupProps extends Omit<ControlGroupPropsBase, 'splunkTheme'> {\n 'data-test'?: string;\n style?: Record<string, string | number>;\n isAdvanced?: boolean;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n onAdvancedConfigButtonClick?: ButtonClickHandler;\n}\n\ninterface AdvancedConfigButtonProps {\n label?: string;\n onClick?: ButtonClickHandler;\n}\n\n// remove all surrounding margins. let parent add padding\nconst ControlGroupContainer = styled(SUIControlGroup)`\n margin-top: 0;\n padding: 0;\n // adjust bottom margin according to theme\n margin-bottom: ${variables.spacingMedium};\n width: 100%;\n\n // remove top margin of the first component in control group\n &:first-child {\n margin-top: 0;\n }\n\n // remove bottom margin of the last component in control group\n &:last-child {\n margin-bottom: 0;\n }\n // remove top padding on label of the first control group\n [data-test='label']:first-of-type {\n padding-top: 0;\n }\n`;\n\n// override tooltip to set desired config button style\nconst StyledToolTip = styled(Tooltip)`\n display: flex;\n > span {\n display: flex;\n width: 35px;\n }\n`;\n\nconst StyledAdvancedConfigButton = styled(Button)<ButtonProps>`\n color: ${variables.contentColorActive} !important;\n &:hover {\n background-color: ${variables.interactiveColorOverlayDrag} !important;\n }\n`;\n\nexport const AdvancedConfigButton = ({\n label = '',\n onClick,\n}: AdvancedConfigButtonProps): React.ReactElement => {\n return (\n <StyledToolTip\n data-test={`${label}-advanced-config-button-tooltip`}\n content={_('Advanced configurations')}\n >\n <StyledAdvancedConfigButton\n data-test={`${label}-advanced-config-button`}\n icon={<AdvancedConfigIcon data-test={`${label}-advanced-config-button-icon`} />}\n appearance=\"subtle\"\n onClick={onClick}\n />\n </StyledToolTip>\n );\n};\n\nconst AdvancedControlGroup = ({\n 'data-test': dataTest,\n children,\n isAdvanced = false,\n label,\n hideLabel,\n labelPosition,\n labelWidth,\n tooltip,\n help,\n style,\n error,\n controlsLayout,\n onClick,\n onAdvancedConfigButtonClick,\n}: AdvancedControlGroupProps): React.ReactElement => (\n <ControlGroupContainer\n data-test={dataTest ?? 'control-group'}\n label={label}\n hideLabel={hideLabel}\n labelPosition={labelPosition}\n labelWidth={labelWidth}\n tooltip={tooltip}\n help={help}\n error={error}\n style={style}\n onClick={onClick}\n controlsLayout={controlsLayout}\n >\n {isAdvanced\n ? Children.toArray(children)\n .filter(Boolean)\n .map(child =>\n cloneElement(child as ReactElement, {\n style: { flex: 1 },\n })\n )\n : children}\n {isAdvanced ? <AdvancedConfigButton label={label} onClick={onAdvancedConfigButtonClick} /> : null}\n </ControlGroupContainer>\n);\n\nAdvancedControlGroup.propTypes = {\n /**\n * Style overriding SUI ControlGroup\n */\n style: T.object,\n /**\n * Whether the current editor is enabled with advanced configurations\n */\n isAdvanced: T.bool,\n /**\n * Callback for editor click\n */\n onClick: T.func,\n /**\n * Callback for advanced config button click\n */\n onAdvancedConfigButtonClick: T.func,\n};\n\nexport default AdvancedControlGroup;\n","export const FLYOUT_PADDING = 21;\nexport const COLUMN_FLYOUT_PADDING = 16;\nexport const FLYOUT_WIDTH = 344;\n\nexport const VERTICAL_EDITOR_SPACING = 16;\n\nexport const DROPDOWN_MENU_WIDTH = 327;\n\nexport const editorStyle = { width: '100%' };\n","module.exports = require(\"@babel/runtime/helpers/defineProperty\");","module.exports = require(\"@babel/runtime/helpers/extends\");","module.exports = require(\"@splunk/react-icons/SlidersDoubleHorizontal\");","module.exports = require(\"@splunk/react-ui/Button\");","module.exports = require(\"@splunk/react-ui/ControlGroup\");","module.exports = require(\"@splunk/react-ui/FormRows\");","module.exports = require(\"@splunk/react-ui/Text\");","module.exports = require(\"@splunk/react-ui/Tooltip\");","module.exports = require(\"@splunk/themes\");","module.exports = require(\"@splunk/ui-utils/i18n\");","module.exports = require(\"lodash\");","module.exports = require(\"prop-types\");","module.exports = require(\"react\");","module.exports = require(\"styled-components\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React, { useCallback, useState, useEffect } from 'react';\nimport T from 'prop-types';\nimport styled from 'styled-components';\nimport { isEqual, uniqBy } from 'lodash';\nimport { _ } from '@splunk/ui-utils/i18n';\nimport FormRows from '@splunk/react-ui/FormRows';\nimport TextEditor from './TextEditor';\nimport ControlGroup from '../shared/AdvancedControlGroup';\n\nconst RowContainer = styled.div`\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n [data-test='control-group'] {\n margin: 0;\n }\n`;\n\nconst formRowHeader = (\n <RowContainer>\n <span data-test=\"form-row-header-label\">{_('Label')}</span>\n <span data-test=\"form-row-header-value\">{_('Value')}</span>\n </RowContainer>\n);\n\n/**\n * Remove an item from an array, return a new array\n * @param {Array} items The list of items\n * @param {Number} index The index of the item to remove\n * @returns {Array} list of items without the item at the specified index\n */\nconst removeItem = (items, index) => items.filter((_item, idx) => idx !== index);\n\n/**\n * Detect when a list of static items contains an invalid entry\n * @param {StaticItem[]} items List of static items\n * @returns {Boolean} true when no label or value is an empty string\n */\nconst isValid = items =>\n // exit early when an error found\n !items.some(\n ({ label, value }) =>\n typeof label !== 'string' ||\n label.trim() === '' ||\n typeof value !== 'string' ||\n value.trim() === ''\n ) &&\n uniqBy(items, item => item.value).length === items.length &&\n uniqBy(items, item => item.label).length === items.length;\n\n/**\n * Detect if a label or value in the list is an error case\n * @param {String} value either an item label or value\n * @param {StaticItem[]} items List of all items\n * @param {label | value} key The StaticItem key to check\n */\nconst isItemError = (value, items, key) => {\n // Just have an invalid type\n if (typeof value !== 'string' || value.trim() === '') {\n return true;\n }\n\n // Check the value is unique\n return items.filter(i => i[key] === value).length > 1;\n};\n\nconst isLabelError = (label, items) => isItemError(label, items, 'label');\nconst isValueError = (value, items) => isItemError(value, items, 'value');\n\nconst InputContainer = styled.div`\n width: 100%;\n`;\n\nconst defaultValue = [];\n\nconst StaticItemEditor = ({\n onChange,\n name,\n value = defaultValue,\n labelPosition = 'top',\n label = '',\n validate,\n}) => {\n const [staticItems, setItems] = useState(value);\n const [nextIndex, setIndex] = useState(value.length);\n\n useEffect(() => {\n setItems(value);\n if (value.length > nextIndex) {\n setIndex(value.length);\n }\n }, [value, nextIndex]);\n\n const handleChange = useCallback(\n newItems => {\n if (!isEqual(newItems, value) && isValid(newItems)) {\n // don't save newItems to state,\n // as this component will get a prop change as a result of the onChange call\n onChange(null, name, newItems);\n } else {\n // save invalid values so UI updates.\n setItems(newItems);\n }\n },\n [value, name, onChange]\n );\n\n const handleRequestRemove = useCallback(\n (_evt, { index }) => {\n const newItems = removeItem(staticItems, index);\n\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleRequestMove = useCallback(\n ({ fromIndex, toIndex }) => {\n const item = staticItems[fromIndex];\n const newItems = removeItem(staticItems, fromIndex);\n\n newItems.splice(toIndex, 0, item);\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleItemChange = useCallback(\n (idx, key) =>\n (_evt, _name, val = '') => {\n const item = staticItems[idx];\n const newItems = [...staticItems];\n\n newItems.splice(idx, 1, { ...item, [key]: val.trim() });\n handleChange(newItems);\n },\n [staticItems, handleChange]\n );\n\n const handleRequestAdd = useCallback(() => {\n const newItems = staticItems.concat({\n label: `Label ${nextIndex}`,\n value: `menu_v${nextIndex}`,\n });\n\n setIndex(nextIndex + 1);\n handleChange(newItems);\n }, [staticItems, nextIndex, handleChange]);\n\n const rows = staticItems.map((item, idx) => {\n const { label: l, value: v } = item;\n return (\n <FormRows.Row\n index={idx}\n // eslint-disable-next-line react/no-array-index-key\n key={`${l}_${v}_${idx}`} // NOSONAR\n onRequestRemove={handleRequestRemove}\n >\n <RowContainer>\n <TextEditor\n label={_('Label')}\n hideLabel\n value={l}\n onChange={handleItemChange(idx, 'label')}\n name=\"item-label-editor\"\n error={isLabelError(l, staticItems)}\n validate={validate}\n />\n <TextEditor\n label={_('Value')}\n hideLabel\n value={v}\n onChange={handleItemChange(idx, 'value')}\n name=\"item-value-editor\"\n error={isValueError(v, staticItems)}\n validate={validate}\n />\n </RowContainer>\n </FormRows.Row>\n );\n });\n\n return (\n <ControlGroup label={label} labelPosition={labelPosition}>\n <InputContainer>\n <FormRows\n addLabel={_('Add new')}\n header={formRowHeader}\n onRequestAdd={handleRequestAdd}\n onRequestMove={handleRequestMove}\n >\n {rows}\n </FormRows>\n </InputContainer>\n </ControlGroup>\n );\n};\n\nStaticItemEditor.propTypes = {\n /**\n * Callback when changing the text value\n *\n * onChange function has the following properties\n * @param {SyntheticEvent} event The react `SyntheticEvent`\n * @param {String} name The option name\n * @param {StaticItem[]} value The option value\n */\n onChange: T.func.isRequired,\n /**\n * The option name\n */\n name: T.string.isRequired,\n /**\n * A human readable label for the option\n */\n label: T.string,\n /**\n * The option value\n */\n value: T.arrayOf(T.exact({ label: T.string, value: T.string })),\n /**\n * Label position\n */\n labelPosition: T.oneOf(['top', 'left']),\n /**\n * Validate the value of the editor\n */\n validate: T.func,\n};\n\nexport default StaticItemEditor;\n"],"names":["require","defaultLabelStyle","TextEditor","_ref","onChange","name","value","label","labelPosition","labelWidth","labelStyle","hideLabel","isAdvanced","isDisabled","help","tooltip","validate","error","otherProps","_objectWithoutProperties","_excluded","val","setValueState","useState","handleValidate","useCallback","newValue","errorState","setErrorState","debouncedHandleValidate","useMemo","debounce","newVal","useEffect","cancel","handleChange","_event","v","handleBlur","event","trim","newError","handleKeyPress","key","style","_objectSpread","React","ControlGroup","message","Text","_extends","editorStyle","onKeyDown","onBlur","disabled","canClear","propTypes","T","isRequired","ControlGroupContainer","variables","spacingMedium","StyledToolTip","StyledAdvancedConfigButton","contentColorActive","interactiveColorOverlayDrag","AdvancedConfigButton","onClick","content","_","icon","appearance","AdvancedControlGroup","dataTest","children","controlsLayout","onAdvancedConfigButtonClick","Children","toArray","filter","Boolean","map","child","cloneElement","flex","object","bool","func","width","module","exports","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","call","n","getter","__esModule","d","a","definition","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","r","Symbol","toStringTag","RowContainer","styled","formRowHeader","removeItem","items","index","_item","idx","isItemError","i","length","isLabelError","isValueError","InputContainer","defaultValue","StaticItemEditor","staticItems","setItems","nextIndex","setIndex","newItems","isEqual","some","uniqBy","item","handleRequestRemove","_evt","handleRequestMove","fromIndex","toIndex","splice","handleItemChange","_name","handleRequestAdd","concat","rows","l","FormRows","onRequestRemove","addLabel","header","onRequestAdd","onRequestMove"],"sourceRoot":""}
|