@itwin/map-layers 6.0.6 → 6.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/CHANGELOG.md +10 -2
  2. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts +1 -0
  3. package/lib/cjs/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  4. package/lib/cjs/ui/widget/AttachLayerPopupButton.js +3 -8
  5. package/lib/cjs/ui/widget/AttachLayerPopupButton.js.map +1 -1
  6. package/lib/cjs/ui/widget/AttachLayerPopupButton.scss +16 -0
  7. package/lib/cjs/ui/widget/BasemapPanel.js +1 -1
  8. package/lib/cjs/ui/widget/BasemapPanel.js.map +1 -1
  9. package/lib/cjs/ui/widget/BasemapPanel.scss +4 -0
  10. package/lib/cjs/ui/widget/CustomParamEditDialog.js +1 -1
  11. package/lib/cjs/ui/widget/CustomParamEditDialog.js.map +1 -1
  12. package/lib/cjs/ui/widget/CustomParamEditDialog.scss +5 -0
  13. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts +1 -0
  14. package/lib/cjs/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  15. package/lib/cjs/ui/widget/FeatureInfoWidget.js +4 -3
  16. package/lib/cjs/ui/widget/FeatureInfoWidget.js.map +1 -1
  17. package/lib/cjs/ui/widget/FeatureInfoWidget.scss +14 -0
  18. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts +1 -1
  19. package/lib/cjs/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  20. package/lib/cjs/ui/widget/MapLayerDroppable.js +4 -4
  21. package/lib/cjs/ui/widget/MapLayerDroppable.js.map +1 -1
  22. package/lib/cjs/ui/widget/MapLayerDroppable.scss +12 -0
  23. package/lib/cjs/ui/widget/MapLayersWidget.d.ts +1 -0
  24. package/lib/cjs/ui/widget/MapLayersWidget.d.ts.map +1 -1
  25. package/lib/cjs/ui/widget/MapLayersWidget.js +2 -1
  26. package/lib/cjs/ui/widget/MapLayersWidget.js.map +1 -1
  27. package/lib/cjs/ui/widget/MapLayersWidget.scss +9 -0
  28. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.d.ts.map +1 -1
  29. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js +1 -2
  30. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
  31. package/lib/cjs/ui/widget/MapSelectFeaturesDialog.scss +2 -0
  32. package/lib/cjs/ui/widget/MapUrlDialog.d.ts.map +1 -1
  33. package/lib/cjs/ui/widget/MapUrlDialog.js +2 -2
  34. package/lib/cjs/ui/widget/MapUrlDialog.js.map +1 -1
  35. package/lib/cjs/ui/widget/MapUrlDialog.scss +2 -0
  36. package/lib/cjs/ui/widget/SelectCustomParam.d.ts +1 -0
  37. package/lib/cjs/ui/widget/SelectCustomParam.d.ts.map +1 -1
  38. package/lib/cjs/ui/widget/SelectCustomParam.js +2 -1
  39. package/lib/cjs/ui/widget/SelectCustomParam.js.map +1 -1
  40. package/lib/cjs/ui/widget/SelectCustomParam.scss +8 -0
  41. package/lib/cjs/ui/widget/SelectMapFormat.d.ts +1 -0
  42. package/lib/cjs/ui/widget/SelectMapFormat.d.ts.map +1 -1
  43. package/lib/cjs/ui/widget/SelectMapFormat.js +2 -1
  44. package/lib/cjs/ui/widget/SelectMapFormat.js.map +1 -1
  45. package/lib/cjs/ui/widget/SelectMapFormat.scss +8 -0
  46. package/lib/cjs/ui/widget/SubLayersTree.d.ts.map +1 -1
  47. package/lib/cjs/ui/widget/SubLayersTree.js +3 -3
  48. package/lib/cjs/ui/widget/SubLayersTree.js.map +1 -1
  49. package/lib/cjs/ui/widget/SubLayersTree.scss +4 -0
  50. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts +1 -0
  51. package/lib/esm/ui/widget/AttachLayerPopupButton.d.ts.map +1 -1
  52. package/lib/esm/ui/widget/AttachLayerPopupButton.js +3 -8
  53. package/lib/esm/ui/widget/AttachLayerPopupButton.js.map +1 -1
  54. package/lib/esm/ui/widget/AttachLayerPopupButton.scss +16 -0
  55. package/lib/esm/ui/widget/BasemapPanel.js +1 -1
  56. package/lib/esm/ui/widget/BasemapPanel.js.map +1 -1
  57. package/lib/esm/ui/widget/BasemapPanel.scss +4 -0
  58. package/lib/esm/ui/widget/CustomParamEditDialog.js +1 -1
  59. package/lib/esm/ui/widget/CustomParamEditDialog.js.map +1 -1
  60. package/lib/esm/ui/widget/CustomParamEditDialog.scss +5 -0
  61. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts +1 -0
  62. package/lib/esm/ui/widget/FeatureInfoWidget.d.ts.map +1 -1
  63. package/lib/esm/ui/widget/FeatureInfoWidget.js +4 -3
  64. package/lib/esm/ui/widget/FeatureInfoWidget.js.map +1 -1
  65. package/lib/esm/ui/widget/FeatureInfoWidget.scss +14 -0
  66. package/lib/esm/ui/widget/MapLayerDroppable.d.ts +1 -1
  67. package/lib/esm/ui/widget/MapLayerDroppable.d.ts.map +1 -1
  68. package/lib/esm/ui/widget/MapLayerDroppable.js +4 -4
  69. package/lib/esm/ui/widget/MapLayerDroppable.js.map +1 -1
  70. package/lib/esm/ui/widget/MapLayerDroppable.scss +12 -0
  71. package/lib/esm/ui/widget/MapLayersWidget.d.ts +1 -0
  72. package/lib/esm/ui/widget/MapLayersWidget.d.ts.map +1 -1
  73. package/lib/esm/ui/widget/MapLayersWidget.js +2 -1
  74. package/lib/esm/ui/widget/MapLayersWidget.js.map +1 -1
  75. package/lib/esm/ui/widget/MapLayersWidget.scss +9 -0
  76. package/lib/esm/ui/widget/MapSelectFeaturesDialog.d.ts.map +1 -1
  77. package/lib/esm/ui/widget/MapSelectFeaturesDialog.js +1 -2
  78. package/lib/esm/ui/widget/MapSelectFeaturesDialog.js.map +1 -1
  79. package/lib/esm/ui/widget/MapSelectFeaturesDialog.scss +2 -0
  80. package/lib/esm/ui/widget/MapUrlDialog.d.ts.map +1 -1
  81. package/lib/esm/ui/widget/MapUrlDialog.js +2 -2
  82. package/lib/esm/ui/widget/MapUrlDialog.js.map +1 -1
  83. package/lib/esm/ui/widget/MapUrlDialog.scss +2 -0
  84. package/lib/esm/ui/widget/SelectCustomParam.d.ts +1 -0
  85. package/lib/esm/ui/widget/SelectCustomParam.d.ts.map +1 -1
  86. package/lib/esm/ui/widget/SelectCustomParam.js +2 -1
  87. package/lib/esm/ui/widget/SelectCustomParam.js.map +1 -1
  88. package/lib/esm/ui/widget/SelectCustomParam.scss +8 -0
  89. package/lib/esm/ui/widget/SelectMapFormat.d.ts +1 -0
  90. package/lib/esm/ui/widget/SelectMapFormat.d.ts.map +1 -1
  91. package/lib/esm/ui/widget/SelectMapFormat.js +2 -1
  92. package/lib/esm/ui/widget/SelectMapFormat.js.map +1 -1
  93. package/lib/esm/ui/widget/SelectMapFormat.scss +8 -0
  94. package/lib/esm/ui/widget/SubLayersTree.d.ts.map +1 -1
  95. package/lib/esm/ui/widget/SubLayersTree.js +3 -3
  96. package/lib/esm/ui/widget/SubLayersTree.js.map +1 -1
  97. package/lib/esm/ui/widget/SubLayersTree.scss +4 -0
  98. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"MapUrlDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { BeEvent, Guid } from \"@itwin/core-bentley\";\nimport { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Input, LabeledInput, Modal, ModalButtonBar, ModalContent, ProgressLinear } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { CustomParamUtils } from \"../../CustomParamUtils\";\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { SelectCustomParam } from \"./SelectCustomParam\";\nimport { SelectMapFormat } from \"./SelectMapFormat\";\nimport { UserPreferencesStorageOptions } from \"./UserPreferencesStorageOptions\";\nimport { useCrossOriginPopup } from \"../hooks/useCrossOriginPopup\";\n\nimport type { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerAccessClient, MapLayerSourceValidation, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions } from \"../Interfaces\";\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\nconst URL_SCHEMES = {\n http: \"http://\",\n https: \"https://\",\n};\n\nexport type LayerCreationMode = \"single\" | \"multiple\";\ninterface MapUrlDialogProps {\n activeViewport?: ScreenViewport;\n onOkResult: (result?: SourceState) => void;\n onCancelResult?: () => void;\n mapLayerOptions?: MapLayerOptions;\n\n // An optional layer definition can be provide to enable the edit mode\n signInModeArgs?: {\n layer: ImageMapLayerSettings;\n validation?: MapLayerSourceValidation;\n source?: MapLayerSource;\n };\n\n mapLayerSourceToEdit?: MapLayerSource;\n}\n\nexport interface SourceState {\n source: MapLayerSource;\n validation: MapLayerSourceValidation;\n customParamIdx?: { [key: string]: string };\n privateCustomParamIdx?: { [key: string]: string };\n}\n\nexport function MapUrlDialog(props: MapUrlDialogProps) {\n const { onOkResult, mapLayerOptions } = props;\n\n const getMapUrlFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.url;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.url;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getMapNameFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.name;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.name;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getFormatFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.formatId;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.formatId;\n }\n return undefined;\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getCustomParamsMapping = React.useCallback((url: string): string[] => {\n const cpMappingStorage = new CustomParamsMappingStorage();\n const cpMapping = cpMappingStorage.get(url.toLowerCase());\n if (cpMapping && !Array.isArray(cpMapping)) {\n return cpMapping.customParamNames;\n }\n return [];\n }, []);\n\n const [dialogTitle] = React.useState(\n MapLayersUI.localization.getLocalizedString(\n props.signInModeArgs || props.mapLayerSourceToEdit ? \"mapLayers:CustomAttach.EditCustomLayer\" : \"mapLayers:CustomAttach.AttachCustomLayer\",\n ),\n );\n const [typeLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Type\"));\n const [nameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Name\"));\n const [nameInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NameInputPlaceHolder\"));\n const [urlLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.URL\"));\n const [urlInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.UrlInputPlaceHolder\"));\n const [missingCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.MissingCredentials\"));\n const [invalidCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCredentials\"));\n const [externalLoginTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLogin\"));\n const [externalLoginFailedMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginFailed\"));\n const [externalLoginSucceededMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginSucceeded\"));\n const [externalLoginWaitingMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginWaiting\"));\n const [externalLoginTryAgainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginTryAgain\"));\n const [serverRequireCredentials, setServerRequireCredentials] = React.useState(false);\n const [invalidCredentialsProvided, setInvalidCredentialsProvided] = React.useState(false);\n const [layerAttachPending, setLayerAttachPending] = React.useState(false);\n const [layerAuthPending, setLayerAuthPending] = React.useState(false);\n const [mapUrl, setMapUrl] = React.useState(getMapUrlFromProps());\n const [mapName, setMapName] = React.useState(getMapNameFromProps());\n const [userName, setUserName] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [noSaveSettingsWarning] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NoSaveSettingsWarning\"));\n const [passwordLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Password\"));\n const [passwordRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.PasswordRequired\"));\n const [userNameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Username\"));\n const [userNameRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.UsernameRequired\"));\n const [settingsStorage, setSettingsStorageRadio] = React.useState(\"iTwin\");\n const [oauthProcessSucceeded, setOAuthProcessSucceeded] = React.useState<undefined | boolean>(undefined);\n const [showOauthPopup, setShowOauthPopup] = React.useState(false);\n const [externalLoginUrl, setExternalLoginUrl] = React.useState<string | undefined>();\n const [onOauthProcessEnd] = React.useState(new BeEvent());\n const [accessClient, setAccessClient] = React.useState<MapLayerAccessClient | undefined>();\n const [isAccessClientInitialized, setAccessClientInitialized] = React.useState(false);\n const [shouldAutoAttachSource, setShouldAutoAttachSource] = React.useState(true);\n const [incompatibleFormat, setIncompatibleFormat] = React.useState(false);\n\n const [mapType, setMapType] = React.useState(getFormatFromProps() ?? \"ArcGIS\");\n const [customParamNamesChangedByUser, SetCustomParamNamesChangedByUser] = React.useState<boolean>(false);\n const [customParamNames, setCustomParamNames] = React.useState<string[] | undefined>(() => {\n if (mapUrl) {\n return getCustomParamsMapping(mapUrl);\n }\n return undefined;\n });\n\n // 'isMounted' is used to prevent any async operation once the hook has been\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\n const isMounted = React.useRef(false);\n React.useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const [isSettingsStorageAvailable] = React.useState(MapLayersUI.iTwinConfig && props?.activeViewport?.iModel?.iTwinId);\n const [hasImodelContext] = React.useState(\n props?.activeViewport?.iModel?.iTwinId !== undefined &&\n props.activeViewport.iModel.iTwinId !== Guid.empty &&\n props?.activeViewport?.iModel?.iModelId !== undefined &&\n props?.activeViewport.iModel.iModelId !== Guid.empty,\n );\n\n const handleCancel = React.useCallback(() => {\n if (props.onCancelResult) {\n props.onCancelResult();\n return;\n }\n }, [props]);\n\n const onUsernameChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setUserName(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setUserName, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const onPasswordChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setPassword(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setPassword, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const handleArcGisLogin = React.useCallback(() => {\n setLayerAuthPending(true);\n setShowOauthPopup(true);\n if (oauthProcessSucceeded === false) {\n setOAuthProcessSucceeded(undefined);\n }\n }, [oauthProcessSucceeded]);\n\n // return true if authorization is needed\n const updateAuthState = React.useCallback(\n async (source: MapLayerSource, sourceValidation: MapLayerSourceValidation) => {\n const sourceRequireAuth = sourceValidation.status === MapLayerSourceStatus.RequireAuth;\n let invalidCredentials = sourceValidation.status === MapLayerSourceStatus.InvalidCredentials;\n if (sourceRequireAuth) {\n let hasTokenEndPoint = false;\n const settings = source.toLayerSettings();\n\n if (accessClient !== undefined && accessClient.getTokenServiceEndPoint !== undefined && settings !== undefined) {\n try {\n const tokenEndpoint = await accessClient.getTokenServiceEndPoint(settings.url);\n if (tokenEndpoint !== undefined) {\n const loginUrl = tokenEndpoint.getLoginUrl();\n setExternalLoginUrl(loginUrl);\n hasTokenEndPoint = true;\n }\n } catch {}\n } else if (userName.length > 0 || password.length > 0) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n\n if (!hasTokenEndPoint && (userName.length > 0 || password.length > 0)) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n }\n setServerRequireCredentials(sourceRequireAuth || invalidCredentials);\n if (invalidCredentials) {\n setInvalidCredentialsProvided(true);\n } else if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false); // flag reset\n }\n\n return sourceRequireAuth || invalidCredentials;\n },\n [accessClient, invalidCredentialsProvided, password.length, userName.length],\n );\n\n const onNameChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setMapName(event.target.value);\n }, []);\n\n const onRadioChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSettingsStorageRadio(event.target.value);\n },\n [setSettingsStorageRadio],\n );\n\n const onUrlChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setMapUrl(value);\n\n if (!customParamNamesChangedByUser) {\n if (value === \"\") {\n setCustomParamNames(undefined);\n } else {\n const paramNames = getCustomParamsMapping(value);\n setCustomParamNames(paramNames);\n }\n }\n },\n [getCustomParamsMapping, customParamNamesChangedByUser],\n );\n\n const createSource = React.useCallback(\n (url: string) => {\n let source: MapLayerSource | undefined;\n if (url && mapName) {\n source = MapLayerSource.fromJSON({ url, name: mapName, formatId: mapType });\n\n // Set credentials separately since they are not part of JSON\n if (source) {\n source.userName = userName || undefined; // When there is no value, empty string is always returned, in this case force it to undefined,\n source.password = password || undefined;\n\n if (customParamNames) {\n CustomParamUtils.setSourceCustomParams(source, customParamNames);\n }\n }\n }\n return source;\n },\n [customParamNames, mapName, mapType, password, userName],\n );\n\n const handleOk = React.useCallback(() => {\n const mapUrlLow = mapUrl.toLowerCase();\n // Append 'https://' if url is missing scheme\n let url = mapUrl;\n if (!mapUrlLow.startsWith(URL_SCHEMES.http) && !mapUrlLow.startsWith(URL_SCHEMES.https)) {\n url = `${URL_SCHEMES.https}${mapUrl}`;\n setMapUrl(url);\n }\n\n const source = createSource(url);\n if (source === undefined || props.mapLayerSourceToEdit) {\n onOkResult();\n\n if (source === undefined) {\n // Close the dialog and inform end user something went wrong.\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerLayerSourceCreationFailed\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: msgError, sourceName: mapName });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n // Store custom params mapping\n if (customParamNames) {\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n }\n\n // Simply change the source definition in the setting service\n if (props.mapLayerSourceToEdit !== undefined) {\n // Apply changes to original source object\n props.mapLayerSourceToEdit.savedQueryParams = { ...source.savedQueryParams };\n props.mapLayerSourceToEdit.unsavedQueryParams = { ...source.unsavedQueryParams };\n\n const vp = props.activeViewport;\n void (async () => {\n if (isSettingsStorageAvailable && vp?.iModel?.iTwinId) {\n try {\n await MapLayerPreferences.replaceSource(props.mapLayerSourceToEdit!, source, vp.iModel.iTwinId, vp?.iModel.iModelId);\n } catch {\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerEditError\", {\n layerName: props.mapLayerSourceToEdit?.name,\n });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\n return;\n }\n }\n })();\n return;\n }\n }\n\n // Attach source asynchronously.\n void (async () => {\n try {\n setLayerAttachPending(true);\n const validation = await source.validateSource(true);\n\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n\n if (validation.status === MapLayerSourceStatus.Valid) {\n // Update service settings if storage is available and we are not prompting user for credentials\n if (isSettingsStorageAvailable && !props.signInModeArgs) {\n const storeOnIModel = hasImodelContext ? \"Model\" === settingsStorage : undefined;\n const vp = props.activeViewport;\n if (vp?.iModel.iTwinId && !(await MapLayerPreferences.storeSource(source, vp.iModel.iTwinId, vp.iModel.iModelId, storeOnIModel))) {\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerPreferencesStoreFailed\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msgError));\n }\n }\n\n // Link an API key to this map-layer URL\n const customParamIdx: { [key: string]: string } = {};\n const privateCustomParamIdx: { [key: string]: string } = {};\n if (customParamNames && customParamNames.length > 0) {\n // Link the map-layers URL custom params.\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n\n const cpStorage = new CustomParamsStorage();\n customParamNames.forEach((customParamName) => {\n const items = cpStorage.get(customParamName);\n if (items && !Array.isArray(items)) {\n (items.secret ? privateCustomParamIdx : customParamIdx)[items.key] = items.value;\n }\n });\n }\n\n onOkResult({ source, validation, customParamIdx, privateCustomParamIdx });\n } else if (validation.status === MapLayerSourceStatus.InvalidCoordinateSystem) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCoordinateSystem\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult({ source, validation });\n } else if (validation.status === MapLayerSourceStatus.IncompatibleFormat) {\n setIncompatibleFormat(true);\n } else {\n const authNeeded = await updateAuthState(source, validation);\n if (!authNeeded) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ValidationError\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} ${source.url}`));\n onOkResult({ source, validation });\n }\n }\n } catch (error) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source.name });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult();\n }\n })();\n }, [\n mapUrl,\n createSource,\n props.mapLayerSourceToEdit,\n props.activeViewport,\n props.signInModeArgs,\n onOkResult,\n customParamNames,\n mapName,\n isSettingsStorageAvailable,\n hasImodelContext,\n settingsStorage,\n updateAuthState,\n ]);\n\n React.useEffect(() => {\n const handleOAuthProcessEnd = (success: boolean, _state: any) => {\n onOauthProcessEnd.raiseEvent(success, _state);\n };\n\n const ac = IModelApp.mapLayerFormatRegistry.getAccessClient(mapType);\n if (ac?.onOAuthProcessEnd) {\n setAccessClient(ac); // cache it, so we don't need to make another lookup;\n ac.onOAuthProcessEnd.addListener(handleOAuthProcessEnd);\n }\n setAccessClientInitialized(true);\n return () => {\n if (ac?.onOAuthProcessEnd) {\n ac.onOAuthProcessEnd.removeListener(handleOAuthProcessEnd);\n }\n\n setAccessClient(undefined);\n setAccessClientInitialized(false);\n };\n }, [mapType, onOauthProcessEnd, setAccessClient]);\n\n const resetSignInState = React.useCallback(() => {\n setServerRequireCredentials(false);\n setInvalidCredentialsProvided(false);\n setShowOauthPopup(false);\n setOAuthProcessSucceeded(undefined);\n setExternalLoginUrl(undefined);\n }, []);\n\n // After a map type chang(or setting a new custom query Parameter), make sure the different Oauth states are reset.\n React.useEffect(() => {\n resetSignInState();\n }, [mapType, resetSignInState]);\n\n // After a map type change, make sure the different Oauth states are reset.\n React.useEffect(() => {\n setIncompatibleFormat(false);\n }, [mapType, mapUrl]);\n\n // The first time the dialog is loaded and we already know the layer requires auth. (i.e ImageryProvider already made an attempt)\n // makes a request to discover the authentification types and adjust UI accordingly (i.e. username/password fields, Oauth popup)\n // Without this effect, user would have to manually click the 'OK' button in order to trigger the layer connection.\n React.useEffect(() => {\n // Attach source asynchronously.\n void (async () => {\n if (isAccessClientInitialized && shouldAutoAttachSource && props.signInModeArgs !== undefined) {\n try {\n let source = props.signInModeArgs.source;\n let validation = props.signInModeArgs.validation;\n if (!source || !validation) {\n // In some cases we don't know why the layer failed to attach, so we need to go through validation process\n source = MapLayerSource.fromJSON({\n url: props.signInModeArgs.layer.url,\n name: props.signInModeArgs.layer.name,\n formatId: props.signInModeArgs.layer.formatId,\n });\n\n if (source !== undefined) {\n if (props.signInModeArgs.layer.savedQueryParams) {\n source.savedQueryParams = { ...props.signInModeArgs.layer.savedQueryParams };\n }\n if (props.signInModeArgs.layer.unsavedQueryParams) {\n source.unsavedQueryParams = { ...props.signInModeArgs.layer.unsavedQueryParams };\n }\n\n setLayerAttachPending(true);\n\n validation = await source.validateSource(true);\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n }\n }\n if (source && validation) {\n setShouldAutoAttachSource(false);\n await updateAuthState(source, validation);\n }\n } catch {}\n }\n })();\n }, [isAccessClientInitialized, props.signInModeArgs, shouldAutoAttachSource, updateAuthState]);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const readyToSave = React.useCallback(() => {\n const credentialsSet = !!userName && !!password;\n const ready =\n !!mapUrl &&\n !!mapName &&\n !layerAttachPending &&\n (!serverRequireCredentials || credentialsSet) &&\n !invalidCredentialsProvided &&\n !incompatibleFormat &&\n (externalLoginUrl === undefined || (externalLoginUrl !== undefined && oauthProcessSucceeded));\n return ready;\n }, [\n userName,\n password,\n mapUrl,\n mapName,\n layerAttachPending,\n serverRequireCredentials,\n invalidCredentialsProvided,\n incompatibleFormat,\n externalLoginUrl,\n oauthProcessSucceeded,\n ]);\n\n const handleOnKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n if (readyToSave()) {\n handleOk();\n }\n }\n },\n [handleOk, readyToSave],\n );\n\n // onOauthProcessEnd events handler\n React.useEffect(() => {\n const handleOauthProcess = (success: boolean, _state: any) => {\n setLayerAuthPending(false);\n if (success) {\n setOAuthProcessSucceeded(true);\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n handleOk(); // Add the layer the same way the user would do by clicking 'ok'\n } else {\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n setOAuthProcessSucceeded(false);\n }\n };\n\n onOauthProcessEnd.addListener(handleOauthProcess);\n return () => {\n onOauthProcessEnd.removeListener(handleOauthProcess);\n };\n }, [handleOk, onOauthProcessEnd]);\n\n //\n // Monitors authentication method changes\n React.useEffect(() => {\n if (serverRequireCredentials && oauthProcessSucceeded === undefined && externalLoginUrl !== undefined) {\n handleArcGisLogin();\n }\n }, [oauthProcessSucceeded, externalLoginUrl, handleArcGisLogin, serverRequireCredentials]);\n\n // Monitors Oauth2 popup was closed\n const handleOAuthPopupClose = React.useCallback(() => {\n setShowOauthPopup(false);\n setLayerAuthPending(false);\n if (oauthProcessSucceeded === undefined) {\n setOAuthProcessSucceeded(false);\n } // indicates there was a failed attempt\n }, [oauthProcessSucceeded]);\n\n // Utility function to get warning message section\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (showOauthPopup) {\n warningMessage = externalLoginWaitingMsg;\n } else if (oauthProcessSucceeded === false) {\n warningMessage = externalLoginFailedMsg;\n } else if (oauthProcessSucceeded === true) {\n warningMessage = externalLoginSucceededMsg;\n } else if (invalidCredentialsProvided) {\n warningMessage = invalidCredentialsLabel;\n } else if (serverRequireCredentials && (!userName || !password)) {\n warningMessage = missingCredentialsLabel;\n }\n\n // Sometimes we want to add an extra node, such as a button\n let extraNode: React.ReactNode;\n if (oauthProcessSucceeded === false) {\n extraNode = (\n <div>\n <Button onClick={handleArcGisLogin}>{externalLoginTryAgainLabel}</Button>\n </div>\n );\n }\n\n if (warningMessage !== undefined) {\n return (\n <div className=\"map-layer-source-warnMessage\">\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n {extraNode}\n </div>\n );\n } else {\n return <span className=\"map-layer-source-placeholder\">&nbsp;</span>;\n }\n }\n\n // Use a hook to display the popup.\n // The display of the popup is controlled by the 'showOauthPopup' state variable.\n useCrossOriginPopup(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-url-dialog\"\n title={dialogTitle}\n isOpen={true}\n onClose={handleCancel}\n style={{ minHeight: 120, maxWidth: 600 }}\n portal\n >\n <ModalContent>\n <div className=\"map-layer-source-url\">\n <span className=\"map-layer-source-label\">{typeLabel}</span>\n <SelectMapFormat\n value={mapType}\n disabled={props.signInModeArgs !== undefined || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n onChange={setMapType}\n mapTypesOptions={mapLayerOptions?.mapTypeOptions}\n status={incompatibleFormat ? \"warning\" : undefined}\n message={incompatibleFormat ? MapLayersUI.translate(\"CustomAttach.InvalidType\") : undefined}\n />\n <span className=\"map-layer-source-label\">{nameLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={nameInputPlaceHolder}\n onChange={onNameChange}\n value={mapName}\n disabled={!!props.signInModeArgs || layerAttachPending || layerAuthPending}\n />\n <span className=\"map-layer-source-label\">{urlLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={urlInputPlaceHolder}\n onKeyDown={handleOnKeyDown}\n onChange={onUrlChange}\n disabled={!!props.signInModeArgs || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n value={mapUrl}\n />\n <span className=\"map-layer-source-label\">\n {MapLayersUI.translate(\"CustomAttach.CustomParamsLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"map-layer-source-previewBadge-icon\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n <SelectCustomParam\n value={customParamNames}\n disabled={layerAttachPending || layerAuthPending}\n onChange={(paramNames) => {\n setCustomParamNames(paramNames);\n SetCustomParamNamesChangedByUser(true);\n resetSignInState();\n }}\n />\n\n {serverRequireCredentials &&\n externalLoginUrl === undefined && // external login is handled in popup\n props.mapLayerSourceToEdit === undefined && (\n <>\n <span className=\"map-layer-source-label\">{userNameLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n placeholder={serverRequireCredentials ? userNameRequiredLabel : userNameLabel}\n status={(!userName && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onUsernameChange}\n value={userName}\n size=\"small\"\n />\n\n <span className=\"map-layer-source-label\">{passwordLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n type=\"password\"\n placeholder={serverRequireCredentials ? passwordRequiredLabel : passwordLabel}\n status={(!password && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onPasswordChange}\n onKeyDown={handleOnKeyDown}\n value={password}\n size=\"small\"\n />\n </>\n )}\n\n {/* Store settings options, not shown when editing a layer */}\n {!props.signInModeArgs && !props.mapLayerSourceToEdit && (\n <div title={!isSettingsStorageAvailable ? noSaveSettingsWarning : \"\"}>\n {hasImodelContext && mapLayerOptions?.showUserPreferencesStorageOptions && (\n <UserPreferencesStorageOptions\n disabled={!isSettingsStorageAvailable}\n itwinChecked={settingsStorage === \"iTwin\"}\n modelChecked={settingsStorage === \"Model\"}\n onChange={onRadioChange}\n />\n )}\n </div>\n )}\n </div>\n <ModalButtonBar>\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {props?.mapLayerSourceToEdit ? MapLayersUI.translate(\"Dialog.Edit\") : MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-source-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </ModalButtonBar>\n </ModalContent>\n\n {/* Warning message */}\n {renderWarningMessage()}\n\n {/* Progress bar */}\n {(layerAttachPending || layerAuthPending) && (\n <div className=\"map-layer-source-progressBar\">\n <ProgressLinear indeterminate />\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"MapUrlDialog.js","sourceRoot":"","sources":["../../../../src/ui/widget/MapUrlDialog.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6DA,oCA2qBC;;AAxuBD;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,sDAAoD;AACpD,wDAAoI;AACpI,gFAA6F;AAC7F,wDAA8H;AAC9H,iFAA8E;AAC9E,mEAAgE;AAChE,6DAA0D;AAC1D,mEAAgE;AAChE,+CAA8C;AAC9C,sEAAmE;AACnE,2DAAwD;AACxD,uDAAoD;AACpD,mFAAgF;AAKnE,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC;AACF,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;CAClB,CAAC;AA0BF,SAAgB,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAE9C,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAChD,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC;QACxC,CAAC;aAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC;QACxC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAEvD,MAAM,mBAAmB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACjD,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,IAAI,CAAC;QACzC,CAAC;aAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;QACzC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAEvD,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAChD,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;IAEvD,MAAM,sBAAsB,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,GAAW,EAAY,EAAE;QACzE,MAAM,gBAAgB,GAAG,IAAI,uDAA0B,EAAE,CAAC;QAC1D,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,OAAO,SAAS,CAAC,gBAAgB,CAAC;QACpC,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAClC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CACzC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC,0CAA0C,CAC3I,CACF,CAAC;IACF,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC/G,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAC/G,MAAM,CAAC,oBAAoB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC1I,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC,CAAC;IAC7G,MAAM,CAAC,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,4CAA4C,CAAC,CAAC,CAAC;IACxI,MAAM,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAC3I,MAAM,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAC3I,MAAM,CAAC,kBAAkB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,sCAAsC,CAAC,CAAC,CAAC;IACjI,MAAM,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,4CAA4C,CAAC,CAAC,CAAC;IAC3I,MAAM,CAAC,yBAAyB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACjJ,MAAM,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,6CAA6C,CAAC,CAAC,CAAC;IAC7I,MAAM,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACjJ,MAAM,CAAC,wBAAwB,EAAE,2BAA2B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtF,MAAM,CAAC,0BAA0B,EAAE,6BAA6B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1F,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC1E,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACjE,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnD,MAAM,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC5I,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC/I,MAAM,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC;IAC/H,MAAM,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,iDAAiD,CAAC,CAAC,CAAC;IAC/I,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAsB,SAAS,CAAC,CAAC;IACzG,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAsB,CAAC;IACrF,MAAM,CAAC,iBAAiB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAO,EAAE,CAAC,CAAC;IAC1D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAoC,CAAC;IAC3F,MAAM,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtF,MAAM,CAAC,sBAAsB,EAAE,yBAAyB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjF,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE1E,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,IAAI,QAAQ,CAAC,CAAC;IAC/E,MAAM,CAAC,6BAA6B,EAAE,gCAAgC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAU,KAAK,CAAC,CAAC;IACzG,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAuB,GAAG,EAAE;QACxF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,wHAAwH;IACxH,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;QACzB,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QAC5B,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,0BAA0B,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,uBAAW,CAAC,WAAW,IAAI,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACvH,MAAM,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,QAAQ,CACvC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,KAAK,SAAS;QAClD,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,KAAK,mBAAI,CAAC,KAAK;QAClD,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,KAAK,SAAS;QACrD,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,QAAQ,KAAK,mBAAI,CAAC,KAAK,CACvD,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC1C,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACzB,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACxC,CAAC,KAA0C,EAAE,EAAE;QAC7C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,0BAA0B,EAAE,CAAC;YAC/B,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,0BAA0B,EAAE,6BAA6B,CAAC,CACzE,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CACxC,CAAC,KAA0C,EAAE,EAAE;QAC7C,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,0BAA0B,EAAE,CAAC;YAC/B,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,0BAA0B,EAAE,6BAA6B,CAAC,CACzE,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC/C,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAC1B,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,qBAAqB,KAAK,KAAK,EAAE,CAAC;YACpC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,yCAAyC;IACzC,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACvC,KAAK,EAAE,MAAsB,EAAE,gBAA0C,EAAE,EAAE;QAC3E,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,KAAK,oCAAoB,CAAC,WAAW,CAAC;QACvF,IAAI,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,KAAK,oCAAoB,CAAC,kBAAkB,CAAC;QAC7F,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;YAE1C,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,CAAC,uBAAuB,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC/G,IAAI,CAAC;oBACH,MAAM,aAAa,GAAG,MAAM,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC/E,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;wBAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;wBAC7C,mBAAmB,CAAC,QAAQ,CAAC,CAAC;wBAC9B,gBAAgB,GAAG,IAAI,CAAC;oBAC1B,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;iBAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtD,8FAA8F;gBAC9F,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,gBAAgB,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACtE,8FAA8F;gBAC9F,kBAAkB,GAAG,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC;QACD,2BAA2B,CAAC,iBAAiB,IAAI,kBAAkB,CAAC,CAAC;QACrE,IAAI,kBAAkB,EAAE,CAAC;YACvB,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,0BAA0B,EAAE,CAAC;YACtC,6BAA6B,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa;QACrD,CAAC;QAED,OAAO,iBAAiB,IAAI,kBAAkB,CAAC;IACjD,CAAC,EACD,CAAC,YAAY,EAAE,0BAA0B,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAC7E,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,KAA0C,EAAE,EAAE;QACpF,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACrC,CAAC,KAA0C,EAAE,EAAE;QAC7C,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,EACD,CAAC,uBAAuB,CAAC,CAC1B,CAAC;IAEF,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CACnC,CAAC,KAA0C,EAAE,EAAE;QAC7C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;QACjC,SAAS,CAAC,KAAK,CAAC,CAAC;QAEjB,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACnC,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;gBACjB,mBAAmB,CAAC,SAAS,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,MAAM,UAAU,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;gBACjD,mBAAmB,CAAC,UAAU,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,sBAAsB,EAAE,6BAA6B,CAAC,CACxD,CAAC;IAEF,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CACpC,CAAC,GAAW,EAAE,EAAE;QACd,IAAI,MAAkC,CAAC;QACvC,IAAI,GAAG,IAAI,OAAO,EAAE,CAAC;YACnB,MAAM,GAAG,8BAAc,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAE5E,6DAA6D;YAC7D,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,GAAG,QAAQ,IAAI,SAAS,CAAC,CAAC,+FAA+F;gBACxI,MAAM,CAAC,QAAQ,GAAG,QAAQ,IAAI,SAAS,CAAC;gBAExC,IAAI,gBAAgB,EAAE,CAAC;oBACrB,mCAAgB,CAAC,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EACD,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CACzD,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,6CAA6C;QAC7C,IAAI,GAAG,GAAG,MAAM,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACxF,GAAG,GAAG,GAAG,WAAW,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACvD,UAAU,EAAE,CAAC;YAEb,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,6DAA6D;gBAC7D,MAAM,QAAQ,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,sDAAsD,CAAC,CAAC;gBACrH,MAAM,GAAG,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC5I,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClG,OAAO;YACT,CAAC;YAED,8BAA8B;YAC9B,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,UAAU,GAAG,IAAI,uDAA0B,EAAE,CAAC;gBACpD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;YAC3D,CAAC;YAED,6DAA6D;YAC7D,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBAC7C,0CAA0C;gBAC1C,KAAK,CAAC,oBAAoB,CAAC,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC7E,KAAK,CAAC,oBAAoB,CAAC,kBAAkB,GAAG,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;gBAEjF,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;gBAChC,KAAK,CAAC,KAAK,IAAI,EAAE;oBACf,IAAI,0BAA0B,IAAI,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;wBACtD,IAAI,CAAC;4BACH,MAAM,yCAAmB,CAAC,aAAa,CAAC,KAAK,CAAC,oBAAqB,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACvH,CAAC;wBAAC,MAAM,CAAC;4BACP,MAAM,YAAY,GAAG,yBAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,sCAAsC,EAAE;gCACrG,SAAS,EAAE,KAAK,CAAC,oBAAoB,EAAE,IAAI;6BAC5C,CAAC,CAAC;4BACH,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;4BAC3G,OAAO;wBACT,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;gBACL,OAAO;YACT,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC5B,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAErD,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACtB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC/B,CAAC;gBAED,IAAI,UAAU,CAAC,MAAM,KAAK,oCAAoB,CAAC,KAAK,EAAE,CAAC;oBACrD,gGAAgG;oBAChG,IAAI,0BAA0B,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;wBACxD,MAAM,aAAa,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,KAAK,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;wBACjF,MAAM,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;wBAChC,IAAI,EAAE,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,yCAAmB,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;4BACjI,MAAM,QAAQ,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,mDAAmD,CAAC,CAAC;4BAClH,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;wBACzG,CAAC;oBACH,CAAC;oBAED,wCAAwC;oBACxC,MAAM,cAAc,GAA8B,EAAE,CAAC;oBACrD,MAAM,qBAAqB,GAA8B,EAAE,CAAC;oBAC5D,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACpD,yCAAyC;wBACzC,MAAM,UAAU,GAAG,IAAI,uDAA0B,EAAE,CAAC;wBACpD,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;wBAEzD,MAAM,SAAS,GAAG,IAAI,yCAAmB,EAAE,CAAC;wBAC5C,gBAAgB,CAAC,OAAO,CAAC,CAAC,eAAe,EAAE,EAAE;4BAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;4BAC7C,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gCACnC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;4BACnF,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;oBAED,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB,EAAE,CAAC,CAAC;gBAC5E,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,KAAK,oCAAoB,CAAC,uBAAuB,EAAE,CAAC;oBAC9E,MAAM,GAAG,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,gDAAgD,CAAC,CAAC;oBAC1G,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;oBAClG,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBACrC,CAAC;qBAAM,IAAI,UAAU,CAAC,MAAM,KAAK,oCAAoB,CAAC,kBAAkB,EAAE,CAAC;oBACzE,qBAAqB,CAAC,IAAI,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBAC7D,IAAI,CAAC,UAAU,EAAE,CAAC;wBAChB,MAAM,GAAG,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,CAAC,CAAC;wBAClG,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;wBACrH,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;oBACrC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,uBAAW,CAAC,YAAY,CAAC,kBAAkB,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACtI,yBAAS,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,oCAAoB,CAAC,qCAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBAClG,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE;QACD,MAAM;QACN,YAAY;QACZ,KAAK,CAAC,oBAAoB;QAC1B,KAAK,CAAC,cAAc;QACpB,KAAK,CAAC,cAAc;QACpB,UAAU;QACV,gBAAgB;QAChB,OAAO;QACP,0BAA0B;QAC1B,gBAAgB;QAChB,eAAe;QACf,eAAe;KAChB,CAAC,CAAC;IAEH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAE,MAAW,EAAE,EAAE;YAC9D,iBAAiB,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,MAAM,EAAE,GAAG,yBAAS,CAAC,sBAAsB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACrE,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAC;YAC1B,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,qDAAqD;YAC1E,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;QAC1D,CAAC;QACD,0BAA0B,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,GAAG,EAAE;YACV,IAAI,EAAE,EAAE,iBAAiB,EAAE,CAAC;gBAC1B,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC;YAC7D,CAAC;YAED,eAAe,CAAC,SAAS,CAAC,CAAC;YAC3B,0BAA0B,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC,CAAC;IAElD,MAAM,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC9C,2BAA2B,CAAC,KAAK,CAAC,CAAC;QACnC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACrC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,wBAAwB,CAAC,SAAS,CAAC,CAAC;QACpC,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,mHAAmH;IACnH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,gBAAgB,EAAE,CAAC;IACrB,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEhC,2EAA2E;IAC3E,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAEtB,iIAAiI;IACjI,gIAAgI;IAChI,mHAAmH;IACnH,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,gCAAgC;QAChC,KAAK,CAAC,KAAK,IAAI,EAAE;YACf,IAAI,yBAAyB,IAAI,sBAAsB,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC9F,IAAI,CAAC;oBACH,IAAI,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC;oBACzC,IAAI,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC;oBACjD,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;wBAC3B,0GAA0G;wBAC1G,MAAM,GAAG,8BAAc,CAAC,QAAQ,CAAC;4BAC/B,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;4BACnC,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI;4BACrC,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ;yBAC9C,CAAC,CAAC;wBAEH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;4BACzB,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;gCAChD,MAAM,CAAC,gBAAgB,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;4BAC/E,CAAC;4BACD,IAAI,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;gCAClD,MAAM,CAAC,kBAAkB,GAAG,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;4BACnF,CAAC;4BAED,qBAAqB,CAAC,IAAI,CAAC,CAAC;4BAE5B,UAAU,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;4BAC/C,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gCACtB,qBAAqB,CAAC,KAAK,CAAC,CAAC;4BAC/B,CAAC;wBACH,CAAC;oBACH,CAAC;oBACD,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;wBACzB,yBAAyB,CAAC,KAAK,CAAC,CAAC;wBACjC,MAAM,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBAC5C,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,EAAE,CAAC;IACP,CAAC,EAAE,CAAC,yBAAyB,EAAE,KAAK,CAAC,cAAc,EAAE,sBAAsB,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/F,MAAM,eAAe,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACzC,MAAM,cAAc,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;QAChD,MAAM,KAAK,GACT,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,OAAO;YACT,CAAC,kBAAkB;YACnB,CAAC,CAAC,wBAAwB,IAAI,cAAc,CAAC;YAC7C,CAAC,0BAA0B;YAC3B,CAAC,kBAAkB;YACnB,CAAC,gBAAgB,KAAK,SAAS,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,qBAAqB,CAAC,CAAC,CAAC;QAChG,OAAO,KAAK,CAAC;IACf,CAAC,EAAE;QACD,QAAQ;QACR,QAAQ;QACR,MAAM;QACN,OAAO;QACP,kBAAkB;QAClB,wBAAwB;QACxB,0BAA0B;QAC1B,kBAAkB;QAClB,gBAAgB;QAChB,qBAAqB;KACtB,CAAC,CAAC;IAEH,MAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CACvC,CAAC,KAA4C,EAAE,EAAE;QAC/C,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,WAAW,EAAE,EAAE,CAAC;gBAClB,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,WAAW,CAAC,CACxB,CAAC;IAEF,mCAAmC;IACnC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,kBAAkB,GAAG,CAAC,OAAgB,EAAE,MAAW,EAAE,EAAE;YAC3D,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBAC/B,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,QAAQ,EAAE,CAAC,CAAC,gEAAgE;YAC9E,CAAC;iBAAM,CAAC;gBACN,iBAAiB,CAAC,KAAK,CAAC,CAAC;gBACzB,qBAAqB,CAAC,KAAK,CAAC,CAAC;gBAC7B,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC;QAEF,iBAAiB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAClD,OAAO,GAAG,EAAE;YACV,iBAAiB,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;QACvD,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAElC,EAAE;IACF,yCAAyC;IACzC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,wBAAwB,IAAI,qBAAqB,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACtG,iBAAiB,EAAE,CAAC;QACtB,CAAC;IACH,CAAC,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE3F,mCAAmC;IACnC,MAAM,qBAAqB,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACnD,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;YACxC,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC,CAAC,uCAAuC;IAC3C,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE5B,kDAAkD;IAClD,SAAS,oBAAoB;QAC3B,IAAI,cAAkC,CAAC;QAEvC,iCAAiC;QACjC,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,GAAG,uBAAuB,CAAC;QAC3C,CAAC;aAAM,IAAI,qBAAqB,KAAK,KAAK,EAAE,CAAC;YAC3C,cAAc,GAAG,sBAAsB,CAAC;QAC1C,CAAC;aAAM,IAAI,qBAAqB,KAAK,IAAI,EAAE,CAAC;YAC1C,cAAc,GAAG,yBAAyB,CAAC;QAC7C,CAAC;aAAM,IAAI,0BAA0B,EAAE,CAAC;YACtC,cAAc,GAAG,uBAAuB,CAAC;QAC3C,CAAC;aAAM,IAAI,wBAAwB,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChE,cAAc,GAAG,uBAAuB,CAAC;QAC3C,CAAC;QAED,2DAA2D;QAC3D,IAAI,SAA0B,CAAC;QAC/B,IAAI,qBAAqB,KAAK,KAAK,EAAE,CAAC;YACpC,SAAS,GAAG,CACV,0CACE,uBAAC,sBAAM,IAAC,OAAO,EAAE,iBAAiB,YAAG,0BAA0B,GAAU,GACrE,CACP,CAAC;QACJ,CAAC;QAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YACjC,OAAO,CACL,iCAAK,SAAS,EAAC,8BAA8B,aAC3C,uBAAC,oBAAI,IAAC,IAAI,EAAC,OAAO,YAChB,uBAAC,4CAAgB,KAAoB,GAChC,EACP,iCAAM,SAAS,EAAC,oCAAoC,YAAE,cAAc,GAAQ,EAC3E,SAAS,IACN,CACP,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,iCAAM,SAAS,EAAC,8BAA8B,uBAAc,CAAC;QACtE,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,iFAAiF;IACjF,IAAA,yCAAmB,EAAC,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAE3G,OAAO,CACL,gCAAK,GAAG,EAAE,eAAe,YACvB,wBAAC,qBAAK,IACJ,EAAE,EAAC,KAAK,EACR,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,IAAI,EACZ,OAAO,EAAE,YAAY,EACrB,MAAM,mBAEN,wBAAC,4BAAY,eACX,iCAAK,SAAS,EAAC,sBAAsB,aACnC,iCAAM,SAAS,EAAC,wBAAwB,YAAE,SAAS,GAAQ,EAC3D,uBAAC,iCAAe,IACd,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,IAAI,kBAAkB,IAAI,gBAAgB,EAClI,QAAQ,EAAE,UAAU,EACpB,eAAe,EAAE,eAAe,EAAE,cAAc,EAChD,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAClD,OAAO,EAAE,kBAAkB,CAAC,CAAC,CAAC,uBAAW,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,GAC3F,EACF,iCAAM,SAAS,EAAC,wBAAwB,YAAE,SAAS,GAAQ,EAC3D,uBAAC,qBAAK,IACJ,SAAS,EAAC,wBAAwB,EAClC,WAAW,EAAE,oBAAoB,EACjC,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,kBAAkB,IAAI,gBAAgB,GAC1E,EACF,iCAAM,SAAS,EAAC,wBAAwB,YAAE,QAAQ,GAAQ,EAC1D,uBAAC,qBAAK,IACJ,SAAS,EAAC,wBAAwB,EAClC,WAAW,EAAE,mBAAmB,EAChC,SAAS,EAAE,eAAe,EAC1B,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,oBAAoB,KAAK,SAAS,IAAI,kBAAkB,IAAI,gBAAgB,EACtH,KAAK,EAAE,MAAM,GACb,EACF,kCAAM,SAAS,EAAC,wBAAwB,aACrC,uBAAW,CAAC,SAAS,CAAC,gCAAgC,CAAC,EACxD,gCAAK,KAAK,EAAE,uBAAW,CAAC,SAAS,CAAC,gCAAgC,CAAC,EAAE,SAAS,EAAC,oCAAoC,YACjH,uBAAC,oBAAI,IAAC,IAAI,EAAC,OAAO,YAChB,uBAAC,mDAAuB,KAAG,GACtB,GACH,IACD,EACP,uBAAC,qCAAiB,IAChB,KAAK,EAAE,gBAAgB,EACvB,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB,EAChD,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;wCACvB,mBAAmB,CAAC,UAAU,CAAC,CAAC;wCAChC,gCAAgC,CAAC,IAAI,CAAC,CAAC;wCACvC,gBAAgB,EAAE,CAAC;oCACrB,CAAC,GACD,EAED,wBAAwB;oCACvB,gBAAgB,KAAK,SAAS,IAAI,qCAAqC;oCACvE,KAAK,CAAC,oBAAoB,KAAK,SAAS,IAAI,CAC1C,6DACE,iCAAM,SAAS,EAAC,wBAAwB,YAAE,aAAa,GAAQ,EAC/D,uBAAC,4BAAY,IACX,SAAS,EAAC,wBAAwB,EAClC,YAAY,EAAC,QAAQ,EACrB,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa,EAC7E,MAAM,EAAE,CAAC,CAAC,QAAQ,IAAI,wBAAwB,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACrG,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB,EAChD,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAC,OAAO,GACZ,EAEF,iCAAM,SAAS,EAAC,wBAAwB,YAAE,aAAa,GAAQ,EAC/D,uBAAC,4BAAY,IACX,SAAS,EAAC,wBAAwB,EAClC,YAAY,EAAC,QAAQ,EACrB,IAAI,EAAC,UAAU,EACf,WAAW,EAAE,wBAAwB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa,EAC7E,MAAM,EAAE,CAAC,CAAC,QAAQ,IAAI,wBAAwB,CAAC,IAAI,0BAA0B,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACrG,QAAQ,EAAE,kBAAkB,IAAI,gBAAgB,EAChD,QAAQ,EAAE,gBAAgB,EAC1B,SAAS,EAAE,eAAe,EAC1B,KAAK,EAAE,QAAQ,EACf,IAAI,EAAC,OAAO,GACZ,IACD,CACJ,EAGF,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,KAAK,CAAC,oBAAoB,IAAI,CACvD,gCAAK,KAAK,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,YACjE,gBAAgB,IAAI,eAAe,EAAE,iCAAiC,IAAI,CACzE,uBAAC,6DAA6B,IAC5B,QAAQ,EAAE,CAAC,0BAA0B,EACrC,YAAY,EAAE,eAAe,KAAK,OAAO,EACzC,YAAY,EAAE,eAAe,KAAK,OAAO,EACzC,QAAQ,EAAE,aAAa,GACvB,CACH,GACG,CACP,IACG,EACN,wBAAC,8BAAc,eACb,uBAAC,sBAAM,IAAC,SAAS,EAAC,kCAAkC,EAAC,SAAS,EAAC,iBAAiB,EAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,YACzH,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,uBAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,uBAAW,CAAC,SAAS,CAAC,YAAY,CAAC,GAClG,EACT,uBAAC,sBAAM,IAAC,SAAS,EAAC,gCAAgC,EAAC,SAAS,EAAC,SAAS,EAAC,OAAO,EAAE,YAAY,YACzF,uBAAW,CAAC,SAAS,CAAC,eAAe,CAAC,GAChC,IACM,IACJ,EAGd,oBAAoB,EAAE,EAGtB,CAAC,kBAAkB,IAAI,gBAAgB,CAAC,IAAI,CAC3C,gCAAK,SAAS,EAAC,8BAA8B,YAC3C,uBAAC,8BAAc,IAAC,aAAa,SAAG,GAC5B,CACP,IACK,GACJ,CACP,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { BeEvent, Guid } from \"@itwin/core-bentley\";\nimport { IModelApp, MapLayerSource, MapLayerSourceStatus, NotifyMessageDetails, OutputMessagePriority } from \"@itwin/core-frontend\";\nimport { SvgStatusWarning, SvgTechnicalPreviewMini } from \"@itwin/itwinui-icons-color-react\";\nimport { Button, Icon, Input, LabeledInput, Modal, ModalButtonBar, ModalContent, ProgressLinear } from \"@itwin/itwinui-react\";\nimport { CustomParamsMappingStorage } from \"../../CustomParamsMappingStorage\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { CustomParamUtils } from \"../../CustomParamUtils\";\nimport { MapLayerPreferences } from \"../../MapLayerPreferences\";\nimport { MapLayersUI } from \"../../mapLayers\";\nimport { useCrossOriginPopup } from \"../hooks/useCrossOriginPopup\";\nimport { SelectCustomParam } from \"./SelectCustomParam\";\nimport { SelectMapFormat } from \"./SelectMapFormat\";\nimport { UserPreferencesStorageOptions } from \"./UserPreferencesStorageOptions\";\n\nimport type { ImageMapLayerSettings } from \"@itwin/core-common\";\nimport type { MapLayerAccessClient, MapLayerSourceValidation, ScreenViewport } from \"@itwin/core-frontend\";\nimport type { MapLayerOptions } from \"../Interfaces\";\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\nconst URL_SCHEMES = {\n http: \"http://\",\n https: \"https://\",\n};\n\nexport type LayerCreationMode = \"single\" | \"multiple\";\ninterface MapUrlDialogProps {\n activeViewport?: ScreenViewport;\n onOkResult: (result?: SourceState) => void;\n onCancelResult?: () => void;\n mapLayerOptions?: MapLayerOptions;\n\n // An optional layer definition can be provide to enable the edit mode\n signInModeArgs?: {\n layer: ImageMapLayerSettings;\n validation?: MapLayerSourceValidation;\n source?: MapLayerSource;\n };\n\n mapLayerSourceToEdit?: MapLayerSource;\n}\n\nexport interface SourceState {\n source: MapLayerSource;\n validation: MapLayerSourceValidation;\n customParamIdx?: { [key: string]: string };\n privateCustomParamIdx?: { [key: string]: string };\n}\n\nexport function MapUrlDialog(props: MapUrlDialogProps) {\n const { onOkResult, mapLayerOptions } = props;\n\n const getMapUrlFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.url;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.url;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getMapNameFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.name;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.name;\n }\n return \"\";\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getFormatFromProps = React.useCallback(() => {\n if (props.mapLayerSourceToEdit) {\n return props.mapLayerSourceToEdit.formatId;\n } else if (props.signInModeArgs) {\n return props.signInModeArgs.layer.formatId;\n }\n return undefined;\n }, [props.mapLayerSourceToEdit, props.signInModeArgs]);\n\n const getCustomParamsMapping = React.useCallback((url: string): string[] => {\n const cpMappingStorage = new CustomParamsMappingStorage();\n const cpMapping = cpMappingStorage.get(url.toLowerCase());\n if (cpMapping && !Array.isArray(cpMapping)) {\n return cpMapping.customParamNames;\n }\n return [];\n }, []);\n\n const [dialogTitle] = React.useState(\n MapLayersUI.localization.getLocalizedString(\n props.signInModeArgs || props.mapLayerSourceToEdit ? \"mapLayers:CustomAttach.EditCustomLayer\" : \"mapLayers:CustomAttach.AttachCustomLayer\",\n ),\n );\n const [typeLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Type\"));\n const [nameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.Name\"));\n const [nameInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NameInputPlaceHolder\"));\n const [urlLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.URL\"));\n const [urlInputPlaceHolder] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.UrlInputPlaceHolder\"));\n const [missingCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.MissingCredentials\"));\n const [invalidCredentialsLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCredentials\"));\n const [externalLoginTitle] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLogin\"));\n const [externalLoginFailedMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginFailed\"));\n const [externalLoginSucceededMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginSucceeded\"));\n const [externalLoginWaitingMsg] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginWaiting\"));\n const [externalLoginTryAgainLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ExternalLoginTryAgain\"));\n const [serverRequireCredentials, setServerRequireCredentials] = React.useState(false);\n const [invalidCredentialsProvided, setInvalidCredentialsProvided] = React.useState(false);\n const [layerAttachPending, setLayerAttachPending] = React.useState(false);\n const [layerAuthPending, setLayerAuthPending] = React.useState(false);\n const [mapUrl, setMapUrl] = React.useState(getMapUrlFromProps());\n const [mapName, setMapName] = React.useState(getMapNameFromProps());\n const [userName, setUserName] = React.useState(\"\");\n const [password, setPassword] = React.useState(\"\");\n const [noSaveSettingsWarning] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.NoSaveSettingsWarning\"));\n const [passwordLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Password\"));\n const [passwordRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.PasswordRequired\"));\n const [userNameLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.Username\"));\n const [userNameRequiredLabel] = React.useState(MapLayersUI.localization.getLocalizedString(\"mapLayers:AuthenticationInputs.UsernameRequired\"));\n const [settingsStorage, setSettingsStorageRadio] = React.useState(\"iTwin\");\n const [oauthProcessSucceeded, setOAuthProcessSucceeded] = React.useState<undefined | boolean>(undefined);\n const [showOauthPopup, setShowOauthPopup] = React.useState(false);\n const [externalLoginUrl, setExternalLoginUrl] = React.useState<string | undefined>();\n const [onOauthProcessEnd] = React.useState(new BeEvent());\n const [accessClient, setAccessClient] = React.useState<MapLayerAccessClient | undefined>();\n const [isAccessClientInitialized, setAccessClientInitialized] = React.useState(false);\n const [shouldAutoAttachSource, setShouldAutoAttachSource] = React.useState(true);\n const [incompatibleFormat, setIncompatibleFormat] = React.useState(false);\n\n const [mapType, setMapType] = React.useState(getFormatFromProps() ?? \"ArcGIS\");\n const [customParamNamesChangedByUser, SetCustomParamNamesChangedByUser] = React.useState<boolean>(false);\n const [customParamNames, setCustomParamNames] = React.useState<string[] | undefined>(() => {\n if (mapUrl) {\n return getCustomParamsMapping(mapUrl);\n }\n return undefined;\n });\n\n // 'isMounted' is used to prevent any async operation once the hook has been\n // unloaded. Otherwise we get a 'Can't perform a React state update on an unmounted component.' warning in the console.\n const isMounted = React.useRef(false);\n React.useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n const [isSettingsStorageAvailable] = React.useState(MapLayersUI.iTwinConfig && props?.activeViewport?.iModel?.iTwinId);\n const [hasImodelContext] = React.useState(\n props?.activeViewport?.iModel?.iTwinId !== undefined &&\n props.activeViewport.iModel.iTwinId !== Guid.empty &&\n props?.activeViewport?.iModel?.iModelId !== undefined &&\n props?.activeViewport.iModel.iModelId !== Guid.empty,\n );\n\n const handleCancel = React.useCallback(() => {\n if (props.onCancelResult) {\n props.onCancelResult();\n return;\n }\n }, [props]);\n\n const onUsernameChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setUserName(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setUserName, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const onPasswordChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setPassword(event.target.value);\n if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false);\n }\n },\n [setPassword, invalidCredentialsProvided, setInvalidCredentialsProvided],\n );\n\n const handleArcGisLogin = React.useCallback(() => {\n setLayerAuthPending(true);\n setShowOauthPopup(true);\n if (oauthProcessSucceeded === false) {\n setOAuthProcessSucceeded(undefined);\n }\n }, [oauthProcessSucceeded]);\n\n // return true if authorization is needed\n const updateAuthState = React.useCallback(\n async (source: MapLayerSource, sourceValidation: MapLayerSourceValidation) => {\n const sourceRequireAuth = sourceValidation.status === MapLayerSourceStatus.RequireAuth;\n let invalidCredentials = sourceValidation.status === MapLayerSourceStatus.InvalidCredentials;\n if (sourceRequireAuth) {\n let hasTokenEndPoint = false;\n const settings = source.toLayerSettings();\n\n if (accessClient !== undefined && accessClient.getTokenServiceEndPoint !== undefined && settings !== undefined) {\n try {\n const tokenEndpoint = await accessClient.getTokenServiceEndPoint(settings.url);\n if (tokenEndpoint !== undefined) {\n const loginUrl = tokenEndpoint.getLoginUrl();\n setExternalLoginUrl(loginUrl);\n hasTokenEndPoint = true;\n }\n } catch {}\n } else if (userName.length > 0 || password.length > 0) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n\n if (!hasTokenEndPoint && (userName.length > 0 || password.length > 0)) {\n // This is a patch until @itwin\\core-frontend return the expected 'InvalidCredentials' status.\n invalidCredentials = true;\n }\n }\n setServerRequireCredentials(sourceRequireAuth || invalidCredentials);\n if (invalidCredentials) {\n setInvalidCredentialsProvided(true);\n } else if (invalidCredentialsProvided) {\n setInvalidCredentialsProvided(false); // flag reset\n }\n\n return sourceRequireAuth || invalidCredentials;\n },\n [accessClient, invalidCredentialsProvided, password.length, userName.length],\n );\n\n const onNameChange = React.useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n setMapName(event.target.value);\n }, []);\n\n const onRadioChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setSettingsStorageRadio(event.target.value);\n },\n [setSettingsStorageRadio],\n );\n\n const onUrlChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const value = event.target.value;\n setMapUrl(value);\n\n if (!customParamNamesChangedByUser) {\n if (value === \"\") {\n setCustomParamNames(undefined);\n } else {\n const paramNames = getCustomParamsMapping(value);\n setCustomParamNames(paramNames);\n }\n }\n },\n [getCustomParamsMapping, customParamNamesChangedByUser],\n );\n\n const createSource = React.useCallback(\n (url: string) => {\n let source: MapLayerSource | undefined;\n if (url && mapName) {\n source = MapLayerSource.fromJSON({ url, name: mapName, formatId: mapType });\n\n // Set credentials separately since they are not part of JSON\n if (source) {\n source.userName = userName || undefined; // When there is no value, empty string is always returned, in this case force it to undefined,\n source.password = password || undefined;\n\n if (customParamNames) {\n CustomParamUtils.setSourceCustomParams(source, customParamNames);\n }\n }\n }\n return source;\n },\n [customParamNames, mapName, mapType, password, userName],\n );\n\n const handleOk = React.useCallback(() => {\n const mapUrlLow = mapUrl.toLowerCase();\n // Append 'https://' if url is missing scheme\n let url = mapUrl;\n if (!mapUrlLow.startsWith(URL_SCHEMES.http) && !mapUrlLow.startsWith(URL_SCHEMES.https)) {\n url = `${URL_SCHEMES.https}${mapUrl}`;\n setMapUrl(url);\n }\n\n const source = createSource(url);\n if (source === undefined || props.mapLayerSourceToEdit) {\n onOkResult();\n\n if (source === undefined) {\n // Close the dialog and inform end user something went wrong.\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerLayerSourceCreationFailed\");\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error: msgError, sourceName: mapName });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n return;\n }\n\n // Store custom params mapping\n if (customParamNames) {\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n }\n\n // Simply change the source definition in the setting service\n if (props.mapLayerSourceToEdit !== undefined) {\n // Apply changes to original source object\n props.mapLayerSourceToEdit.savedQueryParams = { ...source.savedQueryParams };\n props.mapLayerSourceToEdit.unsavedQueryParams = { ...source.unsavedQueryParams };\n\n const vp = props.activeViewport;\n void (async () => {\n if (isSettingsStorageAvailable && vp?.iModel?.iTwinId) {\n try {\n await MapLayerPreferences.replaceSource(props.mapLayerSourceToEdit!, source, vp.iModel.iTwinId, vp?.iModel.iModelId);\n } catch {\n const errorMessage = IModelApp.localization.getLocalizedString(\"mapLayers:Messages.MapLayerEditError\", {\n layerName: props.mapLayerSourceToEdit?.name,\n });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, errorMessage));\n return;\n }\n }\n })();\n return;\n }\n }\n\n // Attach source asynchronously.\n void (async () => {\n try {\n setLayerAttachPending(true);\n const validation = await source.validateSource(true);\n\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n\n if (validation.status === MapLayerSourceStatus.Valid) {\n // Update service settings if storage is available and we are not prompting user for credentials\n if (isSettingsStorageAvailable && !props.signInModeArgs) {\n const storeOnIModel = hasImodelContext ? \"Model\" === settingsStorage : undefined;\n const vp = props.activeViewport;\n if (vp?.iModel.iTwinId && !(await MapLayerPreferences.storeSource(source, vp.iModel.iTwinId, vp.iModel.iModelId, storeOnIModel))) {\n const msgError = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerPreferencesStoreFailed\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msgError));\n }\n }\n\n // Link an API key to this map-layer URL\n const customParamIdx: { [key: string]: string } = {};\n const privateCustomParamIdx: { [key: string]: string } = {};\n if (customParamNames && customParamNames.length > 0) {\n // Link the map-layers URL custom params.\n const cpmStorage = new CustomParamsMappingStorage();\n cpmStorage.save(url.toLowerCase(), { customParamNames });\n\n const cpStorage = new CustomParamsStorage();\n customParamNames.forEach((customParamName) => {\n const items = cpStorage.get(customParamName);\n if (items && !Array.isArray(items)) {\n (items.secret ? privateCustomParamIdx : customParamIdx)[items.key] = items.value;\n }\n });\n }\n\n onOkResult({ source, validation, customParamIdx, privateCustomParamIdx });\n } else if (validation.status === MapLayerSourceStatus.InvalidCoordinateSystem) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.InvalidCoordinateSystem\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult({ source, validation });\n } else if (validation.status === MapLayerSourceStatus.IncompatibleFormat) {\n setIncompatibleFormat(true);\n } else {\n const authNeeded = await updateAuthState(source, validation);\n if (!authNeeded) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:CustomAttach.ValidationError\");\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, `${msg} ${source.url}`));\n onOkResult({ source, validation });\n }\n }\n } catch (error) {\n const msg = MapLayersUI.localization.getLocalizedString(\"mapLayers:Messages.MapLayerAttachError\", { error, sourceName: source.name });\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, msg));\n onOkResult();\n }\n })();\n }, [\n mapUrl,\n createSource,\n props.mapLayerSourceToEdit,\n props.activeViewport,\n props.signInModeArgs,\n onOkResult,\n customParamNames,\n mapName,\n isSettingsStorageAvailable,\n hasImodelContext,\n settingsStorage,\n updateAuthState,\n ]);\n\n React.useEffect(() => {\n const handleOAuthProcessEnd = (success: boolean, _state: any) => {\n onOauthProcessEnd.raiseEvent(success, _state);\n };\n\n const ac = IModelApp.mapLayerFormatRegistry.getAccessClient(mapType);\n if (ac?.onOAuthProcessEnd) {\n setAccessClient(ac); // cache it, so we don't need to make another lookup;\n ac.onOAuthProcessEnd.addListener(handleOAuthProcessEnd);\n }\n setAccessClientInitialized(true);\n return () => {\n if (ac?.onOAuthProcessEnd) {\n ac.onOAuthProcessEnd.removeListener(handleOAuthProcessEnd);\n }\n\n setAccessClient(undefined);\n setAccessClientInitialized(false);\n };\n }, [mapType, onOauthProcessEnd, setAccessClient]);\n\n const resetSignInState = React.useCallback(() => {\n setServerRequireCredentials(false);\n setInvalidCredentialsProvided(false);\n setShowOauthPopup(false);\n setOAuthProcessSucceeded(undefined);\n setExternalLoginUrl(undefined);\n }, []);\n\n // After a map type chang(or setting a new custom query Parameter), make sure the different Oauth states are reset.\n React.useEffect(() => {\n resetSignInState();\n }, [mapType, resetSignInState]);\n\n // After a map type change, make sure the different Oauth states are reset.\n React.useEffect(() => {\n setIncompatibleFormat(false);\n }, [mapType, mapUrl]);\n\n // The first time the dialog is loaded and we already know the layer requires auth. (i.e ImageryProvider already made an attempt)\n // makes a request to discover the authentification types and adjust UI accordingly (i.e. username/password fields, Oauth popup)\n // Without this effect, user would have to manually click the 'OK' button in order to trigger the layer connection.\n React.useEffect(() => {\n // Attach source asynchronously.\n void (async () => {\n if (isAccessClientInitialized && shouldAutoAttachSource && props.signInModeArgs !== undefined) {\n try {\n let source = props.signInModeArgs.source;\n let validation = props.signInModeArgs.validation;\n if (!source || !validation) {\n // In some cases we don't know why the layer failed to attach, so we need to go through validation process\n source = MapLayerSource.fromJSON({\n url: props.signInModeArgs.layer.url,\n name: props.signInModeArgs.layer.name,\n formatId: props.signInModeArgs.layer.formatId,\n });\n\n if (source !== undefined) {\n if (props.signInModeArgs.layer.savedQueryParams) {\n source.savedQueryParams = { ...props.signInModeArgs.layer.savedQueryParams };\n }\n if (props.signInModeArgs.layer.unsavedQueryParams) {\n source.unsavedQueryParams = { ...props.signInModeArgs.layer.unsavedQueryParams };\n }\n\n setLayerAttachPending(true);\n\n validation = await source.validateSource(true);\n if (isMounted.current) {\n setLayerAttachPending(false);\n }\n }\n }\n if (source && validation) {\n setShouldAutoAttachSource(false);\n await updateAuthState(source, validation);\n }\n } catch {}\n }\n })();\n }, [isAccessClientInitialized, props.signInModeArgs, shouldAutoAttachSource, updateAuthState]);\n\n const dialogContainer = React.useRef<HTMLDivElement>(null);\n\n const readyToSave = React.useCallback(() => {\n const credentialsSet = !!userName && !!password;\n const ready =\n !!mapUrl &&\n !!mapName &&\n !layerAttachPending &&\n (!serverRequireCredentials || credentialsSet) &&\n !invalidCredentialsProvided &&\n !incompatibleFormat &&\n (externalLoginUrl === undefined || (externalLoginUrl !== undefined && oauthProcessSucceeded));\n return ready;\n }, [\n userName,\n password,\n mapUrl,\n mapName,\n layerAttachPending,\n serverRequireCredentials,\n invalidCredentialsProvided,\n incompatibleFormat,\n externalLoginUrl,\n oauthProcessSucceeded,\n ]);\n\n const handleOnKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (event.key === \"Enter\") {\n if (readyToSave()) {\n handleOk();\n }\n }\n },\n [handleOk, readyToSave],\n );\n\n // onOauthProcessEnd events handler\n React.useEffect(() => {\n const handleOauthProcess = (success: boolean, _state: any) => {\n setLayerAuthPending(false);\n if (success) {\n setOAuthProcessSucceeded(true);\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n handleOk(); // Add the layer the same way the user would do by clicking 'ok'\n } else {\n setShowOauthPopup(false);\n setLayerAttachPending(false);\n setOAuthProcessSucceeded(false);\n }\n };\n\n onOauthProcessEnd.addListener(handleOauthProcess);\n return () => {\n onOauthProcessEnd.removeListener(handleOauthProcess);\n };\n }, [handleOk, onOauthProcessEnd]);\n\n //\n // Monitors authentication method changes\n React.useEffect(() => {\n if (serverRequireCredentials && oauthProcessSucceeded === undefined && externalLoginUrl !== undefined) {\n handleArcGisLogin();\n }\n }, [oauthProcessSucceeded, externalLoginUrl, handleArcGisLogin, serverRequireCredentials]);\n\n // Monitors Oauth2 popup was closed\n const handleOAuthPopupClose = React.useCallback(() => {\n setShowOauthPopup(false);\n setLayerAuthPending(false);\n if (oauthProcessSucceeded === undefined) {\n setOAuthProcessSucceeded(false);\n } // indicates there was a failed attempt\n }, [oauthProcessSucceeded]);\n\n // Utility function to get warning message section\n function renderWarningMessage(): React.ReactNode {\n let warningMessage: string | undefined;\n\n // Get the proper warning message\n if (showOauthPopup) {\n warningMessage = externalLoginWaitingMsg;\n } else if (oauthProcessSucceeded === false) {\n warningMessage = externalLoginFailedMsg;\n } else if (oauthProcessSucceeded === true) {\n warningMessage = externalLoginSucceededMsg;\n } else if (invalidCredentialsProvided) {\n warningMessage = invalidCredentialsLabel;\n } else if (serverRequireCredentials && (!userName || !password)) {\n warningMessage = missingCredentialsLabel;\n }\n\n // Sometimes we want to add an extra node, such as a button\n let extraNode: React.ReactNode;\n if (oauthProcessSucceeded === false) {\n extraNode = (\n <div>\n <Button onClick={handleArcGisLogin}>{externalLoginTryAgainLabel}</Button>\n </div>\n );\n }\n\n if (warningMessage !== undefined) {\n return (\n <div className=\"map-layer-source-warnMessage\">\n <Icon size=\"small\">\n <SvgStatusWarning></SvgStatusWarning>\n </Icon>\n <span className=\"map-layer-source-warnMessage-label\">{warningMessage}</span>\n {extraNode}\n </div>\n );\n } else {\n return <span className=\"map-layer-source-placeholder\">&nbsp;</span>;\n }\n }\n\n // Use a hook to display the popup.\n // The display of the popup is controlled by the 'showOauthPopup' state variable.\n useCrossOriginPopup(showOauthPopup, externalLoginUrl, externalLoginTitle, 450, 450, handleOAuthPopupClose);\n\n return (\n <div ref={dialogContainer}>\n <Modal\n as=\"div\"\n className=\"map-layer-url-dialog\"\n title={dialogTitle}\n isOpen={true}\n onClose={handleCancel}\n portal\n >\n <ModalContent>\n <div className=\"map-layer-source-url\">\n <span className=\"map-layer-source-label\">{typeLabel}</span>\n <SelectMapFormat\n value={mapType}\n disabled={props.signInModeArgs !== undefined || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n onChange={setMapType}\n mapTypesOptions={mapLayerOptions?.mapTypeOptions}\n status={incompatibleFormat ? \"warning\" : undefined}\n message={incompatibleFormat ? MapLayersUI.translate(\"CustomAttach.InvalidType\") : undefined}\n />\n <span className=\"map-layer-source-label\">{nameLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={nameInputPlaceHolder}\n onChange={onNameChange}\n value={mapName}\n disabled={!!props.signInModeArgs || layerAttachPending || layerAuthPending}\n />\n <span className=\"map-layer-source-label\">{urlLabel}</span>\n <Input\n className=\"map-layer-source-input\"\n placeholder={urlInputPlaceHolder}\n onKeyDown={handleOnKeyDown}\n onChange={onUrlChange}\n disabled={!!props.signInModeArgs || props.mapLayerSourceToEdit !== undefined || layerAttachPending || layerAuthPending}\n value={mapUrl}\n />\n <span className=\"map-layer-source-label\">\n {MapLayersUI.translate(\"CustomAttach.CustomParamsLabel\")}\n <div title={MapLayersUI.translate(\"Labels.TechPreviewBadgeTooltip\")} className=\"map-layer-source-previewBadge-icon\">\n <Icon size=\"small\">\n <SvgTechnicalPreviewMini />\n </Icon>\n </div>\n </span>\n <SelectCustomParam\n value={customParamNames}\n disabled={layerAttachPending || layerAuthPending}\n onChange={(paramNames) => {\n setCustomParamNames(paramNames);\n SetCustomParamNamesChangedByUser(true);\n resetSignInState();\n }}\n />\n\n {serverRequireCredentials &&\n externalLoginUrl === undefined && // external login is handled in popup\n props.mapLayerSourceToEdit === undefined && (\n <>\n <span className=\"map-layer-source-label\">{userNameLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n placeholder={serverRequireCredentials ? userNameRequiredLabel : userNameLabel}\n status={(!userName && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onUsernameChange}\n value={userName}\n size=\"small\"\n />\n\n <span className=\"map-layer-source-label\">{passwordLabel}</span>\n <LabeledInput\n className=\"map-layer-source-input\"\n displayStyle=\"inline\"\n type=\"password\"\n placeholder={serverRequireCredentials ? passwordRequiredLabel : passwordLabel}\n status={(!password && serverRequireCredentials) || invalidCredentialsProvided ? \"warning\" : undefined}\n disabled={layerAttachPending || layerAuthPending}\n onChange={onPasswordChange}\n onKeyDown={handleOnKeyDown}\n value={password}\n size=\"small\"\n />\n </>\n )}\n\n {/* Store settings options, not shown when editing a layer */}\n {!props.signInModeArgs && !props.mapLayerSourceToEdit && (\n <div title={!isSettingsStorageAvailable ? noSaveSettingsWarning : \"\"}>\n {hasImodelContext && mapLayerOptions?.showUserPreferencesStorageOptions && (\n <UserPreferencesStorageOptions\n disabled={!isSettingsStorageAvailable}\n itwinChecked={settingsStorage === \"iTwin\"}\n modelChecked={settingsStorage === \"Model\"}\n onChange={onRadioChange}\n />\n )}\n </div>\n )}\n </div>\n <ModalButtonBar>\n <Button className=\"map-layer-features-footer-button\" styleType=\"high-visibility\" onClick={handleOk} disabled={!readyToSave()}>\n {props?.mapLayerSourceToEdit ? MapLayersUI.translate(\"Dialog.Edit\") : MapLayersUI.translate(\"Dialog.Add\")}\n </Button>\n <Button className=\"map-layer-source-footer-button\" styleType=\"default\" onClick={handleCancel}>\n {MapLayersUI.translate(\"Dialog.Cancel\")}\n </Button>\n </ModalButtonBar>\n </ModalContent>\n\n {/* Warning message */}\n {renderWarningMessage()}\n\n {/* Progress bar */}\n {(layerAttachPending || layerAuthPending) && (\n <div className=\"map-layer-source-progressBar\">\n <ProgressLinear indeterminate />\n </div>\n )}\n </Modal>\n </div>\n );\n}\n"]}
@@ -8,6 +8,8 @@ $default-font-size: var(--iui-font-size-1);
8
8
 
9
9
  .map-layer-url-dialog {
10
10
  z-index: var(--uicore-z-index-cursor-overlay);
11
+ min-height: 120px;
12
+ max-width: 600px;
11
13
  }
12
14
 
13
15
  .map-layer-url-dialog-content {
@@ -1,4 +1,5 @@
1
1
  import "./MapUrlDialog.scss";
2
+ import "./SelectCustomParam.scss";
2
3
  interface SelectCustomParamProps {
3
4
  value?: string[];
4
5
  disabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCustomParam.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAQ7B,UAAU,sBAAsB;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA8D9D"}
1
+ {"version":3,"file":"SelectCustomParam.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,0BAA0B,CAAC;AAQlC,UAAU,sBAAsB;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,2CA6D9D"}
@@ -31,6 +31,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
31
31
  *--------------------------------------------------------------------------------------------*/
32
32
  // cSpell:ignore Modeless WMTS
33
33
  require("./MapUrlDialog.scss");
34
+ require("./SelectCustomParam.scss");
34
35
  const React = __importStar(require("react"));
35
36
  const itwinui_react_1 = require("@itwin/itwinui-react");
36
37
  const CustomParamsStorage_1 = require("../../CustomParamsStorage");
@@ -71,6 +72,6 @@ function SelectCustomParam(props) {
71
72
  setParamValues(undefined);
72
73
  }
73
74
  }, []);
74
- return ((0, jsx_runtime_1.jsx)("div", { className: "map-layer-custom-param-select", title: customParams.length === 0 ? mapLayers_1.MapLayersUI.translate("CustomParamSelect.DisabledTitle") : undefined, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { className: "map-layer-source-select", options: customParams, value: paramValues, disabled: props.disabled || customParams.length === 0, menuStyle: { zIndex: 100000 }, onChange: handleOnChange, size: "small", onKeyDown: handleKeyDown, multiple: true }) }));
75
+ return ((0, jsx_runtime_1.jsx)("div", { className: "map-layer-custom-param-select", title: customParams.length === 0 ? mapLayers_1.MapLayersUI.translate("CustomParamSelect.DisabledTitle") : undefined, children: (0, jsx_runtime_1.jsx)(itwinui_react_1.Select, { className: "map-layer-source-select", options: customParams, value: paramValues, disabled: props.disabled || customParams.length === 0, onChange: handleOnChange, size: "small", onKeyDown: handleKeyDown, multiple: true }) }));
75
76
  }
