@corva/ui 3.78.0-14 → 3.78.0-16
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/cjs-bundle/components/AssetsMultipleSelector/AssetsMultipleSelector.js.map +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/ColorPicker.js +1 -1
- package/cjs-bundle/componentsV2/ColorPicker/ColorPicker.js.map +1 -1
- package/components/AssetsMultipleSelector/AssetsMultipleSelector.d.ts.map +1 -1
- package/components/AssetsMultipleSelector/AssetsMultipleSelector.js.map +1 -1
- package/componentsV2/ColorPicker/ColorPicker.d.ts +3 -0
- package/componentsV2/ColorPicker/ColorPicker.d.ts.map +1 -1
- package/componentsV2/ColorPicker/ColorPicker.js +1 -1
- package/componentsV2/ColorPicker/ColorPicker.js.map +1 -1
- package/mcp-server/server.mjs +74 -40
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsMultipleSelector.js","sources":["../../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core';\nimport { sortBy } from 'lodash';\n\nimport { Search } from '../Search';\n\nimport { mapAssetGetRequest } from '~/clients/jsonApi';\nimport { jsonaDataFormatter } from '~/utils';\nimport useLoadedData from '~/effects/useLoadedData';\n\nconst useStyles = makeStyles(theme => ({\n listbox: {\n maxHeight: 360,\n },\n paper: {\n width: 364,\n },\n footer: {\n fontSize: 12,\n color: theme.palette.primary.text6,\n lineHeight: '16.872px',\n padding: '8px 16px',\n },\n}));\n\nconst getDataFromResponseFn = (response: {\n data: unknown;\n headers?: { get(name: string): string | null };\n}) => {\n return {\n data: jsonaDataFormatter.deserialize(response.data as string) as Asset[],\n total: Number(response.headers?.get('total')) || 0,\n };\n};\nconst initialSelectedAssets: Asset[] = [];\nconst defaultQueryParams = {};\nconst DEFAULT_ASSETS_PER_PAGE = 50;\nconst initialData: { data: Asset[]; total: number } = { data: [], total: 0 };\n\ntype Asset = { id: string; name: string } & Record<string, unknown>;\nexport type AssetsMultipleSelectorProps = {\n /**\n array of asset objects with required id and name fields.\n */\n selectedAssets: [] | Asset[];\n /**\n callback fires on asset selection with array of all selected assets.\n */\n onChange: (assets: Asset[] | []) => void;\n /**\n label for autocomplete input.\n */\n label: string;\n /**\n type of asset.\n */\n type: 'program' | 'rig' | 'well' | 'frac_fleet' | 'drillout_unit' | 'pad' | 'assets';\n /**\n css for root component.\n */\n className?: string;\n /**\n custom query params for assets request like fields, per_page.\n */\n customRequestQueryParams?: Record<string, unknown> & {\n fields?: string[];\n per_page?: number | string;\n };\n /**\n material ui autocomplete classes.\n */\n classes?: any;\n};\n\nconst AssetsMultipleSelector = memo(\n ({\n selectedAssets = initialSelectedAssets,\n onChange,\n label,\n className,\n type,\n customRequestQueryParams,\n classes = {},\n }: AssetsMultipleSelectorProps) => {\n const styles = useStyles();\n\n const { isLoading, setIsLoading, data, loadData } = useLoadedData({\n loadFn: mapAssetGetRequest(type, true),\n initialData: initialData as any,\n getDataFromResponseFn,\n isCacheEnabled: true,\n });\n const { data: assetsData, total } = data ?? initialData;\n const [searchValue, setSearchValue] = useState('');\n\n useEffect(() => {\n loadAssets('', customRequestQueryParams);\n }, []);\n\n const selectedOptions: AssetsMultipleSelectorProps['selectedAssets'] & {} = useMemo(\n () =>\n selectedAssets.map(asset => ({\n ...asset,\n id: asset.id,\n label: asset.name,\n })),\n [selectedAssets]\n );\n\n const options: (Asset & { label: string })[] = useMemo(() => {\n const optionsMap: Record<string, Asset & { label: string }> = {};\n const allOptions = selectedOptions.length ? assetsData.concat(selectedOptions) : assetsData;\n allOptions.forEach((asset: Asset) => {\n optionsMap[asset.id] = {\n ...asset,\n id: asset.id,\n label: asset.name,\n };\n });\n\n return Object.values(sortBy(optionsMap, 'label'));\n }, [assetsData, selectedAssets, searchValue]);\n\n const loadAssets = useCallback(\n (\n search: string,\n customRequestQueryParams: AssetsMultipleSelectorProps['customRequestQueryParams'] = {}\n ) => {\n const params = {\n ...defaultQueryParams,\n per_page: DEFAULT_ASSETS_PER_PAGE,\n ...customRequestQueryParams,\n fields: [`${type}.name`].concat(customRequestQueryParams?.fields || []),\n };\n\n loadData({\n search,\n ...params,\n });\n },\n []\n );\n\n const handleChange = (_event: unknown, visibleSelectedOptions: Asset[], reason?: string) => {\n if (reason === 'reset') return;\n\n const newAssets = visibleSelectedOptions.map(option => {\n return {\n ...option,\n name: option.label as string,\n };\n });\n\n onChange(newAssets);\n };\n\n const onInputReset = () => {\n setSearchValue('');\n loadAssets('', customRequestQueryParams);\n };\n\n const handleInputChange = (value: string, reason: string) => {\n if (reason === 'reset' || value === '') {\n onInputReset();\n return;\n }\n\n if (value.trimStart() !== searchValue) {\n setSearchValue(value.trimStart());\n setIsLoading(true);\n loadAssets(value.trimStart(), customRequestQueryParams);\n }\n };\n\n const countNotShowedAssets = () => {\n const optionsCount = total - assetsData?.length;\n if (optionsCount === 0) return null;\n\n return optionsCount;\n };\n\n const paperFooter = useMemo(() => {\n const notShowedAssetsQuantity = countNotShowedAssets();\n return notShowedAssetsQuantity && !isLoading && searchValue ? (\n <div className={styles.footer}>\n {notShowedAssetsQuantity} additional items not displayed. Continue typing for more refined\n results.\n </div>\n ) : null;\n }, [assetsData, isLoading, !!searchValue, total]);\n\n const { listbox, paper, ...restClasses } = classes;\n\n return (\n <Search\n data-testid=\"offsetPadDropdown\"\n value={selectedOptions}\n onChange={handleChange}\n TextFieldProps={{ label }}\n // @ts-ignore\n className={className}\n classes={{\n listbox: classnames(styles.listbox, listbox),\n paper: classnames(styles.paper, paper),\n ...restClasses,\n }}\n loading={isLoading}\n options={options}\n placeholder=\"\"\n multiple\n filterSelectedOptions={false}\n AutocompleteProps={{ forcePopupIcon: true }}\n isHiddenAllOption\n onInputChangeCallback={handleInputChange}\n onInputReset={onInputReset}\n paperFooter={paperFooter}\n getOptionSelected={(option, value) => +option.id === +value.id}\n isPrioritizedSelectedOptions\n />\n );\n }\n);\n\nexport default AssetsMultipleSelector;\n"],"names":["useStyles","makeStyles","theme","listbox","maxHeight","paper","width","footer","fontSize","color","palette","primary","text6","lineHeight","padding","getDataFromResponseFn","response","_response$headers","data","jsonaDataFormatter","deserialize","total","Number","headers","get","initialSelectedAssets","defaultQueryParams","initialData","AssetsMultipleSelector","memo","_ref","_ref$selectedAssets","selectedAssets","onChange","label","className","type","customRequestQueryParams","_ref$classes","classes","styles","_useLoadedData","useLoadedData","loadFn","mapAssetGetRequest","isCacheEnabled","isLoading","setIsLoading","loadData","_ref2","assetsData","useState","_useState2","_slicedToArray","_useState","searchValue","setSearchValue","useEffect","loadAssets","selectedOptions","useMemo","map","asset","_objectSpread","id","name","options","optionsMap","length","concat","forEach","Object","values","sortBy","useCallback","search","arguments","undefined","params","per_page","fields","onInputReset","paperFooter","optionsCount","notShowedAssetsQuantity","_jsxs","children","restClasses","_excluded","_jsx","Search","value","_event","visibleSelectedOptions","reason","newAssets","option","TextFieldProps","classnames","loading","placeholder","multiple","filterSelectedOptions","AutocompleteProps","forcePopupIcon","isHiddenAllOption","onInputChangeCallback","trimStart","getOptionSelected","isPrioritizedSelectedOptions"],"mappings":"40FAWA,IAAMA,EAAYC,EAAAA,YAAW,SAAAC,GAAK,MAAK,CACrCC,QAAS,CACPC,UAAW,KAEbC,MAAO,CACLC,MAAO,KAETC,OAAQ,CACNC,SAAU,GACVC,MAAOP,EAAMQ,QAAQC,QAAQC,MAC7BC,WAAY,WACZC,QAAS,YAEZ,IAEKC,EAAwB,SAACC,GAGzB,IAAAC,EACJ,MAAO,CACLC,KAAMC,EAAkBA,mBAACC,YAAYJ,EAASE,MAC9CG,MAAOC,OAAO,QAAAN,EAAAA,EAASO,eAAT,IAAAN,OAAA,EAAAA,EAAkBO,IAAI,WAAa,EAErD,EACMC,EAAiC,GACjCC,EAAqB,CAAA,EAErBC,EAAgD,CAAET,KAAM,GAAIG,MAAO,GAqCnEO,EAAyBC,EAAAA,MAC7B,SAQmCC,GAAA,IAAAC,EAAAD,EAPjCE,eAAAA,aAAiBP,EAAqBM,EACtCE,IAAAA,SACAC,IAAAA,MACAC,IAAAA,UACAC,IAAAA,KACAC,IAAAA,yBAAwBC,EAAAR,EACxBS,QAAAA,OAAO,IAAAD,EAAG,CAAA,EAAEA,EAENE,EAASxC,IAEfyC,EAAoDC,EAAc,CAChEC,OAAQC,EAAAA,mBAAmBR,GAAM,GACjCT,YAAaA,EACbZ,sBAAAA,EACA8B,gBAAgB,IAJVC,IAAAA,UAAWC,IAAAA,aAAc7B,IAAAA,KAAM8B,IAAAA,SAMvCC,EAAoC/B,QAAAA,EAAQS,EAA9BuB,IAANhC,KAAkBG,IAAAA,MACY8B,EAAAA,EAAQA,SAAC,IAAGC,EAAAC,EAAAA,QAAAC,EAAA,GAA3CC,EAAWH,EAAA,GAAEI,EAAcJ,EAAA,GAElCK,EAAAA,WAAU,WACRC,EAAW,GAAIrB,EAChB,GAAE,IAEH,IAAMsB,EAAsEC,EAAAA,SAC1E,WAAA,OACE5B,EAAe6B,KAAI,SAAAC,GAAK,OAAAC,EAAAA,EAAA,CAAA,EACnBD,GAAK,CAAA,EAAA,CACRE,GAAIF,EAAME,GACV9B,MAAO4B,EAAMG,MAAI,MAErB,CAACjC,IAGGkC,EAAyCN,EAAAA,SAAQ,WACrD,IAAMO,EAAwD,CAAA,EAU9D,OATmBR,EAAgBS,OAASlB,EAAWmB,OAAOV,GAAmBT,GACtEoB,SAAQ,SAACR,GAClBK,EAAWL,EAAME,WACZF,GAAK,GAAA,CACRE,GAAIF,EAAME,GACV9B,MAAO4B,EAAMG,MAEjB,IAEOM,OAAOC,OAAOC,EAAAA,OAAON,EAAY,SACzC,GAAE,CAACjB,EAAYlB,EAAgBuB,IAE1BG,EAAagB,eACjB,SACEC,GAEG,IADHtC,EAAoFuC,UAAAR,OAAA,QAAAS,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA,EAE9EE,WACDpD,GAAkB,GAAA,CACrBqD,SA9FsB,IA+FnB1C,GAAwB,GAAA,CAC3B2C,OAAQ,CAAI5C,GAAAA,OAAAA,EAAY,UAACiC,QAAOhC,aAAAA,EAAAA,EAA0B2C,SAAU,MAGtEhC,EAAQe,EAAA,CACNY,OAAAA,GACGG,GAEN,GACD,IAgBIG,EAAe,WACnBzB,EAAe,IACfE,EAAW,GAAIrB,IAuBX6C,EAActB,EAAAA,SAAQ,WAC1B,IAPMuB,EAOAC,EANe,KADfD,EAAe9D,GAAQ6B,aAAU,EAAVA,EAAYkB,SACV,KAExBe,EAKP,OAAOC,IAA4BtC,GAAaS,EAC9C8B,EAAAA,KAAA,MAAA,CAAKlD,UAAWK,EAAOjC,OAAO+E,SAAA,CAC3BF,EAAuB,gFAGxB,IACN,GAAG,CAAClC,EAAYJ,IAAaS,EAAalC,IAElClB,EAAmCoC,EAAnCpC,QAASE,EAA0BkC,EAA1BlC,MAAUkF,YAAgBhD,EAAOiD,GAElD,OACEC,EAAAA,IAACC,EAAAA,OAAM,CACL,cAAY,oBACZC,MAAOhC,EACP1B,SAtDiB,SAAC2D,EAAiBC,EAAiCC,GACtE,GAAe,UAAXA,EAAJ,CAEA,IAAMC,EAAYF,EAAuBhC,KAAI,SAAAmC,GAC3C,OAAAjC,EAAAA,EAAA,CAAA,EACKiC,GAAM,CAAA,EAAA,CACT/B,KAAM+B,EAAO9D,OAEjB,IAEAD,EAAS8D,EATe,GAsDtBE,eAAgB,CAAE/D,MAAAA,GAElBC,UAAWA,EACXI,QAAOwB,EAAA,CACL5D,QAAS+F,EAAU,QAAC1D,EAAOrC,QAASA,GACpCE,MAAO6F,EAAU,QAAC1D,EAAOnC,MAAOA,IAC7BkF,GAELY,QAASrD,EACToB,QAASA,EACTkC,YAAY,GACZC,UAAQ,EACRC,uBAAuB,EACvBC,kBAAmB,CAAEC,gBAAgB,GACrCC,mBAAiB,EACjBC,sBApDsB,SAACf,EAAeG,GACzB,UAAXA,GAAgC,KAAVH,EAKtBA,EAAMgB,cAAgBpD,IACxBC,EAAemC,EAAMgB,aACrB5D,GAAa,GACbW,EAAWiC,EAAMgB,YAAatE,IAP9B4C,KAmDAA,aAAcA,EACdC,YAAaA,EACb0B,kBAAmB,SAACZ,EAAQL,GAAK,OAAMK,EAAOhC,KAAQ2B,EAAM3B,EAAG,EAC/D6C,8BAA4B,GAGlC"}
|
|
1
|
+
{"version":3,"file":"AssetsMultipleSelector.js","sources":["../../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core';\nimport { sortBy } from 'lodash';\n\nimport { Search } from '../Search';\n\nimport { mapAssetGetRequest } from '~/clients/jsonApi';\nimport { jsonaDataFormatter } from '~/utils';\nimport useLoadedData from '~/effects/useLoadedData';\n\nconst useStyles = makeStyles(theme => ({\n listbox: {\n maxHeight: 360,\n },\n paper: {\n width: 364,\n },\n footer: {\n fontSize: 12,\n color: theme.palette.primary.text6,\n lineHeight: '16.872px',\n padding: '8px 16px',\n },\n}));\n\nconst getDataFromResponseFn = (response: {\n data: unknown;\n headers?: { get(name: string): string | null };\n}) => {\n return {\n data: jsonaDataFormatter.deserialize(response.data as string) as Asset[],\n total: Number(response.headers?.get('total')) || 0,\n };\n};\nconst initialSelectedAssets: Asset[] = [];\nconst defaultQueryParams = {};\nconst DEFAULT_ASSETS_PER_PAGE = 50;\nconst initialData: { data: Asset[]; total: number } = { data: [], total: 0 };\n\ntype Asset = { id: string; name: string } & Record<string, unknown>;\nexport type AssetsMultipleSelectorProps = {\n /**\n array of asset objects with required id and name fields.\n */\n selectedAssets: [] | Asset[];\n /**\n callback fires on asset selection with array of all selected assets.\n */\n onChange: (assets: Asset[] | []) => void;\n /**\n label for autocomplete input.\n */\n label: string;\n /**\n type of asset.\n */\n type: 'program' | 'rig' | 'well' | 'frac_fleet' | 'drillout_unit' | 'pad' | 'assets';\n /**\n css for root component.\n */\n className?: string;\n /**\n custom query params for assets request like fields, per_page.\n */\n customRequestQueryParams?: Record<string, unknown> & {\n fields?: string[];\n per_page?: number | string;\n };\n /**\n material ui autocomplete classes.\n */\n classes?: any;\n};\n\nconst AssetsMultipleSelector = memo(\n ({\n selectedAssets = initialSelectedAssets,\n onChange,\n label,\n className,\n type,\n customRequestQueryParams,\n classes = {},\n }: AssetsMultipleSelectorProps) => {\n const styles = useStyles();\n\n const { isLoading, setIsLoading, data, loadData } = useLoadedData({\n loadFn: mapAssetGetRequest(type, true),\n initialData: initialData as any,\n getDataFromResponseFn,\n isCacheEnabled: true,\n });\n const { data: assetsData, total } = data ?? initialData;\n const [searchValue, setSearchValue] = useState('');\n\n useEffect(() => {\n loadAssets('', customRequestQueryParams);\n }, []);\n\n const selectedOptions: AssetsMultipleSelectorProps['selectedAssets'] & {} = useMemo(\n () =>\n selectedAssets.map(asset => ({\n ...asset,\n id: asset.id,\n label: asset.name,\n })),\n [selectedAssets]\n );\n\n const options: (Asset & { label: string })[] = useMemo(() => {\n const optionsMap: Record<string, Asset & { label: string }> = {};\n const allOptions = selectedOptions.length ? assetsData.concat(selectedOptions) : assetsData;\n allOptions.forEach((asset: Asset) => {\n optionsMap[asset.id] = {\n ...asset,\n id: asset.id,\n label: asset.name,\n };\n });\n\n return Object.values(sortBy(optionsMap, 'label'));\n }, [assetsData, selectedAssets, searchValue]);\n\n const loadAssets = useCallback(\n (\n search: string,\n customRequestQueryParams: AssetsMultipleSelectorProps['customRequestQueryParams'] = {}\n ) => {\n const params = {\n ...defaultQueryParams,\n per_page: DEFAULT_ASSETS_PER_PAGE,\n ...customRequestQueryParams,\n fields: [`${type}.name`].concat(customRequestQueryParams?.fields || []),\n };\n\n loadData({\n search,\n ...params,\n });\n },\n []\n );\n\n const handleChange = (_event: unknown, visibleSelectedOptions: Asset[], reason?: string) => {\n if (reason === 'reset') return;\n\n const newAssets = visibleSelectedOptions.map(option => {\n return {\n ...option,\n name: option.label as string,\n };\n });\n\n onChange(newAssets);\n };\n\n const onInputReset = () => {\n setSearchValue('');\n loadAssets('', customRequestQueryParams);\n };\n\n const handleInputChange = (value: string, reason: string) => {\n if (reason === 'reset' || value === '') {\n onInputReset();\n return;\n }\n\n if (value.trimStart() !== searchValue) {\n setSearchValue(value.trimStart());\n setIsLoading(true);\n loadAssets(value.trimStart(), customRequestQueryParams);\n }\n };\n\n const countNotShowedAssets = () => {\n const optionsCount = total - assetsData?.length;\n if (optionsCount === 0) return null;\n\n return optionsCount;\n };\n\n const paperFooter = useMemo(() => {\n const notShowedAssetsQuantity = countNotShowedAssets();\n return notShowedAssetsQuantity && !isLoading && searchValue ? (\n <div className={styles.footer}>\n {notShowedAssetsQuantity} additional items not displayed. Continue typing for more refined\n results.\n </div>\n ) : null;\n }, [assetsData, isLoading, !!searchValue, total]);\n\n const { listbox, paper, ...restClasses } = classes;\n\n return (\n <Search\n data-testid=\"offsetPadDropdown\"\n value={selectedOptions}\n onChange={handleChange}\n TextFieldProps={{ label }}\n className={className}\n classes={{\n listbox: classnames(styles.listbox, listbox),\n paper: classnames(styles.paper, paper),\n ...restClasses,\n }}\n loading={isLoading}\n options={options}\n placeholder=\"\"\n multiple\n filterSelectedOptions={false}\n AutocompleteProps={{ forcePopupIcon: true }}\n isHiddenAllOption\n onInputChangeCallback={handleInputChange}\n onInputReset={onInputReset}\n paperFooter={paperFooter}\n getOptionSelected={(option, value) => +option.id === +value.id}\n isPrioritizedSelectedOptions\n />\n );\n }\n);\n\nexport default AssetsMultipleSelector;\n"],"names":["useStyles","makeStyles","theme","listbox","maxHeight","paper","width","footer","fontSize","color","palette","primary","text6","lineHeight","padding","getDataFromResponseFn","response","_response$headers","data","jsonaDataFormatter","deserialize","total","Number","headers","get","initialSelectedAssets","defaultQueryParams","initialData","AssetsMultipleSelector","memo","_ref","_ref$selectedAssets","selectedAssets","onChange","label","className","type","customRequestQueryParams","_ref$classes","classes","styles","_useLoadedData","useLoadedData","loadFn","mapAssetGetRequest","isCacheEnabled","isLoading","setIsLoading","loadData","_ref2","assetsData","useState","_useState2","_slicedToArray","_useState","searchValue","setSearchValue","useEffect","loadAssets","selectedOptions","useMemo","map","asset","_objectSpread","id","name","options","optionsMap","length","concat","forEach","Object","values","sortBy","useCallback","search","arguments","undefined","params","per_page","fields","onInputReset","paperFooter","optionsCount","notShowedAssetsQuantity","_jsxs","children","restClasses","_excluded","_jsx","Search","value","_event","visibleSelectedOptions","reason","newAssets","option","TextFieldProps","classnames","loading","placeholder","multiple","filterSelectedOptions","AutocompleteProps","forcePopupIcon","isHiddenAllOption","onInputChangeCallback","trimStart","getOptionSelected","isPrioritizedSelectedOptions"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),o=require("@babel/runtime/helpers/defineProperty"),s=require("classnames"),n=require("react"),c=require("react-color"),i=require("lodash"),r=require("uuid"),t=require("../TextInputNext/TextInputNext.js"),u=require("../Popover/Popover.js"),a=require("../ButtonIcon/ButtonIcon.js"),l=require("../Tooltip/Tooltip.js"),m=require("../Popper/Popper.js"),d=require("./Swatches/Swatches.js"),p=require("./utils.js"),j=require("./OpacityDragtracker/OpacityDragtracker.js"),q=require("./useChromePickerAccessibility.js"),f=require("./ColorPicker.scss.js"),I=require("../../icons/iconParkIcons.js");require("../../icons/customIcons/icons/AddMessage.js"),require("../../icons/customIcons/icons/DragOne.js"),require("../../icons/customIcons/icons/Attention.js"),require("../../icons/customIcons/icons/Collapse.js"),require("../../icons/customIcons/icons/Dashboard.js"),require("../../icons/customIcons/icons/Expand.js"),require("../../icons/customIcons/icons/FolderClosed.js"),require("../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../icons/customIcons/icons/FolderOpened.js"),require("../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../icons/customIcons/icons/LessOrEqual.js"),require("../../icons/customIcons/icons/Search.js"),require("../../icons/customIcons/icons/SearchOne.js"),require("../../icons/customIcons/icons/Wellhub.js"),require("../../icons/customIcons/icons/MultiRuler.js"),require("../../icons/customIcons/icons/Checkbox.js"),require("../../icons/customIcons/icons/CheckboxChecked.js"),require("../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../icons/customIcons/icons/Radio.js"),require("../../icons/customIcons/icons/RadioChecked.js"),require("../../icons/customIcons/icons/SimulFrac.js"),require("../../icons/customIcons/icons/ZipperFrac.js"),require("../../icons/customIcons/icons/CautionFilled.js"),require("../../icons/customIcons/icons/InfoRounded.js"),require("../../icons/customIcons/icons/FlameFilled.js"),require("../../icons/customIcons/icons/MoreApp.js"),require("../../icons/customIcons/icons/Pad.js"),require("../../icons/customIcons/icons/DrilloutUnit.js"),require("../../icons/customIcons/icons/FracFleet.js"),require("../../icons/customIcons/icons/Global.js"),require("../../icons/customIcons/icons/Program.js"),require("../../icons/customIcons/icons/Rig.js"),require("../../icons/customIcons/icons/Well.js"),require("../../icons/customIcons/icons/Gap.js"),require("../../icons/customIcons/icons/Pin.js"),require("../../icons/customIcons/icons/PinOne.js"),require("../../icons/customIcons/icons/PinOneCrossed.js"),require("../../icons/customIcons/icons/CloseOneFilled.js"),require("../../icons/customIcons/icons/AttentionFilled.js"),require("../../icons/customIcons/icons/CheckOneFilled.js"),require("../../icons/customIcons/icons/Archive.js"),require("../../icons/customIcons/icons/ArchiveCancel.js"),require("../../icons/customIcons/icons/Unarchive.js"),require("../../icons/customIcons/icons/Archived.js"),require("../../icons/customIcons/icons/InterventionUnit.js"),require("../../icons/customIcons/icons/CloudDelete.js"),require("../../icons/customIcons/icons/Lasso.js"),require("../../icons/customIcons/icons/Radius.js"),require("../../icons/customIcons/icons/ErrorOps.js"),require("../../icons/customIcons/icons/DataTypeOps.js"),require("../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../icons/customIcons/icons/CalibrationOps.js"),require("../../icons/customIcons/icons/CriticalOps.js"),require("../../icons/customIcons/icons/Company.js"),require("../../icons/customIcons/icons/ArchiveOne.js"),require("../../icons/customIcons/icons/ParseBotFusion.js"),require("../../icons/customIcons/icons/Connect.js"),require("../../icons/customIcons/icons/PuzzleOne.js"),require("../../icons/customIcons/icons/Feed.js"),require("../../icons/customIcons/icons/Prompt.js"),require("../../icons/customIcons/icons/Companies.js"),require("../../icons/customIcons/icons/ClipboardAi.js"),require("../../icons/customIcons/icons/Key.js"),require("../../icons/customIcons/icons/AtSignCrossed.js"),require("../../icons/customIcons/icons/MappingManual.js"),require("../../icons/customIcons/icons/Mapping.js"),require("../../icons/customIcons/icons/Metrics.js"),require("../../icons/customIcons/icons/Drops.js"),require("../../icons/customIcons/icons/ClipboardSearch.js"),require("../../icons/customIcons/icons/Template.js"),require("../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../icons/customIcons/icons/UnitConversion.js"),require("../../icons/customIcons/icons/NPT.js"),require("../../icons/customIcons/icons/GuidedFrac.js");var b=require("react/jsx-runtime");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=h(e),C=h(o),k=h(s);function x(e,o){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),s.push.apply(s,n)}return s}function y(e){for(var o=1;o<arguments.length;o++){var s=null!=arguments[o]?arguments[o]:{};o%2?x(Object(s),!0).forEach((function(o){C.default(e,o,s[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):x(Object(s)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(s,o))}))}return e}var g={small:f.small,medium:f.medium,large:f.large};exports.ColorPicker=function(e){var o=e.format,s=void 0===o?"hex":o,h=e.className,C=e.label,x=e.labelPlacement,O=void 0===x?"top":x,P=e.popoverPlacement,D=void 0===P?"bottom-start":P,F=e.testId,N=e.disabled,S=e.size,T=void 0===S?"small":S,A=e.onOpen,w=e.onClose,M=e.value,E=void 0===M?p.defaultColor:M,R=e.onChange,B=e.disableOpacityDrag,z=e.enableAlpha,W=void 0!==z&&z,L=e.elementsClassNames,G=void 0===L?{}:L,K=n.useMemo((function(){return{input:k.default(f.input,G.input),inputContainer:k.default(f.inputContainer,G.inputContainer),label:k.default(f.label,G.label),prefix:f.prefixContainer,suffix:f.suffixContainer,numberStepButtons:f.numberStepButtons}}),[G.input,G.inputContainer,G.label]),U=n.useMemo((function(){try{var e=p.parseColor(E);return y(y({},e),{},{a:W?e.a:1})}catch(e){return p.parseColor(p.defaultColor)}}),[E,W]),H=n.useState(!1),V=v.default(H,2),_=V[0],Z=V[1],J=n.useRef(null),Q=n.useRef(null),X=n.useState(!0),Y=v.default(X,2),$=Y[0],ee=Y[1],oe=n.useState(null),se=v.default(oe,2),ne=se[0],ce=se[1],ie=n.useState(U),re=v.default(ie,2),te=re[0],ue=re[1],ae=n.useRef(null),le=n.useMemo((function(){return"corva-color-picker-".concat(r.v4())}),[]),me="".concat(le,"-opacity-input"),de="".concat(le,"-label"),pe="".concat(le,"-opacity-label"),je=Boolean(C),qe=n.useCallback((function(){Z(!0),null==A||A()}),[A]),fe=n.useCallback((function(e){e.preventDefault(),ce(null),qe()}),[qe]),Ie=n.useCallback((function(){ce(null),qe()}),[qe]),be=n.useCallback((function(e){N||"Enter"!==e.key&&" "!==e.key&&"ArrowDown"!==e.key||(e.preventDefault(),ce("palette"),qe())}),[N,qe]),he=n.useCallback((function(){var e,o,s=!(null===(e=ae.current)||void 0===e||!e.contains(document.activeElement));(ce(null),Z(!1),null==w||w(),s)&&(null===(o=Q.current)||void 0===o||o.focus({preventScroll:!0}))}),[w]),ve=n.useCallback((function(e){ce(0===e.detail?"palette":null),ee(!0)}),[]),Ce=n.useCallback((function(e){ce(0===e.detail?"picker":null),ee(!1)}),[]),ke=n.useCallback((function(){return ce(null)}),[]),xe=n.useCallback((function(e){return ue(e.rgb)}),[]),ye=n.useCallback((function(e){var o="hex"===s?p.channelsToHex(e,W):p.channelsToRgba(e,W);null==R||R(o)}),[s,R,W]),ge=n.useCallback((function(e){ue(e),ye(e)}),[ye]),Oe=q.useChromePickerAccessibility({color:te,enableAlpha:W,isActive:!$,onChange:ge}),Pe=Oe.pickerRef,De=Oe.onKeyDown;n.useEffect((function(){var e;if("picker"===ne&&!$){var o=null===(e=Pe.current)||void 0===e?void 0:e.querySelector('[data-color-picker-control="saturation"]');o&&(o.focus({preventScroll:!0}),ke())}}),[ke,ne,$,Pe]);var Fe=n.useCallback((function(e){var o=Number(e);if(!(Number.isNaN(o)||o<0||o>100)){var s=y(y({},U),{},{a:o/100});ye(s)}}),[U,ye]),Ne=n.useCallback((function(e){ye(e.rgb)}),[ye]),Se=n.useCallback((function(e){var o=U.a||1,s=W&&0===e.a?0:o;ye(y(y({},e),{},{a:s}))}),[ye,U.a,W]),Te=n.useCallback((function(){setTimeout((function(){var e,o;Z(!1),null===(e=document.activeElement)||void 0===e||null===(o=e.blur)||void 0===o||o.call(e)}),0)}),[]),Ae=n.useMemo((function(){return i.throttle((function(e){var o=String(Math.round(e));Fe(o)}),100)}),[Fe]);n.useEffect((function(){ue(U)}),[U]),n.useEffect((function(){_&&ee(!0)}),[_]);var we=String(Math.round(100*te.a)),Me=(null==D?void 0:D.startsWith("top"))||(null==D?void 0:D.startsWith("bottom")),Ee=(null==D?void 0:D.startsWith("left"))||(null==D?void 0:D.startsWith("right")),Re=je?b.jsxs(b.Fragment,{children:[b.jsx("label",{id:de,htmlFor:me,children:"string"==typeof C?b.jsx(t.TextInputNext.Label,{children:C}):C}),b.jsx("span",{id:pe,hidden:!0,children:"Opacity"})]}):void 0,Be=n.useMemo((function(){return je?{id:me,"aria-labelledby":"".concat(de," ").concat(pe)}:{id:me,"aria-label":"Opacity"}}),[je,me,de,pe]);return b.jsxs(b.Fragment,{children:[b.jsx(t.TextInputNext,{label:Re,labelPlacement:O,disabled:N,size:T,rootTagName:"div",prefix:b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:f.fakeValue,children:[we,b.jsx("span",{className:f.fakeValuePercent,children:"%"})]}),b.jsx("div",{ref:Q,className:k.default(f.indicator,0===te.a&&f.transparent,G.indicator),style:{"--corvaui-colorpicker-indicatorcolor":p.channelsToHex(te,!1)},onClick:N?void 0:fe,onKeyDown:be,role:"button","aria-label":je?void 0:"Color picker","aria-labelledby":je?de:void 0,"aria-expanded":_,"aria-disabled":N,tabIndex:N?-1:0})]}),suffix:!_&&W&&!B&&!N&&b.jsx(j.OpacityDragTracker,{value:Number(we),onDrag:Ae,onDragEnd:Te}),className:k.default(f.root,g[T],!W&&f.noAlpha,h),testId:F,inputContainerRef:J,value:we,onChange:Fe,onFocus:Ie,inputType:"number",inputMode:"numeric",htmlAttributes:Be,elementsClassNames:K}),b.jsxs(u.Popover,{ref:ae,anchorEl:J.current,open:_,onClose:he,placement:D,className:k.default(f.popover,Me&&f.marginVertical,Ee&&f.marginHorizontal,0===te.a&&f.isTransparent,G.popover),children:[$?b.jsx(d.Swatches,{onChange:Se,value:U,addTransparent:W,autoFocus:"palette"===ne,onAutoFocus:ke}):b.jsx("div",{ref:Pe,className:f.pickerContainer,onKeyDown:De,children:b.jsx(c.ChromePicker,{color:te,onChange:xe,onChangeComplete:Ne,disableAlpha:!W,className:f.picker})}),b.jsxs("div",{className:f.switchButtons,children:[b.jsx(l.Tooltip,{title:"Palette",children:b.jsx(a.ButtonIcon,{ariaLabel:"Show color palette",size:"medium",type:$?"secondary":"tertiary",onClick:ve,children:b.jsx(I.PaletteIcon,{})})}),b.jsx(l.Tooltip,{title:"Pick your own",children:b.jsx(a.ButtonIcon,{ariaLabel:"Show custom color picker",size:"medium",type:$?"tertiary":"secondary",onClick:Ce,children:b.jsx(I.PickerIcon,{})})})]})]}),_&&W&&!B&&b.jsx(m.Popper,{open:_,anchorEl:J.current,className:f.dragTrackerPopper,placement:"right",children:b.jsx(j.OpacityDragTracker,{onDrag:Ae,onDragEnd:Te})})]})};
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@babel/runtime/helpers/slicedToArray"),o=require("@babel/runtime/helpers/defineProperty"),s=require("classnames"),n=require("react"),c=require("react-color"),r=require("lodash"),i=require("uuid"),t=require("../TextInputNext/TextInputNext.js"),u=require("../Popover/Popover.js"),a=require("../ButtonIcon/ButtonIcon.js"),l=require("../Tooltip/Tooltip.js"),m=require("../Popper/Popper.js"),d=require("./Swatches/Swatches.js"),p=require("./utils.js"),j=require("./OpacityDragtracker/OpacityDragtracker.js"),q=require("./useChromePickerAccessibility.js"),f=require("./ColorPicker.scss.js"),I=require("../../icons/iconParkIcons.js");require("../../icons/customIcons/icons/AddMessage.js"),require("../../icons/customIcons/icons/DragOne.js"),require("../../icons/customIcons/icons/Attention.js"),require("../../icons/customIcons/icons/Collapse.js"),require("../../icons/customIcons/icons/Dashboard.js"),require("../../icons/customIcons/icons/Expand.js"),require("../../icons/customIcons/icons/FolderClosed.js"),require("../../icons/customIcons/icons/FolderClosedFilled.js"),require("../../icons/customIcons/icons/FolderOpened.js"),require("../../icons/customIcons/icons/GreaterOrEqual.js"),require("../../icons/customIcons/icons/LessOrEqual.js"),require("../../icons/customIcons/icons/Search.js"),require("../../icons/customIcons/icons/SearchOne.js"),require("../../icons/customIcons/icons/Wellhub.js"),require("../../icons/customIcons/icons/MultiRuler.js"),require("../../icons/customIcons/icons/Checkbox.js"),require("../../icons/customIcons/icons/CheckboxChecked.js"),require("../../icons/customIcons/icons/CheckboxIndeterminate.js"),require("../../icons/customIcons/icons/Radio.js"),require("../../icons/customIcons/icons/RadioChecked.js"),require("../../icons/customIcons/icons/SimulFrac.js"),require("../../icons/customIcons/icons/ZipperFrac.js"),require("../../icons/customIcons/icons/CautionFilled.js"),require("../../icons/customIcons/icons/InfoRounded.js"),require("../../icons/customIcons/icons/FlameFilled.js"),require("../../icons/customIcons/icons/MoreApp.js"),require("../../icons/customIcons/icons/Pad.js"),require("../../icons/customIcons/icons/DrilloutUnit.js"),require("../../icons/customIcons/icons/FracFleet.js"),require("../../icons/customIcons/icons/Global.js"),require("../../icons/customIcons/icons/Program.js"),require("../../icons/customIcons/icons/Rig.js"),require("../../icons/customIcons/icons/Well.js"),require("../../icons/customIcons/icons/Gap.js"),require("../../icons/customIcons/icons/Pin.js"),require("../../icons/customIcons/icons/PinOne.js"),require("../../icons/customIcons/icons/PinOneCrossed.js"),require("../../icons/customIcons/icons/CloseOneFilled.js"),require("../../icons/customIcons/icons/AttentionFilled.js"),require("../../icons/customIcons/icons/CheckOneFilled.js"),require("../../icons/customIcons/icons/Archive.js"),require("../../icons/customIcons/icons/ArchiveCancel.js"),require("../../icons/customIcons/icons/Unarchive.js"),require("../../icons/customIcons/icons/Archived.js"),require("../../icons/customIcons/icons/InterventionUnit.js"),require("../../icons/customIcons/icons/CloudDelete.js"),require("../../icons/customIcons/icons/Lasso.js"),require("../../icons/customIcons/icons/Radius.js"),require("../../icons/customIcons/icons/ErrorOps.js"),require("../../icons/customIcons/icons/DataTypeOps.js"),require("../../icons/customIcons/icons/FalsePositiveOps.js"),require("../../icons/customIcons/icons/CalibrationOps.js"),require("../../icons/customIcons/icons/CriticalOps.js"),require("../../icons/customIcons/icons/Company.js"),require("../../icons/customIcons/icons/ArchiveOne.js"),require("../../icons/customIcons/icons/ParseBotFusion.js"),require("../../icons/customIcons/icons/Connect.js"),require("../../icons/customIcons/icons/PuzzleOne.js"),require("../../icons/customIcons/icons/Feed.js"),require("../../icons/customIcons/icons/Prompt.js"),require("../../icons/customIcons/icons/Companies.js"),require("../../icons/customIcons/icons/ClipboardAi.js"),require("../../icons/customIcons/icons/Key.js"),require("../../icons/customIcons/icons/AtSignCrossed.js"),require("../../icons/customIcons/icons/MappingManual.js"),require("../../icons/customIcons/icons/Mapping.js"),require("../../icons/customIcons/icons/Metrics.js"),require("../../icons/customIcons/icons/Drops.js"),require("../../icons/customIcons/icons/ClipboardSearch.js"),require("../../icons/customIcons/icons/Template.js"),require("../../icons/customIcons/icons/ClipboardMetrics.js"),require("../../icons/customIcons/icons/ClipboardBuilder.js"),require("../../icons/customIcons/icons/UnitConversion.js"),require("../../icons/customIcons/icons/NPT.js"),require("../../icons/customIcons/icons/GuidedFrac.js");var b=require("react/jsx-runtime");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var v=h(e),C=h(o),k=h(s);function x(e,o){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);o&&(n=n.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),s.push.apply(s,n)}return s}function y(e){for(var o=1;o<arguments.length;o++){var s=null!=arguments[o]?arguments[o]:{};o%2?x(Object(s),!0).forEach((function(o){C.default(e,o,s[o])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):x(Object(s)).forEach((function(o){Object.defineProperty(e,o,Object.getOwnPropertyDescriptor(s,o))}))}return e}var g={small:f.small,medium:f.medium,large:f.large},O={inputContainer:f.inputContainer,numberStepButtons:f.numberStepButtons,prefix:f.prefixContainer,suffix:f.suffixContainer,input:f.input,label:f.label};exports.ColorPicker=function(e){var o=e.format,s=void 0===o?"hex":o,h=e.className,x=e.label,P=e.labelPlacement,D=void 0===P?"top":P,F=e.popoverPlacement,N=void 0===F?"bottom-start":F,S=e.testId,T=e.disabled,A=e.size,w=void 0===A?"small":A,M=e.onOpen,E=e.onClose,R=e.value,B=void 0===R?p.defaultColor:R,z=e.onChange,W=e.disableOpacityDrag,L=e.enableAlpha,G=void 0!==L&&L,K=e.elementsClassNames,U=n.useMemo((function(){try{var e=p.parseColor(B);return y(y({},e),{},{a:G?e.a:1})}catch(e){return p.parseColor(p.defaultColor)}}),[B,G]),H=n.useMemo((function(){return K?Object.entries(K).reduce((function(e,o){var s=o,n=v.default(s,2),c=n[0],r=n[1];return y(y({},e),{},C.default({},c,e[c]?k.default(e[c],r):r))}),y({},O)):O}),[K]),V=n.useState(!1),_=v.default(V,2),Z=_[0],J=_[1],Q=n.useRef(null),X=n.useRef(null),Y=n.useState(!0),$=v.default(Y,2),ee=$[0],oe=$[1],se=n.useState(null),ne=v.default(se,2),ce=ne[0],re=ne[1],ie=n.useState(U),te=v.default(ie,2),ue=te[0],ae=te[1],le=n.useRef(null),me=n.useMemo((function(){return"corva-color-picker-".concat(i.v4())}),[]),de="".concat(me,"-opacity-input"),pe="".concat(me,"-label"),je="".concat(me,"-opacity-label"),qe=Boolean(x),fe=n.useCallback((function(){J(!0),null==M||M()}),[M]),Ie=n.useCallback((function(e){e.preventDefault(),re(null),fe()}),[fe]),be=n.useCallback((function(){re(null),fe()}),[fe]),he=n.useCallback((function(e){T||"Enter"!==e.key&&" "!==e.key&&"ArrowDown"!==e.key||(e.preventDefault(),re("palette"),fe())}),[T,fe]),ve=n.useCallback((function(){var e,o,s=!(null===(e=le.current)||void 0===e||!e.contains(document.activeElement));(re(null),J(!1),null==E||E(),s)&&(null===(o=X.current)||void 0===o||o.focus({preventScroll:!0}))}),[E]),Ce=n.useCallback((function(e){re(0===e.detail?"palette":null),oe(!0)}),[]),ke=n.useCallback((function(e){re(0===e.detail?"picker":null),oe(!1)}),[]),xe=n.useCallback((function(){return re(null)}),[]),ye=n.useCallback((function(e){return ae(e.rgb)}),[]),ge=n.useCallback((function(e){var o="hex"===s?p.channelsToHex(e,G):p.channelsToRgba(e,G);null==z||z(o)}),[s,z,G]),Oe=n.useCallback((function(e){ae(e),ge(e)}),[ge]),Pe=q.useChromePickerAccessibility({color:ue,enableAlpha:G,isActive:!ee,onChange:Oe}),De=Pe.pickerRef,Fe=Pe.onKeyDown;n.useEffect((function(){var e;if("picker"===ce&&!ee){var o=null===(e=De.current)||void 0===e?void 0:e.querySelector('[data-color-picker-control="saturation"]');o&&(o.focus({preventScroll:!0}),xe())}}),[xe,ce,ee,De]);var Ne=n.useCallback((function(e){var o=Number(e);if(!(Number.isNaN(o)||o<0||o>100)){var s=y(y({},U),{},{a:o/100});ge(s)}}),[U,ge]),Se=n.useCallback((function(e){ge(e.rgb)}),[ge]),Te=n.useCallback((function(e){var o=U.a||1,s=G&&0===e.a?0:o;ge(y(y({},e),{},{a:s}))}),[ge,U.a,G]),Ae=n.useCallback((function(){setTimeout((function(){var e,o;J(!1),null===(e=document.activeElement)||void 0===e||null===(o=e.blur)||void 0===o||o.call(e)}),0)}),[]),we=n.useMemo((function(){return r.throttle((function(e){var o=String(Math.round(e));Ne(o)}),100)}),[Ne]);n.useEffect((function(){ae(U)}),[U]),n.useEffect((function(){Z&&oe(!0)}),[Z]);var Me=String(Math.round(100*ue.a)),Ee=(null==N?void 0:N.startsWith("top"))||(null==N?void 0:N.startsWith("bottom")),Re=(null==N?void 0:N.startsWith("left"))||(null==N?void 0:N.startsWith("right")),Be=qe?b.jsxs(b.Fragment,{children:[b.jsx("label",{id:pe,htmlFor:de,children:"string"==typeof x?b.jsx(t.TextInputNext.Label,{children:x}):x}),b.jsx("span",{id:je,hidden:!0,children:"Opacity"})]}):void 0,ze=n.useMemo((function(){return qe?{id:de,"aria-labelledby":"".concat(pe," ").concat(je)}:{id:de,"aria-label":"Opacity"}}),[qe,de,pe,je]);return b.jsxs(b.Fragment,{children:[b.jsx(t.TextInputNext,{label:Be,labelPlacement:D,disabled:T,size:w,rootTagName:"div",prefix:b.jsxs(b.Fragment,{children:[b.jsxs("div",{className:f.fakeValue,children:[Me,b.jsx("span",{className:f.fakeValuePercent,children:"%"})]}),b.jsx("div",{ref:X,className:k.default(f.indicator,0===ue.a&&f.transparent,H.indicator),style:{"--corvaui-colorpicker-indicatorcolor":p.channelsToHex(ue,!1)},onClick:T?void 0:Ie,onKeyDown:he,role:"button","aria-label":qe?void 0:"Color picker","aria-labelledby":qe?pe:void 0,"aria-expanded":Z,"aria-disabled":T,tabIndex:T?-1:0})]}),suffix:!Z&&G&&!W&&!T&&b.jsx(j.OpacityDragTracker,{value:Number(Me),onDrag:we,onDragEnd:Ae}),className:k.default(f.root,g[w],!G&&f.noAlpha,h),testId:S,inputContainerRef:Q,value:Me,onChange:Ne,onFocus:be,inputType:"number",inputMode:"numeric",elementsClassNames:H,htmlAttributes:ze}),b.jsxs(u.Popover,{ref:le,anchorEl:Q.current,open:Z,onClose:ve,placement:N,className:k.default(f.popover,Ee&&f.marginVertical,Re&&f.marginHorizontal,0===ue.a&&f.isTransparent,H.popover),children:[ee?b.jsx(d.Swatches,{onChange:Te,value:U,addTransparent:G,autoFocus:"palette"===ce,onAutoFocus:xe}):b.jsx("div",{ref:De,className:f.pickerContainer,onKeyDown:Fe,children:b.jsx(c.ChromePicker,{color:ue,onChange:ye,onChangeComplete:Se,disableAlpha:!G,className:f.picker})}),b.jsxs("div",{className:f.switchButtons,children:[b.jsx(l.Tooltip,{title:"Palette",children:b.jsx(a.ButtonIcon,{ariaLabel:"Show color palette",size:"medium",type:ee?"secondary":"tertiary",onClick:Ce,children:b.jsx(I.PaletteIcon,{})})}),b.jsx(l.Tooltip,{title:"Pick your own",children:b.jsx(a.ButtonIcon,{ariaLabel:"Show custom color picker",size:"medium",type:ee?"tertiary":"secondary",onClick:ke,children:b.jsx(I.PickerIcon,{})})})]})]}),Z&&G&&!W&&b.jsx(m.Popper,{open:Z,anchorEl:Q.current,className:f.dragTrackerPopper,placement:"right",children:b.jsx(j.OpacityDragTracker,{onDrag:we,onDragEnd:Ae})})]})};
|
|
2
2
|
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.js","sources":["../../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport {\n CSSProperties,\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChromePicker, ColorResult } from 'react-color';\nimport { throttle } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { TextInputNext, TextInputNextProps } from '../TextInputNext';\nimport { Popover, PopoverProps } from '../Popover';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Tooltip } from '../Tooltip';\nimport { Popper } from '../Popper';\n\nimport { Swatches } from './Swatches';\nimport { channelsToHex, channelsToRgba, ColorChannels, defaultColor, parseColor } from './utils';\nimport { OpacityDragTracker } from './OpacityDragtracker';\nimport { useChromePickerAccessibility } from './useChromePickerAccessibility';\n\nimport styles from './ColorPicker.scss';\n\nimport { PaletteIcon, PickerIcon } from '~/icons';\n\nexport type ColorPickerProps = {\n value?: string;\n onChange?: (value: string) => void;\n\n size?: TextInputNextProps['size'];\n label?: TextInputNextProps['label'];\n labelPlacement?: TextInputNextProps['labelPlacement'];\n disabled?: boolean;\n /**\n * Disables drag to change opacity functinality\n */\n disableOpacityDrag?: boolean;\n /**\n * Determines base format of the colour `rgb(RRR, GGG, BBB[, AAA])` or `#RRGGBB[AA]`\n */\n format?: 'rgb' | 'hex';\n /**\n * Allows user to control color's opacity, adds alpha channel to resulting color string\n */\n enableAlpha?: boolean;\n\n popoverPlacement?: PopoverProps['placement'];\n\n onOpen?: () => void;\n onClose?: () => void;\n\n elementsClassNames?: Partial<\n Omit<\n Required<TextInputNextProps>['elementsClassNames'],\n 'message' | 'numberStepButtons' | 'prefix' | 'suffix'\n > &\n Record<'indicator' | 'popover', string>\n >;\n\n className?: string;\n testId?: string;\n};\n\nconst SizeToClassMap: Record<Required<ColorPickerProps>['size'], string> = {\n small: styles.small,\n medium: styles.medium,\n large: styles.large,\n};\n\ntype FocusTarget = 'palette' | 'picker';\n\nexport const ColorPicker = ({\n format = 'hex',\n className,\n label,\n labelPlacement = 'top',\n popoverPlacement = 'bottom-start',\n testId,\n disabled,\n size = 'small',\n onOpen,\n onClose,\n value = defaultColor,\n onChange,\n disableOpacityDrag,\n enableAlpha = false,\n elementsClassNames = {},\n}: ColorPickerProps) => {\n const inputElementsClassNames = useMemo<TextInputNextProps['elementsClassNames']>(\n () => ({\n input: classNames(styles.input, elementsClassNames.input),\n inputContainer: classNames(styles.inputContainer, elementsClassNames.inputContainer),\n label: classNames(styles.label, elementsClassNames.label),\n prefix: styles.prefixContainer,\n suffix: styles.suffixContainer,\n numberStepButtons: styles.numberStepButtons,\n }),\n [elementsClassNames.input, elementsClassNames.inputContainer, elementsClassNames.label]\n );\n\n const valueChannels = useMemo(() => {\n try {\n const channels = parseColor(value);\n\n return { ...channels, a: enableAlpha ? channels.a : 1 };\n } catch (_) {\n return parseColor(defaultColor);\n }\n }, [value, enableAlpha]);\n\n const [isMenuOpen, setIsOpen] = useState(false);\n const inputContainerRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLDivElement>(null);\n const [isSwatches, setIsSwatches] = useState(true);\n const [focusTarget, setFocusTarget] = useState<FocusTarget | null>(null);\n const [internalValue, setInternalValue] = useState<ColorChannels>(valueChannels);\n const popoverRef = useRef<HTMLDivElement>(null);\n const accessibilityId = useMemo(() => `corva-color-picker-${uuidv4()}`, []);\n const inputId = `${accessibilityId}-opacity-input`;\n const labelId = `${accessibilityId}-label`;\n const opacityLabelId = `${accessibilityId}-opacity-label`;\n const hasLabel = Boolean(label);\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const openMenuSwatch = useCallback<MouseEventHandler>(\n e => {\n e.preventDefault();\n setFocusTarget(null);\n openMenu();\n },\n [openMenu]\n );\n\n const openMenuFocus = useCallback(() => {\n setFocusTarget(null);\n openMenu();\n }, [openMenu]);\n\n const openMenuKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (!disabled && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')) {\n event.preventDefault();\n setFocusTarget('palette');\n openMenu();\n }\n },\n [disabled, openMenu]\n );\n\n const closeMenu = useCallback(() => {\n const isFocusInPopover = !!popoverRef.current?.contains(document.activeElement);\n\n setFocusTarget(null);\n setIsOpen(false);\n onClose?.();\n\n // Return focus to the trigger so keyboard flow is not lost after Escape/outside dismiss\n if (isFocusInPopover) {\n indicatorRef.current?.focus({ preventScroll: true });\n }\n }, [onClose]);\n\n const setSwatches = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'palette' : null);\n setIsSwatches(true);\n }, []);\n\n const setPicker = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'picker' : null);\n setIsSwatches(false);\n }, []);\n\n const clearFocusTarget = useCallback(() => setFocusTarget(null), []);\n\n const onInternalValueChange = useCallback(\n (color: ColorResult) => setInternalValue(color.rgb),\n []\n );\n\n const onActualChange = useCallback(\n (color: ColorChannels) => {\n const formatted =\n format === 'hex' ? channelsToHex(color, enableAlpha) : channelsToRgba(color, enableAlpha);\n onChange?.(formatted);\n },\n [format, onChange, enableAlpha]\n );\n\n const onKeyboardPickerChange = useCallback(\n (color: ColorChannels) => {\n setInternalValue(color);\n onActualChange(color);\n },\n [onActualChange]\n );\n\n const { pickerRef, onKeyDown: onPickerKeyDown } = useChromePickerAccessibility({\n color: internalValue,\n enableAlpha,\n isActive: !isSwatches,\n onChange: onKeyboardPickerChange,\n });\n\n useEffect(() => {\n if (focusTarget !== 'picker' || isSwatches) {\n return;\n }\n\n const firstControl = pickerRef.current?.querySelector<HTMLElement>(\n '[data-color-picker-control=\"saturation\"]'\n );\n\n if (firstControl) {\n firstControl.focus({ preventScroll: true });\n clearFocusTarget();\n }\n }, [clearFocusTarget, focusTarget, isSwatches, pickerRef]);\n\n const onOpacityInputChange = useCallback(\n (opacityString: string) => {\n const opacityNumber = Number(opacityString);\n\n if (Number.isNaN(opacityNumber) || opacityNumber < 0 || opacityNumber > 100) {\n return;\n }\n\n const color = { ...valueChannels, a: opacityNumber / 100 };\n onActualChange(color);\n },\n [valueChannels, onActualChange]\n );\n\n const pickerOnChange = useCallback(\n (color: ColorResult) => {\n onActualChange(color.rgb);\n },\n [onActualChange]\n );\n\n const swatchOnChange = useCallback(\n (color: ColorChannels) => {\n const nonZeroAlpha = valueChannels.a || 1;\n const alpha = enableAlpha && color.a === 0 ? 0 : nonZeroAlpha;\n onActualChange({ ...color, a: alpha });\n },\n [onActualChange, valueChannels.a, enableAlpha]\n );\n\n // Prevents focus on opacity drag end\n const onOpacityDragEnd = useCallback(() => {\n setTimeout(() => {\n setIsOpen(false);\n (document.activeElement as HTMLElement | null)?.blur?.();\n }, 0);\n }, []);\n\n const onOpacityDrag = useMemo(\n () =>\n throttle((percent: number) => {\n const newFieldValue = String(Math.round(percent));\n onOpacityInputChange(newFieldValue);\n }, 100),\n [onOpacityInputChange]\n );\n\n useEffect(() => {\n setInternalValue(valueChannels);\n }, [valueChannels]);\n\n useEffect(() => {\n if (isMenuOpen) {\n setIsSwatches(true);\n }\n }, [isMenuOpen]);\n\n const inputValue = String(Math.round(internalValue.a * 100));\n\n const hasVerticalMargin =\n popoverPlacement?.startsWith('top') || popoverPlacement?.startsWith('bottom');\n const hasHorizontalMargin =\n popoverPlacement?.startsWith('left') || popoverPlacement?.startsWith('right');\n const accessibleLabel = hasLabel ? (\n <>\n <label id={labelId} htmlFor={inputId}>\n {typeof label === 'string' ? <TextInputNext.Label>{label}</TextInputNext.Label> : label}\n </label>\n <span id={opacityLabelId} hidden>\n Opacity\n </span>\n </>\n ) : undefined;\n const inputHtmlAttributes: TextInputNextProps['htmlAttributes'] = useMemo(\n () =>\n hasLabel\n ? {\n id: inputId,\n 'aria-labelledby': `${labelId} ${opacityLabelId}`,\n }\n : {\n id: inputId,\n 'aria-label': 'Opacity',\n },\n [hasLabel, inputId, labelId, opacityLabelId]\n );\n\n return (\n <>\n <TextInputNext\n label={accessibleLabel}\n labelPlacement={labelPlacement}\n disabled={disabled}\n size={size}\n rootTagName=\"div\"\n prefix={\n <>\n <div className={styles.fakeValue}>\n {inputValue}\n <span className={styles.fakeValuePercent}>%</span>\n </div>\n\n <div\n ref={indicatorRef}\n className={classNames(\n styles.indicator,\n internalValue.a === 0 && styles.transparent,\n elementsClassNames.indicator\n )}\n style={\n {\n '--corvaui-colorpicker-indicatorcolor': channelsToHex(internalValue, false),\n } as CSSProperties\n }\n onClick={disabled ? undefined : openMenuSwatch}\n onKeyDown={openMenuKeyDown}\n role=\"button\"\n aria-label={hasLabel ? undefined : 'Color picker'}\n aria-labelledby={hasLabel ? labelId : undefined}\n aria-expanded={isMenuOpen}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n />\n </>\n }\n suffix={\n !isMenuOpen &&\n enableAlpha &&\n !disableOpacityDrag &&\n !disabled && (\n <OpacityDragTracker\n value={Number(inputValue)}\n onDrag={onOpacityDrag}\n onDragEnd={onOpacityDragEnd}\n />\n )\n }\n className={classNames(\n styles.root,\n SizeToClassMap[size],\n !enableAlpha && styles.noAlpha,\n className\n )}\n testId={testId}\n inputContainerRef={inputContainerRef}\n value={inputValue}\n onChange={onOpacityInputChange}\n onFocus={openMenuFocus}\n inputType=\"number\"\n inputMode=\"numeric\"\n htmlAttributes={inputHtmlAttributes}\n elementsClassNames={inputElementsClassNames}\n />\n\n {/* Popover backdrop is needed for ColorPicker to work better in popovers: click outside will close the ColorPicker but not the popover */}\n <Popover\n ref={popoverRef}\n anchorEl={inputContainerRef.current}\n open={isMenuOpen}\n onClose={closeMenu}\n placement={popoverPlacement}\n className={classNames(\n styles.popover,\n hasVerticalMargin && styles.marginVertical,\n hasHorizontalMargin && styles.marginHorizontal,\n internalValue.a === 0 && styles.isTransparent,\n elementsClassNames.popover\n )}\n >\n {isSwatches ? (\n <Swatches\n onChange={swatchOnChange}\n value={valueChannels}\n addTransparent={enableAlpha}\n autoFocus={focusTarget === 'palette'}\n onAutoFocus={clearFocusTarget}\n />\n ) : (\n <div ref={pickerRef} className={styles.pickerContainer} onKeyDown={onPickerKeyDown}>\n <ChromePicker\n color={internalValue}\n onChange={onInternalValueChange}\n onChangeComplete={pickerOnChange}\n disableAlpha={!enableAlpha}\n className={styles.picker}\n />\n </div>\n )}\n <div className={styles.switchButtons}>\n <Tooltip title=\"Palette\">\n <ButtonIcon\n ariaLabel=\"Show color palette\"\n size=\"medium\"\n type={isSwatches ? 'secondary' : 'tertiary'}\n onClick={setSwatches}\n >\n <PaletteIcon />\n </ButtonIcon>\n </Tooltip>\n <Tooltip title=\"Pick your own\">\n <ButtonIcon\n ariaLabel=\"Show custom color picker\"\n size=\"medium\"\n type={!isSwatches ? 'secondary' : 'tertiary'}\n onClick={setPicker}\n >\n <PickerIcon />\n </ButtonIcon>\n </Tooltip>\n </div>\n </Popover>\n\n {/* Opacity Drag Tracker should work even with popover open with a backdrop */}\n {isMenuOpen && enableAlpha && !disableOpacityDrag && (\n <Popper\n open={isMenuOpen}\n anchorEl={inputContainerRef.current}\n className={styles.dragTrackerPopper}\n placement=\"right\"\n >\n <OpacityDragTracker onDrag={onOpacityDrag} onDragEnd={onOpacityDragEnd} />\n </Popper>\n )}\n </>\n );\n};\n"],"names":["SizeToClassMap","small","styles","medium","large","_ref","_ref$format","format","className","label","_ref$labelPlacement","labelPlacement","_ref$popoverPlacement","popoverPlacement","testId","disabled","_ref$size","size","onOpen","onClose","_ref$value","value","defaultColor","onChange","disableOpacityDrag","_ref$enableAlpha","enableAlpha","_ref$elementsClassNam","elementsClassNames","inputElementsClassNames","useMemo","input","classNames","inputContainer","prefix","prefixContainer","suffix","suffixContainer","numberStepButtons","valueChannels","channels","parseColor","_objectSpread","a","_","useState","_useState2","_slicedToArray","_useState","isMenuOpen","setIsOpen","inputContainerRef","useRef","indicatorRef","_useState4","_useState3","isSwatches","setIsSwatches","_useState6","_useState5","focusTarget","setFocusTarget","_useState8","_useState7","internalValue","setInternalValue","popoverRef","accessibilityId","concat","uuidv4","v4","inputId","labelId","opacityLabelId","hasLabel","Boolean","openMenu","useCallback","openMenuSwatch","e","preventDefault","openMenuFocus","openMenuKeyDown","event","key","closeMenu","_popoverRef$current","_indicatorRef$current","isFocusInPopover","current","contains","document","activeElement","focus","preventScroll","setSwatches","detail","setPicker","clearFocusTarget","onInternalValueChange","color","rgb","onActualChange","formatted","channelsToHex","channelsToRgba","onKeyboardPickerChange","_useChromePickerAcces","useChromePickerAccessibility","isActive","pickerRef","onPickerKeyDown","onKeyDown","useEffect","_pickerRef$current","firstControl","querySelector","onOpacityInputChange","opacityString","opacityNumber","Number","isNaN","pickerOnChange","swatchOnChange","nonZeroAlpha","alpha","onOpacityDragEnd","setTimeout","_document$activeEleme","_document$activeEleme2","blur","call","onOpacityDrag","throttle","percent","newFieldValue","String","Math","round","inputValue","hasVerticalMargin","startsWith","hasHorizontalMargin","accessibleLabel","_jsxs","jsxs","_Fragment","children","_jsx","jsx","id","htmlFor","TextInputNext","Label","hidden","undefined","inputHtmlAttributes","rootTagName","fakeValue","fakeValuePercent","ref","indicator","transparent","style","onClick","role","tabIndex","OpacityDragTracker","onDrag","onDragEnd","root","noAlpha","onFocus","inputType","inputMode","htmlAttributes","Popover","anchorEl","open","placement","popover","marginVertical","marginHorizontal","isTransparent","Swatches","addTransparent","autoFocus","onAutoFocus","pickerContainer","ChromePicker","onChangeComplete","disableAlpha","picker","switchButtons","Tooltip","title","ButtonIcon","ariaLabel","type","PaletteIcon","PickerIcon","Popper","dragTrackerPopper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","sources":["../../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport {\n CSSProperties,\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChromePicker, ColorResult } from 'react-color';\nimport { throttle } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { TextInputNext, TextInputNextProps } from '../TextInputNext';\nimport { Popover, PopoverProps } from '../Popover';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Tooltip } from '../Tooltip';\nimport { Popper } from '../Popper';\n\nimport { Swatches } from './Swatches';\nimport { channelsToHex, channelsToRgba, ColorChannels, defaultColor, parseColor } from './utils';\nimport { OpacityDragTracker } from './OpacityDragtracker';\nimport { useChromePickerAccessibility } from './useChromePickerAccessibility';\n\nimport styles from './ColorPicker.scss';\n\nimport { PaletteIcon, PickerIcon } from '~/icons';\n\nexport type ColorPickerProps = {\n value?: string;\n onChange?: (value: string) => void;\n\n size?: TextInputNextProps['size'];\n label?: TextInputNextProps['label'];\n labelPlacement?: TextInputNextProps['labelPlacement'];\n disabled?: boolean;\n /**\n * Disables drag to change opacity functinality\n */\n disableOpacityDrag?: boolean;\n /**\n * Determines base format of the colour `rgb(RRR, GGG, BBB[, AAA])` or `#RRGGBB[AA]`\n */\n format?: 'rgb' | 'hex';\n /**\n * Allows user to control color's opacity, adds alpha channel to resulting color string\n */\n enableAlpha?: boolean;\n\n popoverPlacement?: PopoverProps['placement'];\n\n onOpen?: () => void;\n onClose?: () => void;\n\n /**\n * An escape hatch to tweak styling of internal elements\n */\n elementsClassNames?: Partial<\n Omit<\n Required<TextInputNextProps>['elementsClassNames'],\n 'message' | 'numberStepButtons' | 'prefix' | 'suffix'\n > &\n Record<'indicator' | 'popover', string>\n >;\n\n className?: string;\n testId?: string;\n};\n\nconst SizeToClassMap: Record<Required<ColorPickerProps>['size'], string> = {\n small: styles.small,\n medium: styles.medium,\n large: styles.large,\n};\n\nconst ownInputElementsClassNames: TextInputNextProps['elementsClassNames'] = {\n inputContainer: styles.inputContainer,\n numberStepButtons: styles.numberStepButtons,\n prefix: styles.prefixContainer,\n suffix: styles.suffixContainer,\n input: styles.input,\n label: styles.label,\n};\n\ntype FocusTarget = 'palette' | 'picker';\n\nexport const ColorPicker = ({\n format = 'hex',\n className,\n label,\n labelPlacement = 'top',\n popoverPlacement = 'bottom-start',\n testId,\n disabled,\n size = 'small',\n onOpen,\n onClose,\n value = defaultColor,\n onChange,\n disableOpacityDrag,\n enableAlpha = false,\n elementsClassNames,\n}: ColorPickerProps) => {\n const valueChannels = useMemo(() => {\n try {\n const channels = parseColor(value);\n\n return { ...channels, a: enableAlpha ? channels.a : 1 };\n } catch (_) {\n return parseColor(defaultColor);\n }\n }, [value, enableAlpha]);\n\n const realElementsClassNames = useMemo((): Required<ColorPickerProps>['elementsClassNames'] => {\n return elementsClassNames\n ? Object.entries(elementsClassNames).reduce<Required<ColorPickerProps>['elementsClassNames']>(\n (acc, pair) => {\n const [key, value] = pair as [\n keyof Required<ColorPickerProps>['elementsClassNames'],\n string\n ];\n return {\n ...acc,\n [key]: acc[key] ? classNames(acc[key], value) : value,\n };\n },\n {\n ...ownInputElementsClassNames,\n }\n )\n : ownInputElementsClassNames;\n }, [elementsClassNames]);\n\n const [isMenuOpen, setIsOpen] = useState(false);\n const inputContainerRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLDivElement>(null);\n const [isSwatches, setIsSwatches] = useState(true);\n const [focusTarget, setFocusTarget] = useState<FocusTarget | null>(null);\n const [internalValue, setInternalValue] = useState<ColorChannels>(valueChannels);\n const popoverRef = useRef<HTMLDivElement>(null);\n const accessibilityId = useMemo(() => `corva-color-picker-${uuidv4()}`, []);\n const inputId = `${accessibilityId}-opacity-input`;\n const labelId = `${accessibilityId}-label`;\n const opacityLabelId = `${accessibilityId}-opacity-label`;\n const hasLabel = Boolean(label);\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const openMenuSwatch = useCallback<MouseEventHandler>(\n e => {\n e.preventDefault();\n setFocusTarget(null);\n openMenu();\n },\n [openMenu]\n );\n\n const openMenuFocus = useCallback(() => {\n setFocusTarget(null);\n openMenu();\n }, [openMenu]);\n\n const openMenuKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (!disabled && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')) {\n event.preventDefault();\n setFocusTarget('palette');\n openMenu();\n }\n },\n [disabled, openMenu]\n );\n\n const closeMenu = useCallback(() => {\n const isFocusInPopover = !!popoverRef.current?.contains(document.activeElement);\n\n setFocusTarget(null);\n setIsOpen(false);\n onClose?.();\n\n // Return focus to the trigger so keyboard flow is not lost after Escape/outside dismiss\n if (isFocusInPopover) {\n indicatorRef.current?.focus({ preventScroll: true });\n }\n }, [onClose]);\n\n const setSwatches = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'palette' : null);\n setIsSwatches(true);\n }, []);\n\n const setPicker = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'picker' : null);\n setIsSwatches(false);\n }, []);\n\n const clearFocusTarget = useCallback(() => setFocusTarget(null), []);\n\n const onInternalValueChange = useCallback(\n (color: ColorResult) => setInternalValue(color.rgb),\n []\n );\n\n const onActualChange = useCallback(\n (color: ColorChannels) => {\n const formatted =\n format === 'hex' ? channelsToHex(color, enableAlpha) : channelsToRgba(color, enableAlpha);\n onChange?.(formatted);\n },\n [format, onChange, enableAlpha]\n );\n\n const onKeyboardPickerChange = useCallback(\n (color: ColorChannels) => {\n setInternalValue(color);\n onActualChange(color);\n },\n [onActualChange]\n );\n\n const { pickerRef, onKeyDown: onPickerKeyDown } = useChromePickerAccessibility({\n color: internalValue,\n enableAlpha,\n isActive: !isSwatches,\n onChange: onKeyboardPickerChange,\n });\n\n useEffect(() => {\n if (focusTarget !== 'picker' || isSwatches) {\n return;\n }\n\n const firstControl = pickerRef.current?.querySelector<HTMLElement>(\n '[data-color-picker-control=\"saturation\"]'\n );\n\n if (firstControl) {\n firstControl.focus({ preventScroll: true });\n clearFocusTarget();\n }\n }, [clearFocusTarget, focusTarget, isSwatches, pickerRef]);\n\n const onOpacityInputChange = useCallback(\n (opacityString: string) => {\n const opacityNumber = Number(opacityString);\n\n if (Number.isNaN(opacityNumber) || opacityNumber < 0 || opacityNumber > 100) {\n return;\n }\n\n const color = { ...valueChannels, a: opacityNumber / 100 };\n onActualChange(color);\n },\n [valueChannels, onActualChange]\n );\n\n const pickerOnChange = useCallback(\n (color: ColorResult) => {\n onActualChange(color.rgb);\n },\n [onActualChange]\n );\n\n const swatchOnChange = useCallback(\n (color: ColorChannels) => {\n const nonZeroAlpha = valueChannels.a || 1;\n const alpha = enableAlpha && color.a === 0 ? 0 : nonZeroAlpha;\n onActualChange({ ...color, a: alpha });\n },\n [onActualChange, valueChannels.a, enableAlpha]\n );\n\n // Prevents focus on opacity drag end\n const onOpacityDragEnd = useCallback(() => {\n setTimeout(() => {\n setIsOpen(false);\n (document.activeElement as HTMLElement | null)?.blur?.();\n }, 0);\n }, []);\n\n const onOpacityDrag = useMemo(\n () =>\n throttle((percent: number) => {\n const newFieldValue = String(Math.round(percent));\n onOpacityInputChange(newFieldValue);\n }, 100),\n [onOpacityInputChange]\n );\n\n useEffect(() => {\n setInternalValue(valueChannels);\n }, [valueChannels]);\n\n useEffect(() => {\n if (isMenuOpen) {\n setIsSwatches(true);\n }\n }, [isMenuOpen]);\n\n const inputValue = String(Math.round(internalValue.a * 100));\n\n const hasVerticalMargin =\n popoverPlacement?.startsWith('top') || popoverPlacement?.startsWith('bottom');\n const hasHorizontalMargin =\n popoverPlacement?.startsWith('left') || popoverPlacement?.startsWith('right');\n const accessibleLabel = hasLabel ? (\n <>\n <label id={labelId} htmlFor={inputId}>\n {typeof label === 'string' ? <TextInputNext.Label>{label}</TextInputNext.Label> : label}\n </label>\n <span id={opacityLabelId} hidden>\n Opacity\n </span>\n </>\n ) : undefined;\n const inputHtmlAttributes: TextInputNextProps['htmlAttributes'] = useMemo(\n () =>\n hasLabel\n ? {\n id: inputId,\n 'aria-labelledby': `${labelId} ${opacityLabelId}`,\n }\n : {\n id: inputId,\n 'aria-label': 'Opacity',\n },\n [hasLabel, inputId, labelId, opacityLabelId]\n );\n\n return (\n <>\n <TextInputNext\n label={accessibleLabel}\n labelPlacement={labelPlacement}\n disabled={disabled}\n size={size}\n rootTagName=\"div\"\n prefix={\n <>\n <div className={styles.fakeValue}>\n {inputValue}\n <span className={styles.fakeValuePercent}>%</span>\n </div>\n\n <div\n ref={indicatorRef}\n className={classNames(\n styles.indicator,\n internalValue.a === 0 && styles.transparent,\n realElementsClassNames.indicator\n )}\n style={\n {\n '--corvaui-colorpicker-indicatorcolor': channelsToHex(internalValue, false),\n } as CSSProperties\n }\n onClick={disabled ? undefined : openMenuSwatch}\n onKeyDown={openMenuKeyDown}\n role=\"button\"\n aria-label={hasLabel ? undefined : 'Color picker'}\n aria-labelledby={hasLabel ? labelId : undefined}\n aria-expanded={isMenuOpen}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n />\n </>\n }\n suffix={\n !isMenuOpen &&\n enableAlpha &&\n !disableOpacityDrag &&\n !disabled && (\n <OpacityDragTracker\n value={Number(inputValue)}\n onDrag={onOpacityDrag}\n onDragEnd={onOpacityDragEnd}\n />\n )\n }\n className={classNames(\n styles.root,\n SizeToClassMap[size],\n !enableAlpha && styles.noAlpha,\n className\n )}\n testId={testId}\n inputContainerRef={inputContainerRef}\n value={inputValue}\n onChange={onOpacityInputChange}\n onFocus={openMenuFocus}\n inputType=\"number\"\n inputMode=\"numeric\"\n elementsClassNames={realElementsClassNames}\n htmlAttributes={inputHtmlAttributes}\n />\n\n {/* Popover backdrop is needed for ColorPicker to work better in popovers: click outside will close the ColorPicker but not the popover */}\n <Popover\n ref={popoverRef}\n anchorEl={inputContainerRef.current}\n open={isMenuOpen}\n onClose={closeMenu}\n placement={popoverPlacement}\n className={classNames(\n styles.popover,\n hasVerticalMargin && styles.marginVertical,\n hasHorizontalMargin && styles.marginHorizontal,\n internalValue.a === 0 && styles.isTransparent,\n realElementsClassNames.popover\n )}\n >\n {isSwatches ? (\n <Swatches\n onChange={swatchOnChange}\n value={valueChannels}\n addTransparent={enableAlpha}\n autoFocus={focusTarget === 'palette'}\n onAutoFocus={clearFocusTarget}\n />\n ) : (\n <div ref={pickerRef} className={styles.pickerContainer} onKeyDown={onPickerKeyDown}>\n <ChromePicker\n color={internalValue}\n onChange={onInternalValueChange}\n onChangeComplete={pickerOnChange}\n disableAlpha={!enableAlpha}\n className={styles.picker}\n />\n </div>\n )}\n <div className={styles.switchButtons}>\n <Tooltip title=\"Palette\">\n <ButtonIcon\n ariaLabel=\"Show color palette\"\n size=\"medium\"\n type={isSwatches ? 'secondary' : 'tertiary'}\n onClick={setSwatches}\n >\n <PaletteIcon />\n </ButtonIcon>\n </Tooltip>\n <Tooltip title=\"Pick your own\">\n <ButtonIcon\n ariaLabel=\"Show custom color picker\"\n size=\"medium\"\n type={!isSwatches ? 'secondary' : 'tertiary'}\n onClick={setPicker}\n >\n <PickerIcon />\n </ButtonIcon>\n </Tooltip>\n </div>\n </Popover>\n\n {/* Opacity Drag Tracker should work even with popover open with a backdrop */}\n {isMenuOpen && enableAlpha && !disableOpacityDrag && (\n <Popper\n open={isMenuOpen}\n anchorEl={inputContainerRef.current}\n className={styles.dragTrackerPopper}\n placement=\"right\"\n >\n <OpacityDragTracker onDrag={onOpacityDrag} onDragEnd={onOpacityDragEnd} />\n </Popper>\n )}\n </>\n );\n};\n"],"names":["SizeToClassMap","small","styles","medium","large","ownInputElementsClassNames","inputContainer","numberStepButtons","prefix","prefixContainer","suffix","suffixContainer","input","label","_ref","_ref$format","format","className","_ref$labelPlacement","labelPlacement","_ref$popoverPlacement","popoverPlacement","testId","disabled","_ref$size","size","onOpen","onClose","_ref$value","value","defaultColor","onChange","disableOpacityDrag","_ref$enableAlpha","enableAlpha","elementsClassNames","valueChannels","useMemo","channels","parseColor","_objectSpread","a","_","realElementsClassNames","Object","entries","reduce","acc","pair","_ref2","_ref3","_slicedToArray","key","classNames","useState","_useState2","_useState","isMenuOpen","setIsOpen","inputContainerRef","useRef","indicatorRef","_useState4","_useState3","isSwatches","setIsSwatches","_useState6","_useState5","focusTarget","setFocusTarget","_useState8","_useState7","internalValue","setInternalValue","popoverRef","accessibilityId","concat","uuidv4","v4","inputId","labelId","opacityLabelId","hasLabel","Boolean","openMenu","useCallback","openMenuSwatch","e","preventDefault","openMenuFocus","openMenuKeyDown","event","closeMenu","_popoverRef$current","_indicatorRef$current","isFocusInPopover","current","contains","document","activeElement","focus","preventScroll","setSwatches","detail","setPicker","clearFocusTarget","onInternalValueChange","color","rgb","onActualChange","formatted","channelsToHex","channelsToRgba","onKeyboardPickerChange","_useChromePickerAcces","useChromePickerAccessibility","isActive","pickerRef","onPickerKeyDown","onKeyDown","useEffect","_pickerRef$current","firstControl","querySelector","onOpacityInputChange","opacityString","opacityNumber","Number","isNaN","pickerOnChange","swatchOnChange","nonZeroAlpha","alpha","onOpacityDragEnd","setTimeout","_document$activeEleme","_document$activeEleme2","blur","call","onOpacityDrag","throttle","percent","newFieldValue","String","Math","round","inputValue","hasVerticalMargin","startsWith","hasHorizontalMargin","accessibleLabel","_jsxs","jsxs","_Fragment","children","_jsx","jsx","id","htmlFor","TextInputNext","Label","hidden","undefined","inputHtmlAttributes","rootTagName","fakeValue","fakeValuePercent","ref","indicator","transparent","style","onClick","role","tabIndex","OpacityDragTracker","onDrag","onDragEnd","root","noAlpha","onFocus","inputType","inputMode","htmlAttributes","Popover","anchorEl","open","placement","popover","marginVertical","marginHorizontal","isTransparent","Swatches","addTransparent","autoFocus","onAutoFocus","pickerContainer","ChromePicker","onChangeComplete","disableAlpha","picker","switchButtons","Tooltip","title","ButtonIcon","ariaLabel","type","PaletteIcon","PickerIcon","Popper","dragTrackerPopper"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsMultipleSelector.d.ts","sourceRoot":"","sources":["../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"names":[],"mappings":"AAwCA,KAAK,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpE,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;IAC7B;;MAEE;IACF,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC;;MAEE;IACF,KAAK,EAAE,MAAM,CAAC;IACd;;MAEE;IACF,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,eAAe,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrF;;MAEE;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;MAEE;IACF,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAC5B,CAAC;IACF;;MAEE;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,sBAAsB,iIASvB,2BAA2B,
|
|
1
|
+
{"version":3,"file":"AssetsMultipleSelector.d.ts","sourceRoot":"","sources":["../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"names":[],"mappings":"AAwCA,KAAK,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpE,MAAM,MAAM,2BAA2B,GAAG;IACxC;;OAEG;IACH,cAAc,EAAE,EAAE,GAAG,KAAK,EAAE,CAAC;IAC7B;;MAEE;IACF,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACzC;;MAEE;IACF,KAAK,EAAE,MAAM,CAAC;IACd;;MAEE;IACF,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,GAAG,YAAY,GAAG,eAAe,GAAG,KAAK,GAAG,QAAQ,CAAC;IACrF;;MAEE;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;MAEE;IACF,wBAAwB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAC5B,CAAC;IACF;;MAEE;IACF,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAAC;AAEF,QAAA,MAAM,sBAAsB,iIASvB,2BAA2B,6CAyI/B,CAAC;eAEa,sBAAsB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssetsMultipleSelector.js","sources":["../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core';\nimport { sortBy } from 'lodash';\n\nimport { Search } from '../Search';\n\nimport { mapAssetGetRequest } from '~/clients/jsonApi';\nimport { jsonaDataFormatter } from '~/utils';\nimport useLoadedData from '~/effects/useLoadedData';\n\nconst useStyles = makeStyles(theme => ({\n listbox: {\n maxHeight: 360,\n },\n paper: {\n width: 364,\n },\n footer: {\n fontSize: 12,\n color: theme.palette.primary.text6,\n lineHeight: '16.872px',\n padding: '8px 16px',\n },\n}));\n\nconst getDataFromResponseFn = (response: {\n data: unknown;\n headers?: { get(name: string): string | null };\n}) => {\n return {\n data: jsonaDataFormatter.deserialize(response.data as string) as Asset[],\n total: Number(response.headers?.get('total')) || 0,\n };\n};\nconst initialSelectedAssets: Asset[] = [];\nconst defaultQueryParams = {};\nconst DEFAULT_ASSETS_PER_PAGE = 50;\nconst initialData: { data: Asset[]; total: number } = { data: [], total: 0 };\n\ntype Asset = { id: string; name: string } & Record<string, unknown>;\nexport type AssetsMultipleSelectorProps = {\n /**\n array of asset objects with required id and name fields.\n */\n selectedAssets: [] | Asset[];\n /**\n callback fires on asset selection with array of all selected assets.\n */\n onChange: (assets: Asset[] | []) => void;\n /**\n label for autocomplete input.\n */\n label: string;\n /**\n type of asset.\n */\n type: 'program' | 'rig' | 'well' | 'frac_fleet' | 'drillout_unit' | 'pad' | 'assets';\n /**\n css for root component.\n */\n className?: string;\n /**\n custom query params for assets request like fields, per_page.\n */\n customRequestQueryParams?: Record<string, unknown> & {\n fields?: string[];\n per_page?: number | string;\n };\n /**\n material ui autocomplete classes.\n */\n classes?: any;\n};\n\nconst AssetsMultipleSelector = memo(\n ({\n selectedAssets = initialSelectedAssets,\n onChange,\n label,\n className,\n type,\n customRequestQueryParams,\n classes = {},\n }: AssetsMultipleSelectorProps) => {\n const styles = useStyles();\n\n const { isLoading, setIsLoading, data, loadData } = useLoadedData({\n loadFn: mapAssetGetRequest(type, true),\n initialData: initialData as any,\n getDataFromResponseFn,\n isCacheEnabled: true,\n });\n const { data: assetsData, total } = data ?? initialData;\n const [searchValue, setSearchValue] = useState('');\n\n useEffect(() => {\n loadAssets('', customRequestQueryParams);\n }, []);\n\n const selectedOptions: AssetsMultipleSelectorProps['selectedAssets'] & {} = useMemo(\n () =>\n selectedAssets.map(asset => ({\n ...asset,\n id: asset.id,\n label: asset.name,\n })),\n [selectedAssets]\n );\n\n const options: (Asset & { label: string })[] = useMemo(() => {\n const optionsMap: Record<string, Asset & { label: string }> = {};\n const allOptions = selectedOptions.length ? assetsData.concat(selectedOptions) : assetsData;\n allOptions.forEach((asset: Asset) => {\n optionsMap[asset.id] = {\n ...asset,\n id: asset.id,\n label: asset.name,\n };\n });\n\n return Object.values(sortBy(optionsMap, 'label'));\n }, [assetsData, selectedAssets, searchValue]);\n\n const loadAssets = useCallback(\n (\n search: string,\n customRequestQueryParams: AssetsMultipleSelectorProps['customRequestQueryParams'] = {}\n ) => {\n const params = {\n ...defaultQueryParams,\n per_page: DEFAULT_ASSETS_PER_PAGE,\n ...customRequestQueryParams,\n fields: [`${type}.name`].concat(customRequestQueryParams?.fields || []),\n };\n\n loadData({\n search,\n ...params,\n });\n },\n []\n );\n\n const handleChange = (_event: unknown, visibleSelectedOptions: Asset[], reason?: string) => {\n if (reason === 'reset') return;\n\n const newAssets = visibleSelectedOptions.map(option => {\n return {\n ...option,\n name: option.label as string,\n };\n });\n\n onChange(newAssets);\n };\n\n const onInputReset = () => {\n setSearchValue('');\n loadAssets('', customRequestQueryParams);\n };\n\n const handleInputChange = (value: string, reason: string) => {\n if (reason === 'reset' || value === '') {\n onInputReset();\n return;\n }\n\n if (value.trimStart() !== searchValue) {\n setSearchValue(value.trimStart());\n setIsLoading(true);\n loadAssets(value.trimStart(), customRequestQueryParams);\n }\n };\n\n const countNotShowedAssets = () => {\n const optionsCount = total - assetsData?.length;\n if (optionsCount === 0) return null;\n\n return optionsCount;\n };\n\n const paperFooter = useMemo(() => {\n const notShowedAssetsQuantity = countNotShowedAssets();\n return notShowedAssetsQuantity && !isLoading && searchValue ? (\n <div className={styles.footer}>\n {notShowedAssetsQuantity} additional items not displayed. Continue typing for more refined\n results.\n </div>\n ) : null;\n }, [assetsData, isLoading, !!searchValue, total]);\n\n const { listbox, paper, ...restClasses } = classes;\n\n return (\n <Search\n data-testid=\"offsetPadDropdown\"\n value={selectedOptions}\n onChange={handleChange}\n TextFieldProps={{ label }}\n // @ts-ignore\n className={className}\n classes={{\n listbox: classnames(styles.listbox, listbox),\n paper: classnames(styles.paper, paper),\n ...restClasses,\n }}\n loading={isLoading}\n options={options}\n placeholder=\"\"\n multiple\n filterSelectedOptions={false}\n AutocompleteProps={{ forcePopupIcon: true }}\n isHiddenAllOption\n onInputChangeCallback={handleInputChange}\n onInputReset={onInputReset}\n paperFooter={paperFooter}\n getOptionSelected={(option, value) => +option.id === +value.id}\n isPrioritizedSelectedOptions\n />\n );\n }\n);\n\nexport default AssetsMultipleSelector;\n"],"names":["useStyles","makeStyles","theme","listbox","maxHeight","paper","width","footer","fontSize","color","palette","primary","text6","lineHeight","padding","getDataFromResponseFn","response","_response$headers","data","jsonaDataFormatter","deserialize","total","Number","headers","get","initialSelectedAssets","defaultQueryParams","initialData","AssetsMultipleSelector","memo","_ref","_ref$selectedAssets","selectedAssets","onChange","label","className","type","customRequestQueryParams","_ref$classes","classes","styles","_useLoadedData","useLoadedData","loadFn","mapAssetGetRequest","isCacheEnabled","isLoading","setIsLoading","loadData","_ref2","assetsData","useState","_useState2","_slicedToArray","_useState","searchValue","setSearchValue","useEffect","loadAssets","selectedOptions","useMemo","map","asset","_objectSpread","id","name","options","optionsMap","length","concat","forEach","Object","values","sortBy","useCallback","search","arguments","undefined","params","per_page","fields","onInputReset","paperFooter","optionsCount","notShowedAssetsQuantity","_jsxs","children","restClasses","_excluded","_jsx","Search","value","_event","visibleSelectedOptions","reason","newAssets","option","TextFieldProps","classnames","loading","placeholder","multiple","filterSelectedOptions","AutocompleteProps","forcePopupIcon","isHiddenAllOption","onInputChangeCallback","trimStart","getOptionSelected","isPrioritizedSelectedOptions"],"mappings":"ivFAWA,IAAMA,EAAYC,GAAW,SAAAC,GAAK,MAAK,CACrCC,QAAS,CACPC,UAAW,KAEbC,MAAO,CACLC,MAAO,KAETC,OAAQ,CACNC,SAAU,GACVC,MAAOP,EAAMQ,QAAQC,QAAQC,MAC7BC,WAAY,WACZC,QAAS,YAEZ,IAEKC,EAAwB,SAACC,GAGzB,IAAAC,EACJ,MAAO,CACLC,KAAMC,EAAmBC,YAAYJ,EAASE,MAC9CG,MAAOC,OAAO,QAAAN,EAAAA,EAASO,eAAT,IAAAN,OAAA,EAAAA,EAAkBO,IAAI,WAAa,EAErD,EACMC,EAAiC,GACjCC,EAAqB,CAAA,EAErBC,EAAgD,CAAET,KAAM,GAAIG,MAAO,GAqCnEO,EAAyBC,GAC7B,SAQmCC,GAAA,IAAAC,EAAAD,EAPjCE,eAAAA,aAAiBP,EAAqBM,EACtCE,IAAAA,SACAC,IAAAA,MACAC,IAAAA,UACAC,IAAAA,KACAC,IAAAA,yBAAwBC,EAAAR,EACxBS,QAAAA,OAAO,IAAAD,EAAG,CAAA,EAAEA,EAENE,EAASxC,IAEfyC,EAAoDC,EAAc,CAChEC,OAAQC,EAAmBR,GAAM,GACjCT,YAAaA,EACbZ,sBAAAA,EACA8B,gBAAgB,IAJVC,IAAAA,UAAWC,IAAAA,aAAc7B,IAAAA,KAAM8B,IAAAA,SAMvCC,EAAoC/B,QAAAA,EAAQS,EAA9BuB,IAANhC,KAAkBG,IAAAA,MACY8B,EAAAA,EAAS,IAAGC,EAAAC,EAAAC,EAAA,GAA3CC,EAAWH,EAAA,GAAEI,EAAcJ,EAAA,GAElCK,GAAU,WACRC,EAAW,GAAIrB,EAChB,GAAE,IAEH,IAAMsB,EAAsEC,GAC1E,WAAA,OACE5B,EAAe6B,KAAI,SAAAC,GAAK,OAAAC,EAAAA,EAAA,CAAA,EACnBD,GAAK,CAAA,EAAA,CACRE,GAAIF,EAAME,GACV9B,MAAO4B,EAAMG,MAAI,MAErB,CAACjC,IAGGkC,EAAyCN,GAAQ,WACrD,IAAMO,EAAwD,CAAA,EAU9D,OATmBR,EAAgBS,OAASlB,EAAWmB,OAAOV,GAAmBT,GACtEoB,SAAQ,SAACR,GAClBK,EAAWL,EAAME,WACZF,GAAK,GAAA,CACRE,GAAIF,EAAME,GACV9B,MAAO4B,EAAMG,MAEjB,IAEOM,OAAOC,OAAOC,EAAON,EAAY,SACzC,GAAE,CAACjB,EAAYlB,EAAgBuB,IAE1BG,EAAagB,GACjB,SACEC,GAEG,IADHtC,EAAoFuC,UAAAR,OAAA,QAAAS,IAAAD,UAAA,GAAAA,UAAA,GAAA,CAAA,EAE9EE,WACDpD,GAAkB,GAAA,CACrBqD,SA9FsB,IA+FnB1C,GAAwB,GAAA,CAC3B2C,OAAQ,CAAI5C,GAAAA,OAAAA,EAAY,UAACiC,QAAOhC,aAAAA,EAAAA,EAA0B2C,SAAU,MAGtEhC,EAAQe,EAAA,CACNY,OAAAA,GACGG,GAEN,GACD,IAgBIG,EAAe,WACnBzB,EAAe,IACfE,EAAW,GAAIrB,IAuBX6C,EAActB,GAAQ,WAC1B,IAPMuB,EAOAC,EANe,KADfD,EAAe9D,GAAQ6B,aAAU,EAAVA,EAAYkB,SACV,KAExBe,EAKP,OAAOC,IAA4BtC,GAAaS,EAC9C8B,EAAA,MAAA,CAAKlD,UAAWK,EAAOjC,OAAO+E,SAAA,CAC3BF,EAAuB,gFAGxB,IACN,GAAG,CAAClC,EAAYJ,IAAaS,EAAalC,IAElClB,EAAmCoC,EAAnCpC,QAASE,EAA0BkC,EAA1BlC,MAAUkF,IAAgBhD,EAAOiD,GAElD,OACEC,EAACC,EAAM,CACL,cAAY,oBACZC,MAAOhC,EACP1B,SAtDiB,SAAC2D,EAAiBC,EAAiCC,GACtE,GAAe,UAAXA,EAAJ,CAEA,IAAMC,EAAYF,EAAuBhC,KAAI,SAAAmC,GAC3C,OAAAjC,EAAAA,EAAA,CAAA,EACKiC,GAAM,CAAA,EAAA,CACT/B,KAAM+B,EAAO9D,OAEjB,IAEAD,EAAS8D,EATe,GAsDtBE,eAAgB,CAAE/D,MAAAA,GAElBC,UAAWA,EACXI,QAAOwB,EAAA,CACL5D,QAAS+F,EAAW1D,EAAOrC,QAASA,GACpCE,MAAO6F,EAAW1D,EAAOnC,MAAOA,IAC7BkF,GAELY,QAASrD,EACToB,QAASA,EACTkC,YAAY,GACZC,UAAQ,EACRC,uBAAuB,EACvBC,kBAAmB,CAAEC,gBAAgB,GACrCC,mBAAiB,EACjBC,sBApDsB,SAACf,EAAeG,GACzB,UAAXA,GAAgC,KAAVH,EAKtBA,EAAMgB,cAAgBpD,IACxBC,EAAemC,EAAMgB,aACrB5D,GAAa,GACbW,EAAWiC,EAAMgB,YAAatE,IAP9B4C,KAmDAA,aAAcA,EACdC,YAAaA,EACb0B,kBAAmB,SAACZ,EAAQL,GAAK,OAAMK,EAAOhC,KAAQ2B,EAAM3B,EAAG,EAC/D6C,8BAA4B,GAGlC"}
|
|
1
|
+
{"version":3,"file":"AssetsMultipleSelector.js","sources":["../../../src/components/AssetsMultipleSelector/AssetsMultipleSelector.tsx"],"sourcesContent":["import { memo, useCallback, useEffect, useMemo, useState } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core';\nimport { sortBy } from 'lodash';\n\nimport { Search } from '../Search';\n\nimport { mapAssetGetRequest } from '~/clients/jsonApi';\nimport { jsonaDataFormatter } from '~/utils';\nimport useLoadedData from '~/effects/useLoadedData';\n\nconst useStyles = makeStyles(theme => ({\n listbox: {\n maxHeight: 360,\n },\n paper: {\n width: 364,\n },\n footer: {\n fontSize: 12,\n color: theme.palette.primary.text6,\n lineHeight: '16.872px',\n padding: '8px 16px',\n },\n}));\n\nconst getDataFromResponseFn = (response: {\n data: unknown;\n headers?: { get(name: string): string | null };\n}) => {\n return {\n data: jsonaDataFormatter.deserialize(response.data as string) as Asset[],\n total: Number(response.headers?.get('total')) || 0,\n };\n};\nconst initialSelectedAssets: Asset[] = [];\nconst defaultQueryParams = {};\nconst DEFAULT_ASSETS_PER_PAGE = 50;\nconst initialData: { data: Asset[]; total: number } = { data: [], total: 0 };\n\ntype Asset = { id: string; name: string } & Record<string, unknown>;\nexport type AssetsMultipleSelectorProps = {\n /**\n array of asset objects with required id and name fields.\n */\n selectedAssets: [] | Asset[];\n /**\n callback fires on asset selection with array of all selected assets.\n */\n onChange: (assets: Asset[] | []) => void;\n /**\n label for autocomplete input.\n */\n label: string;\n /**\n type of asset.\n */\n type: 'program' | 'rig' | 'well' | 'frac_fleet' | 'drillout_unit' | 'pad' | 'assets';\n /**\n css for root component.\n */\n className?: string;\n /**\n custom query params for assets request like fields, per_page.\n */\n customRequestQueryParams?: Record<string, unknown> & {\n fields?: string[];\n per_page?: number | string;\n };\n /**\n material ui autocomplete classes.\n */\n classes?: any;\n};\n\nconst AssetsMultipleSelector = memo(\n ({\n selectedAssets = initialSelectedAssets,\n onChange,\n label,\n className,\n type,\n customRequestQueryParams,\n classes = {},\n }: AssetsMultipleSelectorProps) => {\n const styles = useStyles();\n\n const { isLoading, setIsLoading, data, loadData } = useLoadedData({\n loadFn: mapAssetGetRequest(type, true),\n initialData: initialData as any,\n getDataFromResponseFn,\n isCacheEnabled: true,\n });\n const { data: assetsData, total } = data ?? initialData;\n const [searchValue, setSearchValue] = useState('');\n\n useEffect(() => {\n loadAssets('', customRequestQueryParams);\n }, []);\n\n const selectedOptions: AssetsMultipleSelectorProps['selectedAssets'] & {} = useMemo(\n () =>\n selectedAssets.map(asset => ({\n ...asset,\n id: asset.id,\n label: asset.name,\n })),\n [selectedAssets]\n );\n\n const options: (Asset & { label: string })[] = useMemo(() => {\n const optionsMap: Record<string, Asset & { label: string }> = {};\n const allOptions = selectedOptions.length ? assetsData.concat(selectedOptions) : assetsData;\n allOptions.forEach((asset: Asset) => {\n optionsMap[asset.id] = {\n ...asset,\n id: asset.id,\n label: asset.name,\n };\n });\n\n return Object.values(sortBy(optionsMap, 'label'));\n }, [assetsData, selectedAssets, searchValue]);\n\n const loadAssets = useCallback(\n (\n search: string,\n customRequestQueryParams: AssetsMultipleSelectorProps['customRequestQueryParams'] = {}\n ) => {\n const params = {\n ...defaultQueryParams,\n per_page: DEFAULT_ASSETS_PER_PAGE,\n ...customRequestQueryParams,\n fields: [`${type}.name`].concat(customRequestQueryParams?.fields || []),\n };\n\n loadData({\n search,\n ...params,\n });\n },\n []\n );\n\n const handleChange = (_event: unknown, visibleSelectedOptions: Asset[], reason?: string) => {\n if (reason === 'reset') return;\n\n const newAssets = visibleSelectedOptions.map(option => {\n return {\n ...option,\n name: option.label as string,\n };\n });\n\n onChange(newAssets);\n };\n\n const onInputReset = () => {\n setSearchValue('');\n loadAssets('', customRequestQueryParams);\n };\n\n const handleInputChange = (value: string, reason: string) => {\n if (reason === 'reset' || value === '') {\n onInputReset();\n return;\n }\n\n if (value.trimStart() !== searchValue) {\n setSearchValue(value.trimStart());\n setIsLoading(true);\n loadAssets(value.trimStart(), customRequestQueryParams);\n }\n };\n\n const countNotShowedAssets = () => {\n const optionsCount = total - assetsData?.length;\n if (optionsCount === 0) return null;\n\n return optionsCount;\n };\n\n const paperFooter = useMemo(() => {\n const notShowedAssetsQuantity = countNotShowedAssets();\n return notShowedAssetsQuantity && !isLoading && searchValue ? (\n <div className={styles.footer}>\n {notShowedAssetsQuantity} additional items not displayed. Continue typing for more refined\n results.\n </div>\n ) : null;\n }, [assetsData, isLoading, !!searchValue, total]);\n\n const { listbox, paper, ...restClasses } = classes;\n\n return (\n <Search\n data-testid=\"offsetPadDropdown\"\n value={selectedOptions}\n onChange={handleChange}\n TextFieldProps={{ label }}\n className={className}\n classes={{\n listbox: classnames(styles.listbox, listbox),\n paper: classnames(styles.paper, paper),\n ...restClasses,\n }}\n loading={isLoading}\n options={options}\n placeholder=\"\"\n multiple\n filterSelectedOptions={false}\n AutocompleteProps={{ forcePopupIcon: true }}\n isHiddenAllOption\n onInputChangeCallback={handleInputChange}\n onInputReset={onInputReset}\n paperFooter={paperFooter}\n getOptionSelected={(option, value) => +option.id === +value.id}\n isPrioritizedSelectedOptions\n />\n );\n }\n);\n\nexport default AssetsMultipleSelector;\n"],"names":["useStyles","makeStyles","theme","listbox","maxHeight","paper","width","footer","fontSize","color","palette","primary","text6","lineHeight","padding","getDataFromResponseFn","response","_response$headers","data","jsonaDataFormatter","deserialize","total","Number","headers","get","initialSelectedAssets","defaultQueryParams","initialData","AssetsMultipleSelector","memo","_ref","_ref$selectedAssets","selectedAssets","onChange","label","className","type","customRequestQueryParams","_ref$classes","classes","styles","_useLoadedData","useLoadedData","loadFn","mapAssetGetRequest","isCacheEnabled","isLoading","setIsLoading","loadData","_ref2","assetsData","useState","_useState2","_slicedToArray","_useState","searchValue","setSearchValue","useEffect","loadAssets","selectedOptions","useMemo","map","asset","_objectSpread","id","name","options","optionsMap","length","concat","forEach","Object","values","sortBy","useCallback","search","arguments","undefined","params","per_page","fields","onInputReset","paperFooter","optionsCount","notShowedAssetsQuantity","_jsxs","children","restClasses","_excluded","_jsx","Search","value","_event","visibleSelectedOptions","reason","newAssets","option","TextFieldProps","classnames","loading","placeholder","multiple","filterSelectedOptions","AutocompleteProps","forcePopupIcon","isHiddenAllOption","onInputChangeCallback","trimStart","getOptionSelected","isPrioritizedSelectedOptions"],"mappings":"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"}
|
|
@@ -22,6 +22,9 @@ export type ColorPickerProps = {
|
|
|
22
22
|
popoverPlacement?: PopoverProps['placement'];
|
|
23
23
|
onOpen?: () => void;
|
|
24
24
|
onClose?: () => void;
|
|
25
|
+
/**
|
|
26
|
+
* An escape hatch to tweak styling of internal elements
|
|
27
|
+
*/
|
|
25
28
|
elementsClassNames?: Partial<Omit<Required<TextInputNextProps>['elementsClassNames'], 'message' | 'numberStepButtons' | 'prefix' | 'suffix'> & Record<'indicator' | 'popover', string>>;
|
|
26
29
|
className?: string;
|
|
27
30
|
testId?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAiB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAW,YAAY,EAAE,MAAM,YAAY,CAAC;AAcnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gBAAgB,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,kBAAkB,CAAC,EAAE,OAAO,CAC1B,IAAI,CACF,QAAQ,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,EAClD,SAAS,GAAG,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CACtD,GACC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,MAAM,CAAC,CAC1C,CAAC;IAEF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;
|
|
1
|
+
{"version":3,"file":"ColorPicker.d.ts","sourceRoot":"","sources":["../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAiB,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAW,YAAY,EAAE,MAAM,YAAY,CAAC;AAcnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEnC,IAAI,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACpC,cAAc,CAAC,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,gBAAgB,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAC1B,IAAI,CACF,QAAQ,CAAC,kBAAkB,CAAC,CAAC,oBAAoB,CAAC,EAClD,SAAS,GAAG,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,CACtD,GACC,MAAM,CAAC,WAAW,GAAG,SAAS,EAAE,MAAM,CAAC,CAC1C,CAAC;IAEF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAmBF,eAAO,MAAM,WAAW,mLAgBrB,gBAAgB,4CAgXlB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import o from"@babel/runtime/helpers/slicedToArray";import n from"@babel/runtime/helpers/defineProperty";import s from"classnames";import{useMemo as i,useState as c,useRef as t,useCallback as r,useEffect as e}from"react";import{ChromePicker as a}from"react-color";import{throttle as l}from"lodash";import{v4 as m}from"uuid";import{TextInputNext as u}from"../TextInputNext/TextInputNext.js";import{Popover as p}from"../Popover/Popover.js";import{ButtonIcon as d}from"../ButtonIcon/ButtonIcon.js";import{Tooltip as j}from"../Tooltip/Tooltip.js";import{Popper as I}from"../Popper/Popper.js";import{Swatches as f}from"./Swatches/Swatches.js";import{parseColor as b,channelsToHex as h,channelsToRgba as v,defaultColor as C}from"./utils.js";import{OpacityDragTracker as y}from"./OpacityDragtracker/OpacityDragtracker.js";import{useChromePickerAccessibility as g}from"./useChromePickerAccessibility.js";import O from"./ColorPicker.scss.js";import{PaletteIcon as P,PickerIcon as k}from"../../icons/iconParkIcons.js";import"../../icons/customIcons/icons/AddMessage.js";import"../../icons/customIcons/icons/DragOne.js";import"../../icons/customIcons/icons/Attention.js";import"../../icons/customIcons/icons/Collapse.js";import"../../icons/customIcons/icons/Dashboard.js";import"../../icons/customIcons/icons/Expand.js";import"../../icons/customIcons/icons/FolderClosed.js";import"../../icons/customIcons/icons/FolderClosedFilled.js";import"../../icons/customIcons/icons/FolderOpened.js";import"../../icons/customIcons/icons/GreaterOrEqual.js";import"../../icons/customIcons/icons/LessOrEqual.js";import"../../icons/customIcons/icons/Search.js";import"../../icons/customIcons/icons/SearchOne.js";import"../../icons/customIcons/icons/Wellhub.js";import"../../icons/customIcons/icons/MultiRuler.js";import"../../icons/customIcons/icons/Checkbox.js";import"../../icons/customIcons/icons/CheckboxChecked.js";import"../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../icons/customIcons/icons/Radio.js";import"../../icons/customIcons/icons/RadioChecked.js";import"../../icons/customIcons/icons/SimulFrac.js";import"../../icons/customIcons/icons/ZipperFrac.js";import"../../icons/customIcons/icons/CautionFilled.js";import"../../icons/customIcons/icons/InfoRounded.js";import"../../icons/customIcons/icons/FlameFilled.js";import"../../icons/customIcons/icons/MoreApp.js";import"../../icons/customIcons/icons/Pad.js";import"../../icons/customIcons/icons/DrilloutUnit.js";import"../../icons/customIcons/icons/FracFleet.js";import"../../icons/customIcons/icons/Global.js";import"../../icons/customIcons/icons/Program.js";import"../../icons/customIcons/icons/Rig.js";import"../../icons/customIcons/icons/Well.js";import"../../icons/customIcons/icons/Gap.js";import"../../icons/customIcons/icons/Pin.js";import"../../icons/customIcons/icons/PinOne.js";import"../../icons/customIcons/icons/PinOneCrossed.js";import"../../icons/customIcons/icons/CloseOneFilled.js";import"../../icons/customIcons/icons/AttentionFilled.js";import"../../icons/customIcons/icons/CheckOneFilled.js";import"../../icons/customIcons/icons/Archive.js";import"../../icons/customIcons/icons/ArchiveCancel.js";import"../../icons/customIcons/icons/Unarchive.js";import"../../icons/customIcons/icons/Archived.js";import"../../icons/customIcons/icons/InterventionUnit.js";import"../../icons/customIcons/icons/CloudDelete.js";import"../../icons/customIcons/icons/Lasso.js";import"../../icons/customIcons/icons/Radius.js";import"../../icons/customIcons/icons/ErrorOps.js";import"../../icons/customIcons/icons/DataTypeOps.js";import"../../icons/customIcons/icons/FalsePositiveOps.js";import"../../icons/customIcons/icons/CalibrationOps.js";import"../../icons/customIcons/icons/CriticalOps.js";import"../../icons/customIcons/icons/Company.js";import"../../icons/customIcons/icons/ArchiveOne.js";import"../../icons/customIcons/icons/ParseBotFusion.js";import"../../icons/customIcons/icons/Connect.js";import"../../icons/customIcons/icons/PuzzleOne.js";import"../../icons/customIcons/icons/Feed.js";import"../../icons/customIcons/icons/Prompt.js";import"../../icons/customIcons/icons/Companies.js";import"../../icons/customIcons/icons/ClipboardAi.js";import"../../icons/customIcons/icons/Key.js";import"../../icons/customIcons/icons/AtSignCrossed.js";import"../../icons/customIcons/icons/MappingManual.js";import"../../icons/customIcons/icons/Mapping.js";import"../../icons/customIcons/icons/Metrics.js";import"../../icons/customIcons/icons/Drops.js";import"../../icons/customIcons/icons/ClipboardSearch.js";import"../../icons/customIcons/icons/Template.js";import"../../icons/customIcons/icons/ClipboardMetrics.js";import"../../icons/customIcons/icons/ClipboardBuilder.js";import"../../icons/customIcons/icons/UnitConversion.js";import"../../icons/customIcons/icons/NPT.js";import"../../icons/customIcons/icons/GuidedFrac.js";import{jsxs as D,Fragment as F,jsx as N}from"react/jsx-runtime";function x(o,n){var s=Object.keys(o);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(o);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable}))),s.push.apply(s,i)}return s}function A(o){for(var s=1;s<arguments.length;s++){var i=null!=arguments[s]?arguments[s]:{};s%2?x(Object(i),!0).forEach((function(s){n(o,s,i[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(i)):x(Object(i)).forEach((function(n){Object.defineProperty(o,n,Object.getOwnPropertyDescriptor(i,n))}))}return o}var S={small:O.small,medium:O.medium,large:O.large},w=function(n){var x=n.format,w=void 0===x?"hex":x,T=n.className,E=n.label,M=n.labelPlacement,B=void 0===M?"top":M,R=n.popoverPlacement,z=void 0===R?"bottom-start":R,W=n.testId,L=n.disabled,G=n.size,K=void 0===G?"small":G,U=n.onOpen,q=n.onClose,V=n.value,H=void 0===V?C:V,Z=n.onChange,J=n.disableOpacityDrag,Q=n.enableAlpha,X=void 0!==Q&&Q,Y=n.elementsClassNames,$=void 0===Y?{}:Y,_=i((function(){return{input:s(O.input,$.input),inputContainer:s(O.inputContainer,$.inputContainer),label:s(O.label,$.label),prefix:O.prefixContainer,suffix:O.suffixContainer,numberStepButtons:O.numberStepButtons}}),[$.input,$.inputContainer,$.label]),oo=i((function(){try{var o=b(H);return A(A({},o),{},{a:X?o.a:1})}catch(o){return b(C)}}),[H,X]),no=c(!1),so=o(no,2),io=so[0],co=so[1],to=t(null),ro=t(null),eo=c(!0),ao=o(eo,2),lo=ao[0],mo=ao[1],uo=c(null),po=o(uo,2),jo=po[0],Io=po[1],fo=c(oo),bo=o(fo,2),ho=bo[0],vo=bo[1],Co=t(null),yo=i((function(){return"corva-color-picker-".concat(m())}),[]),go="".concat(yo,"-opacity-input"),Oo="".concat(yo,"-label"),Po="".concat(yo,"-opacity-label"),ko=Boolean(E),Do=r((function(){co(!0),null==U||U()}),[U]),Fo=r((function(o){o.preventDefault(),Io(null),Do()}),[Do]),No=r((function(){Io(null),Do()}),[Do]),xo=r((function(o){L||"Enter"!==o.key&&" "!==o.key&&"ArrowDown"!==o.key||(o.preventDefault(),Io("palette"),Do())}),[L,Do]),Ao=r((function(){var o,n,s=!(null===(o=Co.current)||void 0===o||!o.contains(document.activeElement));(Io(null),co(!1),null==q||q(),s)&&(null===(n=ro.current)||void 0===n||n.focus({preventScroll:!0}))}),[q]),So=r((function(o){Io(0===o.detail?"palette":null),mo(!0)}),[]),wo=r((function(o){Io(0===o.detail?"picker":null),mo(!1)}),[]),To=r((function(){return Io(null)}),[]),Eo=r((function(o){return vo(o.rgb)}),[]),Mo=r((function(o){var n="hex"===w?h(o,X):v(o,X);null==Z||Z(n)}),[w,Z,X]),Bo=r((function(o){vo(o),Mo(o)}),[Mo]),Ro=g({color:ho,enableAlpha:X,isActive:!lo,onChange:Bo}),zo=Ro.pickerRef,Wo=Ro.onKeyDown;e((function(){var o;if("picker"===jo&&!lo){var n=null===(o=zo.current)||void 0===o?void 0:o.querySelector('[data-color-picker-control="saturation"]');n&&(n.focus({preventScroll:!0}),To())}}),[To,jo,lo,zo]);var Lo=r((function(o){var n=Number(o);if(!(Number.isNaN(n)||n<0||n>100)){var s=A(A({},oo),{},{a:n/100});Mo(s)}}),[oo,Mo]),Go=r((function(o){Mo(o.rgb)}),[Mo]),Ko=r((function(o){var n=oo.a||1,s=X&&0===o.a?0:n;Mo(A(A({},o),{},{a:s}))}),[Mo,oo.a,X]),Uo=r((function(){setTimeout((function(){var o,n;co(!1),null===(o=document.activeElement)||void 0===o||null===(n=o.blur)||void 0===n||n.call(o)}),0)}),[]),qo=i((function(){return l((function(o){var n=String(Math.round(o));Lo(n)}),100)}),[Lo]);e((function(){vo(oo)}),[oo]),e((function(){io&&mo(!0)}),[io]);var Vo=String(Math.round(100*ho.a)),Ho=(null==z?void 0:z.startsWith("top"))||(null==z?void 0:z.startsWith("bottom")),Zo=(null==z?void 0:z.startsWith("left"))||(null==z?void 0:z.startsWith("right")),Jo=ko?D(F,{children:[N("label",{id:Oo,htmlFor:go,children:"string"==typeof E?N(u.Label,{children:E}):E}),N("span",{id:Po,hidden:!0,children:"Opacity"})]}):void 0,Qo=i((function(){return ko?{id:go,"aria-labelledby":"".concat(Oo," ").concat(Po)}:{id:go,"aria-label":"Opacity"}}),[ko,go,Oo,Po]);return D(F,{children:[N(u,{label:Jo,labelPlacement:B,disabled:L,size:K,rootTagName:"div",prefix:D(F,{children:[D("div",{className:O.fakeValue,children:[Vo,N("span",{className:O.fakeValuePercent,children:"%"})]}),N("div",{ref:ro,className:s(O.indicator,0===ho.a&&O.transparent,$.indicator),style:{"--corvaui-colorpicker-indicatorcolor":h(ho,!1)},onClick:L?void 0:Fo,onKeyDown:xo,role:"button","aria-label":ko?void 0:"Color picker","aria-labelledby":ko?Oo:void 0,"aria-expanded":io,"aria-disabled":L,tabIndex:L?-1:0})]}),suffix:!io&&X&&!J&&!L&&N(y,{value:Number(Vo),onDrag:qo,onDragEnd:Uo}),className:s(O.root,S[K],!X&&O.noAlpha,T),testId:W,inputContainerRef:to,value:Vo,onChange:Lo,onFocus:No,inputType:"number",inputMode:"numeric",htmlAttributes:Qo,elementsClassNames:_}),D(p,{ref:Co,anchorEl:to.current,open:io,onClose:Ao,placement:z,className:s(O.popover,Ho&&O.marginVertical,Zo&&O.marginHorizontal,0===ho.a&&O.isTransparent,$.popover),children:[lo?N(f,{onChange:Ko,value:oo,addTransparent:X,autoFocus:"palette"===jo,onAutoFocus:To}):N("div",{ref:zo,className:O.pickerContainer,onKeyDown:Wo,children:N(a,{color:ho,onChange:Eo,onChangeComplete:Go,disableAlpha:!X,className:O.picker})}),D("div",{className:O.switchButtons,children:[N(j,{title:"Palette",children:N(d,{ariaLabel:"Show color palette",size:"medium",type:lo?"secondary":"tertiary",onClick:So,children:N(P,{})})}),N(j,{title:"Pick your own",children:N(d,{ariaLabel:"Show custom color picker",size:"medium",type:lo?"tertiary":"secondary",onClick:wo,children:N(k,{})})})]})]}),io&&X&&!J&&N(I,{open:io,anchorEl:to.current,className:O.dragTrackerPopper,placement:"right",children:N(y,{onDrag:qo,onDragEnd:Uo})})]})};export{w as ColorPicker};
|
|
1
|
+
import o from"@babel/runtime/helpers/slicedToArray";import n from"@babel/runtime/helpers/defineProperty";import s from"classnames";import{useMemo as c,useState as i,useRef as t,useCallback as r,useEffect as e}from"react";import{ChromePicker as a}from"react-color";import{throttle as m}from"lodash";import{v4 as l}from"uuid";import{TextInputNext as u}from"../TextInputNext/TextInputNext.js";import{Popover as p}from"../Popover/Popover.js";import{ButtonIcon as d}from"../ButtonIcon/ButtonIcon.js";import{Tooltip as j}from"../Tooltip/Tooltip.js";import{Popper as I}from"../Popper/Popper.js";import{Swatches as f}from"./Swatches/Swatches.js";import{parseColor as h,channelsToHex as b,channelsToRgba as v,defaultColor as C}from"./utils.js";import{OpacityDragTracker as y}from"./OpacityDragtracker/OpacityDragtracker.js";import{useChromePickerAccessibility as g}from"./useChromePickerAccessibility.js";import O from"./ColorPicker.scss.js";import{PaletteIcon as P,PickerIcon as k}from"../../icons/iconParkIcons.js";import"../../icons/customIcons/icons/AddMessage.js";import"../../icons/customIcons/icons/DragOne.js";import"../../icons/customIcons/icons/Attention.js";import"../../icons/customIcons/icons/Collapse.js";import"../../icons/customIcons/icons/Dashboard.js";import"../../icons/customIcons/icons/Expand.js";import"../../icons/customIcons/icons/FolderClosed.js";import"../../icons/customIcons/icons/FolderClosedFilled.js";import"../../icons/customIcons/icons/FolderOpened.js";import"../../icons/customIcons/icons/GreaterOrEqual.js";import"../../icons/customIcons/icons/LessOrEqual.js";import"../../icons/customIcons/icons/Search.js";import"../../icons/customIcons/icons/SearchOne.js";import"../../icons/customIcons/icons/Wellhub.js";import"../../icons/customIcons/icons/MultiRuler.js";import"../../icons/customIcons/icons/Checkbox.js";import"../../icons/customIcons/icons/CheckboxChecked.js";import"../../icons/customIcons/icons/CheckboxIndeterminate.js";import"../../icons/customIcons/icons/Radio.js";import"../../icons/customIcons/icons/RadioChecked.js";import"../../icons/customIcons/icons/SimulFrac.js";import"../../icons/customIcons/icons/ZipperFrac.js";import"../../icons/customIcons/icons/CautionFilled.js";import"../../icons/customIcons/icons/InfoRounded.js";import"../../icons/customIcons/icons/FlameFilled.js";import"../../icons/customIcons/icons/MoreApp.js";import"../../icons/customIcons/icons/Pad.js";import"../../icons/customIcons/icons/DrilloutUnit.js";import"../../icons/customIcons/icons/FracFleet.js";import"../../icons/customIcons/icons/Global.js";import"../../icons/customIcons/icons/Program.js";import"../../icons/customIcons/icons/Rig.js";import"../../icons/customIcons/icons/Well.js";import"../../icons/customIcons/icons/Gap.js";import"../../icons/customIcons/icons/Pin.js";import"../../icons/customIcons/icons/PinOne.js";import"../../icons/customIcons/icons/PinOneCrossed.js";import"../../icons/customIcons/icons/CloseOneFilled.js";import"../../icons/customIcons/icons/AttentionFilled.js";import"../../icons/customIcons/icons/CheckOneFilled.js";import"../../icons/customIcons/icons/Archive.js";import"../../icons/customIcons/icons/ArchiveCancel.js";import"../../icons/customIcons/icons/Unarchive.js";import"../../icons/customIcons/icons/Archived.js";import"../../icons/customIcons/icons/InterventionUnit.js";import"../../icons/customIcons/icons/CloudDelete.js";import"../../icons/customIcons/icons/Lasso.js";import"../../icons/customIcons/icons/Radius.js";import"../../icons/customIcons/icons/ErrorOps.js";import"../../icons/customIcons/icons/DataTypeOps.js";import"../../icons/customIcons/icons/FalsePositiveOps.js";import"../../icons/customIcons/icons/CalibrationOps.js";import"../../icons/customIcons/icons/CriticalOps.js";import"../../icons/customIcons/icons/Company.js";import"../../icons/customIcons/icons/ArchiveOne.js";import"../../icons/customIcons/icons/ParseBotFusion.js";import"../../icons/customIcons/icons/Connect.js";import"../../icons/customIcons/icons/PuzzleOne.js";import"../../icons/customIcons/icons/Feed.js";import"../../icons/customIcons/icons/Prompt.js";import"../../icons/customIcons/icons/Companies.js";import"../../icons/customIcons/icons/ClipboardAi.js";import"../../icons/customIcons/icons/Key.js";import"../../icons/customIcons/icons/AtSignCrossed.js";import"../../icons/customIcons/icons/MappingManual.js";import"../../icons/customIcons/icons/Mapping.js";import"../../icons/customIcons/icons/Metrics.js";import"../../icons/customIcons/icons/Drops.js";import"../../icons/customIcons/icons/ClipboardSearch.js";import"../../icons/customIcons/icons/Template.js";import"../../icons/customIcons/icons/ClipboardMetrics.js";import"../../icons/customIcons/icons/ClipboardBuilder.js";import"../../icons/customIcons/icons/UnitConversion.js";import"../../icons/customIcons/icons/NPT.js";import"../../icons/customIcons/icons/GuidedFrac.js";import{jsxs as D,Fragment as F,jsx as N}from"react/jsx-runtime";function x(o,n){var s=Object.keys(o);if(Object.getOwnPropertySymbols){var c=Object.getOwnPropertySymbols(o);n&&(c=c.filter((function(n){return Object.getOwnPropertyDescriptor(o,n).enumerable}))),s.push.apply(s,c)}return s}function A(o){for(var s=1;s<arguments.length;s++){var c=null!=arguments[s]?arguments[s]:{};s%2?x(Object(c),!0).forEach((function(s){n(o,s,c[s])})):Object.getOwnPropertyDescriptors?Object.defineProperties(o,Object.getOwnPropertyDescriptors(c)):x(Object(c)).forEach((function(n){Object.defineProperty(o,n,Object.getOwnPropertyDescriptor(c,n))}))}return o}var S={small:O.small,medium:O.medium,large:O.large},w={inputContainer:O.inputContainer,numberStepButtons:O.numberStepButtons,prefix:O.prefixContainer,suffix:O.suffixContainer,input:O.input,label:O.label},T=function(x){var T=x.format,E=void 0===T?"hex":T,M=x.className,B=x.label,R=x.labelPlacement,z=void 0===R?"top":R,W=x.popoverPlacement,L=void 0===W?"bottom-start":W,G=x.testId,K=x.disabled,U=x.size,q=void 0===U?"small":U,V=x.onOpen,H=x.onClose,Z=x.value,J=void 0===Z?C:Z,Q=x.onChange,X=x.disableOpacityDrag,Y=x.enableAlpha,$=void 0!==Y&&Y,_=x.elementsClassNames,oo=c((function(){try{var o=h(J);return A(A({},o),{},{a:$?o.a:1})}catch(o){return h(C)}}),[J,$]),no=c((function(){return _?Object.entries(_).reduce((function(c,i){var t=o(i,2),r=t[0],e=t[1];return A(A({},c),{},n({},r,c[r]?s(c[r],e):e))}),A({},w)):w}),[_]),so=i(!1),co=o(so,2),io=co[0],to=co[1],ro=t(null),eo=t(null),ao=i(!0),mo=o(ao,2),lo=mo[0],uo=mo[1],po=i(null),jo=o(po,2),Io=jo[0],fo=jo[1],ho=i(oo),bo=o(ho,2),vo=bo[0],Co=bo[1],yo=t(null),go=c((function(){return"corva-color-picker-".concat(l())}),[]),Oo="".concat(go,"-opacity-input"),Po="".concat(go,"-label"),ko="".concat(go,"-opacity-label"),Do=Boolean(B),Fo=r((function(){to(!0),null==V||V()}),[V]),No=r((function(o){o.preventDefault(),fo(null),Fo()}),[Fo]),xo=r((function(){fo(null),Fo()}),[Fo]),Ao=r((function(o){K||"Enter"!==o.key&&" "!==o.key&&"ArrowDown"!==o.key||(o.preventDefault(),fo("palette"),Fo())}),[K,Fo]),So=r((function(){var o,n,s=!(null===(o=yo.current)||void 0===o||!o.contains(document.activeElement));(fo(null),to(!1),null==H||H(),s)&&(null===(n=eo.current)||void 0===n||n.focus({preventScroll:!0}))}),[H]),wo=r((function(o){fo(0===o.detail?"palette":null),uo(!0)}),[]),To=r((function(o){fo(0===o.detail?"picker":null),uo(!1)}),[]),Eo=r((function(){return fo(null)}),[]),Mo=r((function(o){return Co(o.rgb)}),[]),Bo=r((function(o){var n="hex"===E?b(o,$):v(o,$);null==Q||Q(n)}),[E,Q,$]),Ro=r((function(o){Co(o),Bo(o)}),[Bo]),zo=g({color:vo,enableAlpha:$,isActive:!lo,onChange:Ro}),Wo=zo.pickerRef,Lo=zo.onKeyDown;e((function(){var o;if("picker"===Io&&!lo){var n=null===(o=Wo.current)||void 0===o?void 0:o.querySelector('[data-color-picker-control="saturation"]');n&&(n.focus({preventScroll:!0}),Eo())}}),[Eo,Io,lo,Wo]);var Go=r((function(o){var n=Number(o);if(!(Number.isNaN(n)||n<0||n>100)){var s=A(A({},oo),{},{a:n/100});Bo(s)}}),[oo,Bo]),Ko=r((function(o){Bo(o.rgb)}),[Bo]),Uo=r((function(o){var n=oo.a||1,s=$&&0===o.a?0:n;Bo(A(A({},o),{},{a:s}))}),[Bo,oo.a,$]),qo=r((function(){setTimeout((function(){var o,n;to(!1),null===(o=document.activeElement)||void 0===o||null===(n=o.blur)||void 0===n||n.call(o)}),0)}),[]),Vo=c((function(){return m((function(o){var n=String(Math.round(o));Go(n)}),100)}),[Go]);e((function(){Co(oo)}),[oo]),e((function(){io&&uo(!0)}),[io]);var Ho=String(Math.round(100*vo.a)),Zo=(null==L?void 0:L.startsWith("top"))||(null==L?void 0:L.startsWith("bottom")),Jo=(null==L?void 0:L.startsWith("left"))||(null==L?void 0:L.startsWith("right")),Qo=Do?D(F,{children:[N("label",{id:Po,htmlFor:Oo,children:"string"==typeof B?N(u.Label,{children:B}):B}),N("span",{id:ko,hidden:!0,children:"Opacity"})]}):void 0,Xo=c((function(){return Do?{id:Oo,"aria-labelledby":"".concat(Po," ").concat(ko)}:{id:Oo,"aria-label":"Opacity"}}),[Do,Oo,Po,ko]);return D(F,{children:[N(u,{label:Qo,labelPlacement:z,disabled:K,size:q,rootTagName:"div",prefix:D(F,{children:[D("div",{className:O.fakeValue,children:[Ho,N("span",{className:O.fakeValuePercent,children:"%"})]}),N("div",{ref:eo,className:s(O.indicator,0===vo.a&&O.transparent,no.indicator),style:{"--corvaui-colorpicker-indicatorcolor":b(vo,!1)},onClick:K?void 0:No,onKeyDown:Ao,role:"button","aria-label":Do?void 0:"Color picker","aria-labelledby":Do?Po:void 0,"aria-expanded":io,"aria-disabled":K,tabIndex:K?-1:0})]}),suffix:!io&&$&&!X&&!K&&N(y,{value:Number(Ho),onDrag:Vo,onDragEnd:qo}),className:s(O.root,S[q],!$&&O.noAlpha,M),testId:G,inputContainerRef:ro,value:Ho,onChange:Go,onFocus:xo,inputType:"number",inputMode:"numeric",elementsClassNames:no,htmlAttributes:Xo}),D(p,{ref:yo,anchorEl:ro.current,open:io,onClose:So,placement:L,className:s(O.popover,Zo&&O.marginVertical,Jo&&O.marginHorizontal,0===vo.a&&O.isTransparent,no.popover),children:[lo?N(f,{onChange:Uo,value:oo,addTransparent:$,autoFocus:"palette"===Io,onAutoFocus:Eo}):N("div",{ref:Wo,className:O.pickerContainer,onKeyDown:Lo,children:N(a,{color:vo,onChange:Mo,onChangeComplete:Ko,disableAlpha:!$,className:O.picker})}),D("div",{className:O.switchButtons,children:[N(j,{title:"Palette",children:N(d,{ariaLabel:"Show color palette",size:"medium",type:lo?"secondary":"tertiary",onClick:wo,children:N(P,{})})}),N(j,{title:"Pick your own",children:N(d,{ariaLabel:"Show custom color picker",size:"medium",type:lo?"tertiary":"secondary",onClick:To,children:N(k,{})})})]})]}),io&&$&&!X&&N(I,{open:io,anchorEl:ro.current,className:O.dragTrackerPopper,placement:"right",children:N(y,{onDrag:Vo,onDragEnd:qo})})]})};export{T as ColorPicker};
|
|
2
2
|
//# sourceMappingURL=ColorPicker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ColorPicker.js","sources":["../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport {\n CSSProperties,\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChromePicker, ColorResult } from 'react-color';\nimport { throttle } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { TextInputNext, TextInputNextProps } from '../TextInputNext';\nimport { Popover, PopoverProps } from '../Popover';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Tooltip } from '../Tooltip';\nimport { Popper } from '../Popper';\n\nimport { Swatches } from './Swatches';\nimport { channelsToHex, channelsToRgba, ColorChannels, defaultColor, parseColor } from './utils';\nimport { OpacityDragTracker } from './OpacityDragtracker';\nimport { useChromePickerAccessibility } from './useChromePickerAccessibility';\n\nimport styles from './ColorPicker.scss';\n\nimport { PaletteIcon, PickerIcon } from '~/icons';\n\nexport type ColorPickerProps = {\n value?: string;\n onChange?: (value: string) => void;\n\n size?: TextInputNextProps['size'];\n label?: TextInputNextProps['label'];\n labelPlacement?: TextInputNextProps['labelPlacement'];\n disabled?: boolean;\n /**\n * Disables drag to change opacity functinality\n */\n disableOpacityDrag?: boolean;\n /**\n * Determines base format of the colour `rgb(RRR, GGG, BBB[, AAA])` or `#RRGGBB[AA]`\n */\n format?: 'rgb' | 'hex';\n /**\n * Allows user to control color's opacity, adds alpha channel to resulting color string\n */\n enableAlpha?: boolean;\n\n popoverPlacement?: PopoverProps['placement'];\n\n onOpen?: () => void;\n onClose?: () => void;\n\n elementsClassNames?: Partial<\n Omit<\n Required<TextInputNextProps>['elementsClassNames'],\n 'message' | 'numberStepButtons' | 'prefix' | 'suffix'\n > &\n Record<'indicator' | 'popover', string>\n >;\n\n className?: string;\n testId?: string;\n};\n\nconst SizeToClassMap: Record<Required<ColorPickerProps>['size'], string> = {\n small: styles.small,\n medium: styles.medium,\n large: styles.large,\n};\n\ntype FocusTarget = 'palette' | 'picker';\n\nexport const ColorPicker = ({\n format = 'hex',\n className,\n label,\n labelPlacement = 'top',\n popoverPlacement = 'bottom-start',\n testId,\n disabled,\n size = 'small',\n onOpen,\n onClose,\n value = defaultColor,\n onChange,\n disableOpacityDrag,\n enableAlpha = false,\n elementsClassNames = {},\n}: ColorPickerProps) => {\n const inputElementsClassNames = useMemo<TextInputNextProps['elementsClassNames']>(\n () => ({\n input: classNames(styles.input, elementsClassNames.input),\n inputContainer: classNames(styles.inputContainer, elementsClassNames.inputContainer),\n label: classNames(styles.label, elementsClassNames.label),\n prefix: styles.prefixContainer,\n suffix: styles.suffixContainer,\n numberStepButtons: styles.numberStepButtons,\n }),\n [elementsClassNames.input, elementsClassNames.inputContainer, elementsClassNames.label]\n );\n\n const valueChannels = useMemo(() => {\n try {\n const channels = parseColor(value);\n\n return { ...channels, a: enableAlpha ? channels.a : 1 };\n } catch (_) {\n return parseColor(defaultColor);\n }\n }, [value, enableAlpha]);\n\n const [isMenuOpen, setIsOpen] = useState(false);\n const inputContainerRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLDivElement>(null);\n const [isSwatches, setIsSwatches] = useState(true);\n const [focusTarget, setFocusTarget] = useState<FocusTarget | null>(null);\n const [internalValue, setInternalValue] = useState<ColorChannels>(valueChannels);\n const popoverRef = useRef<HTMLDivElement>(null);\n const accessibilityId = useMemo(() => `corva-color-picker-${uuidv4()}`, []);\n const inputId = `${accessibilityId}-opacity-input`;\n const labelId = `${accessibilityId}-label`;\n const opacityLabelId = `${accessibilityId}-opacity-label`;\n const hasLabel = Boolean(label);\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const openMenuSwatch = useCallback<MouseEventHandler>(\n e => {\n e.preventDefault();\n setFocusTarget(null);\n openMenu();\n },\n [openMenu]\n );\n\n const openMenuFocus = useCallback(() => {\n setFocusTarget(null);\n openMenu();\n }, [openMenu]);\n\n const openMenuKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (!disabled && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')) {\n event.preventDefault();\n setFocusTarget('palette');\n openMenu();\n }\n },\n [disabled, openMenu]\n );\n\n const closeMenu = useCallback(() => {\n const isFocusInPopover = !!popoverRef.current?.contains(document.activeElement);\n\n setFocusTarget(null);\n setIsOpen(false);\n onClose?.();\n\n // Return focus to the trigger so keyboard flow is not lost after Escape/outside dismiss\n if (isFocusInPopover) {\n indicatorRef.current?.focus({ preventScroll: true });\n }\n }, [onClose]);\n\n const setSwatches = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'palette' : null);\n setIsSwatches(true);\n }, []);\n\n const setPicker = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'picker' : null);\n setIsSwatches(false);\n }, []);\n\n const clearFocusTarget = useCallback(() => setFocusTarget(null), []);\n\n const onInternalValueChange = useCallback(\n (color: ColorResult) => setInternalValue(color.rgb),\n []\n );\n\n const onActualChange = useCallback(\n (color: ColorChannels) => {\n const formatted =\n format === 'hex' ? channelsToHex(color, enableAlpha) : channelsToRgba(color, enableAlpha);\n onChange?.(formatted);\n },\n [format, onChange, enableAlpha]\n );\n\n const onKeyboardPickerChange = useCallback(\n (color: ColorChannels) => {\n setInternalValue(color);\n onActualChange(color);\n },\n [onActualChange]\n );\n\n const { pickerRef, onKeyDown: onPickerKeyDown } = useChromePickerAccessibility({\n color: internalValue,\n enableAlpha,\n isActive: !isSwatches,\n onChange: onKeyboardPickerChange,\n });\n\n useEffect(() => {\n if (focusTarget !== 'picker' || isSwatches) {\n return;\n }\n\n const firstControl = pickerRef.current?.querySelector<HTMLElement>(\n '[data-color-picker-control=\"saturation\"]'\n );\n\n if (firstControl) {\n firstControl.focus({ preventScroll: true });\n clearFocusTarget();\n }\n }, [clearFocusTarget, focusTarget, isSwatches, pickerRef]);\n\n const onOpacityInputChange = useCallback(\n (opacityString: string) => {\n const opacityNumber = Number(opacityString);\n\n if (Number.isNaN(opacityNumber) || opacityNumber < 0 || opacityNumber > 100) {\n return;\n }\n\n const color = { ...valueChannels, a: opacityNumber / 100 };\n onActualChange(color);\n },\n [valueChannels, onActualChange]\n );\n\n const pickerOnChange = useCallback(\n (color: ColorResult) => {\n onActualChange(color.rgb);\n },\n [onActualChange]\n );\n\n const swatchOnChange = useCallback(\n (color: ColorChannels) => {\n const nonZeroAlpha = valueChannels.a || 1;\n const alpha = enableAlpha && color.a === 0 ? 0 : nonZeroAlpha;\n onActualChange({ ...color, a: alpha });\n },\n [onActualChange, valueChannels.a, enableAlpha]\n );\n\n // Prevents focus on opacity drag end\n const onOpacityDragEnd = useCallback(() => {\n setTimeout(() => {\n setIsOpen(false);\n (document.activeElement as HTMLElement | null)?.blur?.();\n }, 0);\n }, []);\n\n const onOpacityDrag = useMemo(\n () =>\n throttle((percent: number) => {\n const newFieldValue = String(Math.round(percent));\n onOpacityInputChange(newFieldValue);\n }, 100),\n [onOpacityInputChange]\n );\n\n useEffect(() => {\n setInternalValue(valueChannels);\n }, [valueChannels]);\n\n useEffect(() => {\n if (isMenuOpen) {\n setIsSwatches(true);\n }\n }, [isMenuOpen]);\n\n const inputValue = String(Math.round(internalValue.a * 100));\n\n const hasVerticalMargin =\n popoverPlacement?.startsWith('top') || popoverPlacement?.startsWith('bottom');\n const hasHorizontalMargin =\n popoverPlacement?.startsWith('left') || popoverPlacement?.startsWith('right');\n const accessibleLabel = hasLabel ? (\n <>\n <label id={labelId} htmlFor={inputId}>\n {typeof label === 'string' ? <TextInputNext.Label>{label}</TextInputNext.Label> : label}\n </label>\n <span id={opacityLabelId} hidden>\n Opacity\n </span>\n </>\n ) : undefined;\n const inputHtmlAttributes: TextInputNextProps['htmlAttributes'] = useMemo(\n () =>\n hasLabel\n ? {\n id: inputId,\n 'aria-labelledby': `${labelId} ${opacityLabelId}`,\n }\n : {\n id: inputId,\n 'aria-label': 'Opacity',\n },\n [hasLabel, inputId, labelId, opacityLabelId]\n );\n\n return (\n <>\n <TextInputNext\n label={accessibleLabel}\n labelPlacement={labelPlacement}\n disabled={disabled}\n size={size}\n rootTagName=\"div\"\n prefix={\n <>\n <div className={styles.fakeValue}>\n {inputValue}\n <span className={styles.fakeValuePercent}>%</span>\n </div>\n\n <div\n ref={indicatorRef}\n className={classNames(\n styles.indicator,\n internalValue.a === 0 && styles.transparent,\n elementsClassNames.indicator\n )}\n style={\n {\n '--corvaui-colorpicker-indicatorcolor': channelsToHex(internalValue, false),\n } as CSSProperties\n }\n onClick={disabled ? undefined : openMenuSwatch}\n onKeyDown={openMenuKeyDown}\n role=\"button\"\n aria-label={hasLabel ? undefined : 'Color picker'}\n aria-labelledby={hasLabel ? labelId : undefined}\n aria-expanded={isMenuOpen}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n />\n </>\n }\n suffix={\n !isMenuOpen &&\n enableAlpha &&\n !disableOpacityDrag &&\n !disabled && (\n <OpacityDragTracker\n value={Number(inputValue)}\n onDrag={onOpacityDrag}\n onDragEnd={onOpacityDragEnd}\n />\n )\n }\n className={classNames(\n styles.root,\n SizeToClassMap[size],\n !enableAlpha && styles.noAlpha,\n className\n )}\n testId={testId}\n inputContainerRef={inputContainerRef}\n value={inputValue}\n onChange={onOpacityInputChange}\n onFocus={openMenuFocus}\n inputType=\"number\"\n inputMode=\"numeric\"\n htmlAttributes={inputHtmlAttributes}\n elementsClassNames={inputElementsClassNames}\n />\n\n {/* Popover backdrop is needed for ColorPicker to work better in popovers: click outside will close the ColorPicker but not the popover */}\n <Popover\n ref={popoverRef}\n anchorEl={inputContainerRef.current}\n open={isMenuOpen}\n onClose={closeMenu}\n placement={popoverPlacement}\n className={classNames(\n styles.popover,\n hasVerticalMargin && styles.marginVertical,\n hasHorizontalMargin && styles.marginHorizontal,\n internalValue.a === 0 && styles.isTransparent,\n elementsClassNames.popover\n )}\n >\n {isSwatches ? (\n <Swatches\n onChange={swatchOnChange}\n value={valueChannels}\n addTransparent={enableAlpha}\n autoFocus={focusTarget === 'palette'}\n onAutoFocus={clearFocusTarget}\n />\n ) : (\n <div ref={pickerRef} className={styles.pickerContainer} onKeyDown={onPickerKeyDown}>\n <ChromePicker\n color={internalValue}\n onChange={onInternalValueChange}\n onChangeComplete={pickerOnChange}\n disableAlpha={!enableAlpha}\n className={styles.picker}\n />\n </div>\n )}\n <div className={styles.switchButtons}>\n <Tooltip title=\"Palette\">\n <ButtonIcon\n ariaLabel=\"Show color palette\"\n size=\"medium\"\n type={isSwatches ? 'secondary' : 'tertiary'}\n onClick={setSwatches}\n >\n <PaletteIcon />\n </ButtonIcon>\n </Tooltip>\n <Tooltip title=\"Pick your own\">\n <ButtonIcon\n ariaLabel=\"Show custom color picker\"\n size=\"medium\"\n type={!isSwatches ? 'secondary' : 'tertiary'}\n onClick={setPicker}\n >\n <PickerIcon />\n </ButtonIcon>\n </Tooltip>\n </div>\n </Popover>\n\n {/* Opacity Drag Tracker should work even with popover open with a backdrop */}\n {isMenuOpen && enableAlpha && !disableOpacityDrag && (\n <Popper\n open={isMenuOpen}\n anchorEl={inputContainerRef.current}\n className={styles.dragTrackerPopper}\n placement=\"right\"\n >\n <OpacityDragTracker onDrag={onOpacityDrag} onDragEnd={onOpacityDragEnd} />\n </Popper>\n )}\n </>\n );\n};\n"],"names":["SizeToClassMap","small","styles","medium","large","ColorPicker","_ref","_ref$format","format","className","label","_ref$labelPlacement","labelPlacement","_ref$popoverPlacement","popoverPlacement","testId","disabled","_ref$size","size","onOpen","onClose","_ref$value","value","defaultColor","onChange","disableOpacityDrag","_ref$enableAlpha","enableAlpha","_ref$elementsClassNam","elementsClassNames","inputElementsClassNames","useMemo","input","classNames","inputContainer","prefix","prefixContainer","suffix","suffixContainer","numberStepButtons","valueChannels","channels","parseColor","_objectSpread","a","_","useState","_useState2","_slicedToArray","_useState","isMenuOpen","setIsOpen","inputContainerRef","useRef","indicatorRef","_useState4","_useState3","isSwatches","setIsSwatches","_useState6","_useState5","focusTarget","setFocusTarget","_useState8","_useState7","internalValue","setInternalValue","popoverRef","accessibilityId","concat","uuidv4","inputId","labelId","opacityLabelId","hasLabel","Boolean","openMenu","useCallback","openMenuSwatch","e","preventDefault","openMenuFocus","openMenuKeyDown","event","key","closeMenu","_popoverRef$current","_indicatorRef$current","isFocusInPopover","current","contains","document","activeElement","focus","preventScroll","setSwatches","detail","setPicker","clearFocusTarget","onInternalValueChange","color","rgb","onActualChange","formatted","channelsToHex","channelsToRgba","onKeyboardPickerChange","_useChromePickerAcces","useChromePickerAccessibility","isActive","pickerRef","onPickerKeyDown","onKeyDown","useEffect","_pickerRef$current","firstControl","querySelector","onOpacityInputChange","opacityString","opacityNumber","Number","isNaN","pickerOnChange","swatchOnChange","nonZeroAlpha","alpha","onOpacityDragEnd","setTimeout","_document$activeEleme","_document$activeEleme2","blur","call","onOpacityDrag","throttle","percent","newFieldValue","String","Math","round","inputValue","hasVerticalMargin","startsWith","hasHorizontalMargin","accessibleLabel","_jsxs","_Fragment","children","_jsx","id","htmlFor","TextInputNext","Label","hidden","undefined","inputHtmlAttributes","rootTagName","fakeValue","fakeValuePercent","ref","indicator","transparent","style","onClick","role","tabIndex","OpacityDragTracker","onDrag","onDragEnd","root","noAlpha","onFocus","inputType","inputMode","htmlAttributes","Popover","anchorEl","open","placement","popover","marginVertical","marginHorizontal","isTransparent","Swatches","addTransparent","autoFocus","onAutoFocus","pickerContainer","ChromePicker","onChangeComplete","disableAlpha","picker","switchButtons","Tooltip","title","ButtonIcon","ariaLabel","type","PaletteIcon","PickerIcon","Popper","dragTrackerPopper"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ColorPicker.js","sources":["../../../src/componentsV2/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport {\n CSSProperties,\n KeyboardEventHandler,\n MouseEventHandler,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { ChromePicker, ColorResult } from 'react-color';\nimport { throttle } from 'lodash';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { TextInputNext, TextInputNextProps } from '../TextInputNext';\nimport { Popover, PopoverProps } from '../Popover';\nimport { ButtonIcon } from '../ButtonIcon';\nimport { Tooltip } from '../Tooltip';\nimport { Popper } from '../Popper';\n\nimport { Swatches } from './Swatches';\nimport { channelsToHex, channelsToRgba, ColorChannels, defaultColor, parseColor } from './utils';\nimport { OpacityDragTracker } from './OpacityDragtracker';\nimport { useChromePickerAccessibility } from './useChromePickerAccessibility';\n\nimport styles from './ColorPicker.scss';\n\nimport { PaletteIcon, PickerIcon } from '~/icons';\n\nexport type ColorPickerProps = {\n value?: string;\n onChange?: (value: string) => void;\n\n size?: TextInputNextProps['size'];\n label?: TextInputNextProps['label'];\n labelPlacement?: TextInputNextProps['labelPlacement'];\n disabled?: boolean;\n /**\n * Disables drag to change opacity functinality\n */\n disableOpacityDrag?: boolean;\n /**\n * Determines base format of the colour `rgb(RRR, GGG, BBB[, AAA])` or `#RRGGBB[AA]`\n */\n format?: 'rgb' | 'hex';\n /**\n * Allows user to control color's opacity, adds alpha channel to resulting color string\n */\n enableAlpha?: boolean;\n\n popoverPlacement?: PopoverProps['placement'];\n\n onOpen?: () => void;\n onClose?: () => void;\n\n /**\n * An escape hatch to tweak styling of internal elements\n */\n elementsClassNames?: Partial<\n Omit<\n Required<TextInputNextProps>['elementsClassNames'],\n 'message' | 'numberStepButtons' | 'prefix' | 'suffix'\n > &\n Record<'indicator' | 'popover', string>\n >;\n\n className?: string;\n testId?: string;\n};\n\nconst SizeToClassMap: Record<Required<ColorPickerProps>['size'], string> = {\n small: styles.small,\n medium: styles.medium,\n large: styles.large,\n};\n\nconst ownInputElementsClassNames: TextInputNextProps['elementsClassNames'] = {\n inputContainer: styles.inputContainer,\n numberStepButtons: styles.numberStepButtons,\n prefix: styles.prefixContainer,\n suffix: styles.suffixContainer,\n input: styles.input,\n label: styles.label,\n};\n\ntype FocusTarget = 'palette' | 'picker';\n\nexport const ColorPicker = ({\n format = 'hex',\n className,\n label,\n labelPlacement = 'top',\n popoverPlacement = 'bottom-start',\n testId,\n disabled,\n size = 'small',\n onOpen,\n onClose,\n value = defaultColor,\n onChange,\n disableOpacityDrag,\n enableAlpha = false,\n elementsClassNames,\n}: ColorPickerProps) => {\n const valueChannels = useMemo(() => {\n try {\n const channels = parseColor(value);\n\n return { ...channels, a: enableAlpha ? channels.a : 1 };\n } catch (_) {\n return parseColor(defaultColor);\n }\n }, [value, enableAlpha]);\n\n const realElementsClassNames = useMemo((): Required<ColorPickerProps>['elementsClassNames'] => {\n return elementsClassNames\n ? Object.entries(elementsClassNames).reduce<Required<ColorPickerProps>['elementsClassNames']>(\n (acc, pair) => {\n const [key, value] = pair as [\n keyof Required<ColorPickerProps>['elementsClassNames'],\n string\n ];\n return {\n ...acc,\n [key]: acc[key] ? classNames(acc[key], value) : value,\n };\n },\n {\n ...ownInputElementsClassNames,\n }\n )\n : ownInputElementsClassNames;\n }, [elementsClassNames]);\n\n const [isMenuOpen, setIsOpen] = useState(false);\n const inputContainerRef = useRef<HTMLDivElement>(null);\n const indicatorRef = useRef<HTMLDivElement>(null);\n const [isSwatches, setIsSwatches] = useState(true);\n const [focusTarget, setFocusTarget] = useState<FocusTarget | null>(null);\n const [internalValue, setInternalValue] = useState<ColorChannels>(valueChannels);\n const popoverRef = useRef<HTMLDivElement>(null);\n const accessibilityId = useMemo(() => `corva-color-picker-${uuidv4()}`, []);\n const inputId = `${accessibilityId}-opacity-input`;\n const labelId = `${accessibilityId}-label`;\n const opacityLabelId = `${accessibilityId}-opacity-label`;\n const hasLabel = Boolean(label);\n\n const openMenu = useCallback(() => {\n setIsOpen(true);\n onOpen?.();\n }, [onOpen]);\n\n const openMenuSwatch = useCallback<MouseEventHandler>(\n e => {\n e.preventDefault();\n setFocusTarget(null);\n openMenu();\n },\n [openMenu]\n );\n\n const openMenuFocus = useCallback(() => {\n setFocusTarget(null);\n openMenu();\n }, [openMenu]);\n\n const openMenuKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n event => {\n if (!disabled && (event.key === 'Enter' || event.key === ' ' || event.key === 'ArrowDown')) {\n event.preventDefault();\n setFocusTarget('palette');\n openMenu();\n }\n },\n [disabled, openMenu]\n );\n\n const closeMenu = useCallback(() => {\n const isFocusInPopover = !!popoverRef.current?.contains(document.activeElement);\n\n setFocusTarget(null);\n setIsOpen(false);\n onClose?.();\n\n // Return focus to the trigger so keyboard flow is not lost after Escape/outside dismiss\n if (isFocusInPopover) {\n indicatorRef.current?.focus({ preventScroll: true });\n }\n }, [onClose]);\n\n const setSwatches = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'palette' : null);\n setIsSwatches(true);\n }, []);\n\n const setPicker = useCallback<MouseEventHandler<HTMLButtonElement>>(event => {\n setFocusTarget(event.detail === 0 ? 'picker' : null);\n setIsSwatches(false);\n }, []);\n\n const clearFocusTarget = useCallback(() => setFocusTarget(null), []);\n\n const onInternalValueChange = useCallback(\n (color: ColorResult) => setInternalValue(color.rgb),\n []\n );\n\n const onActualChange = useCallback(\n (color: ColorChannels) => {\n const formatted =\n format === 'hex' ? channelsToHex(color, enableAlpha) : channelsToRgba(color, enableAlpha);\n onChange?.(formatted);\n },\n [format, onChange, enableAlpha]\n );\n\n const onKeyboardPickerChange = useCallback(\n (color: ColorChannels) => {\n setInternalValue(color);\n onActualChange(color);\n },\n [onActualChange]\n );\n\n const { pickerRef, onKeyDown: onPickerKeyDown } = useChromePickerAccessibility({\n color: internalValue,\n enableAlpha,\n isActive: !isSwatches,\n onChange: onKeyboardPickerChange,\n });\n\n useEffect(() => {\n if (focusTarget !== 'picker' || isSwatches) {\n return;\n }\n\n const firstControl = pickerRef.current?.querySelector<HTMLElement>(\n '[data-color-picker-control=\"saturation\"]'\n );\n\n if (firstControl) {\n firstControl.focus({ preventScroll: true });\n clearFocusTarget();\n }\n }, [clearFocusTarget, focusTarget, isSwatches, pickerRef]);\n\n const onOpacityInputChange = useCallback(\n (opacityString: string) => {\n const opacityNumber = Number(opacityString);\n\n if (Number.isNaN(opacityNumber) || opacityNumber < 0 || opacityNumber > 100) {\n return;\n }\n\n const color = { ...valueChannels, a: opacityNumber / 100 };\n onActualChange(color);\n },\n [valueChannels, onActualChange]\n );\n\n const pickerOnChange = useCallback(\n (color: ColorResult) => {\n onActualChange(color.rgb);\n },\n [onActualChange]\n );\n\n const swatchOnChange = useCallback(\n (color: ColorChannels) => {\n const nonZeroAlpha = valueChannels.a || 1;\n const alpha = enableAlpha && color.a === 0 ? 0 : nonZeroAlpha;\n onActualChange({ ...color, a: alpha });\n },\n [onActualChange, valueChannels.a, enableAlpha]\n );\n\n // Prevents focus on opacity drag end\n const onOpacityDragEnd = useCallback(() => {\n setTimeout(() => {\n setIsOpen(false);\n (document.activeElement as HTMLElement | null)?.blur?.();\n }, 0);\n }, []);\n\n const onOpacityDrag = useMemo(\n () =>\n throttle((percent: number) => {\n const newFieldValue = String(Math.round(percent));\n onOpacityInputChange(newFieldValue);\n }, 100),\n [onOpacityInputChange]\n );\n\n useEffect(() => {\n setInternalValue(valueChannels);\n }, [valueChannels]);\n\n useEffect(() => {\n if (isMenuOpen) {\n setIsSwatches(true);\n }\n }, [isMenuOpen]);\n\n const inputValue = String(Math.round(internalValue.a * 100));\n\n const hasVerticalMargin =\n popoverPlacement?.startsWith('top') || popoverPlacement?.startsWith('bottom');\n const hasHorizontalMargin =\n popoverPlacement?.startsWith('left') || popoverPlacement?.startsWith('right');\n const accessibleLabel = hasLabel ? (\n <>\n <label id={labelId} htmlFor={inputId}>\n {typeof label === 'string' ? <TextInputNext.Label>{label}</TextInputNext.Label> : label}\n </label>\n <span id={opacityLabelId} hidden>\n Opacity\n </span>\n </>\n ) : undefined;\n const inputHtmlAttributes: TextInputNextProps['htmlAttributes'] = useMemo(\n () =>\n hasLabel\n ? {\n id: inputId,\n 'aria-labelledby': `${labelId} ${opacityLabelId}`,\n }\n : {\n id: inputId,\n 'aria-label': 'Opacity',\n },\n [hasLabel, inputId, labelId, opacityLabelId]\n );\n\n return (\n <>\n <TextInputNext\n label={accessibleLabel}\n labelPlacement={labelPlacement}\n disabled={disabled}\n size={size}\n rootTagName=\"div\"\n prefix={\n <>\n <div className={styles.fakeValue}>\n {inputValue}\n <span className={styles.fakeValuePercent}>%</span>\n </div>\n\n <div\n ref={indicatorRef}\n className={classNames(\n styles.indicator,\n internalValue.a === 0 && styles.transparent,\n realElementsClassNames.indicator\n )}\n style={\n {\n '--corvaui-colorpicker-indicatorcolor': channelsToHex(internalValue, false),\n } as CSSProperties\n }\n onClick={disabled ? undefined : openMenuSwatch}\n onKeyDown={openMenuKeyDown}\n role=\"button\"\n aria-label={hasLabel ? undefined : 'Color picker'}\n aria-labelledby={hasLabel ? labelId : undefined}\n aria-expanded={isMenuOpen}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n />\n </>\n }\n suffix={\n !isMenuOpen &&\n enableAlpha &&\n !disableOpacityDrag &&\n !disabled && (\n <OpacityDragTracker\n value={Number(inputValue)}\n onDrag={onOpacityDrag}\n onDragEnd={onOpacityDragEnd}\n />\n )\n }\n className={classNames(\n styles.root,\n SizeToClassMap[size],\n !enableAlpha && styles.noAlpha,\n className\n )}\n testId={testId}\n inputContainerRef={inputContainerRef}\n value={inputValue}\n onChange={onOpacityInputChange}\n onFocus={openMenuFocus}\n inputType=\"number\"\n inputMode=\"numeric\"\n elementsClassNames={realElementsClassNames}\n htmlAttributes={inputHtmlAttributes}\n />\n\n {/* Popover backdrop is needed for ColorPicker to work better in popovers: click outside will close the ColorPicker but not the popover */}\n <Popover\n ref={popoverRef}\n anchorEl={inputContainerRef.current}\n open={isMenuOpen}\n onClose={closeMenu}\n placement={popoverPlacement}\n className={classNames(\n styles.popover,\n hasVerticalMargin && styles.marginVertical,\n hasHorizontalMargin && styles.marginHorizontal,\n internalValue.a === 0 && styles.isTransparent,\n realElementsClassNames.popover\n )}\n >\n {isSwatches ? (\n <Swatches\n onChange={swatchOnChange}\n value={valueChannels}\n addTransparent={enableAlpha}\n autoFocus={focusTarget === 'palette'}\n onAutoFocus={clearFocusTarget}\n />\n ) : (\n <div ref={pickerRef} className={styles.pickerContainer} onKeyDown={onPickerKeyDown}>\n <ChromePicker\n color={internalValue}\n onChange={onInternalValueChange}\n onChangeComplete={pickerOnChange}\n disableAlpha={!enableAlpha}\n className={styles.picker}\n />\n </div>\n )}\n <div className={styles.switchButtons}>\n <Tooltip title=\"Palette\">\n <ButtonIcon\n ariaLabel=\"Show color palette\"\n size=\"medium\"\n type={isSwatches ? 'secondary' : 'tertiary'}\n onClick={setSwatches}\n >\n <PaletteIcon />\n </ButtonIcon>\n </Tooltip>\n <Tooltip title=\"Pick your own\">\n <ButtonIcon\n ariaLabel=\"Show custom color picker\"\n size=\"medium\"\n type={!isSwatches ? 'secondary' : 'tertiary'}\n onClick={setPicker}\n >\n <PickerIcon />\n </ButtonIcon>\n </Tooltip>\n </div>\n </Popover>\n\n {/* Opacity Drag Tracker should work even with popover open with a backdrop */}\n {isMenuOpen && enableAlpha && !disableOpacityDrag && (\n <Popper\n open={isMenuOpen}\n anchorEl={inputContainerRef.current}\n className={styles.dragTrackerPopper}\n placement=\"right\"\n >\n <OpacityDragTracker onDrag={onOpacityDrag} onDragEnd={onOpacityDragEnd} />\n </Popper>\n )}\n </>\n );\n};\n"],"names":["SizeToClassMap","small","styles","medium","large","ownInputElementsClassNames","inputContainer","numberStepButtons","prefix","prefixContainer","suffix","suffixContainer","input","label","ColorPicker","_ref","_ref$format","format","className","_ref$labelPlacement","labelPlacement","_ref$popoverPlacement","popoverPlacement","testId","disabled","_ref$size","size","onOpen","onClose","_ref$value","value","defaultColor","onChange","disableOpacityDrag","_ref$enableAlpha","enableAlpha","elementsClassNames","valueChannels","useMemo","channels","parseColor","_objectSpread","a","_","realElementsClassNames","Object","entries","reduce","acc","pair","_ref3","_slicedToArray","key","classNames","useState","_useState2","_useState","isMenuOpen","setIsOpen","inputContainerRef","useRef","indicatorRef","_useState4","_useState3","isSwatches","setIsSwatches","_useState6","_useState5","focusTarget","setFocusTarget","_useState8","_useState7","internalValue","setInternalValue","popoverRef","accessibilityId","concat","uuidv4","inputId","labelId","opacityLabelId","hasLabel","Boolean","openMenu","useCallback","openMenuSwatch","e","preventDefault","openMenuFocus","openMenuKeyDown","event","closeMenu","_popoverRef$current","_indicatorRef$current","isFocusInPopover","current","contains","document","activeElement","focus","preventScroll","setSwatches","detail","setPicker","clearFocusTarget","onInternalValueChange","color","rgb","onActualChange","formatted","channelsToHex","channelsToRgba","onKeyboardPickerChange","_useChromePickerAcces","useChromePickerAccessibility","isActive","pickerRef","onPickerKeyDown","onKeyDown","useEffect","_pickerRef$current","firstControl","querySelector","onOpacityInputChange","opacityString","opacityNumber","Number","isNaN","pickerOnChange","swatchOnChange","nonZeroAlpha","alpha","onOpacityDragEnd","setTimeout","_document$activeEleme","_document$activeEleme2","blur","call","onOpacityDrag","throttle","percent","newFieldValue","String","Math","round","inputValue","hasVerticalMargin","startsWith","hasHorizontalMargin","accessibleLabel","_jsxs","_Fragment","children","_jsx","id","htmlFor","TextInputNext","Label","hidden","undefined","inputHtmlAttributes","rootTagName","fakeValue","fakeValuePercent","ref","indicator","transparent","style","onClick","role","tabIndex","OpacityDragTracker","onDrag","onDragEnd","root","noAlpha","onFocus","inputType","inputMode","htmlAttributes","Popover","anchorEl","open","placement","popover","marginVertical","marginHorizontal","isTransparent","Swatches","addTransparent","autoFocus","onAutoFocus","pickerContainer","ChromePicker","onChangeComplete","disableAlpha","picker","switchButtons","Tooltip","title","ButtonIcon","ariaLabel","type","PaletteIcon","PickerIcon","Popper","dragTrackerPopper"],"mappings":"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"}
|