76
77
  //# sourceMappingURL=SelectCustomParam.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectCustomParam.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\nimport type { SelectValueChangeEvent } from \"@itwin/itwinui-react\";\n\ninterface SelectCustomParamProps {\n value?: string[];\n disabled?: boolean;\n onChange?: (value: string[]) => void;\n}\n\nexport function SelectCustomParam(props: SelectCustomParamProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n\n const [paramValues, setParamValues] = React.useState<string[] | undefined>(props.value);\n\n const getCustomParamsFromStorage = React.useCallback(() => {\n const params = storage.get(undefined);\n return params && Array.isArray(params)\n ? params.map((item) => {\n return { value: item.name, label: item.name };\n })\n : [];\n }, [storage]);\n\n const [customParams] = React.useState(() => getCustomParamsFromStorage());\n\n React.useEffect(() => {\n setParamValues(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (val: string, event: SelectValueChangeEvent) => {\n const stateSetter = (prev: string[] | undefined) => {\n const getValue = (): string[] => {\n if (!prev) {\n return [val];\n }\n\n return event === \"removed\" ? prev.filter((v) => val !== v) : [...prev, val];\n };\n const value = getValue();\n if (props.onChange) {\n props.onChange(value);\n }\n return value;\n };\n setParamValues(stateSetter);\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setParamValues(undefined);\n }\n }, []);\n\n return (\n <div className=\"map-layer-custom-param-select\" title={customParams.length === 0 ? MapLayersUI.translate(\"CustomParamSelect.DisabledTitle\") : undefined}>\n <Select<string>\n className=\"map-layer-source-select\"\n options={customParams}\n value={paramValues}\n disabled={props.disabled || customParams.length === 0}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n multiple\n ></Select>\n </div>\n );\n}\n"]}
1
+ {"version":3,"file":"SelectCustomParam.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectCustomParam.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport \"./SelectCustomParam.scss\";\nimport * as React from \"react\";\nimport { Select } from \"@itwin/itwinui-react\";\nimport { CustomParamsStorage } from \"../../CustomParamsStorage\";\nimport { MapLayersUI } from \"../../mapLayers\";\n\nimport type { SelectValueChangeEvent } from \"@itwin/itwinui-react\";\n\ninterface SelectCustomParamProps {\n value?: string[];\n disabled?: boolean;\n onChange?: (value: string[]) => void;\n}\n\nexport function SelectCustomParam(props: SelectCustomParamProps) {\n const [storage] = React.useState(() => new CustomParamsStorage());\n\n const [paramValues, setParamValues] = React.useState<string[] | undefined>(props.value);\n\n const getCustomParamsFromStorage = React.useCallback(() => {\n const params = storage.get(undefined);\n return params && Array.isArray(params)\n ? params.map((item) => {\n return { value: item.name, label: item.name };\n })\n : [];\n }, [storage]);\n\n const [customParams] = React.useState(() => getCustomParamsFromStorage());\n\n React.useEffect(() => {\n setParamValues(props.value);\n }, [props.value]);\n\n const handleOnChange = React.useCallback(\n (val: string, event: SelectValueChangeEvent) => {\n const stateSetter = (prev: string[] | undefined) => {\n const getValue = (): string[] => {\n if (!prev) {\n return [val];\n }\n\n return event === \"removed\" ? prev.filter((v) => val !== v) : [...prev, val];\n };\n const value = getValue();\n if (props.onChange) {\n props.onChange(value);\n }\n return value;\n };\n setParamValues(stateSetter);\n },\n [props],\n );\n\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n if (e.code === \"Delete\" || e.key === \"Backspace\") {\n setParamValues(undefined);\n }\n }, []);\n\n return (\n <div className=\"map-layer-custom-param-select\" title={customParams.length === 0 ? MapLayersUI.translate(\"CustomParamSelect.DisabledTitle\") : undefined}>\n <Select<string>\n className=\"map-layer-source-select\"\n options={customParams}\n value={paramValues}\n disabled={props.disabled || customParams.length === 0}\n onChange={handleOnChange}\n size=\"small\"\n onKeyDown={handleKeyDown}\n multiple\n ></Select>\n </div>\n );\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .map-layer-source-select .iui-select-menu {
7
+ z-index: 100000; /* Ensure the dropdown selection is on top of the Modal that utilizes this component */
8
+ }
@@ -1,4 +1,5 @@
1
1
  import "./MapUrlDialog.scss";
2
+ import "./SelectMapFormat.scss";
2
3
  import * as React from "react";
3
4
  import type { MapTypesOptions } from "../Interfaces";
4
5
  export declare const MAP_TYPES: {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectMapFormat.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAwC1D"}
1
+ {"version":3,"file":"SelectMapFormat.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":"AAMA,OAAO,qBAAqB,CAAC;AAC7B,OAAO,wBAAwB,CAAC;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAMrD,eAAO,MAAM,SAAS;;;;;;CAMrB,CAAC;AAEF,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,2CAuC1D"}
@@ -32,6 +32,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
32
32
  *--------------------------------------------------------------------------------------------*/
33
33
  // cSpell:ignore Modeless WMTS
34
34
  require("./MapUrlDialog.scss");
35
+ require("./SelectMapFormat.scss");
35
36
  const React = __importStar(require("react"));
36
37
  const core_frontend_1 = require("@itwin/core-frontend");
37
38
  const itwinui_react_1 = require("@itwin/itwinui-react");
@@ -68,6 +69,6 @@ function SelectMapFormat(props) {
68
69
  props.onChange(value);
69
70
  }
70
71
  }, [props]);
71
- return ((0, jsx_runtime_1.jsx)(itwinui_react_1.LabeledSelect, { className: "map-layer-source-select", options: mapFormats, value: mapFormat, menuStyle: { zIndex: 100000 }, disabled: props.disabled, onChange: handleOnChange, size: "small" }));
72
+ return ((0, jsx_runtime_1.jsx)(itwinui_react_1.LabeledSelect, { className: "map-layer-source-select", options: mapFormats, value: mapFormat, disabled: props.disabled, onChange: handleOnChange, size: "small" }));
72
73
  }
73
74
  //# sourceMappingURL=SelectMapFormat.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectMapFormat.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA,0CAwCC;;AAlFD;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,6CAA+B;AAC/B,wDAAiD;AACjD,wDAAqD;AAKrD,QAAQ;AACR,wEAAwE;AACxE,4EAA4E;AAC5E,wDAAwD;AAC3C,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC;AAkBF,SAAgB,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,iBAAS,CAAC,MAAM,CAAC,CAAC;IAElF,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAA2B,EAAE;QAC/D,MAAM,OAAO,GAA2B;YACtC,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE;YACpD,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE;YAC9C,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE;SACjD,CAAC;QACF,IAAI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,yBAAS,CAAC,sBAAsB,CAAC,YAAY,CAAC,iBAAS,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,uBAAC,6BAAa,IACZ,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,GACZ,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport * as React from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { LabeledSelect } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { MapTypesOptions } from \"../Interfaces\";\n\n// TODO:\n// Remove this structure and iterate over the registry's active formats.\n// Still need a proper way to exclude some format, like we currently do with\n// 'TileUrl' without the need to hardcode any format Id.\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\n\ninterface SelectMapFormatProps {\n value?: string;\n disabled?: boolean;\n mapTypesOptions?: MapTypesOptions;\n onChange?: (mapType: string) => void;\n /**\n * Message below the select. Does not apply to 'inline' select.\n */\n message?: React.ReactNode;\n /**\n * Status of the select.\n * @default ''\n */\n status?: \"positive\" | \"warning\" | \"negative\";\n}\n\nexport function SelectMapFormat(props: SelectMapFormatProps) {\n const [mapFormat, setMapFormat] = React.useState(props.value ?? MAP_TYPES.arcGis);\n\n const [mapFormats] = React.useState((): SelectOption<string>[] => {\n const formats: SelectOption<string>[] = [\n { value: MAP_TYPES.arcGis, label: MAP_TYPES.arcGis },\n { value: MAP_TYPES.wms, label: MAP_TYPES.wms },\n { value: MAP_TYPES.wmts, label: MAP_TYPES.wmts },\n ];\n if (props.mapTypesOptions?.supportTileUrl) {\n formats.push({ value: MAP_TYPES.tileUrl, label: MAP_TYPES.tileUrl });\n }\n\n if (IModelApp.mapLayerFormatRegistry.isRegistered(MAP_TYPES.arcGisFeature)) {\n formats.push({ value: MAP_TYPES.arcGisFeature, label: MAP_TYPES.arcGisFeature });\n }\n return formats;\n });\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setMapFormat(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n return (\n <LabeledSelect\n className=\"map-layer-source-select\"\n options={mapFormats}\n value={mapFormat}\n menuStyle={{ zIndex: 100000 }} // Ensure the dropdown selection is on top of the Modal that utilizes this component\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n />\n );\n}\n"]}
1
+ {"version":3,"file":"SelectMapFormat.js","sourceRoot":"","sources":["../../../../src/ui/widget/SelectMapFormat.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,0CAuCC;;AAlFD;;;gGAGgG;AAChG,8BAA8B;AAE9B,+BAA6B;AAC7B,kCAAgC;AAChC,6CAA+B;AAC/B,wDAAiD;AACjD,wDAAqD;AAKrD,QAAQ;AACR,wEAAwE;AACxE,4EAA4E;AAC5E,wDAAwD;AAC3C,QAAA,SAAS,GAAG;IACvB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;CAC/B,CAAC;AAkBF,SAAgB,eAAe,CAAC,KAA2B;IACzD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,iBAAS,CAAC,MAAM,CAAC,CAAC;IAElF,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,GAA2B,EAAE;QAC/D,MAAM,OAAO,GAA2B;YACtC,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAS,CAAC,MAAM,EAAE;YACpD,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE,KAAK,EAAE,iBAAS,CAAC,GAAG,EAAE;YAC9C,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE,KAAK,EAAE,iBAAS,CAAC,IAAI,EAAE;SACjD,CAAC;QACF,IAAI,KAAK,CAAC,eAAe,EAAE,cAAc,EAAE,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,KAAK,EAAE,iBAAS,CAAC,OAAO,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,yBAAS,CAAC,sBAAsB,CAAC,YAAY,CAAC,iBAAS,CAAC,aAAa,CAAC,EAAE,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,KAAK,EAAE,iBAAS,CAAC,aAAa,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CACtC,CAAC,KAAa,EAAE,EAAE;QAChB,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EACD,CAAC,KAAK,CAAC,CACR,CAAC;IAEF,OAAO,CACL,uBAAC,6BAAa,IACZ,SAAS,EAAC,yBAAyB,EACnC,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAC,OAAO,GACZ,CACH,CAAC;AACJ,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n// cSpell:ignore Modeless WMTS\n\nimport \"./MapUrlDialog.scss\";\nimport \"./SelectMapFormat.scss\";\nimport * as React from \"react\";\nimport { IModelApp } from \"@itwin/core-frontend\";\nimport { LabeledSelect } from \"@itwin/itwinui-react\";\n\nimport type { SelectOption } from \"@itwin/itwinui-react\";\nimport type { MapTypesOptions } from \"../Interfaces\";\n\n// TODO:\n// Remove this structure and iterate over the registry's active formats.\n// Still need a proper way to exclude some format, like we currently do with\n// 'TileUrl' without the need to hardcode any format Id.\nexport const MAP_TYPES = {\n wms: \"WMS\",\n arcGis: \"ArcGIS\",\n wmts: \"WMTS\",\n tileUrl: \"TileURL\",\n arcGisFeature: \"ArcGISFeature\",\n};\n\ninterface SelectMapFormatProps {\n value?: string;\n disabled?: boolean;\n mapTypesOptions?: MapTypesOptions;\n onChange?: (mapType: string) => void;\n /**\n * Message below the select. Does not apply to 'inline' select.\n */\n message?: React.ReactNode;\n /**\n * Status of the select.\n * @default ''\n */\n status?: \"positive\" | \"warning\" | \"negative\";\n}\n\nexport function SelectMapFormat(props: SelectMapFormatProps) {\n const [mapFormat, setMapFormat] = React.useState(props.value ?? MAP_TYPES.arcGis);\n\n const [mapFormats] = React.useState((): SelectOption<string>[] => {\n const formats: SelectOption<string>[] = [\n { value: MAP_TYPES.arcGis, label: MAP_TYPES.arcGis },\n { value: MAP_TYPES.wms, label: MAP_TYPES.wms },\n { value: MAP_TYPES.wmts, label: MAP_TYPES.wmts },\n ];\n if (props.mapTypesOptions?.supportTileUrl) {\n formats.push({ value: MAP_TYPES.tileUrl, label: MAP_TYPES.tileUrl });\n }\n\n if (IModelApp.mapLayerFormatRegistry.isRegistered(MAP_TYPES.arcGisFeature)) {\n formats.push({ value: MAP_TYPES.arcGisFeature, label: MAP_TYPES.arcGisFeature });\n }\n return formats;\n });\n\n const handleOnChange = React.useCallback(\n (value: string) => {\n setMapFormat(value);\n if (props.onChange) {\n props.onChange(value);\n }\n },\n [props],\n );\n\n return (\n <LabeledSelect\n className=\"map-layer-source-select\"\n options={mapFormats}\n value={mapFormat}\n disabled={props.disabled}\n onChange={handleOnChange}\n size=\"small\"\n />\n );\n}\n"]}
@@ -0,0 +1,8 @@
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+
6
+ .map-layer-source-select .iui-select-menu {
7
+ z-index: 100000; /* Ensure the dropdown selection is on top of the Modal that utilizes this component */
8
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"AAMA,OAAO,sBAAsB,CAAC;AAmC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAsBvE,MAAM,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAsHtD"}
1
+ {"version":3,"file":"SubLayersTree.d.ts","sourceRoot":"","sources":["../../../../src/ui/widget/SubLayersTree.tsx"],"names":[],"mappings":"AAIA,OAAO,sBAAsB,CAAC;AAoC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAsBvE,MAAM,MAAM,yBAAyB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAK,IAAI,CAAC;AAC9F,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC;IAChF,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CAWxD;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,UAAU,GAAG,KAAK,CAAC;IAClC,UAAU,EAAE,uBAAuB,CAAC;IACpC,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,2CAsHtD"}
@@ -30,15 +30,15 @@ const jsx_runtime_1 = require("react/jsx-runtime");
30
30
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
31
31
  * See LICENSE.md in the project root for license terms and full copyright notice.
32
32
  *--------------------------------------------------------------------------------------------*/
33
- const appui_abstract_1 = require("@itwin/appui-abstract");
34
33
  require("./SubLayersTree.scss");
35
34
  const React = __importStar(require("react"));
35
+ const appui_abstract_1 = require("@itwin/appui-abstract");
36
36
  const components_react_1 = require("@itwin/components-react");
37
37
  const itwinui_icons_react_1 = require("@itwin/itwinui-icons-react");
38
38
  const itwinui_react_1 = require("@itwin/itwinui-react");
39
39
  const mapLayers_1 = require("../../mapLayers");
40
- const SubLayersDataProvider_1 = require("./SubLayersDataProvider");
41
40
  const useResizeObserver_1 = require("../hooks/useResizeObserver");
41
+ const SubLayersDataProvider_1 = require("./SubLayersDataProvider");
42
42
  function Toolbar(props) {
43
43
  return ((0, jsx_runtime_1.jsxs)("div", { className: "map-manager-sublayer-tree-toolbar", children: [(0, jsx_runtime_1.jsx)("div", { className: "tree-toolbar-action-buttons", children: props.children }), props.searchField && (0, jsx_runtime_1.jsx)("div", { className: "tree-toolbar-searchbox", children: props.searchField })] }));
44
44
  }
@@ -106,7 +106,7 @@ function SubLayersTree(props) {
106
106
  ? undefined
107
107
  : [
108
108
  (0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { size: "small", label: props.checkboxStyle === "eye" ? mapLayers_1.MapLayersUI.translate("SubLayers.AllOn") : mapLayers_1.MapLayersUI.translate("SelectFeaturesDialog.AllOn"), onClick: async () => changeAll(true), children: props.checkboxStyle === "eye" ? (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityShow, {}) : (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgCheckboxSelect, {}) }, "show-all-btn"),
109
- (0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { style: { marginLeft: "5px" }, size: "small", label: props.checkboxStyle === "eye" ? mapLayers_1.MapLayersUI.translate("SubLayers.AllOff") : mapLayers_1.MapLayersUI.translate("SelectFeaturesDialog.AllOff"), onClick: async () => changeAll(false), children: props.checkboxStyle === "eye" ? (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityHide, {}) : (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgCheckboxDeselect, {}) }, "hide-all-btn"),
109
+ (0, jsx_runtime_1.jsx)(itwinui_react_1.IconButton, { size: "small", className: "tree-toolbar-button-spaced", label: props.checkboxStyle === "eye" ? mapLayers_1.MapLayersUI.translate("SubLayers.AllOff") : mapLayers_1.MapLayersUI.translate("SelectFeaturesDialog.AllOff"), onClick: async () => changeAll(false), children: props.checkboxStyle === "eye" ? (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgVisibilityHide, {}) : (0, jsx_runtime_1.jsx)(itwinui_icons_react_1.SvgCheckboxDeselect, {}) }, "hide-all-btn"),
110
110
  ] }), (0, jsx_runtime_1.jsx)("div", { className: "map-manager-sublayer-tree-content", ref: elementRef, children: width !== undefined && height !== undefined && ((0, jsx_runtime_1.jsx)(components_react_1.ControlledTree, { nodeLoader: nodeLoader, selectionMode: components_react_1.SelectionMode.None, eventsHandler: eventHandler, model: treeModel, treeRenderer: props.checkboxStyle === "eye" ? nodeWithEyeCheckboxTreeRenderer : undefined, nodeHighlightingProps: nodeHighlightingProps, width: width, height: height, noDataRenderer: () => (0, jsx_runtime_1.jsx)("p", { className: "components-controlledTree-errorMessage", children: noResults }) })) })] }) }));
111
111
  }
112
112
  /** TreeEventHandler derived class that handler processing changes to subLayer visibility */