Full Code of awslabs/aws-lex-web-ui for AI

master 40eb7ca44dce cached
162 files
10.0 MB
2.6M tokens
5868 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (10,490K chars total). Download the full file to get everything.
Repository: awslabs/aws-lex-web-ui
Branch: master
Commit: 40eb7ca44dce
Files: 162
Total size: 10.0 MB

Directory structure:
gitextract_vkd5losq/

├── .eslintrc.js
├── .gitattributes
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── NOTICE
├── README-connect-live-chat.md
├── README-css-style.md
├── README-file-upload.md
├── README-qbusiness.md
├── README-streaming-responses.md
├── README.md
├── build/
│   ├── Makefile
│   ├── copy-assets.js
│   ├── create-custom-css.js
│   ├── create-iframe-snippet-file.sh
│   ├── release.sh
│   ├── update-lex-web-ui-config.js
│   └── upload-bootstrap.sh
├── config/
│   ├── base.env.js
│   ├── dist.env.js
│   ├── env.mk
│   ├── full.env.js
│   ├── index.js
│   └── utils/
│       └── merge-config.js
├── dist/
│   ├── 3.5.13_dist_vue.global.prod.js
│   ├── Makefile
│   ├── aws-lex-web-ui.css
│   ├── custom-chatbot-style.css
│   ├── index.html
│   ├── initiate-loader.js
│   ├── lex-web-ui-loader.css
│   ├── lex-web-ui-loader.js
│   ├── lex-web-ui.css
│   ├── lex-web-ui.js
│   ├── material_icons.css
│   ├── parent.html
│   └── wav-worker.js
├── example-css/
│   ├── bright-yellow.css
│   ├── coral-pink.css
│   ├── dark-mode-theme.css
│   ├── elegant-purple-theme.css
│   ├── forest-green.css
│   ├── professional-blue.css
│   ├── sky-blue.css
│   └── sunset-orange.css
├── lex-web-ui/
│   ├── .browserslistrc
│   ├── .editorconfig
│   ├── .eslintignore
│   ├── .eslintrc.cjs
│   ├── .gitignore
│   ├── .sassrc.js
│   ├── README.md
│   ├── READMECONFIGSCREENS.md
│   ├── current/
│   │   ├── user-custom-chatbot-style.css
│   │   └── user-lex-web-ui-loader-config.json
│   ├── index.html
│   ├── package.json
│   ├── plugins/
│   │   ├── asset-handler-plugin.js
│   │   └── banner-plugin.js
│   ├── public/
│   │   ├── img/
│   │   │   └── note.md
│   │   └── index.html
│   ├── scripts/
│   │   └── post-build-css.js
│   ├── src/
│   │   ├── App.vue
│   │   ├── LexApp.vue
│   │   ├── assets/
│   │   │   ├── css-overrides.css
│   │   │   └── silent.ogg
│   │   ├── components/
│   │   │   ├── InputContainer.vue
│   │   │   ├── LexWeb.vue
│   │   │   ├── Message.vue
│   │   │   ├── MessageList.vue
│   │   │   ├── MessageLoading.vue
│   │   │   ├── MessageText.vue
│   │   │   ├── MinButton.vue
│   │   │   ├── RecorderStatus.vue
│   │   │   ├── ResponseCard.vue
│   │   │   └── ToolbarContainer.vue
│   │   ├── config/
│   │   │   ├── .gitattributes
│   │   │   ├── config.awstest.json
│   │   │   ├── config.current.json
│   │   │   ├── config.dev.json
│   │   │   ├── config.prod.json
│   │   │   ├── config.test.json
│   │   │   └── index.js
│   │   ├── init.js
│   │   ├── lex-web-ui.js
│   │   ├── lib/
│   │   │   └── lex/
│   │   │       ├── client.js
│   │   │       ├── recorder.js
│   │   │       └── wav-worker.js
│   │   ├── main.js
│   │   ├── router/
│   │   │   └── index.js
│   │   └── store/
│   │       ├── actions.js
│   │       ├── getters.js
│   │       ├── index.js
│   │       ├── live-chat-handlers.js
│   │       ├── mutations.js
│   │       ├── recorder-handlers.js
│   │       ├── sigv4-handlers.js
│   │       ├── state.js
│   │       └── talkdesk-live-chat-handlers.js
│   ├── test/
│   │   ├── e2e/
│   │   │   ├── custom-assertions/
│   │   │   │   └── elementCount.js
│   │   │   ├── nightwatch.conf.js
│   │   │   ├── runner.js
│   │   │   └── specs/
│   │   │       └── test.js
│   │   ├── integration/
│   │   │   ├── build-modes.test.js
│   │   │   ├── functionality.test.js
│   │   │   └── jest.config.js
│   │   └── unit/
│   │       ├── .eslintrc
│   │       ├── index.js
│   │       ├── karma.conf.js
│   │       └── specs/
│   │           ├── InputContainer.spec.js
│   │           ├── LexWeb.spec.js
│   │           ├── Message.spec.js
│   │           ├── MessageList.spec.js
│   │           ├── RecorderStatus.spec.js
│   │           ├── lex-web-ui.spec.js
│   │           └── store.spec.js
│   └── vite.config.js
├── package.json
├── postcss.config.js
├── server.js
├── src/
│   ├── README.md
│   ├── config/
│   │   ├── .gitattributes
│   │   ├── default-lex-web-ui-loader-config.json
│   │   └── lex-web-ui-loader-config.json
│   ├── dependencies/
│   │   ├── 3.5.13_dist_vue.global.prod.js
│   │   ├── initiate-loader.js
│   │   └── material_icons.css
│   ├── initiate-chat-lambda/
│   │   └── index.js
│   ├── lex-web-ui-loader/
│   │   ├── css/
│   │   │   ├── lex-web-ui-fullpage.css
│   │   │   └── lex-web-ui-iframe.css
│   │   └── js/
│   │       ├── defaults/
│   │       │   ├── dependencies.js
│   │       │   ├── lex-web-ui.js
│   │       │   └── loader.js
│   │       ├── index.js
│   │       └── lib/
│   │           ├── config-loader.js
│   │           ├── dependency-loader.js
│   │           ├── fullpage-component-loader.js
│   │           ├── iframe-component-loader.js
│   │           └── loginutil.js
│   ├── qbusiness-lambda/
│   │   └── index.py
│   ├── streaming-lambda/
│   │   └── index.js
│   └── website/
│       ├── custom-chatbot-style.css
│       ├── iframeparent.html
│       ├── index.css
│       ├── index.html
│       └── parent.html
├── templates/
│   ├── Makefile
│   ├── README.md
│   ├── codebuild-deploy.yaml
│   ├── cognito.yaml
│   ├── cognitouserpoolconfig.yaml
│   ├── custom-resources/
│   │   ├── cfnresponse.py
│   │   ├── codebuild-start.py
│   │   └── s3-cleanup.py
│   ├── lexbot.yaml
│   ├── master.yaml
│   ├── restapi.yaml
│   └── streaming-support.yaml
└── vite.config.js

================================================
FILE CONTENTS
================================================

================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  parser: 'babel-eslint',
  parserOptions: {
    sourceType: 'module'
  },
  env: {
    browser: true,
  },
  extends: 'airbnb-base',
  rules: {
    // allow debugger during development
    'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0,
  }
}


================================================
FILE: .gitattributes
================================================
dist/*.js -diff
dist/*.css -diff
dist/*.map -diff
dist/*.zip -diff


================================================
FILE: .gitignore
================================================
out/
node_modules/
.DS_Store
.idea/
py_modules/
*/*/py_modules/
.kiro/
.vscode/


================================================
FILE: .npmignore
================================================
build
config
img
lex-web-ui
Makefile


================================================
FILE: CHANGELOG.md
================================================
# Change Log
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## [0.24.1] - 2026-05-12
- Updated Python scripts to 3.13 and removed some unneeded dependencies to simplify deployment
- Fixed cross-region deployments where Cognito & Lex region were not being isolated properly
- Fixed issue with live chat Lambda caused by new headers used in the sigv4 implementation

## [0.24.0] - 2026-02-20
- POTENTIAL BREAKING CHANGE: Solutions has been migrated to Vite and will no longer use Webpack. If your solution uses custom Webpack builds it, use caution before pulling in this change.
- Modified postTextMessage action to set previous question and answer as Lex session attributes
- Fixed invalid border-radius value for lex-web-ui-iframe.css which resulted in a visible border when the iFrame was minimized
- Create own implementation of sigv4 signing so that Amplify is not a required dependency

## [0.23.1] - 2025-12-17
- Allow users to specify tel:+x.xxx.xxx.xxxx format phone numbers in message responses and in connect wait for agent messages. This allows users to touch on the phone number on mobile devices to initiate a call.
- Added custom-chatbot-style.css as a dependency to lex-web-ui-loader to allow for enhanced customization
- Hard set the character limit for the text input box element to 1024
- Depedency updates

## [0.23.0] - 2025-10-3
- Remove all reference to Lex v1 as it has been deprecated
- Revamp how token refreshes work to resolve some issues that were introduced when migrating to SDKv3
- Add example CSS files to repo for users who want an easier starting point.

## [0.22.5] - 2025-09-10
- Update live chat text transcription applying redaction when required.
- Fix issue with live chat not closing on browser or window closing.

## [0.22.4] - 2025-08-09
- Fix issue where full page loader was pulling iniitate-loader as a dependency improperly
- Allow empty promptForNameMessage to skip prompting for a name (for Talkdesk integration only). This must be manually updated on the config file.
- Upgrade NodeJS Lambda function to v22 as v18 will be deprecated in the near future.

## [0.22.3] - 2025-06-26
- Fix issue where credentials were not available on web socket initiation in some instances of streaming
- Accessibility improvements

## [0.22.2] - 2025-05-19
- Fix scenarios where cross origin requests did not have credentials passed before iframe loads

## [0.22.1] - 2025-05-10
- Upgrade to latest versions of Vue/Vuetify

## [0.22.0] - 2025-04-15
- Upgrade to AWS SDK v3
- Fix for Connect transcription redaction
- Fix for issue with iframe incompatibility with Firebase login

## [0.21.7] - 2025-01-23
- Add heartbeat for streaming responses to prevent idle timeout of 10 mins

## [0.21.6] - 2024-12-18
- Updatae the Web UI to allow VPC integration with all Lambda functions. This requires your VPC to at a minimum be able to access S3, and additional optional functionality will require additional VPC endpoints to services.
- Package updates to address vulnerabilities. 

## [0.21.5] - 2024-08-15
- Removed pipeline deployment mode as CodeCommit is no longer accepting new repositories
- Cleaned up some issues around lambda layer building 

## [0.21.4] - 2024-07-15
- The Lex Web UI can now act as a passthrough for Q Business, allowing users to converse directly with their Q Business application while inheriting all the features of the Web UI such as embedding, CSS customizations and more.
- Upgraded version of amazon-connect-chatjs 

## [0.21.3] - 2024-06-27
- Dependency & documentation updates
- Fixed a bug that was causing builds on Windows machines to fail
 
## [0.21.2] - 2024-04-24
- Added support for more Connect interactive messages. The UI now supports Panel, QuickReply & Carousel messages.
- Removed the DateTime picker component due to its legacy dependency on Vue 2, please use the DatePicker going forward.
- Cleaned up some dependencies to reduce the amount of polyfills required
- Upgrade all python scripts to 3.10
- Other minor bug fixes and documentation updates.

## [0.21.1] - 2024-03-26
- Updated the streaming feature to be more flexible so users can choose whether or not the fullfilment Lambda should be streaming responses. Additional details can be found in the streaming responses README.
- Added a copy icon so responses from the bot can be easily copy/pasted. This option can be configured manually from the configuration file and is defaulted to 'off'.
- TalkDesk integration is now supported with the Web UI. Please refer to this [blog post](https://aws.amazon.com/blogs/machine-learning/provide-live-agent-assistance-for-your-chatbot-users-with-amazon-lex-and-talkdesk-cloud-contact-center/) for full details.
- Updated broswer targets to only support ES6 browsers.
- Dependency upgrades to address vulnerabilities

## [0.21.0] - 2024-03-01
- Upgraded the existing solution and relevant dependencies to Vue 3. Migrating from Vuetify 1.5 -> 3 in the process, skipping over Vuetify 2 entirely, requiring clean-up and reconfiguration of all UI components. Goal was to get parity in UI from the previous release, which includes some new CSS rules to maintain the look at feel of the previous UI. These changes could result in **breaking changes** to custom CSS despite efforts to maintain backwards compatibilty many Vuetify classes changed names during the upgrade. Please use caution when updating to this version of the Lex Web UI UI.

## [0.20.6] - 2024-02-12
- Emergency fix to upgrade Python function to version 3.8 across the board. As this will end of life later in the year we will release another update soon to move everything to 3.12.

## [0.20.5] - 2024-1-19
- Update Lamdba functions using Node to version 18. This required upgrading the Lambda code to use the JS SDK v3 as well.
- Dependency upgrades to fix critical vulnerabilities.

## [0.20.4] - 2023-12-27
- Add support for file attachments. See new File Uploads README for full details.
- Clean-up & fix issues related to webpack 5 and `npm run` related errors for some build types.

## [0.20.3] - 2023-12-7
- Add streaming support. Refer to Streaming Responses README for full details.
- Fixed bug where CSS was not being properly applied to minimized button color.

## [0.20.2] - 2023-11-28
- Adjust handling of Elicit Intent response to account for no interpretations from Lex. Precreate mp3 audio files needed for voice response as default un-authenticated role can't use Polly to create these responses dynamically.
- Dependency upgrades to fix critical vulnerabilities.

## [0.20.1] - 2023-10-24
- Removed breaking change of adding CSP configurations into Cloudfront. CSP will remain in place on index.html file but Cloudfront CSPs will need to be manually configured. As a result removed MarkdownSupportDomains parameter.
- Minor bug fixes.
- Dependency upgrades to fix critical vulnerabilities.

## [0.20.0] - 2023-09-28
- **BREAKING CHANGE**: Removed all inline scripts and added a CSP header to the index.html as well as CSP configurations to CloudFront. If your bot uses Markdown please not you will need to allow list all domains serving image/video using the MarkdownSupportDomains parameter (parent origin is automatically added to the CSP so no action is required in this case). Existing bots updating to this version & using Markdown **will break** if appropriate domains are not supplied.
- CSS adjustments can now be made directly in the CloudFormation template for some common use cases. If left blank
- Major updates to dependencies and webpack build processes for both the loader & web ui projects.
This update removes all dependency vulnerabilities as of release date.
- Dependencies used by the loader have been internalized to remove calls to external CDNs
- Cognito self-registration is now domain limited. If you want self-registration on you must provide a list of valid domains otherwise self-registration is turned off on the Cognito instance.
- Lowered the default timeout for Connect connections to 60 minutes.

## [0.19.9] - 2023-05-22
- Add configurable parameter to control delay between transcript message send on startup to Connect. Workaround Connect problem with respect to out of order delivery of sent messages.
- Add the ability to configure a precreated CNAME, ACM Certificate, and WAFV2 ACL via template parameters. If the values are left empty default CloudFront distribution url and certificates is used. If a WAFV2 ACl is not supplied then no WAF Acl is configured for use by CloudFront.

## [0.19.8] - 2023-04-15
- Update CloudFormation template to remove ACL on S3 server access logs bucket and replaced with a bucket policy to align with best practices. This will also prevent the template from failing when the default settings for S3 buckets are changed in the near future.
- Fixed issue where multilingual bots were not properly rendering the TimePicker interactive message component

## [0.19.7] - 2023-03-27
- Update to not allow V1 and V2 bots to be selected in CloudFormation parameters 
- Disable initial utterance sending if chat window is minimized on load
- Reduced minimized width of iframe to prevent overflow covering up page elements
- Rearrange live chat button locations for better UI experience

## [0.19.6] - 2022-10-17
- Fix issue where some empty string variables would break the Code Deploy build, for example, if InitialText was cleared out of the CloudFormation parameters.
- Added more CloudFormation parameters for commonly used UI properties. The new variables include:
    * HideButtonMessageBubble
    * MessageMenu
    * BackButton
    * MinimizedButtonContent
- Change initial speech mechanism to fetch and play mp3 files created during codebuild. Implement support for configured localeIds when creating the mp3 files. Create an mp3 for each configured localeId and use aws translate to generate text for the locale and use aws polly to create the mp3 files. When the user changes locale in the UI and clicks on the mic button, the initial speech for the selected locale will be played.
- Add support for Connect interactive messaging into Lex Web UI: [https://docs.aws.amazon.com/connect/latest/adminguide/interactive-messages.html](https://docs.aws.amazon.com/connect/latest/adminguide/interactive-messages.html). Both ListPicker and TimePicker are supported templateTypes and can be sent using the exact same JSON structure as Connect.
- Fix handling the new ElicitIntent dialogAction type LexV2 response, which does not have some expected properties on the sessionState object

## [0.19.5] - 2022-07-17
- Updated README to be more clear
- Updated Connect chat README
- Add the ability to send Lex session attributes prefixed with `connect_` to Connect chat
- Fix issue with master pipeline template not working properly for Lex V2 bots
- Fix issue where Connect agent and chat user have same name
- Bump dependencies
- Custom CloudFront response policy that allows iFrame embedding
- Changed attaching Amazon Connect chat transcripts to false by default

## [0.19.4] - 2022-03-05
- Add setSessionAttribute function to iframe api, add optional messageType parameter to postText function. 
- Add the ability to manually configure a help message in lex-web-ui-loader-config.json per locale. This message is displayed in response to clicking the help button rather then sending to the lex bot. In addition, the last message from the bot can be re-displayed after the help message giving the user context on next action again
- Prefer Lex V1 response cards over Lex V2 in the case where both are present. In a QnABot result, both a V1 and V2 response card will be present. V1 response cards might contain additional buttons not present in the V2 response card. When both are present, prefer the V1 response card.
- Fix for when user sends live chat message while within live chat
- Change Connect CloudFormation parameters to have default empty strings
- Updated default CSS for input container to be visible on screen in iOS/Safari 15

## [0.19.3] - 2021-12-17
- Update use of amazon-connect-chatjs to version "^1.1.7" in lex-web-ui/package.json
- Support response from LexV2 bots with response card only - no message text
- Add Build/Deploy section to bottom of toplevel readme

## [0.19.2] - 2021-11-12
- Update Connect Live Chat README to clarify CORS settings
- Fix problem where CodeBuild was not executed when Connect associated template parameters were changed
- Fix use of template parameter to disable Connect attach chat transfer 

## [0.19.1] - 2021-11-02
- Fix reference to chatbotUiConfig in build/create-iframe-snippet-file.sh to correct capitalization error

## [0.19.0] - 2021-10-22
- Adjust the OPTIONS request on the new API allowing Connect live chat to set Access-Control-Allow-Origin to the ParentOrigin supplied in the template
- Deliver full transcript of user interaction to agent when opening live chat to Connect
- Parameterize all Connect Live messages in CF template
- Update dependent component versions to address several dependabot alerts
- Add commented example to set session attributes on startup to snippet, parent.html, and index.html.

## [0.18.2] - 2021-08-28
- Add feature for connect live chat. Allow client to optionally interact with an agent via Connect.

## [0.18.1] - 2021-06-01
- Change package.json revision to 0.18.1
- Provide distribution location in Canada (Central) region - ca-central-1   
- Update aws sdk to current revision  
- Change codebuild-deploy.yaml to use amazon linux image vs nodejs10 image.
- Change codebuild-deploy.yaml and pipeline.yaml buildspec and codebuild role to invalidate cloudfront distribution after syncing s3 bucket
- Fix Lex V2 client state mapping - specific for audio
- Enhance Lex V2 support to
  - allow configuration of multiple V2 locale ids via template in comma separated list
  - provide menu based selection of configured V2 locales  
- Enhance postMessage to better filter messages between iframe and parent
- Make CognitoAppUserPoolClientId and CognitoUserPoolId optional in master-pipeline.yaml
## [0.18.0] - 2021-04-21
- Move from webpack V3 to webpack V4 in the lex-web-ui component.
- Move to npm version 7.10.0.
- Update component package versions.
- Resolve dependabot alerts.
- Fix to resolve update problem where Cognito Supported Identity Providers is reset to just Cognito. An update
  will now preserve the existing Supported Identity Providers.
- Set AWS sdk to version 2.875.0.
- Improve Lex V2 support to handle responseCard defined as a session attribute in sessionAttributes.appContext.responseCard.
- Removed support for AWS mobilehub based distribution.
## [0.17.9] - 2021-03-03
- Support Lex Version 2 Bots
- Parameter to support initial utterance to send to the bot
- Changed behavior of button date message to use "n min ago"
- Changed behavior of ShouldLoadIframeMinimized to take precedence over last known state
- Added mechanism in loginutils.js to prevent looping
- Support mixed case web ParentOrigin URLs and WebAppPath in Cognito user pool
- Allow multiple values for WebAppPath to allow UI with login to be enabled on multiple pages on the same site (origin)
- Update the Cognito Callback and Signout URLs when updated via CloudFormation template update

## [0.17.8] - 2021-02-02
- Fix for pipeline based deployments - issue 264 - template error
- Fix to full page web client (index.html) using forceLogin to require a direct to login page
- Fix to move to python 3.8 Lambda Runtime for yaml CloudFormation template embedded functions which remove use of boto3 vendored library
- Add ability for Lex Web UI to automatically retry a request if the Lex bot times out after 30 seconds using a configurable number of attempts. 
By default the timeout retry feature is disabled. When enabled, the default retry count is 1. 

## [0.17.7] - 2020-12-31
- Build script fix
- Move min button icon to the left of text

## [0.17.6] - 2020-12-20
- Additional fixes to support upgrades. Upgrades from 0.17.1 and above are supported. Older versions will need to perform a fresh install to migrate to this version.
- Additions to CSS style documentation

## [0.17.5] - 2020-12-12
- Fix to allow use of CF template upgrade to disable WebAppConfHelp, WebAppConfPositiveFeedback, and WebAppConfNegativeFeedback
- Fix to improve resizing of lex-web-ui button at bottom of page when text is used in addition to icon

## [0.17.4] - 2020-12-06
- Improved upgrade support
- Chat history can now be preserved and redisplayed when the user comes back to the original parent page.
- Lambda function upgrade to Python 3.7.

## [0.17.3] - 2020-11-05
- Added loader config option (forceLogin) to templates which configures UI to require the user to authenticate through Cognito prior to using the bot.
- Added loader config option (minButtonContent) which allows text to be added to the button which appears on the parent page when the iframe is minimized. 
- Added XRay support to Lambda functions.
- Added VPC actions to Lambda IAM Roles to support future deployment of Lambdas in VPC. 
- Encrypted S3 buckets using AES-256 default KMS key
- Prebuilt deployments now available for Singapore, Tokyo, London, and Frankfurt regions

## [0.17.2] - 2020-08-21
- Added option to hide message bubble on button click
- Resolved current github dependabot security issues
- Use default encryption for all S3 buckets using AES-256 encryption
- Added instructions in readme for adding additional vue components 

## [0.17.1] - 2020-08-01
- Create uniquely named Cognito UserPool on stack creation
- Removed display of Back button in title bar and instead provide a replay button using the text from prior 
message directly in the message bubble. Back button can be re-enabled though configuration json if desired. 
- Enhanced css attributes of the minimized chatbot button to help allow clicking on items in the parent
window as well as selecting text next the button. 

## [0.17.0] - 2020-07-12
- Improved accessibility - big thanks to @pdkn for this significant contribution
  * Improve screen reader experience
    - Add screen reader specific text to questions & answer (hidden visually)
      so messages are prepended with ( `bot says: `/ `I say: `)  helping to
      give context to visually impaired
    - Hide message date from screen readers
    - Hide loading message from screen readers
    - Hide avatar image from screen readers
    - Make the chatbot titlebar title a \<h1> heading – (Pages must contain
      a level-one heading)
    - Change \<footer> tag to a \<div> as it's content doesn't conform to
      normal content of a footer so adding role="contentinfo" isn't applicable
  * Improve aria
    - Add aria-label and aria-hidden
    - Add alt attribute to images (logo)
    - Add aria-live 'polite' to chat messages list
  * Improve tabbing
    - Fix element tabindex greater than zero
    - Make feedback buttons tabbable
    - Remove focusability from loading message
    - Remove focusability from avatar image
  * Add sound effects
    - Dispatch event when a message is sent or received (so client app can
      respond and play audio effect)
    - Play a SFX when sending/receiving messages
    - Add a SFX on/off button in toolbar
    - Allow setting of SFX .mp3 files in config
      * ui.messageSentSFX and ui.messageReceived
    - Add config ui.enableSFX to enable sound effects
* Style changes
  - ResponseCard buttons css, remove !important so it can be overridden by
    custom implementation
  - ResponseCard buttons, change font-size from 12px to 1em so it defaults to
    a percent size of parent
  - Adjusted panel dimensions
  - Removed toolbar dense setting in fullscreen
* Other
  - **\[BREAKING CHANGE\]** Changed minimized view to look like a round button
    with a chat icon (rather than toolbar). The button has a tooltip with a
    message that can be changed wit the config option:
    `ui.minButtonToolTipContent`.
    This changes the UI style and sizes so you may need to adapt your existing
    custom styles to it.
  - Add new config option `ui.shouldDisableClickedResponseCardButtons` to
    control whether response card buttons should be disabled after being clicked
  - Message list window auto scrolls to top of response message rather than
    bottom (handy if responses are long else user may have to scroll back up
    to the start of message)
  - Allow tooltips and icons to be easily customised/themed via css
- Fix CloudFront CORS issue. Added CloudFront configuration `CacheMethods` for
  GET, HEAD and OPTIONS; Also forward headers: Origin,
  Access-Control-Request-Method and Access-Control-Request-Headers

## [0.16.0] - 2020-06-06
- Lex-web-ui now ships with cloudfront as the default distribution method
  * better load times
  * non public access to S3 bucket
  * better future integration to cloudfront features such as WAF and Lambda@Edge
- Updated package.json dependencies

## [0.15.0] - 2020-05-15
- Moved to Webpack 4
- Changed default parameter ShowResponseCardTitle to be false - was default of true
- Added back default parameter BotAlias of '$LATEST'. The '$LATEST'
alias should only be used for manual testing. Amazon Lex limits
the number of runtime requests that you can make to the $LATEST version of the bot.

## [0.14.15] - 2020-05-06
- Fixed text input focus issues on IE11 after pressing enter to send request.
- Added new Iframe API entry points to deleteSession and startNewSession for fine grain control of Lex sessions

## [0.14.14] - 2020-04-23
- Disabled text input fields during Lex processing
- Fixed IE11 message bubble width issue via css adjustment
- Switched default load option to use minimized libraries
- Removed default of '$LATEST' from template and added message for Bot Alias to indicate that a real alias should be specified

## [0.14.13] - 2020-03-30
- Added configuration setting that allows the input area of the UI to be hidden when Response Card
buttons are present. This feature is disabled by default.
- Removed use of botocore.vendored.requests module

## [0.14.12] - 2020-03-25
- Defect fixes for CORS processing
- Updates for multi-region support
- Easy URLs to launch in us-east-1 (N. Virginia), eu-west-1 (Ireland), ap-southeast-2 (Sydney)

## [0.14.11] - 2020-03-22

### Added
- Installation support for eu-west-1 and ap-southeast-2
- CSS Style information and default customization css file
- Fixed defects with respect to the default Order Flowers Bot installation
- Several pull requests

## [0.14.9] - 2019-11-25

### Added
- Update to use NodeJS 10.x for pipeline based build
- Moved Polly initial speech instruction use on mic click to be available in Cognito Auth Role only

## [0.14.8] - 2019-11-15

### Added
- Inline message feedback buttons
- Toolbar Buttons
- Help Button
- Back Button

## [0.13.2] - 2018-06-14

### Fixed
- Error in IE11 and Edge in Snippet URL. [f2c7c4332e6bfa6b0cc9dc495881be9bedaeb46f]
- Error in IE11 and Edge to access localStorage. [4f91fbe9e462a680c0bf3476203589a88afccc84]

## [0.13.1] - 2018-06-07

### Fixed
- error in dependency in codebuild. [44d9c86a2ec4c693c9ea5a17223254f10756ec80]

## [0.13.0] - 2018-05-23

### Added
- Add Support for Markdown and HTML alternate messages.[3ed88858411b4d85618be9b28c588c368507cdc6]
- Add a loading icon [f892a7b85f079006483461d685109edd6d0f7749]

## [0.12.0] - 2018-01-12
This release brings significant improvements which include various
breaking changes (see items with the **[BREAKING]** label). It overhauls
the following areas:
1. The loader script has been integrated into a single library. This
makes it easier to load the chatbot UI component since now there's only
one JavaScript file and a unified configuration
2. CloudFormation master template has been split into two different
templates based on the deployment mode (CodeBuild or Pipeline). This
simplifies the templates and their parameters
3. The chatbot UI messages are now encapsulated in a custom component
instead of a chip. The messages now display a date when clicked and can
show a bot avatar image next to the bot messages. More importantly, the
new message component will makes it easier in the future to extend the
content displayed in messages (e.g. adding html/markup rendering)

### Changed
- **[BREAKING]** Merged fullpage and iframe loader functionality
into a library that loads from a single script. If you were using
including the `chatbot-ui-*loader.js` scripts, you should change it to
`lex-web-ui-loader.js`. This new library uses a constructor to create
a loader object. The loader object must explicitly call its `load()`
function to load the component. For details, see the README under the
`src/lex-web-ui-loader` directory and the html files under `src/website`.
[0892314ef516ae31a7c0bb6d43369b9a9d1108e5]
- **[BREAKING]** Changed loader config to use a unified file for both the
iframe and full page loader. The new default configuration file name is:
`lex-web-ui-loader-config.json`. See a sample under the `src/config/`
directory. [dbcac4cc241b94e8669843b19fcd082f94b7cc84]
- Changed loader to allow keeping parent origin in config when
embedded [245ac70e647464e6abca01edd511d2b6963014be] - Changed
loader build environment to be based on webpack. This includes
integration with babel, eslint, post-css and webpack-dev-server
[8f1b7ac44c80e85811196930489931d1ea05704e]
- Changed message bubble from vuetify chips to a custom component. This
was done to allow greater flexibility in the style and structure of the
message bubbles and in preparation to render a more complex message format
[67192a0792c2d7433b24dda3b311d419e000b871]
- Changed vertical overflow in non-mobile devices to allow scrolling. This
enables mobile browsers to go full-screen when scrolling
[3b8efc9c8c9f3e838624cfe15e6249cf37db6bf4]
- Changed height calculation of toolbar, inputbar and message list to
make it more deterministic across browsers
[8b9132d17312468292893198061ed79fd7d89543]
- Bumped dependency versions [48aa6ace3e89554de6dcc49c81286b5770606715,
72fb152b9ff7615df1051629cd768fdaff8da9f2]

### Added
- Added time stamps to messages. It is shown under message bubbles when
focused [bd9e9f32fbb25ec8658bb3d1775a5ba735f59fbc]
- Added basic mobile resolution detection
[afa316bf926c671a1a8023b68c4257963cef8e69]
- Added the ability to include an avatar image next to the bot messages
[814069738d0c9caaa0347723bea917684d3182cd]
- Added message list event handler to scroll down to the bottom
[2a20d339d74c5c0684ec07408d4f45c3980a031b]
- Added CSS to auto hyphernation and word break text in messages
[502aa92018e4a704f635ab7e93ac27cd4bb0d0af]
- Added automated test for MessageList and Message components
[1667fc6bc7e6b75eb0023778b1f49d4cf9a86db4]
- Added origin configuration support to CodeBuild deployment
[1d459d93bf03cd5f3c442f5d030cc57a88dd03dc]
- Added a dynamically created page containing a code snippet and config
[7636bac7d94b2684ff0736ed5b34011625bbc8d7]
- added a base URL parameter to the loader which is used to
with relative links for the JSON configuration and dependencies
[9c954f635d473037cd3b8e19a193b5f2962ac675]

### Removed
- **[BREAKING]** Removed iframe loader config file:
`src/config/chatbot-ui-iframe-loader-config.json`. Its functionality
is now integrated in `src/config/lex-web-ui-loader-config.json`.
[2e158f7ec33d4dc0950bdce0a7bead8a1d97a965]
- **[BREAKING]** Splitted the master cloudformation template into two
different template to separate the CodeBuild and Pipeline deployment
modes. This makes the templates much simpler and easier to configure
[ee2ef487f0413f60b4a13d1ceb95b1b3f1408123]
- Removed the need to include CSS to manage overflow at the
body tag level and removed display flex for the app element
[8bf32f8b745b96660291a80a37bd25d0d40868fd]
- Removed promise catch statements in loader script to allow user scripts
to handle exceptions [bd929d6b5d86e1e26af41985734c2690eb9ef04b]

### Fixed
- Fixed a bug where the AWS SDK was loaded in the incorrect order
[1b4637b87b823d4964aeefb08d2fe00523d5dae4]
- Fixed a bug where the component config initialization had a timing issue
when running in embedded mode [66de81cd29b9444362ece87ab24b743efca49298]
- Fixed a bug where the toolbar image caused an error when not present
[de77de6a2633eb925e270028fcb513932dbde93b]
- Fixed a bug where the display of dialog state in messages had the
wrong alignment [d993d7a8cd70ef530eada79d60fd804561fbed6d]
- Fixed parent page in dev/test environment of component
[39a1e1c79fc1c3b0585e08510fad7c266c6fc32b]

## [0.11.0] - 2017-11-13
### Changed
- Various changes to support IE11 in text mode (no voice). IE11 support
requires babel-polyfil to be loaded
- [BREAKING] Renamed bot-config.json file to chatbot-ui-loader.json
to be consistent with the iframe loader and new chatbot loader script
- Moved CloudFormation bootstrap bucket configuration from a map to a
parameter to make it easier to deploy from different sources without
modifying the template
- Changed the parent page setup when using the CreatePipeline deployment
from the CloudFormation templates. It now uses the same page, iframe
loader and configuration as the pre-built deployment. The parent page is
also mounted under /static/iframe/parent.html when running the localhost
dev server (i.e. npm run dev under the lex-web-ui dir)
- Improved dist Makefile to only build the library when there are
changes to the component. Additionally added support to build the new
chatbot loader

### Added
- Added a chatbot loader script that can be used to load dependencies
and config. The loader simplifies the creation of a full page chatbot
site by removing the need to manually add the dependencies and config
- Added CloudFormation parameters to support setting basic chatbot
UI configuration including toolbar title and initial messages. These
parameters are used when deploying the pre-built library from the dist
directory (default)
- Added an allow="microphone" attribute to the iframe tag created by the
iframe loader script. This was done to avoid issues with cross-origin
iframes in newer versions of Chrome

### Removed
- Removed webrtc-adapter dependency from the recorder component
- Removed the deprecated parent page under lex-web-ui/static/iframe. The
parent page in src/website is now copied dynamically during build time

### Fixed
- Fixed issue causing iframeOrigin to be overwritten by event in
sample parent.html. The iframe loader now defaults the iframeOrigin to
window.location.origin only if it is not found in the config.

## [0.10.0] - 2017-10-27
### Changed
- Detailed errors are no longer shown in bot response messages by default.
This is controlled by the `ui.showErrorDetails` config field which
defaults to false.
- Changed display of minimized message list to hide using use v-show
instead of v-if to maintain scroll position
- Changed components to be more compatible with latest vuetify version
- Changed tooltips to work with the latest vuetify and to clear on mobile
- Changed playback progress indicator to have smoother updates
- Clarified main readme including more HTML integration examples
- Changed viewport of index.html to prevent scaling issues
- Iframe loader script in the dist directory is now transpiled using babel
to improve browser compatibility
- Iframe loader css in the dist directory is now post-processed using
autoprefixer to improve browser compatibility
- Updated dependencies

### Added
- Added the ability to emit a vue event when the lex state changes.
This event can be handled with v-on when using the library as a Vue
component.
- Added a new config field: `ui.showErrorDetails` that can be set to true
to display detailed errors in bot response messages. When set to false
(default), only generic error messages are displayed in bot responses.
- Ability to pass a configuration object to the iframe loader during
initialization
- Added recorder options in default store config to make testing consistent

### Fixed
- Fixed a promise return issue when posting a text message
- Fixed audio playback ended index issue
- Fixed recording and playback interruption issue

### Removed
- Removed unused styles

## [0.9.1] - 2017-08-20
This release refactors the LexWeb component to make it easier to test
and include it in other applications/sites. The input toolbar is now more
compact and provides better visual feedback. It adds a send button to the
text input and a progress bar to better indicate processing and playback
status. This release also provides bug fixes and improved unit testing.

### Changed
- LexWeb component is now wrapped in a vuetify v-app component to avoid
having to use the vuetify v-app outside of it. The LexWeb component now
sets a min height that is dynamcally calculated based on the input bar
height. When minimized, all subcomponents are hidden with the exception
of the top toolbar.
- Input bar on the bottom of the chatbot UI is now wrapped in a vuetify
toolbar component. The container now has a fixed height which makes it
easier to calculate offsets
- The StatusBar component was renamed to RecorderStatus as that is a more
appropriate name. It is now loaded from the the InputContainer component
instead of directly from the LexWeb component
- Renamed bot-loader.\* files to chatbot-ui-iframe-loader.\* to better
reflect the use case
- Bump dependency versions

### Added
- Added a send button to the input container. This button is shown
when typing a message or when the mic is disabled
- Added an a linear progress bar when the bot audio is playing
- Added an indeterminate linear progress bar when the recorder is
processing
- Added title attribute to iframe in bot-loader.js script to improve
accessibility
- Added config options to chatbot-ui-iframe-loader.js to better control
the loading of the config and dependencies:
    * `shouldLoadConfigFromJsonFile`: controls if the script loads config
    from a JSON File
    * `shouldLoadConfigFromEvent`: controls if the script loads config
    from an event
    * `shouldAddAwsSdk`: controls if the AWS SDK is automatically added
- Added unit tests for InputContainer and RecorderStatus components
- Added getAudioProperties store action
- Added README.md under src/website. For now, this readme
is pretty much the same as the iframe embedding readme under
lex-web-ui/static/iframe. This is in preparation to deprecate the parent
page under lex-web-ui

### Fixed
- Fixed a bug affecting the enable config option of the recorder
- Fixed creds refresh issue when running in an iframe.
- Fixed an issue with space trimming in text input
- Fixed iframe height issue in MS Edge
- Fixed audio initialization that caused problems in unit tests

## [0.9.0] - 2017-08-04
This release adds a couple of simplified deployment options:
1. Simplfied CloudFormation stack without a deployment pipeline.
It uses CodeBuild to create the config files and to deploy directly
to S3.
This mode is the new default of the CloudFormation setup so if
you want to keep using the deployment pipeline setup (CodeCommit,
CodeBuild, CodePipeline), you are going to need to explicitly set the
`CreatePipeline` parameter to true.
2. AWS Mobile Hub project file that deploys the Web UI to S3 fronted
by a CloudFront distribution. The Mobile Hub project also creates the
Cognito Identity Pool, Lex Bot and IAM Roles. This allows to deploy the
application from a single file hosted in github.

**NOTE**: At this point, there is a Content-Type issue with the files
deployed using the Mobile Hub project file. The Mobile Hub deployed
files seem to have its content-type set to octect-stream which causes the
browser to download the files instead of rendering. To work around this
issue, you can re-upload the files using the S3 console or aws cli. The
Makefile in the root dir can be used to upload the files with the right
content type. Use the command: `make sync-website` (requires setting
the bucket name with the `WEBAPP_BUCKET` environmental variable). This
issue will be further investigated.

### Added
- Added Mobile Hub deployment
- Added new CloudFormation template `codebuild.yaml` used to deploy the
application without a pipeline
- Added `CreatePipeline` parameter to the master.yaml template to control
whether the stack should create a deployment pipeline
- Added build-time support to set web UI config fields that are commonly
changed using environmental variables. This is in preparation to set
these variables from CloudFormation parameters. The new variables include:
    * BOT_INITIAL_TEXT
    * BOT_INITIAL_SPEECH
    * UI_TOOLBAR_TITLE
    * UI_TOOLBAR_LOGO
- Added a new `config` directory in the root of the repo that includes
build configuration
- Added a new `src` directory in the root of the repo to hold the
website files. This includes a modified version of the iframe parent
page and bot-loader that resides in the `lex-web-ui/static/iframe`
directory. Eventualy, this new version should replace, somehow get
merged with the other, or sourced in both places from a single file.
- Added a `server.js` file for quick development and testing. It loads
the sample page from the dist and source directories. It can be used
with the command `npm start` from the root directory. You may need to put
the right values in the config files under `src/config` to make it work.
- Added CloudFormation format statement to all templates files
- Added .npmignore file
- Added sample code on how to use the Vue plugin for including the
component into an existing Vue application

### Changed
- **[BREAKING]** CloudFormation setup now defaults to not creating a
development pipeline and just copy the prebuilt files to an S3 bucket.
To use the pipeline, you now have to set the `CreatePipeline` parameter
to true
- Refactored the build scripts and Makefiles to have better separation
of config and code. The config config used by the Makefiles now resides
under: `config/env.mk`. Some of the names of the Makefile have changed so
you may need to change your environment if you were using the Makefiles
from other script.
- The `update-lex-web-ui-config.js` build script now takes its config from
a node js module in the `config` directory. The config is driven by the
`BUILD_TYPE` environmental variable which controls whether the deployment
is building the app from full source or using the dist dir. For this, the
value of the `BUILD_TYPE` variable can be set to either `full` or `dist`.
- Updated CodeBuild environment to node js v6.3.1 using ubuntu
- Renamed iframe bot.css to bot-loader.css
- Updated dependency versions
- Clarified READMEs

## [0.8.3] - 2017-07-29
### Changed
- Moved default icons from config to sample application
- Reduced the size of silent sounds
- Updated dependencies
- Added input validation and safer var initialization to store

### Fixed
- Fixed mic icon tooltip message to show correct status
- Excluded LexApp from unit testing which was causing unit test issues
- Fixed audio playback on mobile due to autoplay bug
- Fixed input container on mobile not showing on latest vuetify

## [0.8.2] - 2017-07-27
### Fixed
- Fixed config initialization issues

## [0.8.1] - 2017-07-25
### Fixed
- Fixed config initialization and parentOrigin issues
### Changed
- Clarified documentation
- Exported Vue plugin from library
- Added deep merge capability to mergConfig

## [0.8.0] - 2017-07-24
This release makes it easier to include the chatbot UI into existing
sites. The project now distributes a pre-built library in the dist
directory. This allows to use the chatbot UI without having to build the
application. The root directory of the repo now contains a package.json
file to make it easier to npm install it.

There are a few breaking changes regarding the supported URL parameters
which now use the `lexWebUi` prefix to avoid conflicts when including
the component in an existing site.

### Changed
- **[BREAKING]** Changed config passing URL query parameter from `config`
  to `lexWebUiConfig`
- **[BREAKING]** Changed URL query parameter to run in embedded mode from
  `embed` to `lexWebUiEmbed`
- The `parentOrigin` config variable now defaults to
  `window.location.origin` to support single origin iframe setups
  without having to set it in the the JSON config file
- Restructured Vuex store including:
    * Split state, mutations and actions to individual files
    * Moved audio, recorder, aws credentials/clients out of the state.
      Those now exist as module variables visible from the store actions
    * AWS credentials from parent are now manually recreated to avoid
      including the AWS SDK as part of the store
- Changed from using vuex mapGetter in components to instead use the
  store state variables. This was done to avoid redistributing vuex
  in the built library and to support vuex being loaded outside of the
  chatbot ui.
- Moved Vue component initialization from LexApp.vue to LexWeb.vue
- Moved Page component to LexApp.vue from LexWeb.vue
- Moved webpack related import config from recorder to the general
  webpack config
- Commented out webrtc-adapter import in preparation to deprecating it
- Changed constructor arguments of lex client to accept a
  lexRuntime client instead of AWS credentials or SDK config. This allows
  redistributing without having to include AWS SDK as a direct dependency
- Changed iframe container class name
- Rearranged the README files. The main README contains info about the
  npm package and instructions to use the library. The CloudFormation and
  application details where move to different README files.

### Added
- Created a Vue plugin that can be used to instantiate the chatbot ui
  both as an import in a webpack based project or by directly sourcing
  the library in a script tag. The plugin registers itself and adds
  a property named `$lexWebUi` to the Vue class. It adds a global Vue
  component name `LexWebUi`
- Added a distribution build config and related scripts
- Added an example on how to encode the URL query parameter config
- Added a new config object key `urlQueryParams` holding the url query
  parameters

## [0.7.1] - 2017-07-17
This release adds basic unit and e2e testing. Various components were
refactored to enable this.

### Changed
- Synched vue build environment with latest vue cli template
- Refactored store to make it more modular and easier to test including:
  * It no longer exports a Vuex object but instead exports an object that
    can be used as a vuex constructor argument
  * It no longer uses the global AWS object. It now creates its own AWS
    Config object
  * It no longer creates the bot audio element. The Audio element is set
    with an action
- Moved Vuex store instantiation to the LexApp component
- Refactored the lex run time client library to accept an AWS SDK Config
  object to avoid using the global one

### Added
- Added setup for running e2e test including:
  * Added nightwatch chrome options to fake devices for mocking mic
  * Changed nightwatch runner to connect dev server if already running
  * Basic e2e test for stand-alone and iframe
- Added setup to run unit tests including an initial set of basic tests
  for the vuex store and the LexWeb Vue component
- Added version from package.js to vuex store state
- Added babel-polyfill as an npm dev dependency for unit testing

## [0.7.0] - 2017-07-14
### Added
- Added capability to send messages from parent page to iframe using
postMessage
- Added config field to control whether the iframe should automatically
load
- Added a ready event sent by chatbot UI when running embedded to signal
the parent that the component loaded successfully
- Added capability to programatically post text messages to the
chatbot UI from a parent page when running embedded as an iframe
- Added capability to programatically minimize the chatbot UI
from a parent page when running embedded as an iframe
- Added Config field to control whether the iframe should load minimized

### Changed
- Major refactoring of the bot loader script to make it more modular
- Improved the documentation to include more details on embedding as an iframe
- Bumped dependency versions
- Changed indentation of various portions of the chatbot UI code to
conform to the the latest airbnb eslint config
- Changed vuetify components to work latest version
- Changed responseCard rendering style
- Changed bot loader CSS to better adapt to smaller resolutions
- Changed iframe minimize/expand to use new parent to iframe message passing

### Fixed
- Fixed responseCard parsing when using postContent

## [0.6.0] - 2017-07-07
### Added
- Added the ability to pass dynamic configuration from parent page to the
  bot loader via an event
- Added response cards object display to sample parent page

### Changed
- Bot loader script now uses its own credential variable instead of setting
  it into the global AWS object
- Bumped AWS SDK version in bot loader
- Added functionality to remove event handlers in bot loader for events that
  only fire once

### Fixed
- Typos, invalid links and display issues in README files

## [0.5.2] - 2017-07-05
### Fixed
- Credential loading issue in parent bot-loader.js

## [0.5.1] - 2017-06-06
### Changed
- Copyrights and Amazon software license

## [0.5.0] - 2017-06-05
### Added
- Ability to deploy a sample bot based on the OrderFlowers sample
 from the Lex [Create an Amazon Lex Bot (Console)](http://docs.aws.amazon.com/lex/latest/dg/gs-bp-create-bot.html)
 documentation.
- Added npm 5 package-lock.json file for more deterministic builds
- Copyrights and Apache license

### Changed
- Bumped dependency versions
- Default bot name using prefix
- Changed name of Lambda handler of CloudFormation custom resource for
  CodeBuild starter

### Fix
- Response Card rendering and sizing issues

## [0.4.1] - 2017-06-01
### Added
- Copyrights and Apache license
- Ability to provide Lex bot alias in config
- Added an event dispatcher to bot-loader.js to relay state from
  the chatbot ui to parent page
- Beefed up sample parent page

### Changed
- Bumped dependency versions
- Added an audio analyser to improve silence and interrupt detection
- Mute auto detection now defaults to false
- Changed default bot to OrderFlowers

### Fix
- General cleanup of docs and code

## [0.4.0] - 2017-05-26
### Added
- Support of response cards for postContent using
  sessionAttributes.appContext
- Ability to automatically change urls to links in bot message
  responses. This feature is controlled with the
  `ui.convertUrlToLinksInBotMessages` config field.
- Ability to automatically strip out tags (e.g. SSML or HTML) from
  bot responses. This can be controlled with the
  `ui.stripTagsFromBotMessages` config field.

### Changed
- Bumped dependency versions
- Using vuex getter mapper to reduce function clutter
- Moved message text to its own component MessageText
- Upgraded the vuetify library which changed the style of various
  components and adjusted the styling to make the UI work with the version.
- Made page wide scrollbar hidden

### Removed
- Got rid of the experimental playback controls for bot audio
- Removed work-around for mobile scrolling as the new vuetify library
  doesn't need it

### Fixed
- Improved bot playback interrupt async handlers. Now has visibility of audio
  duration.
- Fixed build-time config script to use the right bot name field and to
  incorporate other config fields

## [0.3.0] - 2017-05-12
### Added
- S3 bucket cleanup CloudFormation custom resource to optionally delete
  buckets created for the pipeline and to host the web application
- Support of Lex [Response Cards](http://docs.aws.amazon.com/lex/latest/dg/ex-resp-card.html)
- Console logging of processing time
- [Experimental] interruption of bot response playback by speaking over it
- [Experimental] playback controls for bot audio

### Changed
- Use of newly launched Cognito CloudFormation resources instead of Lambda
  based custom resources
- Bumped dependency versions

### Removed
- Removed Lambda python files used in Cognito CloudFormation custom resources

### Fixed
- Improved interruption of bot speech conversation when switching to text by
  avoiding Lex service conflicts (postText text while postContent processing)
- Mute autodetection config issue

## [0.2.0] - 2017-04-28
### Added
- Support to obtain dynamic config from URL query param or postMessage from
  parent iframe
- Config option to disable microphone echo cancellation in recorder
- Config option to disable recorder automatic mute detection
- Config options to control trimming silence in recorder/encoder
- Config option to reinitialize session attributes after bot is done
- Config option to control if initialText message should be pushed after bot
  is done
- Recorder config presets to optimize based on speech recognition or low latency
- Support to automatically increase the minimum recording time based on
  consecutive silent recordings

### Changed
- Improved recorder automatic mute detection
- Bumped dependency versions
- Moved page wide elements (e.g. title and fav icon) to Page component
- Consolidated config so that it is only imported by store

### Fixed
- Issue passing boolean options to recorder
- Rendering issue on mobile where it was needed to scroll down [WORKAROUND]

## [0.1.0] - 2017-04-14
### Added
- initial


================================================
FILE: LICENSE
================================================
Amazon Software License
1. Definitions
“Licensor” means any person or entity that distributes its Work.

“Software” means the original work of authorship made available under this License.

“Work” means the Software and any additions to or derivative works of the Software that are made available under this License.

The terms “reproduce,” “reproduction,” “derivative works,” and “distribution” have the meaning as provided under U.S. copyright law; provided, however, that for the purposes of this License, derivative works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work.

Works, including the Software, are “made available” under this License by including in or with the Work either (a) a copyright notice referencing the applicability of this License to the Work, or (b) a copy of this License.
2. License Grants
2.1 Copyright Grant. Subject to the terms and conditions of this License, each Licensor grants to you a perpetual, worldwide, non-exclusive, royalty-free, copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense and distribute its Work and any resulting derivative works in any form.
2.2 Patent Grant. Subject to the terms and conditions of this License, each Licensor grants to you a perpetual, worldwide, non-exclusive, royalty-free patent license to make, have made, use, sell, offer for sale, import, and otherwise transfer its Work, in whole or in part. The foregoing license applies only to the patent claims licensable by Licensor that would be infringed by Licensor’s Work (or portion thereof) individually and excluding any combinations with any other materials or technology.
3. Limitations
3.1 Redistribution. You may reproduce or distribute the Work only if (a) you do so under this License, (b) you include a complete copy of this License with your distribution, and (c) you retain without modification any copyright, patent, trademark, or attribution notices that are present in the Work.
3.2 Derivative Works. You may specify that additional or different terms apply to the use, reproduction, and distribution of your derivative works of the Work (“Your Terms”) only if (a) Your Terms provide that the use limitation in Section 3.3 applies to your derivative works, and (b) you identify the specific derivative works that are subject to Your Terms. Notwithstanding Your Terms, this License (including the redistribution requirements in Section 3.1) will continue to apply to the Work itself.
3.3 Use Limitation. The Work and any derivative works thereof only may be used or intended for use with the web services, computing platforms or applications provided by Amazon.com, Inc. or its affiliates, including Amazon Web Services, Inc.
3.4 Patent Claims. If you bring or threaten to bring a patent claim against any Licensor (including any claim, cross-claim or counterclaim in a lawsuit) to enforce any patents that you allege are infringed by any Work, then your rights under this License from such Licensor (including the grants in Sections 2.1 and 2.2) will terminate immediately.
3.5 Trademarks. This License does not grant any rights to use any Licensor’s or its affiliates’ names, logos, or trademarks, except as necessary to reproduce the notices described in this License.
3.6 Termination. If you violate any term of this License, then your rights under this License (including the grants in Sections 2.1 and 2.2) will terminate immediately.
4. Disclaimer of Warranty.
THE WORK IS PROVIDED “AS IS” WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WARRANTIES OR CONDITIONS OF M ERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT. YOU BEAR THE RISK OF UNDERTAKING ANY ACTIVITIES UNDER THIS LICENSE. SOME STATES’ CONSUMER LAWS DO NOT ALLOW EXCLUSION OF AN IMPLIED WARRANTY, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.
5. Limitation of Liability.
EXCEPT AS PROHIBITED BY APPLICABLE LAW, IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE SHALL ANY LICENSOR BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATED TO THIS LICENSE, THE USE OR INABILITY TO USE THE WORK (INCLUDING BUT NOT LIMITED TO LOSS OF GOODWILL, BUSINESS INTERRUPTION, LOST PROFITS OR DATA, COMPUTER FAILURE OR MALFUNCTION, OR ANY OTHER COMM ERCIAL DAMAGES OR LOSSES), EVEN IF THE LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Effective Date – April 18, 2008 © 2008 Amazon.com, Inc. or its affiliates. All rights reserved.

================================================
FILE: Makefile
================================================
# This Makefile is used to configure and deploy the sample app.
# It is used in CodeBuild by the CloudFormation stack.
# It can also be run from a local dev environment.
# It can either deploy a full build or use the prebuilt library in
# in the dist directory

# environment file provides config parameters
CONFIG_ENV := config/env.mk
include $(CONFIG_ENV)

all: build
.PHONY: all

WEBAPP_DIR := ./lex-web-ui
BUILD_DIR := build
DIST_DIR := dist
SRC_DIR := src
CONFIG_DIR := $(SRC_DIR)/config

# merge existing user modified lex-web-ui-loader-config.json during upgrade
# replace user custom-chatbot-style.css files during upgrade
CURRENT_CONFIG_FILE := $(WEBAPP_DIR)/current/user-lex-web-ui-loader-config.json
USER_CUSTOM_CSS_COPY := $(WEBAPP_DIR)/current/user-custom-chatbot-style.css

# this install all the npm dependencies needed to build from scratch
install-deps:
	@echo "[INFO] Installing loader npm dependencies"
	npm install
	@echo "[INFO] Installing component npm dependencies"
	cd $(WEBAPP_DIR) && npm install
.PHONY: install-deps


load-current-config:
	@echo "[INFO] Downloading current lex-web-ui-loader-config.json from s3 to merge user changes"
	@echo "[INFO] Downloading s3://$(WEBAPP_BUCKET)/lex-web-ui-loader-config.json if it exists or load defaults"
	-aws s3 ls "s3://$(WEBAPP_BUCKET)/lex-web-ui-loader-config.json" && \
    	aws s3 cp "s3://$(WEBAPP_BUCKET)/lex-web-ui-loader-config.json" "$(CURRENT_CONFIG_FILE)" || \
        cp "$(CONFIG_DIR)/default-lex-web-ui-loader-config.json" "$(CURRENT_CONFIG_FILE)"
	@echo "[INFO] Downloading s3://$(WEBAPP_BUCKET)/custom-chatbot-style.css file if it exists or load defaults"
	-aws s3 ls "s3://$(WEBAPP_BUCKET)/custom-chatbot-style.css" && \
    	aws s3 cp "s3://$(WEBAPP_BUCKET)/custom-chatbot-style.css" "$(USER_CUSTOM_CSS_COPY)" || \
        cp "$(DIST_DIR)/custom-chatbot-style.css" "$(USER_CUSTOM_CSS_COPY)"
.PHONY: load-current-config

# BUILD_TYPE controls whether the configuration is done for a full build or
# for using the prebuilt/dist libraries
# Expected values: full || dist
# If empty, probably this is being run locally or from an external script
BUILD_TYPE ?= $()

# updates the config files with values from the environment
CREATE_CUSTOM_CSS := $(BUILD_DIR)/create-custom-css.js
UPDATE_CONFIG_SCRIPT := $(BUILD_DIR)/update-lex-web-ui-config.js
export CURRENT_CONFIG_FILE ?= $(realpath $(CURRENT_CONFIG_FILE))
export WEBAPP_CONFIG_PROD ?= $(realpath $(WEBAPP_DIR)/src/config/config.prod.json)
export WEBAPP_CONFIG_DEV ?= $(realpath $(WEBAPP_DIR)/src/config/config.dev.json)
export LOADER_CONFIG ?= $(realpath $(SRC_DIR)/config/lex-web-ui-loader-config.json)
CONFIG_FILES := \
	$(WEBAPP_CONFIG_PROD) \
	$(WEBAPP_CONFIG_DEV) \
	$(LOADER_CONFIG)
config: $(UPDATE_CONFIG_SCRIPT) $(CONFIG_ENV) $(CONFIG_FILES)
	@echo "[INFO] Running config script: [$(<)]"
	node $(<)
	@echo "[INFO] Running custom css creation script: [$(<)]"
	node $(CREATE_CUSTOM_CSS) $(USER_CUSTOM_CSS_COPY)
.PHONY: config

build: config
	@echo "[INFO] Building component in dir [$(WEBAPP_DIR)]"
	cd $(WEBAPP_DIR) && npm run build
	cd $(WEBAPP_DIR) && npm run build-dist
	@echo "[INFO] Building loader"
	npm run build-dev
	npm run build-prod
	@echo "[INFO] Copying dependencies and bundle files"
	node build/copy-assets.js
.PHONY: build

# creates an HTML file with a JavaScript snippet showing how to load the iframe
CREATE_IFRAME_SNIPPET_SCRIPT := $(BUILD_DIR)/create-iframe-snippet-file.sh
export IFRAME_SNIPPET_FILE := $(DIST_DIR)/iframe-snippet.html
$(IFRAME_SNIPPET_FILE): $(CREATE_IFRAME_SNIPPET_SCRIPT)
	@echo "[INFO] Creating iframe snippet file: [$(@)]"
	bash $(?)
create-iframe-snippet: $(IFRAME_SNIPPET_FILE)

# used by the Pipeline deployment mode when building from scratch
WEBAPP_DIST_DIR := $(WEBAPP_DIR)/dist
CODEBUILD_BUILD_ID ?= none
deploy-to-s3: create-iframe-snippet
	@[ "$(WEBAPP_BUCKET)" ] || \
 		(echo "[ERROR] WEBAPP_BUCKET env var not set" ; exit 1)
	@echo "[INFO] deploying to S3 webapp bucket: [$(WEBAPP_BUCKET)]"
	@echo "[INFO] copying build: [$(CODEBUILD_BUILD_ID)]"
	aws s3 cp --recursive "$(WEBAPP_DIST_DIR)" \
		"s3://$(WEBAPP_BUCKET)/builds/$(CODEBUILD_BUILD_ID)/"
	@echo "[INFO] copying new version"
	aws s3 cp --recursive \
		"s3://$(WEBAPP_BUCKET)/builds/$(CODEBUILD_BUILD_ID)/" \
		"s3://$(WEBAPP_BUCKET)/"
	aws s3 cp \
		--metadata-directive REPLACE --cache-control max-age=0 \
		"s3://$(WEBAPP_BUCKET)/builds/$(CODEBUILD_BUILD_ID)/custom-chatbot-style.css" \
		"s3://$(WEBAPP_BUCKET)/"
	@[ "$(PARENT_PAGE_BUCKET)" ] && \
		( echo "[INFO] synching parent page to bucket: [$(PARENT_PAGE_BUCKET)]" && \
		aws s3 sync \
			--exclude '*' \
			--metadata-directive REPLACE --cache-control max-age=0 \
			--include 'lex-web-ui-loader-config.json' \
			"$(CONFIG_DIR)" "s3://$(PARENT_PAGE_BUCKET)/" && \
		aws s3 sync \
			--exclude '*' \
			--include 'lex-web-ui-loader.*' \
			--include 'parent.html' \
			--include 'iframe-snippet.html' \
			"$(DIST_DIR)" "s3://$(PARENT_PAGE_BUCKET)/" ) || \
		echo "[INFO] no parent bucket to deploy"
	@echo "[INFO] all done deploying"
.PHONY: deploy-to-s3

# Run by CodeBuild deployment mode when which uses the prebuilt libraries
# Can also be used to easily copy local changes to a bucket
sync-website: create-iframe-snippet
	@[ "$(WEBAPP_BUCKET)" ] || \
		(echo "[ERROR] WEBAPP_BUCKET variable not set" ; exit 1)
	@echo "[INFO] copying web site files"
	aws s3 sync \
		--exclude Makefile \
		--exclude custom-chatbot-style.css \
		"$(DIST_DIR)" s3://$(WEBAPP_BUCKET)
	@echo "[INFO] Restoring existing custom css file"
	@[ -f "$(USER_CUSTOM_CSS_COPY)" ] && \
	aws s3 cp \
		--metadata-directive REPLACE --cache-control max-age=0 \
		"$(USER_CUSTOM_CSS_COPY)" "s3://$(WEBAPP_BUCKET)/custom-chatbot-style.css"
	@echo "[INFO] Saving a backup copy of previous loader config json"
	aws s3 cp \
		"$(CURRENT_CONFIG_FILE)" "s3://$(WEBAPP_BUCKET)/lex-web-ui-loader-config.$(shell date +%Y%m%d%H%M%S).json"
#   For CodePipeline based distribution / builds where the custom style is managed in
#   Source control, uncomment the next four lines such that the css file is updated
#   on each CodePipeline/CodeBuild invocation.
#	@echo "[INFO] copying custom-chatbot-style.css and setting cache max-age=0"
#	aws s3 cp \
#		--metadata-directive REPLACE --cache-control max-age=0 \
#		"$(DIST_DIR)/custom-chatbot-style.css" s3://$(WEBAPP_BUCKET)
	@echo "[INFO] copying config files"
	aws s3 sync  \
		--exclude '*' \
		--metadata-directive REPLACE --cache-control max-age=0 \
		--include 'lex-web-ui-loader-config.json' \
		--include 'initial_speech*.*' \
		--include 'all_done*.*' \
		--include 'there_was_an_error*.*' \
		"$(CONFIG_DIR)" s3://$(WEBAPP_BUCKET)
	@echo "[INFO] all done deploying"
.PHONY: sync-website


================================================
FILE: NOTICE
================================================
aws-lex-web-ui
Copyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.


================================================
FILE: README-connect-live-chat.md
================================================
# Transfer to Amazon Connect Live Chat

This feature allows users of the Lex Web UI to have conversations with an Amazon Connect Live Agent. When the user
requests a transfer, all subsequent messages are sent to Connect Live Chat Agent and responses from the Agent are 
displayed back to the user as a message bubble. The conversation continues between user and agent until
either party disconnects. Once disconnected, messages are again sent to the Lex bot.

### TalkDesk integration

Integration with TalkDesk is also supported, but requires configuration outside of the Web UI. For a full walkthrough please refer to this [blogpost](https://aws.amazon.com/blogs/machine-learning/provide-live-agent-assistance-for-your-chatbot-users-with-amazon-lex-and-talkdesk-cloud-contact-center/).

## Setup

### Configure a Connect Instance

The following procedure configures a Connect contact flow to use for live chat. In this example, the Sample inbound
contact flow is used to handle the incoming live chat. In practice, a new inbound flow should be developed as well as a 
disconnect flow that displays a message once the session is terminated. 

1. Set up a [Connect Instance](https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-instances.html)
2. Once you login to your instance, select **Routing** then **Contact flows**
![connect contact flows](./img/connect-contact-flows.png)
3. Find **Sample inbound flow (first contact experience)** from the list
4. Expand **Show additional flow information** and take note of the Contact Flow ID (in blue below) and Instance ID (in red).
You are going to need to pass these values during the creation of the CloudFormation stacks below
![connect flow details](./img/connect-flow-details.png)
5. If desired, [Enable Attachments]([https://docs.aws.amazon.com/connect/latest/adminguide/enable-attachments.html]) 
to attach the bot transcript as a file for the agent to review. You will also have to set the ConnectAttachChatTranscript 
CloudFormation parameter to true. When configuring CORS for the S3 bucket used for attachments, you should use the CloudFront distribution domain name (for example, 
d111111abcdef8.cloudfront.net) that is deployed with this Lex-Web-UI stack, unless you are providing a CNAME 
custom URL in front of it, in which case you should use the CNAME. In addition, the origin of the "Connect Contact
Control Panel" should also be included in the CORS definition. In sample below, 
replace "https://connectinstance.my.connect.aws" with the origin of your "Connect Contact Control Panel". If using
the default Contact Control Panel this will be the same as the origin of the "Connect Login" URL. 
In the example replace "https://d111111abcdef8.cloudfront.net" with the origin of your "lex-web-ui" distribution as noted earlier.
```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "GET"
        ],
        "AllowedOrigins": [
            "https://connectinstance.my.connect.aws",
            "https://d111111abcdef8.cloudfront.net"
        ],
        "ExposeHeaders": []
    }
]
```

## Deploy or update the Lex Web UI Stack

### Using the standard distribution template (master.yaml)

Deploy a new Lex Web UI or update an existing Lex Web UI from the standard deployment repos. 

For a new stack, fill in the required values just as you would for any Lex Web Ui deployment.

At the end of the parameter list, you will notice new parameters that control enabling the Connect Live Chat feature.

1. Set ShouldEnableLiveChat to true
2. Add additional ConnectLiveChatTerms as a comma separated list if terms other than 'live chat' should be supported
3. Fill in ConnectInstanceId
4. Fill in ConnectContactFlowId
5. Change the ConnectPromptForNameMessage if desired
6. Change the ConnectWaitForAgentMessage if desired
7. Change the wait message interval, ConnectWaitForAgentMessageIntervalInSeconds, from 60 seconds to some other value if desired. 
8. Change the ConnectAgentJoinedMessage if desired. {Agent} will be replaced by the agent's name.
9. Change the ConnectAgentLeftMessage if desired. {Agent} will be replaced by the agent's name.
10. Change the ConnectChatEndedMessage if desired
11. Change ConnectAttachChatTranscript to true if you would like to also attach the chat transcript as a file. This will also require enabling chat attachments in the Amazon Connect instance, as noted above in the Configure a Connect Instance section of this document.

THe last two properties adjust the message displayed while the user is waiting for an agent and frequency of this
message. You can also control this type behavior from the contact flow. If using the contact flow to display wait
messages to the user, set the ConnectWaitForAgentMessageIntervalInSeconds to 0.

Once you have the parameters set, Create or update your stack.

## Usage

Once the stack creation has completed, you can open the parent page hosting the Lex Web UI on your browser.
When you send a live chat request to the bot, it will intiate a POST call to a the deployed API Gateway. This Gateway uses a Lambda function to securely interact with the Connect API within your AWS account to obtain a ParticipantToken which will be used to connect the end user to the agent. This token has a TTL of one hour by default, but can be configured via the deployed Lambda function if a longer timeout is desired. Note that by default API Gateway uses TLS 1.1, if you wish to enforce higher TLS settings please follow these instructions to deploy your own [custom domains](https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html).

On a separate browser window or tab, sign in as an agent on 
the [Amazon Connect Contact Control Panel (CCP)](https://docs.aws.amazon.com/connect/latest/adminguide/agent-user-guide.html) 
to receive the live agent contacts originated from the Lex Web UI.

Back on the Lex Web UI parent page, select the **menu** button on the Lex Web UI toolbar 
and then the **live chat** button to start a chat session with the agent. At this point 
the user and agent should be able to interact with each other. Users can also invoke the live chat feature using
"live chat" for text input. 

To disconnect from Live Chat, click the hangup button next to text input or use the menu to "Stop Live Chat". Note that live chat sessions have a 60-minute expiration by default, but this value can be updated in the Lambda deployed to the API Gateway if extended expiration times are desired.

## Connect Disconnect Flow logic

The LexWebUi observes messages from Connect to present responses to the user. It monitors for a specific message
to disconnect the user. This message is 'application/vnd.amazonaws.connect.event.chat.ended'. When this message is
received, the LexWebUi will terminate the live agent chat and resume normal operation chatting with the configured
Lex Bot. 

Connect sends this message when the "Disconnect" block is executed in a contact flow.

In Connect's "Sample disconnect flow", "Disconnect" is used after waiting for 15 minutes. While waiting, the LexWebUi
will continue to send messages to Connect Live Chat rather then sending messages to the Lex Bot.

If you desire to terminate Live Chat in LexWebUi as soon as the Agent terminates the chat in the CCP, configure the 
flow performing the disconnect to terminate immediately as in the following modified "Sample disconnect flow".

![sample disconnect flow](./img/sample_disconnect_flow.png)

## Session Attributes

Connect live chat will send any Lex session attributes that are prefixed with `connect_` on the attribute key. Also, if there is a session attribute key `topic`, that will also be sent to Amazon Connect.

Session attributes can be used to branch in a contact flow to a pre-defined queue, or pass other information that the contact flow may require.  Attributes are accessible in a contact flow by using the Check contact attributes block, with the attribute type value of `User Defined`.

================================================
FILE: README-css-style.md
================================================
# Quick CSS guide for Lex Web Ui

The ability to update the style of the lex-web-ui to conform to an existing site's style
is important. This guide will walk you through adjusting the UI to meet your needs.

This guide does not cover the case if you are building lex-web-ui for use as a component
in other Vue apps or modifing Vue source components for your own implementation.

There are two mechanisms to modify and deploy the custom-chatbot-style.css file using the style
modifications outlined in this README.

* Prebuilt lex-web-ui distribution 
  
  If you have installed the lex-web-ui using the prebuilt distributions from the links published on
  the lex-web-ui blog post or from the links available in the top level README.md, follow these steps.
    * Download the custom-chatbot-style.css file from your WebApp S3 bucket
    * Modify the CSS accordingly and save the file locally on your desktop
    * Upload the custom-chatbot-style.css back to your WebApp S3 bucket
    * Use the CloudFront console to invalidate the CloudFront distribution such that it will be served up immediately
  
## Summary of available css modifications

![Common use of CSS for LexWebUi](./img/LexWebUiStyle.png)

## Iframe width and height

As noted on the bottom of the diagram, if using a parent page to host the lex-web-ui as an iframe,
the iframe size and width and position an be controlled using css applied to the parent page.

```shell script
.lex-web-ui-iframe {
    min-width: 25vw !important;
    max-height: 315px !important;
    margin-right: 10vw !important;
    margin-bottom: 10px !important;
}
```
Note that these values can be specified using vw and vh to reflect percentages of the view
window's width and height.

## Style for elements of the Lex-Web-Ui
Use the following process to set style after the lex-web-ui has been deployed.

*Note: Version 0.14.11 pre-installs with the file custom-chatbot-style.css and pre-configures its use in index.html.
Download the file from S3. Follow steps 2 and 3. The default file has all styles commented out. Enable style changes
you desire and upload the file back to S3.

1) Create a new css file named 'custom-chatbot-style.css'.
2) Configure/update the style as needed
3) Upload the 'custom-chatbot-style.css' file to the S3 bucket hosting the lex-web-ui.
4) Download and modify the index.html file from the S3 bucket. Insert the html below
within the \<head\> element at the end of this element.
5) Upload the index.html back to the S3 bucket.

Changes for index.html for versions prior to 0.14.11.
```
<link rel="stylesheet" href="./custom-chatbot-styles.css">
```

The new css file will then hold style changes for the elements in the UI.

### Toolbar
#### Toolbar Background Color
There are two distinct mechanisms for changing the background color.
1) Update lex-web-ui-loader-config.json. Change the property ui.toolbarColor. You must select a value
from.
https://vuetifyjs.com/en/styles/colors#
2) OR use the following in css to overwrite the color of the default red CSS
```
.bg-red {
  background-color: #2b2b2b !important;
}
```

#### Toolbar font and color
```
.toolbar__title {
  font-family:"Sans-serif" !important;
  font-size: 16px !important;
  color: #ffffff !important;
}
```

#### Toolbar logo - easily set in lex-web-ui-loader-config.json
Modify lex-web-ui-loader-config.json
```
ui.toolbarLogo: "url"
```

### Minimized button tooltip content
Modify lex-web-ui-loader-config.json
```
"minButtonToolTipContent": "My Chatbot",
```

### Minimized button color
```css
button.min-button {
    background-color: blue !important;
    border-color: blue !important;
}
```

#### Message Avatar Icons - easily set in lex-web-ui-loader-config.json
Modify lex-web-ui-loader-config.json
```
ui.avatarImageUrl: "url"
ui.agentAvatarImageUrl: "url"
```

#### Message List background color
```
.message-list-container {
  background-color: #fefefe !important
}
```

#### Messages from bot
Set background of the bot's response messages
```
.message-bot .message-bubble {
  background-color: #eeedeb !important;
}
```

#### Messages from human
```
.message-human .message-bubble {
  background-color: #afcffa !important;
}
```
//todo verify and set
##### Hide the first input message / initial utterance
```
.message-human:first-of-type {
  display:none;
}
```

#### Message bubble margins
```
.message-bubble p {
    margin-bottom: 8px;
}

.message-bubble p:last-child {
    margin-bottom: 0px;
}
```

#### Message bubble borders
```
.message-bubble {
    border-radius: 10px !important;
    padding: 2px 18px !important;
}
```

#### Message bubble text
```
.message-bubble .message-text {
    padding-left:  0;
    padding-right: 0;
    line-height: 1.6;
    font-size: 1rem;
}
```

#### Message text color
````
.message-text {
  color: #000000
}
````

#### Response card titles and text
```
.headline {
    font-size: 1.2rem !important;
    line-height: 1.4 !important;
}

.card__title {
    padding: 10px 16px !important;
}

.card__text {
    padding: 8px 16px 16px !important;
    line-height: 1.4;
}
```

#### Response card buttons - margins, background-color
```
.v-card-actions .v-btn {
  margin: 4px 4px !important;
  font-size: 1em !important;
  min-width: 44px !important;
  background-color: #afcffa !important;
}
```

#### Input text area font size
```
.input-group--text-field input,
.input-group--text-field textarea,
.input-group--text-field label {
    font-size: 14px !important;
}
```

#### End Connect Live Chat Button
```
button.end-live-chat-button.btn {
  color: white !important;
  background-color: red !important
}
```

#### Other
Other CSS can be applied to the classes above in addition to what is listed. Be creative and
create a compelling style for your site.

#### Lex Web Ui Example CSS Files
some examples for custom css styles are available [here](example-css)
![Sample CSS Files LexWebUi](./img/example-css.png)


================================================
FILE: README-file-upload.md
================================================
# Lex File Uploads

This feature allows users of the Lex Web UI to upload documents directly to a designated S3 bucket. This feature can be used to analyize documents or extract specific information using other AWS services through Lambda fulfillment in your Lex bot. When the user uploads a document, it is stored in the designated S3 bucket at a path location specific to that user. The location of the document in S3 is then set as a sessionAttribute in the Lex bot so that downstream processes can locate and retrieve the document.

<img src="./img/upload.png" width=480>

**Note** - For security, upload functionality is only available for logged in users. To support anonymous uploading, you will need to configure your own IAM policies in Cognito and manually set `uploadRequireLogin` to false in your `lex-web-ui-loader-config.json` file. Allowing anonymous uploading of documents is not recommended.

## Deploy or update the Lex Web UI Stack

To turn on support for uploading documents into S3 via the Lex Web UI, you will need a pre-existing S3 bucket to serve as the repository for these documents. This repostiory will need a CORS configuration that allows the uploaded documents to be sent from the source of your Lex Web UI (instructions below for configuration).

To enable uploading via the Cloud Formation template, update the following parameters:
- `ShouldEnableUpload` to true
- `UploadBucket` to the bucket name of the S3 bucket that will store the documents

## Working with uploaded documents in session attributes

When a document is uploaded via the UI, its location and filename are added as a JSON object into the sessionAttributes of the bot as shown below. A timestamp is added to the document name and a folder structure is created so individual users and files can be properly differentiated. The original filename is retained in the session attributes. Your fulfillment Lambda can add to this object as needed, but the `s3Path` and `fileName` properties should remain to ensure the Web UI functions propertly.

```
{
  "s3Path": "s3://atj-demo-faqs/{sessionId}/{filename}-{timestamp}.txt",
  "fileName": "todo-logging.notes.txt"
}
```

## Configuring CORS in the destination S3 bucket

CORS configuration is **not** part of the CloudFormation template deployment and must be done by the user for uploading of documents to work. For CloudFormation deployments, the allowed origin for the CORS policy is the location of the deployed Web UI files in CloudFront, not the parent origin. You can find this origin in the outputs of your template deployment, including in the `WebAppUrl` output.

Here is an example CORS policy for an S3 bucket:
```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT"
        ],
        "AllowedOrigins": [
            "https://xxxxxxxxxxxx.cloudfront.net"
        ],
        "ExposeHeaders": [],
        "MaxAgeSeconds": 3000
    }
]
```

## Additional post deployment configuration

To update the success & failure messages associated with document upload, add the following configuration items to the `ui` section of your `lex-web-ui-loader-config.json` file (this file is deployed into the webapp bucket during Cloudformation deployment):
- uploadSuccessMessage (blank by default, will only display if a value is provided)
- uploadFailureMessage

If a failure message is not set, users will see the default failure message.


================================================
FILE: README-qbusiness.md
================================================
# Amazon Q Business Integration

Amazon Q is a new generative AI-powered application that helps users get work done. Amazon Q can become your tailored business expert and let you discover content, brainstorm ideas, or create summaries using your company’s data safely and securely. For more information see: [Introducing Amazon Q, a new generative AI-powered assistant](https://aws.amazon.com/blogs/aws/introducing-amazon-q-a-new-generative-ai-powered-assistant-preview)

This feature of the Web UI lets you use Amazon Q's generative AI directly with the Web UI, using a deployed sample bot as a passthrough to the Q Business application. This allows your solution to take advantage of the native Web UI features - embedding, customization, etc - while still leveraging the answering capabilities of Amazon Q.

This feature supports integration with file attachments, enable both to allow QBusiness to read files uploaded via Lex Web UI. There's more information on this feature in the [File Upload README](https://github.com/aws-samples/aws-lex-web-ui/blob/master/README-file-upload.md). 

**Note:*** - The default deployed solution will return a failure message if the user is not logged in or does not have a valid Q Business subscription. This can be customized in the Fulfilment Lambda that is deployed by the CloudFormation template.

### Prerequisites
1. An existing deployment of a Q Business application is required for this solution. Please reference the AWS docs for creating a new [Q Business application](https://docs.aws.amazon.com/amazonq/latest/qbusiness-ug/create-application.html)

### Deploy the Web UI
1. A deployment of the Lex Web UI with login enabled is required for Q Business integration. To launch a new deployment of the Web UI, go to the main [README](https://github.com/aws-samples/aws-lex-web-ui/blob/master/README.md) and select `Launch` for the region where your Q Business app is deployed.

2. The other bot fields for both V2 bots must be empty for the template to create the Q Business integration bot, please ensure that the `Lex V2 Bot Configuration Parameters` are blank.

3. To enable login, set `EnableCognitoLogin` to true. To force users to login to your bot, set `ForceCognitoLogin` to true. The ForceCognitoLogin setting will automatically redirect users to the login page if they are not logged in to the bot. 

4. In the `Q Business Parameters` section of the template, provide the Amazon Q Application ID. For now, leave the 'IDCApplicationARN' field blank. This application must be created after Cognito is deployed by the initial Web UI deployment and the stack can be updated later to provide this value.

5. Deploy the stack.

6. When the stack is finished deploying (showing a CREATE_COMPLETE status) go the Outputs tab. You will need the following Outputs for setting up the Identity Center Application:
    - CognitoUserPoolClientId
    - CognitoUserPoolPubKey
    - QBusinessLambdaRoleARN

### Creating an Trusted token issuer in Identity Center

1. The Cognito user pool created by the Web UI will need to be added as **Trusted token issuer** to Identity Center by doing the following steps. Note that if you are not an admin in your organization, an administrator with Identiy Center access might need to create the token issuer and application.
    1. Go to Identity Center and click on `Settings`, click the `Authentication` tab and then scroll down and select `Create trusted token issuer`
    2. The issuer URL will be the **CognitoUserPoolPubKey, but remove /.well-known/jwks.json from the end of the URL**, the issuer URL you supply shoudl be in the form of  `https://cognito-idp.[region].amazonaws.com/[cognito-pool-id]`. The application also needs to be provided with attribute mapping between Identity Center and Cognito to recognize users, this should be a unique attribute for each user (the default is email address)
        ![Issuer](./img//token-issuer.PNG)
    3. With a trusted token issuer in place, the custom application can now be created.

### Creating a Identity Center Application w/ Cognito trust

1. A custom application will need to be created in Identity Center to handle the connection between your Q Business application and your Cognito pool. Follow these steps to create the application.
    1. Go to Identity Center and click on `Applications` then `Add application`
    2. Select `I have an application I want to set up` and `OAuth 2.0` on the next page for Selecting Application type, then hit `Next`
    3. For `Application URL`, provide the **Web experience URL** of your Q Business application. You can either opt to assign specific users/groups to this application or allow any Identity Center users/groups to access the application. Your Q Business subscriptions will still apply however so only users with a subscription can successfully chat with the application. Then hit `Next`.
    4. Select the Trusted token issuer that was created in Step 2 of this guide, you will now need an aud claim so that the token issuer can identify the application. The aud claim is the **CognitoUserPoolClientId** output value from the Web UI stack. Take this value and paste it into the aud claim field, then select `Next`
        ![Claim](./img//aud-claim.PNG)
    5. Under `Enter IAM roles`, take the role that was created by the Web UI stack for the QBusiness Lambda function. This is the **QBusinessLambdaRoleARN**. Paste this value into field and select `Next`.
    6. Hit `Submit` to complete creation of the application.
    7. The application is accessible under the `customer managed` tab of the Identity Center applications. Select the just created application to make changes. 
    8. Depending on the selection in step 3 above, users may still need to be assigned to the application. These will be the same users you have assigned to the Q Business application.
    7. Finally, make Amazon Q a trusted application for identity propagation by selecting `Specify trusted applications` and finding QBusiness in the list of potential application for trust. When complete your app should appear similar to the below configuration
        ![IdentityPropagation](./img//identity-propagation.PNG)
    8. Copy the `Application ARN` found on this page, it will be used to update the Lex Web UI stack.

### Adding users to Cognito

1. Any user who has a Q Business subscription will need a user account in Cognito, linked by the attribute mapping defined when the `Trusted token issuer` was created.
2. These users can be added manually or by integrating it via [SAML to a 3rd party provider](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-integrating-3rd-party-saml-providers.html).


### Update the Lex Web UI stack

1. Return to CloudFormation and click on the stack that was initially used to deploy the Web UI.
2. On the top-right menu, select `Update`
3. Leave the default of 'Use existing template' and hit `Next`
4. Under Q Business Parameters, find the **IDCApplicationARN** and paste the `Application ARN` copied at the end of the previous section.
5. Launch the update of the stack.

## Validate deployment

Your deployment of the Web UI should now talk directly to Amazon Q Business and return the same responses as the default web experience. In addition, by turning on upload capabilities you can ask Q Business questions about documents and get GenAI answers.

 ![QBusinessDemo](./img//QBusiness.gif)


================================================
FILE: README-streaming-responses.md
================================================
# Lex Streaming Responses

In addition to the documentation below, a full workshop walking through how to integrate streaming responses is also [available here](https://catalog.us-east-1.prod.workshops.aws/workshops/5a58b6a0-7af6-49ce-a907-1a28568eeca1/en-US).

This feature allows users of the Lex Web UI to stream responses back from their bot to the Web UI client. This feature can be used to execute long running tasks and report back progress from an API or series of API calls, or to enable streaming responses from a large language model through services like Amazon Bedrock.

When this feature is turned on, the following architecture can be implemented to stream from your bot to the Web UI.
Note that the Cloudformation will deploy the resources on the bottom of the diagram below, but the fullfilment Lambda
must be created by the bot developer for integration with their long-running task.

![sample disconnect flow](./img/Lex-Streaming-Architecture.png)

## Setup

## Deploy or update the Lex Web UI Stack

To turn on streaming support for Lex Web UI, set the AllowStreamingResponses flag to true and deploy the solution.

This will run a child template in the stack, which will add the following resources:
- API Gateway WebSocket
- DynamoDB Table
- Lambda function

When your bot is first visited by a user with streaming support enabled, the bot will establish a web socket connection to the deployed API gateway. It will send any messages you put on the websocket back to the Web UI, enabling the user to receive messages that have not yet been returned by the Lambda fullfilment process. By default, the API Gateway is deployed without authentication and a 1,000 request per day quota.

When the final response comes back from Lex, it will replace the streamed responses with the final response and apply any custom formating (Markdown, HTML) to the message. Note that no formatting will be applied to the streamed text.

## Creating a fullfilment Lambda that implements streaming

Once the stack creation has completed, the resources you'll need to enable streaming for Lex Web UI will be in place. However, you will still need to implement your own fullfilment Lambda function that pushes messages to the websocket connection for the Web UI to display.

Here is an example fullfilment lambda that could be used for integrating to Amazon Bedrock, in this case using the Claude instant model for answering questions. In the example below, note a few important steps that will be needed for your fullfilment lambda to properly stream to the Web UI.

1. The Lambda will need two variables coming from the session attributes of the Web UI - the name of the Dynamo table that was created and the endpoint URL of the API Gateway that was created. If these attributes are not present then streaming is not enabled on the Web UI.

2. The fullfilment Lambda must get items from the DynamoDB table, using the session ID as the key. When a user initiates a session, the session ID is sent to the Websocket API and stored along with a connection ID in DynamoDB. The fullfilment Lambda needs to get this value so it knows where to push its streaming updates.

3. As the response is processing (in this case our LLM is returning chunks of the response), we push these updates to our Websocket using ```apigatewaymanagementapi.post_to_connection``` which will send those updates back to the client via the Websocket connection.


```
import boto3
import os
import json
from asyncio import get_event_loop, gather, sleep

AWS_REGION = os.environ["AWS_REGION"]
ENDPOINT_URL = os.environ.get("ENDPOINT_URL", f'https://bedrock-runtime.{AWS_REGION}.amazonaws.com')
modelId = "anthropic.claude-instant-v1" 
accept = "application/json"
contentType = "application/json"

dynamodb_client = boto3.resource('dynamodb')
bedrock_runtime = boto3.client(service_name='bedrock-runtime', region_name=AWS_REGION, endpoint_url=ENDPOINT_URL)
s3 = boto3.client('s3')

def lambda_handler(event, context):
    print('event: ', event)
    response = router(event, context)
    return response
    

def router(event, context):
    intent_name = event['sessionState']['intent']['name']

    # Dispatch to your bot's intent handlers
    sess_id = event['sessionId']

    #if intent_name == 'FallbackIntent':
    result = get_event_loop().run_until_complete(openai_async_api_handler(event, context))
    print(result)
    return result        
    
    raise Exception('Intent with name ' + intent_name + ' not supported')
    
    
## Note that the prefix async
async def openai_async_api_handler(event, context):
    
    sessionId = event['sessionId']
    inputTranscript = event['inputTranscript']
    body = json.dumps({"prompt": "Human: " + inputTranscript + "Assistant:", "max_tokens_to_sample": 500})
    session_attributes = get_session_attributes(event)
    print('sessionId ', sessionId)
    print('inputTranscript ', inputTranscript)
    fullreply = '';
    
    #If streaming, call Bedrock with streaming and push chunks to Websocket
    if hasattr(session_attributes, 'streamingDynamoDbTable') and hasattr(session_attributes, 'streamingEndpoint'):
        apigatewaymanagementapi = boto3.client(
            'apigatewaymanagementapi', 
            endpoint_url = session_attributes['streamingEndpoint']
        )
        
        wstable = dynamodb_client.Table(session_attributes['streamingDynamoDbTable'])
        db_response = wstable.get_item(Key={'sessionId': sessionId})
        print (db_response)
        connectionId = db_response['Item']['connectionId']
        print('Get ConnectionID ', connectionId)

        response = bedrock_runtime.invoke_model_with_response_stream(
            body=body, modelId=modelId, accept=accept, contentType=contentType
        )
        stream = response.get('body')

        if stream:
            for streamEvent in stream:
                chunk = streamEvent.get('chunk')
                if chunk:
                    chunk_obj = json.loads(chunk.get('bytes').decode())
                    text = chunk_obj['completion']
                    fullreply = fullreply + text
                    print(text)
                    response = apigatewaymanagementapi.post_to_connection(
                        Data=text,
                        ConnectionId=connectionId
                    )
    #If not streaming, generate a reponse and return
    else:
        response = bedrock_runtime.invoke_model(
            body=body, modelId=modelId, accept=accept, contentType=contentType
        )
        response_body = json.loads(response["body"].read())
        fullreply = response_body["completion"]
    
    message = {
        'contentType': 'CustomPayload',
        'content': fullreply
    }
    fulfillment_state = "Fulfilled"
    
    return close(event, session_attributes, fulfillment_state, message)


#------------------------------------------------------------


def get_session_attributes(intent_request):
    print(intent_request)
    sessionState = intent_request['sessionState']
    if 'sessionAttributes' in sessionState:
        print('Session Attributes', sessionState['sessionAttributes'])
        return sessionState['sessionAttributes']

    return {}


def close(intent_request, session_attributes, fulfillment_state, message):
    intent_request['sessionState']['intent']['state'] = fulfillment_state

    return {
        'sessionState': {
            'dialogAction': {
                'type': 'Close'
            },
            'intent': intent_request['sessionState']['intent']
        },
        'messages': [message],
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }
```

## Example Demo

![demo](./img/lex-streaming-demo-2.gif)


================================================
FILE: README.md
================================================
# Sample Amazon Lex Web Interface

# Overview
This is a sample [Amazon Lex](https://aws.amazon.com/lex/)
web interface. It provides a chatbot UI component that can be integrated
in your website. The interface allows a user to interact with a Lex bot directly
from a browser using text or voice.

It can be used as a full page chatbot UI:

<img src="./img/webapp-full.gif" width=480>

Or embedded into an existing site as a chatbot widget:

<img src="./img/webapp-iframe.gif" width=480>

### Features
- Mobile ready responsive UI with full page or embeddable widget modes
- Support for voice and text with the ability to seamless switch from
one mode to the other
- Voice support provides automatic silence detection, transcriptions
and ability to interrupt responses and replay recordings
- Display of Lex response cards
- Ability to programmatically configure and interact with the chatbot
UI using JavaScript
- [Connect interactive messaging](https://docs.aws.amazon.com/connect/latest/adminguide/interactive-messages.html) support

# Getting Started
The easiest way to test drive the chatbot UI is to deploy it using the
[AWS CloudFormation](https://aws.amazon.com/cloudformation/) templates
provided by this project. Once you have launched the CloudFormation stack,
you will get a fully working demo site hosted in your account.


These are the currently supported regions. Click a button to launch it in the desired region.

| Region   |  Launch | CloudFormation Template|
|----------|:-------------:|------------------|
| Northern Virginia | <a target="_blank" href="https://us-east-1.console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a>     |[us-east-1](https://aws-bigdata-blog.s3.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Oregon | <a target="_blank" href="https://us-west-2.console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-us-west-2/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-us-west-2"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[us-west-2](https://aws-bigdata-blog-replica-us-west-2.s3-us-west-2.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Ireland | <a target="_blank" href="https://eu-west-1.console.aws.amazon.com/cloudformation/home?region=eu-west-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-eu-west-1/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-eu-west-1"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[eu-west-1](https://aws-bigdata-blog-replica-eu-west-1.s3-eu-west-1.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Sydney | <a target="_blank" href="https://ap-southeast-2.console.aws.amazon.com/cloudformation/home?region=ap-southeast-2#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-ap-southeast-2/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-ap-southeast-2"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[ap-southeast-2](https://aws-bigdata-blog-replica-ap-southeast-2.s3-ap-southeast-2.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Singapore | <a target="_blank" href="https://ap-southeast-1.console.aws.amazon.com/cloudformation/home?region=ap-southeast-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-ap-southeast-1a/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-ap-southeast-1a"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[ap-southeast-1a](https://aws-bigdata-blog-replica-ap-southeast-1a.s3-ap-southeast-1.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Seoul | <a target="_blank" href="https://ap-northeast-2.console.aws.amazon.com/cloudformation/home?region=ap-northeast-2#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-ap-northeast-2/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-ap-northeast-2"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[ap-northeast-2](https://aws-bigdata-blog-replica-ap-northeast-2.s3-ap-northeast-2.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| London | <a target="_blank" href="https://eu-west-2.console.aws.amazon.com/cloudformation/home?region=eu-west-2#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-eu-west-2/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-eu-west-2"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[eu-west-2](https://aws-bigdata-blog-replica-eu-west-2.s3.eu-west-2.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Tokyo | <a target="_blank" href="https://ap-northeast-1.console.aws.amazon.com/cloudformation/home?region=ap-northeast-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-ap-northeast-1/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-ap-northeast-1"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[ap-northeast-1](https://aws-bigdata-blog-replica-ap-northeast-1.s3-ap-northeast-1.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Frankfurt | <a target="_blank" href="https://eu-central-1.console.aws.amazon.com/cloudformation/home?region=eu-central-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-eu-central-1/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-eu-central-1"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[eu-central-1](https://aws-bigdata-blog-replica-eu-central-1.s3.eu-central-1.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|
| Canada (Central) | <a target="_blank" href="https://ca-central-1.console.aws.amazon.com/cloudformation/home?region=ca-central-1#/stacks/create/review?templateURL=https://s3.amazonaws.com/aws-bigdata-blog-replica-ca-central-1/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml&stackName=lex-web-ui&param_BootstrapBucket=aws-bigdata-blog-replica-ca-central-1"><span><img height="24px" src="https://s3.amazonaws.com/cloudformation-examples/cloudformation-launch-stack.png"/></span></a> |[ca-central-1](https://aws-bigdata-blog-replica-ca-central-1.s3.ca-central-1.amazonaws.com/artifacts/aws-lex-web-ui/artifacts/templates/master.yaml)|

By default, the CloudFormation template
creates a sample Lex bot and a [Amazon Cognito Identity
Pool](http://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)
to get you started. It copies the chatbot UI web application to an
[Amazon S3](https://aws.amazon.com/s3/) bucket including a dynamically
created configuration file. The CloudFormation stack outputs links to
the demo and related configuration once deployed. See the [CloudFormation
Deployment](#cloudformation-deployment) section for details.

You can modify the configuration of the deployed demo site to customize
the chatbot UI. It can also be further configured to be embedded it on
your web site. See the sections below for code samples and a description
of the configuration and deployment options.

*New regions supporting Lex only support Lex Version 2. A default install of Lex Web Ui with no target Bot specified
attempts to install a sample Lex Version 1 Bot and will fail in these new regions. In regions adding Lex support, a Lex Version 2 
Bot should be deployed prior to deploying Lex Web UI.*

# Integrating into your Site and Deploying
In addition to the CloudFormation deployment mentioned above, there are
other methods to integrate and deploy this project. Here is a summary
of the various methods:

| # | Method | Description | Use Case |
| --- | --- | --- | --- |
| 1 | [CloudFormation Deployment](#cloudformation-deployment) using the CloudFormation [templates](templates) provided by this project | Fully automated deployment of a hosted web application to an S3 bucket with an optional CI/CD pipeline. By default, it also creates a Cognito Identity Pool and a sample Lex bot | Use when you want to have a infrastructure as code approach that automatically builds and configures the chatbot UI resources |
| 2 | Use the pre-built [libraries](#libraries) from the [dist](dist) directory of this repo | We provide a pre-built version of the chatbot UI component and a loader library that you can use on your web site as a [stand alone page](#stand-alone-page) or as an embeddable [iframe](#iframe) | Use when you have an existing site and want to add the chatbot UI to it by simply copying or referencing the library files |


See the [Usage](#usage) and [Deployment](#deployment) sections below for details.

# Usage
This project provides a set of JavaScript libraries used to dynamically
insert the chatbot UI in a web page. The chatbot UI is loaded and
customized by including these libraries in your code and calling their
functions with configuration parameters.

The chatbot UI can be displayed either as a full page or embedded
in an iframe. In this section, you will find a brief overview of
the libraries and configuration parameters. It is useful to get
familiar with the concepts described in the [Libraries](#libraries)
and [Configuration](#configuration) sections before jumping to the code
[examples](#examples).

## Libraries
The list below describes the libraries produced by this project.
Pre-built versions of the libraries are found under the [dist](/dist)
directory of this repository.

1. **Chatbot UI component**. A UI widget packaged as a JavaScript reusable
component that can be plugged in a web application. The library is
provided by the `lex-web-ui.js` file under the [dist](dist) directory. It
is bundled from the source under the [lex-web-ui](lex-web-ui)
directory. This library is geared to be used as an import in a modern
web application but can also be instantiated directly in a web page
provided that you manually load the dependencies and explicitly pass
the configuration. See the component's [README](lex-web-ui/README.md)
for details
2. **Loader**. A script that adds the chatbot UI component library
described in the item above to a web page. It facilitates the
configuration and dependency loading process. The library
is provided by the `lex-web-ui-loader.js` file under the
[dist](dist) directory. It is bundled from the sources under the
[src/lex-web-ui-loader](src/lex-web-ui-loader) directory. This library
is used by adding a few script tags to an HTML page. See the loader
[README](src/README.md) for details

## Configuration
The chatbot UI component requires a configuration object
pointing to an existing Lex bot and to an [Amazon Cognito Identity
Pool](http://docs.aws.amazon.com/cognito/latest/developerguide/identity-pools.html)
to create credentials used to authenticate the Lex API calls from the
browser. The configuration object is also used to customize its behavior
and UI elements of the chatbot UI component.

The CloudFormation deployment method, from this project,
help with building a base configuration file. When deploying with it,
the base configuration is automatically pointed to the the
resources created in the deployment (i.e. Lex and Cognito).

You can override the configuration at run time by passing
parameters to the library functions or using various dynamic
configuration methods provided by the loader library (e.g. JSON
file, events). For details, see the [ChatBot UI Configuration
Loading](/src/README.md#chatbot-ui-configuration-loading) section
of the loader library documentation and the [Configuration and
Customization](/lex-web-ui/README.#configuration-and-customization)
section of the chatbot UI component documentation.

### Connect Interactive Messaging

Lex Web UI supports both [ListPicker and TimePicker templateTypes](https://docs.aws.amazon.com/connect/latest/adminguide/interactive-messages.html) and can be sent using the same JSON structure as utilized by Connect. 

ListPicker display in Web UI:

<img src="./img/interactive-message-listpicker.png" width=400>

TimePicker in Web UI:

<img src="./img/interactive-message-datepicker.png" width=350>

## Examples
The examples below are organized around the following use cases:
1. [Stand-Alone Page](#stand-alone-page)
2. [Iframe](#iframe)
3. [Npm Install and Vue Component Use](#npm-install-and-vue-component-use)

### Stand-Alone Page
To render the chatbot UI as a stand-alone full page, you can use two
alternatives: 1) directly use the chatbot UI component library or 2)
use the loader library. These libraries (see [Libraries](#libraries))
provide pre-built JavaScript and CSS files that are ready to be included
directly into an HTML file to display a full page chatbot UI.

When you use the chatbot UI component directly, you have to manually
load the component's dependencies and provide its configuration as a
parameter. The loader library alternative provides more configuration
options and automates the process of loading dependencies. It encapsulates
the chatbot UI component in an automated load process.

#### Stand-Alone Page Using the Loader Library
The loader library provides the easiest way to display the chatbot UI. The
entry point to this library is the `lex-web-ui-loader.js` script. This
script facilitates the process of loading run-time dependencies and
configuration.

If you deploy using the CloudFormation method, you will
get an S3 bucket with the loader library script and related files in a
way that is ready to be used. Alternatively, you can copy the files from
the `dist` directory of this repository to your web server and include the
loader.

In its most simple setup, you can use the loader library like this:
```html
<!-- include the loader library script -->
<script src="./lex-web-ui-loader.js"></script>
<script>
  /*
    The loader library creates a global object named ChatBotUiLoader
    It includes the FullPageLoader constructor
    An instance of FullPageLoader has the load function which kicks off
    the load process
  */

  // The following statement instantiate FullPageLoader and
  // calls the load function.
  // It is assumed that the configuration is present in the
  // default JSON file: ./lex-web-ui-loader-config.json
  new ChatBotUiLoader.FullPageLoader().load();
</script>
```

#### Stand-Alone API through the Loader Library

Similar to the iFrame loading technique described later, the
FullPageComponentLoader now provides an API allowing a subset of
events to be sent to the Lex Web UI Component. These events are
ping and postText. See the [full page](src/README.md#full-page) for
description of this API.

#### Stand-Alone details

For more details and other code examples about using the loader script
in a full page setup, see the [full page](src/README.md#full-page)
section of the loader documentation. You can also see the source of the
[index.html](src/website/index.html) page used in the demo site.

#### Stand-Alone Page Directly Using the ChatBot UI Component
Directly loading the chatbot UI component works at a lower level than
using the loader library as described above. This approach can be used
if you want to manually control the rendering, configuration and
dependency loading process.

The entry point to the chatbot UI component is the `lex-web-ui.js`
JavaScript file. The UI CSS styles are contained in the `lex-web-ui.css`
file. The component depends on the [Vue](https://vuejs.org/),
[Vuex](https://vuex.vuejs.org/), [Vuetify](https://vuetifyjs.com/)
and [AWS SDK](https://aws.amazon.com/sdk-for-browser/) libraries. You
should either host these dependencies on your site or load them from a
third-party CDN.

The HTML code below is an illustration of directly loading the chatbot UI
library and its dependencies.

**NOTE**: The versions of the links below may need to be pointed
to the latest supported versions.

```html
<html>
  <head>
    <!-- Font Dependencies -->
    <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons" rel="stylesheet" type="text/css">

    <!-- Vuetify CSS Dependencies -->
    <link href="https://unpkg.com/vuetify@0.16.9/dist/vuetify.min.css" rel="stylesheet" type="text/css">

    <!-- LexWebUi CSS from dist directory -->
    <link href="./lex-web-ui.css" rel="stylesheet" type="text/css">
    <!-- page specific LexWebUi styling -->
    <style type="text/css">
      #lex-web-ui-app { display: flex; height: 100%; width: 100%; }
      body, html { overflow-y: auto; overflow-x: hidden; }
    </style>
  </head>
  <body>
    <!-- application will be dynamically mounted here -->
    <div id="lex-web-ui"></div>

    <!--
      Vue, Vuex, Vuetifiy and AWS SDK dependencies must be loaded before lex-web-ui.js.
      Loading from third party CDN for quick testing
    -->
    <script src="https://unpkg.com/vue@2.5.3"></script>
    <script src="https://unpkg.com/vuex@3.0.1"></script>
    <script src="https://unpkg.com/vuetify@0.16.9"></script>
    <script src="https://sdk.amazonaws.com/js/aws-sdk-2.149.0.min.js"></script>

    <!-- LexWebUi Library from dist directory -->
    <script src="./lex-web-ui.js"></script>

    <!-- instantiate the web ui with a basic config -->
    <script>
      // LexWebUi supports numerous configuration options. Here
      // is an example using just a couple of the required options.
      var config = {
        cognito: {
          // Your Cognito Pool Id - this is required to provide AWS credentials
          poolId: '<your cognito pool id>'
        },
        lex: {
          // Lex Bot Name in your account
          v2BotId: '<your lex bot id>'
        }
      };
      // load the LexWebUi component
      var lexWebUi = new LexWebUi.Loader(config);
      // instantiate Vue
      new Vue({
        el: '#lex-web-ui',
        store: lexWebUi.store,
        template: '<div id="lex-web-ui-app"><lex-web-ui/></div>',
      });
    </script>
  </body>
</html>
```
### Iframe
You can embed the chatbot UI into an existing page using an iframe.
This approach provides a self-contained widget that can interact with
the parent page hosting the iframe. The `lex-web-ui-loader.js` loader
library provides the functionality to add it as an iframe in a page.

This loader script dynamically creates the iframe tag and supports
passing asynchronous configuration using events and JSON files. It also
provides an API between the iframe and the parent page which can be used
to pass Lex state and other events. These features are detailed in the
[Iframe Embedding](src/README.md#iframe-embedding) section of the library.

The HTML code below is a basic example of a parent page that adds the
chatbot UI as an iframe. In this scenario, the libraries and related
files from the `dist` directory of this repo are hosted in the same
directory as the parent page. If hosting the iframe on the same domain
as your parent page is desired, you must deploy the iframe code into your
own environment to allow the use of SAMEORIGIN configurations.

Please note that the `loaderOptions` variable has an `iframeSrcPath`
field which defines the path to the full page chatbot UI. This variable
can be pointed to a page like the one described in the [stand-alone
page](#stand-alone-page) section.

```html
<html>
  <head>
    <title>My Parent Page</title>
  </head>
  <body>
    <h1>Welcome to my parent page</h1>
    <!-- loader script -->
    <script src="./lex-web-ui-loader.js"></script>
    <script>
      /*
        The loader library creates a global object named ChatBotUiLoader
        It includes the IframeLoader constructor
        An instance of IframeLoader has the load function which kicks off
        the load process
      */

      // options for the loader constructor
      var loaderOptions = {
        // you can put the chatbot UI config in a JSON file
        configUrl: './chatbot-ui-loader-config.json',

        // the full page chatbot UI that will be iframed
        iframeSrcPath: './chatbot-index.html#/?lexWebUiEmbed=true'
      };

      // The following statement instantiates the IframeLoader
      var iframeLoader = new ChatBotUiLoader.IframeLoader(loaderOptions);

      // chatbot UI config
      // The loader can also obtain these values from other sources such
      // as a JSON file or events. The configUrl variable in the
      // loaderOptions above can be used to put these config values in a file
      // instead of explicitly passing it as an argument.
      var chatbotUiConfig = {
        ui: {
          // origin of the parent site where you are including the chatbot UI
          // set to window.location.origin since hosting on same site
          parentOrigin: window.location.origin,
        },
        iframe: {
          // origin hosting the HTML file that will be embedded in the iframe
          // set to window.location.origin since hosting on same site
          iframeOrigin: window.location.origin,
        },
        cognito: {
          // Your Cognito Pool Id - this is required to provide AWS credentials
          poolId: '<your cognito pool id>'
        },
        connect: {
          contactFlowId : '<your contact flow id>',
          instanceId : '<your instance id>',
          apiGatewayEndpoint : '<your api gateway endpoint>',
        },
        lex: {
          // Lex Bot Name in your account
          v2BotId: '<your lex bot id>'
        }
      };

      // Call the load function which returns a promise that is resolved
      // once the component is loaded or is rejected if there is an error
      iframeLoader.load(chatbotUiConfig)
        .then(function () {
          console.log('iframe loaded');
        })
        .catch(function (err) {
          console.error(err);
        });
    </script>
  </body>
</html>
```
For more examples showing how to include the chatbot UI as an iframe,
see the source of the [parent.html](src/website/parent.html) page and the
[Iframe Embedding](src/README.md#iframe-embedding) documentation of the
loader library.

### Sample Site
This repository provides a sample site that you can use as a base
for development. The site is a couple of HTML pages can be found
in the [src/website](src/website) directory. The pages includes the
[index.html](src/website/index.html) file which loads the chatbot UI
in a stand-alone page and the [parent.html](src/website/parent.html)
which page loads the chatbot UI in an iframe.

These pages are the same ones that are deployed by the CloudFormation
deployment method in this project. It uses the
`lex-web-ui-loader.js` loader library to display and configure the chatbot
UI. You can run a development version of this sample site on your machine.

#### Running Locally
This project provides a simple HTTP server to serve the sample site.
You can run the server using [Node.js](https://nodejs.org) on your local
machine or a test server. Please note that running locally is only designed
for testing purposes as the localhost only runs on HTTP and does not use
a secure HTTPs configuration.

The chatbot UI requires proper configuration values in the files located
under the [src/config](src/config) directory. Modify the values in the
`lex-web-ui-loader-config.json` file under the `src/config` directory.
If you deployed the demo site using the CloudFormation templates provided
by this project, you can copy the automatically generated config files
from the S3 buckets to your development host.

As a minimum,you would need to pass an existing Cognito Pool Id
and Lex Bot name. For example, set the appropriate values in the
`src/config/lex-web-ui-loader-config.json` file:
```JSON
  ...
  cognito: {
    "poolId": "us-east-1:deadbeef-fade-babe-cafe-0123456789ab"
  },
  lex: {
    "v2BotId": "ABC123"
  }
  ...
```

Before you run the local development server, you need to install the
development dependencies with the command:
```shell
npm install
```
To start the HTTP server web on port `8000`, issue the command:
```shell
# serves http://localhost:8000/index.html
# and http://localhost:8000/parent.html
npm start
```

If you want to hack the libraries under the `src/lex-web-ui-loader`
directory, the project provides a hot reloadable [webpack dev
server](https://github.com/webpack/webpack-dev-server) setup with the
following command:
```shell
# runs on port 8000
npm run dev
```

For a more advanced local host development and test environment, see the
[Dependencies and Build Setup](lex-web-ui#dependencies-and-build-setup)
documentation of the chatbot UI component.

# Deploying
This project provides [AWS CloudFormation](https://aws.amazon.com/cloudformation/)
templates that can be used to launch a fully configured working demo site and
related resources (e.g. Lex bot and Cognito Identity Pool).

The CloudFormation deployment is the preferred method as it allows to
automatically build, configure and deploy the application (including an
optional CI/CD pipeline) and it provides a higher degree of flexibility
when integrating with an existing environment.

## CloudFormation Deployment
The CloudFormation stack creates a web app in an S3 bucket which you
can link from your site. The S3 bucket also hosts the configuration,
JavaScript and CSS files which can be loaded by your existing web
pages. The CloudFormation deployment is documented in the
[README](templates/README.md) file under the [templates](templates)
directory.

## Building and Deploying your own LexWebUi

If you want to modify or change LexWebUi functionality follow this
release process once you are satisfied and have tested your code modifications. 
You'll need to create an S3 bucket to hold the bootstrap artifacts. Replace "yourbootstrapbucketname" with
the name of your bucket to complete the upload. 

```
npm install
cd lex-web-ui
npm install
cd ../build
./release.sh
export BUCKET="yourbootstrapbucketname"
./upload-bootstrap.sh
```

Note that "yourbootstrapbucket" (S3 bucket) must allow objects with public-read acl to be added. This approach
is described in the image below. Please be aware of the [security implications](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html) of allowing public-read acl. Do not add any sensitive data into this bucket as it will be publicly readable.

Once you've uploaded your distribution to your own bootstrap bucket, you can launch an installation of LexWebUi 
in the AWS region where this bucket is located by using the master.yaml from your bootstrap bucket. You can 
also update an existing LexWebUi installation by performing a stack update replacing the current template with
the template you just uploaded to your bootstrap bucket. Note that for either a fresh installation or an update,
you need to change the BootstrapBucket parameter to be the name of your bootstrap bucket and the BootstrapPrefix
parameter to be just "artifacts".

![BuildImage](./img/ExampleBuildForLexWebUi.png)

# New Features

### Changes in version 0.19.0
Two changes in version 0.19.0 are the ability to forward chat history as a transcript to an
agent when Connect Live Chat is initiated. Details on use of the transcript can be found in
[Connect Live Chat Agent Readme](README-connect-live-chat.md). This version also updates the 
OPTIONS method in the API to configure CORS to only allow requests from the WebAppParentOrigin. 

### Changes in version 0.18.2
Add feature for connect live chat. Allow client to optionally interact with an agent via Connect.
See [Connect Live Chat Agent Readme](README-connect-live-chat.md) for additional details.

### Notable changes in version 0.18.1
The Lex Web Ui now supports configuration of multiple Lex V2 Bot Locale IDs
using a comma separated list in the parameter LexV2BotLocaleId. The default Locale ID 
is en_US. Other supported values are de_DE, en_AU, en_GB, es_419, es_ES, es_US, fr_CA, 
fr_FR, it_IT, and ja_JP. See "https://docs.aws.amazon.com/lexv2/latest/dg/lex2.0.pdf" 
for the current list of supported Locale IDs. 

When multiple Locale IDs are specified in LexV2BotLocaleId, the Lex Web UI toolbar menu 
will allow the user to select the locale to use. The user selected locale ID is 
preserved across page refreshes. The locale selection menu items will be disabled if 
the user is the middle of completing an intent as the locale ID can't be changed at this 
time. The selected locale ID will be displayed in the toolbar. 

Lex Web Ui is now available in the Canada (Central) region - ca-central-1

For a complete list of fixes/changes in this version see CHANGELOG.md.

### Fixes/changes in version 0.18.0
- Move from webpack V3 to webpack V4 in the lex-web-ui component.
- Move to npm version 7.10.0.  
- Update component package versions.
- Resolve dependabot alerts.
- Fix to resolve update problem where Cognito Supported Identity Providers is reset to just Cognito. An update 
  will now preserve the existing Supported Identity Providers.
- Set AWS sdk to version 2.875.0.
- Improve Lex V2 support to handle responseCard defined as a session attribute in sessionAttributes.appContext.responseCard.
- Removed support for AWS Mobile Hub based distribution.

### Fixes/changes in version 0.17.9
- New support for Lex Version 2 Bots - added template parameters for V2 Bot Id, Bot Alias Id,
  and Locale Id. When a V1 Bot name is provided, the template will configure resources to use
  the V1 bot. When the V1 Bot name is left empty and the V2 Bot parameters are specified, the template
  will configure resources to use the V2 Bot. V1 Bot parameters take precedence over V2 Bot parameters if both
  are supplied.
- The Lex Web Ui can now be configured to send an initial utterance to the bot to get an intent started. A
  new template parameter named WebAppConfBotInitialUtterance is available. If left empty, no initial utterance is
  sent to the Bot which is the default behavior.
- Changed format of the date message displayed on a message to use "n min ago" to assist with accessibility when
  displaying this value.
- Changed behavior of ShouldLoadIframeMinimized setting. In prior releases, the last known state of the iframe took priority
  over this setting. In this release, when ShouldLoadIframeMinimized is set to true and the parent page is
  loaded or refreshed, the Bot iframe will always appear minimized. If this parameter is set to false, the last known state
  of the Bot is used to either show the iframe or minimize the iframe.
- Changed loginutils.js to prevent the parent page or the full page from looping if login fails through cognito.
  With this change, up to 5 attempts will be performed before failing with an alert message presented to the user.
- Support mixed case web ParentOrigin URLs and WebAppPath in Cognito user pool to prevent login failures due to case mismatch.
- Support multiple values for WebAppPath. This allows the LexWebUI with login enabled to be deployed on multiple pages
  on the same site (origin).
- Update the Cognito Callback and Signout URLs in the Cognito UserPool when ParentPageOrigin and WebAppPath parameters
  are updated in CloudFormation.

### Fixes in version 0.17.8
- Fix for pipeline based deployments - issue 264 - template error
- Fix to full page web client (index.html) using forceLogin to require a redirect to login page
- Fix to move to python 3.8 Lambda Runtime for yaml CloudFormation template embedded functions which remove use of boto3 vendored library
- Add ability for Lex Web UI to automatically retry a request if the Lex bot times out after 30 seconds using a configurable number of attempts.
  By default the timeout retry feature is disabled. When enabled, the default retry count is 1.

### Fixes in version 0.17.7
- Build script fix
- Move min button icon to the left of text

### Fixes in version 0.17.6
- Additional fixes to support upgrades. Upgrades from 0.17.1 and above are supported.
  Older versions will need to perform a fresh install to migrate to this version.

### Fixes in version 0.17.5
- Fix to allow use of CF template upgrade to disable WebAppConfHelp, WebAppConfPositiveFeedback, and WebAppConfNegativeFeedback
- Fix to improve resizing of lex-web-ui button at bottom of page when text is used in addition to icon

### Features in version 0.17.4
- Improved upgrade support.
  * The CloudFormation upgrade stack operation from the AWS Console should now be used to
    change configuration using the available parameters. After the upgrade is complete, the
    lex-web-ui-loader-config.json file deployed to the web app S3 bucket will be updated
    with the values specified in the template. Prior versions of the config file are archived
    using a date timestamp in the S3 bucket should you need to refer to prior configuration values.
  * Users can now upgrade to new versions of Lex-Web-Ui using the AWS CloudFormation console
    by replacing the template and specifying the S3 template location from the original regional
    S3 bucket. As new releases of Lex-Web-Ui are published to the distribution repositories, you
    can now upgrade to this version using the CloudFormation Upgrade/replace template process.
  * After an upgrade, the CloudFront distribution cache will need to be invalidated for the changes to be seen
    immediately.
- Chat history can now be preserved and redisplayed when the user comes back to the original parent page
  hosting the Lex-Web-Ui. This features is controlled using the SaveHistory template parameter. When
  this feature is enabled, a new menu is visible in the user interface that allows the user to
  clear chat history. The following are the methods you can enable this feature. Note that you can
  toggle this feature on and off using the upgrade process.
  * During a new deployment, specify true for the Save History parameter
  * Using the new upgrade feature, specify true for Save History parameter in the CloudFormation
  console.
- Lambda function upgrade to Python 3.7.

### Fixes in version 0.17.3
- Added loader config option (forceLogin) to templates which configures UI to require the user to authenticate through Cognito prior to using the bot.
- Added loader config option (minButtonContent) which allows text to be added to the button which appears on the parent page when the iframe is minimized.
- Added XRay support to Lambda functions.
- Added VPC actions to Lambda IAM Roles to support future deployment of Lambdas in VPC.
- Encrypted S3 buckets using AES-256 default KMS key
- Prebuilt deployments now available for Singapore, Tokyo, London, and Frankfurt regions

### Fixes in version 0.17.2
- Added option to hide message bubble on button click
- Resolved current github dependabot security issues
- Use default encryption for all S3 buckets using AES-256 encryption
- Added instructions in readme for adding additional vue components

### Fixes in version 0.17.1
- Create uniquely named Cognito UserPool on stack creation
- Removed display of Back button in title bar and instead provide a replay button using the text from prior
message directly in the message bubble. Back button can be re-enabled though configuration json if desired.
- Enhanced css attributes of the minimized chatbot button to help allow clicking on items in the parent
window as well as selecting text next the button.

### New Features in version 0.17.0
- Improved screen reader / accessibility features
- Added CloudFormation stack outputs for CloudFront and S3 bucket
- Use response card defined in session attribute "appContext" over that defined by Lex based response Card
- lex web ui now supports greater than 5 buttons when response card is defined in session attributes "appcontext"
- Updated dependent packages in package-lock.json identified by Dependabot security alerts
- Resolved additional CloudFront CORS issues
- See [CHANGELOG](CHANGELOG.md) for additional details

### New Features in version 0.16.0
- Lex-web-ui now ships with cloudfront as the default distribution method
  * better load times
  * non public access to S3 bucket
  * better future integration to cloudfront features such as WAF and Lambda@Edge
- Updated package.json dependencies

### New Features in version 0.15.0
- Moved to Webpack 4
- Changed default parameter ShowResponseCardTitle to be false - was default of true
- Added back default parameter BotAlias of '$LATEST'. The '$LATEST'
alias should only be used for manual testing. Amazon Lex limits
the number of runtime requests that you can make to the $LATEST version of the bot.

<img src="./img/feedbackButtons.png" width="480">

Toolbar Buttons
<img src="./img/toolbar.png" width="480">
- Help Button
</br>
Sends a help message to the bot
- Back Button
</br>
Resends the previous message


================================================
FILE: build/Makefile
================================================
#  This Makefile is used to update the bootstrap bucket containing
#  the project source and CloudFormation templates

# environment file controls config parameters
CONFIG_ENV := ../config/env.mk
include $(CONFIG_ENV)

# cfn templates
TEMPLATES_DIR := ../templates
TEMPLATES := $(wildcard $(TEMPLATES_DIR)/*.yaml)

# lambda dir
SOURCE_DIR := ../src

# build output directory
OUT := out
# put output dir in VPATH to simplify finding dependencies
VPATH := $(OUT)

.DELETE_ON_ERROR:

# upload files to bootstrap bucket
# NOTE: files uploaded with public read permissions
upload: upload-templates upload-custom-resources-zip upload-src-zip \
	upload-response-card-image upload-initiate-chat-lambda upload-streaming-lambda upload-qbusiness-lambda
.PHONY: upload

# create the output directory for tracking dependencies
$(OUT):
	mkdir -p "$(@)"

# upload cfn templatess
upload-templates: $(TEMPLATES) | $(OUT)
	#@echo "[INFO] Validating templates"
	#@$(MAKE) -C $(TEMPLATES_DIR)
	@echo "[INFO] Uploading templates"
	aws s3 sync --acl public-read --exclude "*" --include "*.yaml" \
		"$(TEMPLATES_DIR)" "s3://$(BOOTSTRAP_BUCKET_PATH)/templates/" \
		| tee "$(OUT)/$(@)"
	@echo "[INFO] master template: https://s3.amazonaws.com/$(BOOTSTRAP_BUCKET_PATH)/templates/master.yaml"


# cfn custom resource lambda files are found under this directory
CUSTOM_RESOURCES_DIR := $(TEMPLATES_DIR)/custom-resources

# zip cfn custom resource lambda files
CUSTOM_RESOURCES_ZIP := custom-resources-$(VERSION).zip
CUSTOM_RESOURCES_FILES := $(wildcard $(CUSTOM_RESOURCES_DIR)/*.py)
$(CUSTOM_RESOURCES_ZIP): $(CUSTOM_RESOURCES_FILES) | $(OUT)
	@echo "[INFO] Creating custom resource Lambda zip file"
	zip -j "$(OUT)/$(@)" $(CUSTOM_RESOURCES_FILES)
upload-custom-resources-zip: $(CUSTOM_RESOURCES_ZIP) | $(OUT)
	@echo "[INFO] Uploading custom resources Lambda zip file"
	aws s3 cp --acl public-read \
		"$(OUT)/$(CUSTOM_RESOURCES_ZIP)" \
		"s3://$(BOOTSTRAP_BUCKET_PATH)/$(CUSTOM_RESOURCES_ZIP)" \
		| tee -a "$(OUT)/$(@)"

# initiate chat lambda function

INITIATE_CHAT_LAMBDA_DIR := $(SOURCE_DIR)/initiate-chat-lambda
INITIATE_CHAT_LAMBDA_ZIP := initiate-chat-lambda-$(VERSION).zip
INITIATE_CHAT_LAMBDA_RESOURCES_FILES := $(wildcard $(INITIATE_CHAT_LAMBDA_DIR)/*.js)

$(INITIATE_CHAT_LAMBDA_ZIP): $(INITIATE_CHAT_LAMBDA_DIR)/index.js
	@echo "[INFO] Creating initiate chat Lambda zip file"
	zip -r -j "$(OUT)/$(INITIATE_CHAT_LAMBDA_ZIP)" $(INITIATE_CHAT_LAMBDA_DIR) ; 

upload-initiate-chat-lambda:
		@echo "[INFO] uploading initiate chat lambda"
	aws s3 cp --acl public-read \
			"$(OUT)/$(INITIATE_CHAT_LAMBDA_ZIP)" "s3://$(BOOTSTRAP_BUCKET_PATH)/$(INITIATE_CHAT_LAMBDA_ZIP)" \
			| tee -a "$(OUT)/$(@)"

# initiate chat lambda function

STREAMING_LAMBDA_DIR := $(SOURCE_DIR)/streaming-lambda
STREAMING_LAMBDA_ZIP := streaming-lambda-$(VERSION).zip
STREAMING_LAMBDA_RESOURCES_FILES := $(wildcard $(STREAMING_LAMBDA_DIR)/*.js)

$(STREAMING_LAMBDA_ZIP): $(STREAMING_LAMBDA_DIR)/index.js
	@echo "[INFO] Creating streaming Lambda zip file"
	zip -r -j "$(OUT)/$(STREAMING_LAMBDA_ZIP)" $(STREAMING_LAMBDA_DIR) ; 

upload-streaming-lambda:
		@echo "[INFO] uploading streaming lambda"
	aws s3 cp --acl public-read \
			"$(OUT)/$(STREAMING_LAMBDA_ZIP)" "s3://$(BOOTSTRAP_BUCKET_PATH)/$(STREAMING_LAMBDA_ZIP)" \
			| tee -a "$(OUT)/$(@)"

QBUSINESS_LAMBDA_DIR := $(SOURCE_DIR)/qbusiness-lambda
QBUSINESS_LAMBDA_ZIP := qbusiness-lambda-$(VERSION).zip
QBUSINESS_LAMBDA_RESOURCES_FILES := $(wildcard $(QBUSINESS_LAMBDA_DIR)/*.py)

$(QBUSINESS_LAMBDA_ZIP): $(QBUSINESS_LAMBDA_DIR)/index.py
	@echo "[INFO] Creating qbusiness Lambda zip file"
	zip -r -j "$(OUT)/$(QBUSINESS_LAMBDA_ZIP)" $(QBUSINESS_LAMBDA_DIR) ; 

upload-qbusiness-lambda:
		@echo "[INFO] uploading qbusiness lambda"
	aws s3 cp --acl public-read \
			"$(OUT)/$(QBUSINESS_LAMBDA_ZIP)" "s3://$(BOOTSTRAP_BUCKET_PATH)/$(QBUSINESS_LAMBDA_ZIP)" \
			| tee -a "$(OUT)/$(@)"

# files in this repo are bundled in a zip file to boostrap the codecommit repo
SRC_ZIP := src-$(VERSION).zip
SRC_FILES := $(shell git ls-files ..)
$(SRC_ZIP): $(SRC_FILES) | $(OUT)
	@echo "[INFO] creating git repo archive"
	cd .. && git archive --format=zip HEAD > "build/$(OUT)/$(@)"

upload-src-zip: $(SRC_ZIP) | $(OUT)
	@echo "[INFO] uploading git repo archive"
	aws s3 cp --acl public-read \
		"$(OUT)/$(SRC_ZIP)" "s3://$(BOOTSTRAP_BUCKET_PATH)/$(SRC_ZIP)" \
		| tee -a "$(OUT)/$(@)"

RESPONSE_CARD_IMAGE := ../lex-web-ui/public/img/flowers.jpeg
upload-response-card-image: $(RESPONSE_CARD_IMAGE) | $(OUT)
	@echo "[INFO] uploading response card image"
	aws s3 cp --acl public-read --content-type 'image/jpg' \
		"$(RESPONSE_CARD_IMAGE)" "s3://$(BOOTSTRAP_BUCKET_PATH)/flowers.jpeg" \
		| tee -a "$(OUT)/$(@)"

clean:
	-rm -f $(OUT)/*
.PHONY: clean


================================================
FILE: build/copy-assets.js
================================================
#!/usr/bin/env node

/**
 * Copy assets script - replaces dist/Makefile functionality
 * Copies dependencies and bundle files to dist directory after Vite build
 */

import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)
const rootDir = path.resolve(__dirname, '..')

const distDir = path.join(rootDir, 'dist')
const depsDir = path.join(rootDir, 'src', 'dependencies')
const bundleDir = path.join(rootDir, 'lex-web-ui', 'dist', 'bundle')
const websiteDir = path.join(rootDir, 'src', 'website')

// Ensure dist directory exists
if (!fs.existsSync(distDir)) {
  fs.mkdirSync(distDir, { recursive: true })
}

console.log('[INFO] Copying dependencies...')

// Copy dependency files
if (fs.existsSync(depsDir)) {
  const files = fs.readdirSync(depsDir)
  files.forEach(file => {
    const srcPath = path.join(depsDir, file)
    const destPath = path.join(distDir, file)
    
    if (fs.statSync(srcPath).isFile()) {
      fs.copyFileSync(srcPath, destPath)
      console.log(`  ✓ Copied: ${file}`)
    }
  })
} else {
  console.log('  ⚠ Dependencies directory not found')
}

console.log('[INFO] Copying lex-web-ui bundle files...')

// Copy lex-web-ui bundle files
if (fs.existsSync(bundleDir)) {
  const files = fs.readdirSync(bundleDir)
  files.forEach(file => {
    // Copy lex-web-ui and worker files
    if (file.match(/^(lex-web-ui|wav-worker)\.(min\.)?(js|css|map)$/)) {
      const srcPath = path.join(bundleDir, file)
      const destPath = path.join(distDir, file)
      fs.copyFileSync(srcPath, destPath)
      console.log(`  ✓ Copied bundle: ${file}`)
    }
  })
} else {
  console.log('  ⚠ Bundle directory not found - run "cd lex-web-ui && npm run build-dist" first')
}

console.log('[INFO] Copying website files...')

// Copy website files (HTML, CSS)
if (fs.existsSync(websiteDir)) {
  const websiteFiles = ['custom-chatbot-style.css']
  websiteFiles.forEach(file => {
    const srcPath = path.join(websiteDir, file)
    const destPath = path.join(distDir, file)
    if (fs.existsSync(srcPath)) {
      fs.copyFileSync(srcPath, destPath)
      console.log(`  ✓ Copied: ${file}`)
    }
  })
}

console.log('[INFO] Asset copying complete!')


================================================
FILE: build/create-custom-css.js
================================================
import jsdom from "jsdom";
import fs from "fs";
const { JSDOM } = jsdom;

function modifyRule(styleSheet, selector, props) {

    let rule = null;
    if(styleSheet.cssRules) {
        for(const cssrule of styleSheet.cssRules){
            console.log(cssrule.cssText);
            if (cssrule.selectorText == selector) {
                rule = cssrule;
            }
        }
    }

    const propsArr = props.sup
        ? props.split(/\s*;\s*/).map(i => i.split(/\s*:\s*/)) // from string
        : Object.entries(props);                              // from Object

    if (rule) {
        for (let [prop, val] of propsArr){        
            // rule.style[prop] = val; is against the spec, and does not support !important.
            rule.style.setProperty(prop, ...val.split(/ *!(?=important)/));
        }
    }
    else {
        let propsString = props;
        if (!props.sup) {
            propsString = propsArr.reduce((str, [k, v]) => `${str}${k}: ${v}; `, '');
        }
        console.log("Adding rule");
        styleSheet.insertRule(`${selector} { ${propsString} }`, styleSheet.cssRules.length);
        const css = Array.from(document.styleSheets[document.styleSheets.length - 1].cssRules).map(rule => rule.cssText).join(' ');
        console.log(css);
    }
    return styleSheet;
}

// Reading the current CSS and adding it into an in-memory DOM object for easier manipulation
const css_location = process.argv[2];
const current_css = fs.readFileSync(css_location,{ encoding: 'utf8' });
const dom = new JSDOM('<body><style>' + current_css + '</style></body>');

const document = dom.window.document;
const styleSheet = document.styleSheets[document.styleSheets.length - 1];

if (process.env['MESSAGE_TEXT_COLOR'] && process.env['MESSAGE_TEXT_COLOR'].length > 0) { 
    modifyRule(styleSheet, '.message-text', { color: process.env['MESSAGE_TEXT_COLOR'] + ' !important'});
}
if (process.env['MESSAGE_FONT'] && process.env['MESSAGE_FONT'].length > 0) { 
    modifyRule(styleSheet, '.message-text', { "font-family": process.env['MESSAGE_FONT'] + ' !important'});
}
if (process.env['CHAT_BACKGROUND_COLOR'] && process.env['CHAT_BACKGROUND_COLOR'].length > 0) { 
    modifyRule(styleSheet, '.message-list-container', { "background-color": process.env['CHAT_BACKGROUND_COLOR'] + ' !important'});
}
if (process.env['TOOLBAR_COLOR'] && process.env['TOOLBAR_COLOR'].length > 0) { 
    modifyRule(styleSheet, '.bg-red', { "background-color": process.env['TOOLBAR_COLOR'] + ' !important'});
}
if (process.env['AGENT_CHAT_BUBBLE'] && process.env['AGENT_CHAT_BUBBLE'].length > 0) { 
    modifyRule(styleSheet, '.message-bot .message-bubble', { "background-color": process.env['AGENT_CHAT_BUBBLE'] + ' !important'});
}
if (process.env['CUSTOMER_CHAT_BUBBLE'] && process.env['CUSTOMER_CHAT_BUBBLE'].length > 0) { 
    modifyRule(styleSheet, '.message-human .message-bubble', { "background-color": process.env['CUSTOMER_CHAT_BUBBLE'] + ' !important'});
}
if (process.env['MINIMIZED_BUTTON_COLOR'] && process.env['MINIMIZED_BUTTON_COLOR'].length > 0) { 
    modifyRule(styleSheet, 'button.min-button', { "background-color": process.env['MINIMIZED_BUTTON_COLOR'] + ' !important'});
}

//Write the CSS back to the file (formatting will be changed if it had manual inputs but rules/properties should remain)
const css = Array.from(styleSheet.cssRules).map(rule => rule.cssText).join('\r\n\r\n');
console.log(css);
fs.writeFileSync(css_location, css);

================================================
FILE: build/create-iframe-snippet-file.sh
================================================
#!/usr/bin/env bash

# This script is used at build time to generate a page with
# config info and an HTML snippet showing how to load the
# chatbot UI as an iframe
# This is called from the main Makefile used by CodeBuild

if [ -z "${IFRAME_SNIPPET_FILE}" ]; then
  echo "[ERROR] IFRAME_SNIPPET_FILE environment variable not defined" >&2
  exit 1
fi

if [ -z "${CLOUDFRONT_DOMAIN}" ]; then
  echo "[WARN] CLOUDFRONT_DOMAIN environment variable not defined" >&2
  WEBAPP_URL=''
else
  WEBAPP_URL="https://${CLOUDFRONT_DOMAIN}"
fi

[ -z "${PARENT_ORIGIN}" ] && \
    echo "[WARN] PARENT_ORIGIN environment variable not defined" >&2

cat <<EOF > ${IFRAME_SNIPPET_FILE}
<html>
<head>
  <title>Lex Web UI Iframe Snippet</title>
  <style>
    body { margin: 2% 4%; }
    pre { padding: 10px ;background-color: EFEFEF; overflow: auto; }
  </style>
</head>

<body>
  <h2>Lex Web UI Iframe Snippet</h2>

  <p>
    Include the snippet listed below in your web page to embed the chatbot
    UI. The snippet loads the chatbot UI as an iframe using the config
    shown in the
    <a href="#json-file-config">JSON File Config</a> section below.
    The <a href="#origin-configuration">Origin Configuration</a>
    section below shows the values of the iframe URL and parent
    <a href="https://developer.mozilla.org/en-US/docs/Glossary/Origin">
    origin</a> set in the config.
  </p>

  <h3 id="snippet">Snippet</h3>
  <pre>
&lt;script src="${WEBAPP_URL}/lex-web-ui-loader.min.js"&gt;&lt;/script&gt;
&lt;script&gt;
  var loaderOpts = {
    baseUrl: '${WEBAPP_URL}/',
    shouldLoadMinDeps: true
  };
  var loader = new ChatBotUiLoader.IframeLoader(loaderOpts);
  var chatbotUiConfig = {
          /* Example of setting session attributes on parent page
          lex: {
            sessionAttributes: {
              userAgent: navigator.userAgent,
              QNAClientFilter: ''
            }
          }
          */
        };
  loader.load(chatbotUiConfig)
    .catch(function (error) { console.error(error); });
&lt;/script&gt;
  </pre>

  <h3 id="origin-configuration">Origin Configuration</h3>
  <p>
    The values of the <code>iframeOrigin</code> and
    <code>parentOrigin</code> config fields determine where the iframe
    is loaded from and the parent origin that is authorized to load
    the iframe. The JSON config file is set to use the iframe with the
    following values:
  </p>
  <ul>
    <li><label>Iframe URL: </label><code id="iframe-url"></code></li>
    <li><label>Parent Origin <small>(if config is empty set to same
      origin)</small>: </label><code id="parent-origin"></code></li>
  </ul>

  <h3 id="json-file-config">JSON File Config</h3>
  <p>
    The JSON config file is fetched from:
    <a href="${WEBAPP_URL}/lex-web-ui-loader-config.json">
      ${WEBAPP_URL}/lex-web-ui-loader-config.json
    </a>. Here is its content:
  </p>
  <pre id="loader-config"></pre>

  <script>
    fetch('lex-web-ui-loader-config.json')
      .then(response => response.json())
      .then((config) => {
        const iframeOrigin =
          (config && 'iframe' in config && config.iframe.iframeOrigin) || '';
        const iframeSrcPath =
          (config && 'iframe' in config && config.iframe.iframeSrcPath) || '';
        document.getElementById('iframe-url').textContent =
          iframeOrigin + iframeSrcPath;

        const parentOrigin =
          (config && 'ui' in config && config.ui.parentOrigin) || window.location.origin;
        document.getElementById('parent-origin').textContent =
          parentOrigin;

        document.getElementById('loader-config').textContent =
          JSON.stringify(config, null, 2);
      })
      .catch(error => console.error(error));
  </script>
</body>
</html>
EOF


================================================
FILE: build/release.sh
================================================
#! /bin/bash
timestamp=$(date +%s)
unamestr=$(uname)
export VERSION=v$(node -p "require('../package.json').version")
echo version is "$VERSION"
case $unamestr in
"Darwin" | "FreeBSD")
sed -i '' -e "s/(v.*)/($VERSION)/g" \
-e "s/Timestamp:.*/Timestamp: $timestamp/g" \
-e "s/custom-resources-.*zip/custom-resources-$VERSION.zip/g" \
-e "s/src-.*zip/src-$VERSION.zip/g" \
-e "s/initiate-chat-lambda-.*zip/initiate-chat-lambda-$VERSION.zip/g" \
../templates/master.yaml;;

"Linux")
sed -i -e "s/(v.*)/($VERSION)/g" \
-e "s/Timestamp:.*/Timestamp: $timestamp/g" \
-e "s/src-.*zip/src-$VERSION.zip/g" \
-e "s/initiate-chat-lambda-.*zip/initiate-chat-lambda-$VERSION.zip/g" \
-e "s/streaming-lambda-.*zip/streaming-lambda-$VERSION.zip/g" \
-e "s/custom-resources-.*zip/custom-resources-$VERSION.zip/g" \
-e "s/qbusiness-lambda-.*zip/qbusiness-lambda-$VERSION.zip/g" \
../templates/master.yaml;;

*)
sed -i -e "s/(v.*)/($VERSION)/g" \
-e "s/Timestamp:.*/Timestamp: $timestamp/g" \
-e "s/src-.*zip/src-$VERSION.zip/g" \
-e "s/initiate-chat-lambda-.*zip/initiate-chat-lambda-$VERSION.zip/g" \
-e "s/streaming-lambda-.*zip/streaming-lambda-$VERSION.zip/g" \
-e "s/custom-resources-.*zip/custom-resources-$VERSION.zip/g" \
-e "s/qbusiness-lambda-.*zip/qbusiness-lambda-$VERSION.zip/g" \
../templates/master.yaml;;

esac
cd ../lex-web-ui
npm run build
npm run build-dist
cd .. 
make
cd build
make "custom-resources-$VERSION.zip"
make "initiate-chat-lambda-$VERSION.zip"
make "streaming-lambda-$VERSION.zip"
make "qbusiness-lambda-$VERSION.zip"
cd ..
cd dist
make



================================================
FILE: build/update-lex-web-ui-config.js
================================================
/**
 * Updates config files used by the build environment
 * It merges the values from the environment with the
 * existing values in the config files.
 * Values from the environment take precendence.
 *
 * This is called during the build process by
 * the Makefile in the root dir which is run by CodeBuild
 */
import fs from 'fs';
import config from '../config/index.js';
import { exec } from 'child_process';
import path from 'path';
let revisedConfig;

/**
 * lexV2BotLocaleVoices maps lex v2 locale IDs to support voices to be used when creating initial speech mp3 files.
 * The mapping identifies a voiceId, an engine, and a languageCode to use when executing aws polly CLI. Over time
 * the set of supported localeId to Voices may be expanded. An empty string for a languageCode indicates that polly
 * does not support a language code for this locale.
 */
const lexV2BotLocaleVoices = {
  "de_AT": {
    "voiceId": "Vicki",
    "engine": "neural",
    "languageCode": "de-AT"
  },
  "de_DE": {
    "voiceId": "Vicki",
    "engine": "neural",
    "languageCode": "de-DE"
  },
  "en_AU": {
    "voiceId": "Olivia",
    "engine": "neural",
    "languageCode": "en-AU"
  },
  "en_GB": {
    "voiceId": "Amy",
    "engine": "neural",
    "languageCode": "en-GB"
  },
  "en_IN": {
    "voiceId": "Aditi",
    "engine": "standard",
    "languageCode": "en-IN"
  },
  "en_US": {
    "voiceId": "Joanna",
    "engine": "neural",
    "languageCode": "en-US"
  },
  "en_ZA": {
    "voiceId": "Ayanda",
    "engine": "neural",
    "languageCode": "en-ZA"
  },
  "es_419": {
    "voiceId": "Mia",
    "engine": "standard",
    "languageCode": ""
  },
  "es_ES": {
    "voiceId": "Lucia",
    "engine": "neural",
    "languageCode": "es-ES"
  },
  "es_US": {
    "voiceId": "Lupe",
    "engine": "neural",
    "languageCode": "es-US"
  },
  "fr_CA": {
    "voiceId": "Gabrielle",
    "engine": "neural",
    "languageCode": "fr-CA"
  },
  "fr_FR": {
    "voiceId": "Lea",
    "engine": "neural",
    "languageCode": "fr-FR"
  },
  "it_IT": {
    "voiceId": "Bianca",
    "engine": "neural",
    "languageCode": "it-IT"
  },
  "ja_JP": {
    "voiceId": "Takumi",
    "engine": "neural",
    "languageCode": "ja-JP"
  },
  "ko_KR": {
    "voiceId": "Seoyeon",
    "engine": "neural",
    "languageCode": "ko-KR"
  },
  "pt_BR": {
    "voiceId": "Camila",
    "engine": "neural",
    "languageCode": ""
  },
  "pt_PT": {
    "voiceId": "Cristiano",
    "engine": "standard",
    "languageCode": "pt-PT"
  },
  "zh_CN": {
    "voiceId": "Zhiyu",
    "engine": "standard",
    "languageCode": ""
  }
};

// dump relevant env vars
[
  'AWS_DEFAULT_REGION',
  'V2_BOT_ID',
  'V2_BOT_ALIAS_ID',
  'V2_BOT_LOCALE_ID',
  'BOT_NAME',
  'BOT_ALIAS',
  'BOT_INITIAL_TEXT',
  'BOT_INITIAL_SPEECH',
  'BOT_INITIAL_UTTERANCE',
  'BOT_RETRY_ON_LEX_POST_TEXT_TIMEOUT',
  'BOT_RETRY_COUNT_POST_TEXT_TIMEOUT',
  'IFRAME_ORIGIN',
  'PARENT_ORIGIN',
  'ENABLE_LOGIN',
  'ENABLE_LIVE_CHAT',
  'FORCE_LOGIN',
  'POOL_ID',
  'APP_USER_POOL_CLIENT_ID',
  'CONNECT_CONTACT_FLOW_ID',
  'CONNECT_INSTANCE_ID',
  'CONNECT_API_GATEWAY_ENDPOINT',
  'CONNECT_PROMPT_FOR_NAME_MESSAGE',
  'CONNECT_WAIT_FOR_AGENT_MESSAGE',
  'CONNECT_WAIT_FOR_AGENT_MESSAGE_INTERVAL_IN_SECONDS',
  'CONNECT_AGENT_JOINED_MESSAGE',
  'CONNECT_AGENT_LEFT_MESSAGE',
  'CONNECT_CHAT_ENDED_MESSAGE',
  'CONNECT_ATTACH_CHAT_TRANSCRIPT',
  'CONNECT_LIVE_CHAT_TERMS',
  'CONNECT_START_LIVE_CHAT_LABEL',
  'CONNECT_START_LIVE_CHAT_ICON',
  'CONNECT_END_LIVE_CHAT_LABEL',
  'CONNECT_END_LIVE_CHAT_ICON',
  'CONNECT_END_LIVE_CHAT_UTTERANCE',
  'CONNECT_TRANSCRIPT_MESSAGE_DELAY_IN_MSEC',
  'CONNECT_TRANSCRIPT_REDACT_REGEX',
  'APP_DOMAIN_NAME',
  'UI_TOOLBAR_TITLE',
  'UI_TOOLBAR_LOGO',
  'BOT_AVATAR_IMG_URL',
  'NEGATIVE_INTENT',
  'POSITIVE_INTENT',
  'HELP_INTENT',
  'MIN_BUTTON_TOOLTIP_CONTENT',
  'ENABLE_UPLOAD',
  'UPLOAD_BUCKET_NAME'
].forEach(function (envVar) {
  console.info('[INFO] Env var - %s: [%s]', envVar, process.env[envVar]);
});

/**
 * Create an Mp3 file in the specified output folder for the given text, languageCode, and voiceId
 * using AWS Polly.
 * @param text
 * @param languageCode
 * @param voiceId
 * @param output
 */
function createMp3(text, languageCode, voiceId, output) {
  let lcDefinition = (languageCode.length > 0) ? `--language-code ${languageCode}` : '';
  const cmd = `aws polly synthesize-speech --text "${text}" ${lcDefinition} --voice-id "${voiceId}"  --output-format mp3 --text-type text "${output}"`;
  console.info(`createMp3 cmd is \n${cmd}`);
  exec(cmd, (error, stdout, stderr) => {
    if (error) {
      console.error(`createMp3 error: ${error.message}`);
    }
    if (stderr) {
      console.error(`createMp3 stderr: ${stderr}`);
    }
    console.info(`createMp3 stdout: ${stdout}`);
  });
}

/**
 * Translate the specified text to the specified localeId and create an Mp3 in
 * the specified output folder.
 * @param localeId
 * @param text
 * @param output
 */
function translateAndCreateMp3(localeId, text, output) {
  console.info(`translate '${text}' to ${localeId.trim()} with output of ${output}`);
  const lid = localeId.trim();
  if (lid === 'en_US') {
    return;
  }
  let targetPollyVoiceConfig = lexV2BotLocaleVoices[lid]
  let enUSPollyVoiceConfig = lexV2BotLocaleVoices["en_US"];
  console.info(`targetPollyVoiceConfig ${JSON.stringify(targetPollyVoiceConfig,null,4)}`);
  if (targetPollyVoiceConfig) {
    // translate the english text defined in CF template to the target language.
    const targetTranslateLang = lid.split("_")[0];
    const translateCmd = `aws translate translate-text --text "${text}" --source-language-code auto --target-language-code ${targetTranslateLang} --output json --query 'TranslatedText'`;
    console.info(`translate cmd is \n${translateCmd}`);
    exec(translateCmd, (error, stdout, stderr) => {
      if (error) {
        console.error(`translate error: ${error.message}`);
      }
      if (stderr) {
        console.error(`translate stderr: ${stderr}`);
      }
      console.info(`translate stdout: ${stdout.trim()}`);
      // if a language code for the target locale exists, specify this for the polly command
      createMp3(stdout.trim().replace(/['"]+/g, ''), targetPollyVoiceConfig.languageCode, targetPollyVoiceConfig.voiceId, output);
    });
  } else { // the specified locale can't be translated as it is not in the map. Generate an english version for this locale.
    console.info(`Could not find specified locale "${lid}"`);
    createMp3(text.trim().replace(/['"]+/g, ''), enUSPollyVoiceConfig.languageCode, enUSPollyVoiceConfig.voiceId, output);
  }
}

Object.keys(config)
.map(function (confKey) { return config[confKey]; })
.forEach(function (item) {
  fs.writeFile(item.file, JSON.stringify(item.conf, null, 2), function (err) {
    if (err) {
      console.error('[ERROR] could not write file: ', err);
      process.exit(1);
    }

    // This following code pre-creates mp3 files needed for voice interaction. These files need to be pre-created
    // and made available to the lex-web-ui for voice mode as the unauthenticated IAM role built for lex-web-ui no
    // longer has access to Polly dynamically. The build IAM role does have access to Polly and Translate. The files
    // are made available in the lex-web-ui web app bucket alongside of other UI assets. The files created are used
    // for initial voice, the "All done" verbal response, and the "There was an error" verbal response.

    console.info('[INFO] Updated file: ', item.file);
    console.info('[INFO] Config contents: ', JSON.stringify(item.conf));
    revisedConfig = item.conf;
    let enUSPollyVoiceConfig = lexV2BotLocaleVoices["en_US"];
    const configDir = path.parse(item.file).dir;
    console.info('[INFO] Config dir is: ', configDir);

    // if an initial speach is set in the configuration, generate mp3 files for english and other configured locales
    if (revisedConfig.lex && revisedConfig.lex.initialSpeechInstruction && revisedConfig.lex.initialSpeechInstruction.length > 0) {
      // always generate an en_US mp3 if initial speech is defined
      createMp3(revisedConfig.lex.initialSpeechInstruction.replace(/['"]+/g, ''), "en-US", enUSPollyVoiceConfig.voiceId,`${configDir}/initial_speech_en_US.mp3`);

      // Iterate through the map of the configured v2BotLocaleIds and generate mp3 files with initial speech.
      // This is only supported for LexV2 bots.
      revisedConfig.lex.v2BotLocaleId.split(",").map((localeId) => {
        const lid = localeId.trim();
        if (lid != "en_US") {
          translateAndCreateMp3(lid, revisedConfig.lex.initialSpeechInstruction.replace(/['"]+/g, ''), `${configDir}/initial_speech_${lid}.mp3`)
        }
      });
    }

    // create mp3 audio files for other prompts used by lex-web-ui in english and other locales
    if (revisedConfig && revisedConfig.lex) {
      // Create special case MP3s that lexwebui might utilize
      createMp3('All done', "en-US", enUSPollyVoiceConfig.voiceId, `${configDir}/all_done_en_US.mp3`);
      createMp3('There was an error', "en-US", enUSPollyVoiceConfig.voiceId, `${configDir}/there_was_an_error_en_US.mp3`);
      revisedConfig.lex.v2BotLocaleId.split(",").map((localeId) => {
        const lid = localeId.trim();
        translateAndCreateMp3(localeId, 'All done', `${configDir}/all_done_${lid}.mp3`);
        translateAndCreateMp3(localeId, 'There was an error', `${configDir}/there_was_an_error_${lid}.mp3`);
      });
    }
  });
});

================================================
FILE: build/upload-bootstrap.sh
================================================
#!/usr/bin/env bash
# utility to manually bootstrap a bucket with source files
# this is intended for testing - use the Makefile for prod
export version=v$(node -p "require('../package.json').version")
echo version is $version
BUCKET=${BUCKET:-""}
BOOTSTRAP_BUCKET_PATH="${BUCKET}/artifacts"

[ "$BUCKET" ] || {
  echo "[ERROR] bucket variable is not set"
  exit 1
}

if ! test -d out; then
mkdir out
fi

# assumes that it is running from build dir
rm -f out/src-$version.zip
# no longer removes custom-resources.zip - this is created in build using ./release.sh as a required step

pushd .
cd ..
git ls-files | xargs zip -u build/out/src-$version.zip
popd
aws s3 cp out/src-$version.zip \
  "s3://${BOOTSTRAP_BUCKET_PATH}/src-$version.zip"

aws s3 cp out/custom-resources-$version.zip \
  "s3://${BOOTSTRAP_BUCKET_PATH}/custom-resources-$version.zip"

aws s3 cp out/initiate-chat-lambda-$version.zip \
  "s3://${BOOTSTRAP_BUCKET_PATH}/initiate-chat-lambda-$version.zip"

aws s3 cp out/streaming-lambda-$version.zip \
  "s3://${BOOTSTRAP_BUCKET_PATH}/streaming-lambda-$version.zip"

aws s3 cp out/qbusiness-lambda-$version.zip \
  "s3://${BOOTSTRAP_BUCKET_PATH}/qbusiness-lambda-$version.zip"

aws s3 sync --exclude "*" --include "*.yaml" \
  ../templates "s3://${BOOTSTRAP_BUCKET_PATH}/templates/"

echo "[INFO] master template: https://s3.amazonaws.com/${BOOTSTRAP_BUCKET_PATH}/templates/master.yaml"


================================================
FILE: config/base.env.js
================================================
/**
 * Base config common to builds
 */
export default {
  region: process.env.AWS_DEFAULT_REGION,
  cognito: {
    poolId: process.env.POOL_ID,
    appUserPoolClientId: process.env.APP_USER_POOL_CLIENT_ID,
    appUserPoolName: process.env.APP_USER_POOL_NAME,
    appDomainName: process.env.APP_DOMAIN_NAME,
    aws_cognito_region: process.env.AWS_DEFAULT_REGION,
    region: process.env.AWS_DEFAULT_REGION,
  },
  connect: {
    contactFlowId : process.env.CONNECT_CONTACT_FLOW_ID,
    instanceId : process.env.CONNECT_INSTANCE_ID,
    apiGatewayEndpoint : process.env.CONNECT_API_GATEWAY_ENDPOINT,
    promptForNameMessage: process.env.CONNECT_PROMPT_FOR_NAME_MESSAGE,
    waitingForAgentMessage: process.env.CONNECT_WAIT_FOR_AGENT_MESSAGE,
    waitingForAgentMessageIntervalSeconds: process.env.CONNECT_WAIT_FOR_AGENT_MESSAGE_INTERVAL_IN_SECONDS,
    agentJoinedMessage: process.env.CONNECT_AGENT_JOINED_MESSAGE,
    agentLeftMessage: process.env.CONNECT_AGENT_LEFT_MESSAGE,
    chatEndedMessage: process.env.CONNECT_CHAT_ENDED_MESSAGE,
    attachChatTranscript: process.env.CONNECT_ATTACH_CHAT_TRANSCRIPT,
    liveChatTerms: process.env.CONNECT_LIVE_CHAT_TERMS,
    endLiveChatUtterance: process.env.CONNECT_END_LIVE_CHAT_UTTERANCE,
    transcriptMessageDelayInMsec: process.env.CONNECT_TRANSCRIPT_MESSAGE_DELAY_IN_MSEC,
    transcriptRedactRegex: process.env.CONNECT_TRANSCRIPT_REDACT_REGEX,
  },
  lex: {
    v2BotId: process.env.V2_BOT_ID,
    v2BotAliasId: process.env.V2_BOT_ALIAS_ID,
    v2BotLocaleId: process.env.V2_BOT_LOCALE_ID,
    initialText: process.env.BOT_INITIAL_TEXT,
    initialSpeechInstruction: process.env.BOT_INITIAL_SPEECH,
    initialUtterance: process.env.BOT_INITIAL_UTTERANCE,
    reInitSessionAttributesOnRestart: (process.env.REINIT_SESSION_ATTRIBUTES_ON_RESTART === undefined) ? undefined : (process.env.REINIT_SESSION_ATTRIBUTES_ON_RESTART === 'true') ? true : false,
    region: process.env.AWS_DEFAULT_REGION,
    retryOnLexPostTextTimeout: process.env.BOT_RETRY_ON_LEX_POST_TEXT_TIMEOUT,
    retryCountPostTextTimeout: process.env.BOT_RETRY_COUNT_POST_TEXT_TIMEOUT,
    allowStreamingResponses: (process.env.ALLOW_STREAMING_RESPONSES === undefined) ? undefined : (process.env.ALLOW_STREAMING_RESPONSES === 'true') ? true : false,
    streamingWebSocketEndpoint: process.env.STREAMING_WEB_SOCKET_ENDPOINT,
    streamingDynamoDbTable: process.env.STREAMING_DYNAMO_TABLE,
  },
  ui: {
    parentOrigin: process.env.PARENT_ORIGIN,
    toolbarTitle: process.env.UI_TOOLBAR_TITLE,
    toolbarLogo: process.env.UI_TOOLBAR_LOGO,
    toolbarStartLiveChatLabel: process.env.CONNECT_START_LIVE_CHAT_LABEL,
    toolbarEndLiveChatLabel:  process.env.CONNECT_END_LIVE_CHAT_LABEL,
    toolbarStartLiveChatIcon: process.env.CONNECT_START_LIVE_CHAT_ICON,
    toolbarEndLiveChatIcon: process.env.CONNECT_END_LIVE_CHAT_ICON,
    positiveFeedbackIntent: process.env.POSITIVE_INTENT,
    negativeFeedbackIntent: process.env.NEGATIVE_INTENT,
    helpIntent: process.env.HELP_INTENT,
    minButtonToolTipContent: process.env.MIN_BUTTON_TOOLTIP_CONTENT,
    minButtonContent: process.env.MIN_BUTTON_CONTENT,
    avatarImageUrl: process.env.BOT_AVATAR_IMG_URL,
    backButton: (process.env.BACK_BUTTON === undefined) ? undefined : (process.env.BACK_BUTTON === 'true') ? true : false,
    messageMenu: (process.env.MESSAGE_MENU === undefined) ? undefined : (process.env.MESSAGE_MENU === 'true') ? true : false,
    hideButtonMessageBubble: (process.env.HIDE_BUTTON_MESSAGE_BUBBLE === undefined) ? undefined : (process.env.HIDE_BUTTON_MESSAGE_BUBBLE === 'true') ? true : false,
    enableLogin: (process.env.ENABLE_LOGIN === undefined) ? undefined : (process.env.ENABLE_LOGIN === 'true') ? true : false,
    enableLiveChat: (process.env.ENABLE_LIVE_CHAT === undefined) ? undefined : (process.env.ENABLE_LIVE_CHAT === 'true') ? true : false,
    forceLogin: (process.env.FORCE_LOGIN === undefined) ? undefined : (process.env.FORCE_LOGIN === 'true') ? true : false,
    enableUpload: (process.env.ENABLE_UPLOAD === undefined) ? undefined : (process.env.ENABLE_UPLOAD === 'true') ? true : false,
    uploadS3BucketName: process.env.UPLOAD_BUCKET_NAME,
    AllowSuperDangerousHTMLInMessage: (process.env.ENABLE_MARKDOWN_SUPPORT === undefined) ? undefined : (process.env.ENABLE_MARKDOWN_SUPPORT === 'true') ? true : false,
    shouldDisplayResponseCardTitle: (process.env.SHOW_RESPONSE_CARD_TITLE === undefined) ? undefined : (process.env.SHOW_RESPONSE_CARD_TITLE === 'true') ? true : false,
    saveHistory:
      process.env.SAVE_HISTORY === undefined
        ? undefined
        : process.env.SAVE_HISTORY === "true"
        ? true
        : false,
  },
  polly: {},
  recorder: {},
  iframe: {
    iframeOrigin: process.env.IFRAME_ORIGIN,
    shouldLoadIframeMinimized: (process.env.IFRAME_LOAD_MINIMIZED === undefined) ? undefined : (process.env.IFRAME_LOAD_MINIMIZED === 'true') ? true : false,
  },
};


================================================
FILE: config/dist.env.js
================================================
/**
 * Config used when deploying the app using the pre-built dist library
 */
import path from 'path';
import { fileURLToPath } from 'url';
import { readFileSync } from 'fs';
import mergeConfig from './utils/merge-config.js';
import baseConfig from './base.env.js';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

const loaderConfigFileName =
  process.env.LOADER_CONFIG ||
  path.resolve(__dirname, '../src/config/lex-web-ui-loader-config.json');
const loaderConfig = JSON.parse(readFileSync(loaderConfigFileName, 'utf8'));


const currentConfigFileName = path.resolve(__dirname, '../' + process.env.CURRENT_CONFIG_FILE);
const currentConfig = JSON.parse(readFileSync(currentConfigFileName, 'utf8'));
/* merge currentConfig with loader default config*/
if (currentConfig['connect'] === undefined) {
  console.log(`adding connect to currentConfig`);
  currentConfig['connect'] = {};
  console.log(`new currentConfig ${JSON.stringify(currentConfig)}`);
}
const userConfig = mergeConfig(currentConfig, baseConfig);

export default {
  appPreBuilt: {
    file: loaderConfigFileName,
    conf: mergeConfig(userConfig, baseConfig),
  },
};


================================================
FILE: config/env.mk
================================================
# This environment file is sourced from the Makefiles in this project
# it is in Makefile format (not shell)

# bucket name and prefix path used to store templates, data, scripts and
# build artifacts
# NOTE: S3 path should match the BootstrapBucket and BootstrapPrefix parameters
# in master.yaml template
export BOOTSTRAP_BUCKET_PATH ?= aws-bigdata-blog/artifacts/aws-lex-web-ui/artifacts

# S3 bucket hosting the web application
# The Makefile in the root dir can sync the local files to it
export WEBAPP_BUCKET ?= $()

# AWS cli env variables used when running/building
# Override by setting it in the environment before running make
export AWS_DEFAULT_PROFILE ?= default
export AWS_DEFAULT_REGION ?= us-east-1

# lex-web-ui config variables
export BOT_NAME ?= OrderFlowers
# set to empty if not present in environment
export POOL_ID ?= $()

# amazon-connect config variables
export CONNECT_CONTACT_FLOW_ID ?= $()
export CONNECT_INSTANCE_ID ?= $()
export CONNECT_API_GATEWAY_ENDPOINT ?= $()
export CONNECT_WAIT_FOR_AGENT_MESSAGE ?= $()
export CONNECT_PROMPT_FOR_NAME_MESSAGE ?= $()
export CONNECT_WAIT_FOR_AGENT_MESSAGE_INTERVAL_IN_SECONDS ?= $()
export CONNECT_AGENT_JOINED_MESSAGE ?= $()
export CONNECT_AGENT_LEFT_MESSAGE ?= $()
export CONNECT_CHAT_ENDED_MESSAGE ?= $()
export CONNECT_ATTACH_CHAT_TRANSCRIPT ?= $()
export CONNECT_START_LIVE_CHAT_LABEL ?= $()
export CONNECT_START_LIVE_CHAT_ICON ?= $()
export CONNECT_END_LIVE_CHAT_LABEL ?= $()
export CONNECT_END_LIVE_CHAT_ICON ?= $()
export CONNECT_END_LIVE_CHAT_UTTERANCE ?= $()
export CONNECT_TRANSCRIPT_MESSAGE_DELAY_IN_MSEC ?= $()
export CONNECT_TRANSCRIPT_REDACT_REGEX ?= $()
export BOT_INITIAL_TEXT ?= $()
export BOT_INITIAL_SPEECH ?= $()
export BOT_INITIAL_UTTERANCE ?= $()
export UI_TOOLBAR_TITLE ?= $()
export UI_TOOLBAR_LOGO ?= $()
export HIDE_BUTTON_MESSAGE_BUBBLE ?= $()
export MESSAGE_MENU ?= $()
export BACK_BUTTON ?= $()
export MIN_BUTTON_CONTENT ?= $()

export IFRAME_ORIGIN ?= $()
export PARENT_ORIGIN ?= $()

export VERSION := v$(shell node -p "const fs=require('fs');const path='./package.json';fs.existsSync(path)?require('./package.json').version : require('../package.json').version")


================================================
FILE: config/full.env.js
================================================
/**
 * Configs to be updated when performing a full build from source
 * This module exports an object with a key for each config file
 * Each key contains the file name and the associated config object
 */

import path from 'path';
import { fileURLToPath } from 'url';
import { readFileSync } from 'fs';
import mergeConfig from './utils/merge-config.js';
import baseConfig from './base.env.js';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// config files to update
const confFileNames = {
  appProd:
    process.env.WEBAPP_CONFIG_PROD ||
    path.resolve(__dirname, '../lex-web-ui/src/config/config.prod.json'),

  appDev:
    process.env.WEBAPP_CONFIG_DEV ||
    path.resolve(__dirname, '../lex-web-ui/src/config/config.dev.json'),

  loader:
    process.env.LOADER_CONFIG ||
    path.resolve(__dirname, '../src/config/lex-web-ui-loader-config.json'),
};

const appProdConfig = JSON.parse(readFileSync(confFileNames.appProd, 'utf8'));
const appDevConfig = JSON.parse(readFileSync(confFileNames.appDev, 'utf8'));
const loaderConfig = JSON.parse(readFileSync(confFileNames.loader, 'utf8'));

export default {
  loader: {
    file: confFileNames.loader,
    conf: mergeConfig(loaderConfig, baseConfig),
  },
  appProd: {
    file: confFileNames.appProd,
    conf: mergeConfig(appProdConfig, baseConfig),
  },
  appDev: {
    file: confFileNames.appDev,
    conf: mergeConfig(appDevConfig, baseConfig),
  },
};


================================================
FILE: config/index.js
================================================
/**
 * Provides a config object depending on the build target
 * Used by ../build/update-lex-web-ui-config.js
 */

// controls whether to load the config for the pre-built version or
// the full build
const buildType = (process.env.BUILD_TYPE) ? process.env.BUILD_TYPE : 'dist';
const validBuildTypes = ['dist', 'full'];

if (!validBuildTypes.includes(buildType)) {
  throw new Error(`invalid build type: ${buildType}`);
}

const configModule = await import(`./${buildType}.env.js`);
export default configModule.default;

================================================
FILE: config/utils/merge-config.js
================================================
/**
 * Merges config objects. The initial set of keys to merge are driven by
 * the baseConfig. The srcConfig values override the baseConfig ones
 * unless the srcConfig value is empty
 */
export default function mergeConfig(baseConfig, srcConfig) {
  function isEmpty(data) {
    if(typeof(data) === 'number' || typeof(data) === 'boolean') {
      return false;
    }
    if(typeof(data) === 'undefined' || data === null) {
      return true;
    }
    if(typeof(data.length) !== 'undefined') {
      return data.length === 0;
    }
    return Object.keys(data).length === 0;
  }

  // use the baseConfig first level keys as the base for merging
  return Object.keys(baseConfig)
    .map(function (key) {
      let mergedConfig = {};
      let value = baseConfig[key];
      // merge from source if its value is not empty
      // allow merging of emtpy values from helpIntent, positiveFeedbackIntent, and negativeFeedbackIntent
      if (key in srcConfig ) {
        if (key==='helpIntent' ||
            key==='positiveFeedbackIntent' ||
            key=== 'negativeFeedbackIntent' ||
            key=== 'initialUtterance' ||
            key=== 'minButtonContent' ||
            key=== 'initialText' ||
            key=== 'avatarImageUrl' ||
            key=== 'toolbarLogo' ||
            key=== 'streamingWebSocketEndpoint' ||
            key=== 'streamingDynamoDbTable' ||
            !isEmpty(srcConfig[key]) ) {
            value = (typeof (baseConfig[key]) === 'object') ?
                // recursively merge sub-objects in both directions
                Object.assign(
                    mergeConfig(srcConfig[key], baseConfig[key]),
                    mergeConfig(baseConfig[key], srcConfig[key]),
                ) :
                srcConfig[key];
        }
      }
      mergedConfig[key] = value;
      return mergedConfig;
    })
    .reduce(function (merged, configItem) {
        return Object.assign({}, merged, configItem);
      },
      {}
    );
}


================================================
FILE: dist/3.5.13_dist_vue.global.prod.js
================================================
/**
* vue v3.5.13
* (c) 2018-present Yuxi (Evan) You and Vue contributors
* @license MIT
**/var Vue=function(e){"use strict";var t,n;let r,i,l,s,o,a,c,u,d,p,f,h,m;function g(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1;return e=>e in t}let y={},b=[],_=()=>{},S=()=>!1,x=e=>111===e.charCodeAt(0)&&110===e.charCodeAt(1)&&(e.charCodeAt(2)>122||97>e.charCodeAt(2)),C=e=>e.startsWith("onUpdate:"),k=Object.assign,T=(e,t)=>{let n=e.indexOf(t);n>-1&&e.splice(n,1)},N=Object.prototype.hasOwnProperty,w=(e,t)=>N.call(e,t),A=Array.isArray,E=e=>"[object Map]"===V(e),I=e=>"[object Set]"===V(e),R=e=>"[object Date]"===V(e),O=e=>"[object RegExp]"===V(e),P=e=>"function"==typeof e,M=e=>"string"==typeof e,L=e=>"symbol"==typeof e,$=e=>null!==e&&"object"==typeof e,D=e=>($(e)||P(e))&&P(e.then)&&P(e.catch),F=Object.prototype.toString,V=e=>F.call(e),B=e=>V(e).slice(8,-1),U=e=>"[object Object]"===V(e),j=e=>M(e)&&"NaN"!==e&&"-"!==e[0]&&""+parseInt(e,10)===e,H=g(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),q=g("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),W=e=>{let t=Object.create(null);return n=>t[n]||(t[n]=e(n))},K=/-(\w)/g,z=W(e=>e.replace(K,(e,t)=>t?t.toUpperCase():"")),J=/\B([A-Z])/g,G=W(e=>e.replace(J,"-$1").toLowerCase()),X=W(e=>e.charAt(0).toUpperCase()+e.slice(1)),Q=W(e=>e?`on${X(e)}`:""),Z=(e,t)=>!Object.is(e,t),Y=(e,...t)=>{for(let n=0;n<e.length;n++)e[n](...t)},ee=(e,t,n,r=!1)=>{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:r,value:n})},et=e=>{let t=parseFloat(e);return isNaN(t)?e:t},en=e=>{let t=M(e)?Number(e):NaN;return isNaN(t)?e:t},er=()=>r||(r="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:"undefined"!=typeof global?global:{}),ei=g("Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol");function el(e){if(A(e)){let t={};for(let n=0;n<e.length;n++){let r=e[n],i=M(r)?ec(r):el(r);if(i)for(let e in i)t[e]=i[e]}return t}if(M(e)||$(e))return e}let es=/;(?![^(]*\))/g,eo=/:([^]+)/,ea=/\/\*[^]*?\*\//g;function ec(e){let t={};return e.replace(ea,"").split(es).forEach(e=>{if(e){let n=e.split(eo);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}function eu(e){let t="";if(M(e))t=e;else if(A(e))for(let n=0;n<e.length;n++){let r=eu(e[n]);r&&(t+=r+" ")}else if($(e))for(let n in e)e[n]&&(t+=n+" ");return t.trim()}let ed=g("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"),ep=g("svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"),ef=g("annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"),eh=g("area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"),em=g("itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly");function eg(e,t){if(e===t)return!0;let n=R(e),r=R(t);if(n||r)return!!n&&!!r&&e.getTime()===t.getTime();if(n=L(e),r=L(t),n||r)return e===t;if(n=A(e),r=A(t),n||r)return!!n&&!!r&&function(e,t){if(e.length!==t.length)return!1;let n=!0;for(let r=0;n&&r<e.length;r++)n=eg(e[r],t[r]);return n}(e,t);if(n=$(e),r=$(t),n||r){if(!n||!r||Object.keys(e).length!==Object.keys(t).length)return!1;for(let n in e){let r=e.hasOwnProperty(n),i=t.hasOwnProperty(n);if(r&&!i||!r&&i||!eg(e[n],t[n]))return!1}}return String(e)===String(t)}function ey(e,t){return e.findIndex(e=>eg(e,t))}let ev=e=>!!(e&&!0===e.__v_isRef),eb=e=>M(e)?e:null==e?"":A(e)||$(e)&&(e.toString===F||!P(e.toString))?ev(e)?eb(e.value):JSON.stringify(e,e_,2):String(e),e_=(e,t)=>ev(t)?e_(e,t.value):E(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((e,[t,n],r)=>(e[eS(t,r)+" =>"]=n,e),{})}:I(t)?{[`Set(${t.size})`]:[...t.values()].map(e=>eS(e))}:L(t)?eS(t):!$(t)||A(t)||U(t)?t:String(t),eS=(e,t="")=>{var n;return L(e)?`Symbol(${null!=(n=e.description)?n:t})`:e};class ex{constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=i,!e&&i&&(this.index=(i.scopes||(i.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){let e,t;if(this._isPaused=!0,this.scopes)for(e=0,t=this.scopes.length;e<t;e++)this.scopes[e].pause();for(e=0,t=this.effects.length;e<t;e++)this.effects[e].pause()}}resume(){if(this._active&&this._isPaused){let e,t;if(this._isPaused=!1,this.scopes)for(e=0,t=this.scopes.length;e<t;e++)this.scopes[e].resume();for(e=0,t=this.effects.length;e<t;e++)this.effects[e].resume()}}run(e){if(this._active){let t=i;try{return i=this,e()}finally{i=t}}}on(){i=this}off(){i=this.parent}stop(e){if(this._active){let t,n;for(t=0,this._active=!1,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,this.effects.length=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.cleanups.length=0,this.scopes){for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!e){let e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.parent=void 0}}}let eC=new WeakSet;class ek{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,i&&i.active&&i.effects.push(this)}pause(){this.flags|=64}resume(){64&this.flags&&(this.flags&=-65,eC.has(this)&&(eC.delete(this),this.trigger()))}notify(){(!(2&this.flags)||32&this.flags)&&(8&this.flags||eN(this))}run(){if(!(1&this.flags))return this.fn();this.flags|=2,eD(this),eA(this);let e=l,t=eP;l=this,eP=!0;try{return this.fn()}finally{eE(this),l=e,eP=t,this.flags&=-3}}stop(){if(1&this.flags){for(let e=this.deps;e;e=e.nextDep)eO(e);this.deps=this.depsTail=void 0,eD(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){64&this.flags?eC.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){eI(this)&&this.run()}get dirty(){return eI(this)}}let eT=0;function eN(e,t=!1){if(e.flags|=8,t){e.next=o,o=e;return}e.next=s,s=e}function ew(){let e;if(!(--eT>0)){if(o){let e=o;for(o=void 0;e;){let t=e.next;e.next=void 0,e.flags&=-9,e=t}}for(;s;){let t=s;for(s=void 0;t;){let n=t.next;if(t.next=void 0,t.flags&=-9,1&t.flags)try{t.trigger()}catch(t){e||(e=t)}t=n}}if(e)throw e}}function eA(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function eE(e){let t;let n=e.depsTail,r=n;for(;r;){let e=r.prevDep;-1===r.version?(r===n&&(n=e),eO(r),function(e){let{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}(r)):t=r,r.dep.activeLink=r.prevActiveLink,r.prevActiveLink=void 0,r=e}e.deps=t,e.depsTail=n}function eI(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(eR(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function eR(e){if(4&e.flags&&!(16&e.flags)||(e.flags&=-17,e.globalVersion===eF))return;e.globalVersion=eF;let t=e.dep;if(e.flags|=2,t.version>0&&!e.isSSR&&e.deps&&!eI(e)){e.flags&=-3;return}let n=l,r=eP;l=e,eP=!0;try{eA(e);let n=e.fn(e._value);(0===t.version||Z(n,e._value))&&(e._value=n,t.version++)}catch(e){throw t.version++,e}finally{l=n,eP=r,eE(e),e.flags&=-3}}function eO(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,e.prevSub=void 0),i&&(i.prevSub=r,e.nextSub=void 0),n.subs===e&&(n.subs=r,!r&&n.computed)){n.computed.flags&=-5;for(let e=n.computed.deps;e;e=e.nextDep)eO(e,!0)}t||--n.sc||!n.map||n.map.delete(n.key)}let eP=!0,eM=[];function eL(){eM.push(eP),eP=!1}function e$(){let e=eM.pop();eP=void 0===e||e}function eD(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=l;l=void 0;try{t()}finally{l=e}}}let eF=0;class eV{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class eB{constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0}track(e){if(!l||!eP||l===this.computed)return;let t=this.activeLink;if(void 0===t||t.sub!==l)t=this.activeLink=new eV(l,this),l.deps?(t.prevDep=l.depsTail,l.depsTail.nextDep=t,l.depsTail=t):l.deps=l.depsTail=t,function e(t){if(t.dep.sc++,4&t.sub.flags){let n=t.dep.computed;if(n&&!t.dep.subs){n.flags|=20;for(let t=n.deps;t;t=t.nextDep)e(t)}let r=t.dep.subs;r!==t&&(t.prevSub=r,r&&(r.nextSub=t)),t.dep.subs=t}}(t);else if(-1===t.version&&(t.version=this.version,t.nextDep)){let e=t.nextDep;e.prevDep=t.prevDep,t.prevDep&&(t.prevDep.nextDep=e),t.prevDep=l.depsTail,t.nextDep=void 0,l.depsTail.nextDep=t,l.depsTail=t,l.deps===t&&(l.deps=e)}return t}trigger(e){this.version++,eF++,this.notify(e)}notify(e){eT++;try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e.sub.dep.notify()}finally{ew()}}}let eU=new WeakMap,ej=Symbol(""),eH=Symbol(""),eq=Symbol("");function eW(e,t,n){if(eP&&l){let t=eU.get(e);t||eU.set(e,t=new Map);let r=t.get(n);r||(t.set(n,r=new eB),r.map=t,r.key=n),r.track()}}function eK(e,t,n,r,i,l){let s=eU.get(e);if(!s){eF++;return}let o=e=>{e&&e.trigger()};if(eT++,"clear"===t)s.forEach(o);else{let i=A(e),l=i&&j(n);if(i&&"length"===n){let e=Number(r);s.forEach((t,n)=>{("length"===n||n===eq||!L(n)&&n>=e)&&o(t)})}else switch((void 0!==n||s.has(void 0))&&o(s.get(n)),l&&o(s.get(eq)),t){case"add":i?l&&o(s.get("length")):(o(s.get(ej)),E(e)&&o(s.get(eH)));break;case"delete":!i&&(o(s.get(ej)),E(e)&&o(s.get(eH)));break;case"set":E(e)&&o(s.get(ej))}}ew()}function ez(e){let t=tx(e);return t===e?t:(eW(t,"iterate",eq),t_(e)?t:t.map(tk))}function eJ(e){return eW(e=tx(e),"iterate",eq),e}let eG={__proto__:null,[Symbol.iterator](){return eX(this,Symbol.iterator,tk)},concat(...e){return ez(this).concat(...e.map(e=>A(e)?ez(e):e))},entries(){return eX(this,"entries",e=>(e[1]=tk(e[1]),e))},every(e,t){return eZ(this,"every",e,t,void 0,arguments)},filter(e,t){return eZ(this,"filter",e,t,e=>e.map(tk),arguments)},find(e,t){return eZ(this,"find",e,t,tk,arguments)},findIndex(e,t){return eZ(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return eZ(this,"findLast",e,t,tk,arguments)},findLastIndex(e,t){return eZ(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return eZ(this,"forEach",e,t,void 0,arguments)},includes(...e){return e0(this,"includes",e)},indexOf(...e){return e0(this,"indexOf",e)},join(e){return ez(this).join(e)},lastIndexOf(...e){return e0(this,"lastIndexOf",e)},map(e,t){return eZ(this,"map",e,t,void 0,arguments)},pop(){return e1(this,"pop")},push(...e){return e1(this,"push",e)},reduce(e,...t){return eY(this,"reduce",e,t)},reduceRight(e,...t){return eY(this,"reduceRight",e,t)},shift(){return e1(this,"shift")},some(e,t){return eZ(this,"some",e,t,void 0,arguments)},splice(...e){return e1(this,"splice",e)},toReversed(){return ez(this).toReversed()},toSorted(e){return ez(this).toSorted(e)},toSpliced(...e){return ez(this).toSpliced(...e)},unshift(...e){return e1(this,"unshift",e)},values(){return eX(this,"values",tk)}};function eX(e,t,n){let r=eJ(e),i=r[t]();return r===e||t_(e)||(i._next=i.next,i.next=()=>{let e=i._next();return e.value&&(e.value=n(e.value)),e}),i}let eQ=Array.prototype;function eZ(e,t,n,r,i,l){let s=eJ(e),o=s!==e&&!t_(e),a=s[t];if(a!==eQ[t]){let t=a.apply(e,l);return o?tk(t):t}let c=n;s!==e&&(o?c=function(t,r){return n.call(this,tk(t),r,e)}:n.length>2&&(c=function(t,r){return n.call(this,t,r,e)}));let u=a.call(s,c,r);return o&&i?i(u):u}function eY(e,t,n,r){let i=eJ(e),l=n;return i!==e&&(t_(e)?n.length>3&&(l=function(t,r,i){return n.call(this,t,r,i,e)}):l=function(t,r,i){return n.call(this,t,tk(r),i,e)}),i[t](l,...r)}function e0(e,t,n){let r=tx(e);eW(r,"iterate",eq);let i=r[t](...n);return(-1===i||!1===i)&&tS(n[0])?(n[0]=tx(n[0]),r[t](...n)):i}function e1(e,t,n=[]){eL(),eT++;let r=tx(e)[t].apply(e,n);return ew(),e$(),r}let e2=g("__proto__,__v_isRef,__isVue"),e3=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>"arguments"!==e&&"caller"!==e).map(e=>Symbol[e]).filter(L));function e6(e){L(e)||(e=String(e));let t=tx(this);return eW(t,"has",e),t.hasOwnProperty(e)}class e4{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get(e,t,n){if("__v_skip"===t)return e.__v_skip;let r=this._isReadonly,i=this._isShallow;if("__v_isReactive"===t)return!r;if("__v_isReadonly"===t)return r;if("__v_isShallow"===t)return i;if("__v_raw"===t)return n===(r?i?tf:tp:i?td:tu).get(e)||Object.getPrototypeOf(e)===Object.getPrototypeOf(n)?e:void 0;let l=A(e);if(!r){let e;if(l&&(e=eG[t]))return e;if("hasOwnProperty"===t)return e6}let s=Reflect.get(e,t,tN(e)?e:n);return(L(t)?e3.has(t):e2(t))?s:(r||eW(e,"get",t),i)?s:tN(s)?l&&j(t)?s:s.value:$(s)?r?tg(s):th(s):s}}class e8 extends e4{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t];if(!this._isShallow){let t=tb(i);if(t_(n)||tb(n)||(i=tx(i),n=tx(n)),!A(e)&&tN(i)&&!tN(n))return!t&&(i.value=n,!0)}let l=A(e)&&j(t)?Number(t)<e.length:w(e,t),s=Reflect.set(e,t,n,tN(e)?e:r);return e===tx(r)&&(l?Z(n,i)&&eK(e,"set",t,n):eK(e,"add",t,n)),s}deleteProperty(e,t){let n=w(e,t);e[t];let r=Reflect.deleteProperty(e,t);return r&&n&&eK(e,"delete",t,void 0),r}has(e,t){let n=Reflect.has(e,t);return L(t)&&e3.has(t)||eW(e,"has",t),n}ownKeys(e){return eW(e,"iterate",A(e)?"length":ej),Reflect.ownKeys(e)}}class e5 extends e4{constructor(e=!1){super(!0,e)}set(e,t){return!0}deleteProperty(e,t){return!0}}let e9=new e8,e7=new e5,te=new e8(!0),tt=new e5(!0),tn=e=>e,tr=e=>Reflect.getPrototypeOf(e);function ti(e){return function(...t){return"delete"!==e&&("clear"===e?void 0:this)}}function tl(e,t){let n=function(e,t){let n={get(n){let r=this.__v_raw,i=tx(r),l=tx(n);e||(Z(n,l)&&eW(i,"get",n),eW(i,"get",l));let{has:s}=tr(i),o=t?tn:e?tT:tk;return s.call(i,n)?o(r.get(n)):s.call(i,l)?o(r.get(l)):void(r!==i&&r.get(n))},get size(){let t=this.__v_raw;return e||eW(tx(t),"iterate",ej),Reflect.get(t,"size",t)},has(t){let n=this.__v_raw,r=tx(n),i=tx(t);return e||(Z(t,i)&&eW(r,"has",t),eW(r,"has",i)),t===i?n.has(t):n.has(t)||n.has(i)},forEach(n,r){let i=this,l=i.__v_raw,s=tx(l),o=t?tn:e?tT:tk;return e||eW(s,"iterate",ej),l.forEach((e,t)=>n.call(r,o(e),o(t),i))}};return k(n,e?{add:ti("add"),set:ti("set"),delete:ti("delete"),clear:ti("clear")}:{add(e){t||t_(e)||tb(e)||(e=tx(e));let n=tx(this);return tr(n).has.call(n,e)||(n.add(e),eK(n,"add",e,e)),this},set(e,n){t||t_(n)||tb(n)||(n=tx(n));let r=tx(this),{has:i,get:l}=tr(r),s=i.call(r,e);s||(e=tx(e),s=i.call(r,e));let o=l.call(r,e);return r.set(e,n),s?Z(n,o)&&eK(r,"set",e,n):eK(r,"add",e,n),this},delete(e){let t=tx(this),{has:n,get:r}=tr(t),i=n.call(t,e);i||(e=tx(e),i=n.call(t,e)),r&&r.call(t,e);let l=t.delete(e);return i&&eK(t,"delete",e,void 0),l},clear(){let e=tx(this),t=0!==e.size,n=e.clear();return t&&eK(e,"clear",void 0,void 0),n}}),["keys","values","entries",Symbol.iterator].forEach(r=>{n[r]=function(...n){let i=this.__v_raw,l=tx(i),s=E(l),o="entries"===r||r===Symbol.iterator&&s,a=i[r](...n),c=t?tn:e?tT:tk;return e||eW(l,"iterate","keys"===r&&s?eH:ej),{next(){let{value:e,done:t}=a.next();return t?{value:e,done:t}:{value:o?[c(e[0]),c(e[1])]:c(e),done:t}},[Symbol.iterator](){return this}}}}),n}(e,t);return(t,r,i)=>"__v_isReactive"===r?!e:"__v_isReadonly"===r?e:"__v_raw"===r?t:Reflect.get(w(n,r)&&r in t?n:t,r,i)}let ts={get:tl(!1,!1)},to={get:tl(!1,!0)},ta={get:tl(!0,!1)},tc={get:tl(!0,!0)},tu=new WeakMap,td=new WeakMap,tp=new WeakMap,tf=new WeakMap;function th(e){return tb(e)?e:ty(e,!1,e9,ts,tu)}function tm(e){return ty(e,!1,te,to,td)}function tg(e){return ty(e,!0,e7,ta,tp)}function ty(e,t,n,r,i){if(!$(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;let l=i.get(e);if(l)return l;let s=e.__v_skip||!Object.isExtensible(e)?0:function(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}(B(e));if(0===s)return e;let o=new Proxy(e,2===s?r:n);return i.set(e,o),o}function tv(e){return tb(e)?tv(e.__v_raw):!!(e&&e.__v_isReactive)}function tb(e){return!!(e&&e.__v_isReadonly)}function t_(e){return!!(e&&e.__v_isShallow)}function tS(e){return!!e&&!!e.__v_raw}function tx(e){let t=e&&e.__v_raw;return t?tx(t):e}function tC(e){return!w(e,"__v_skip")&&Object.isExtensible(e)&&ee(e,"__v_skip",!0),e}let tk=e=>$(e)?th(e):e,tT=e=>$(e)?tg(e):e;function tN(e){return!!e&&!0===e.__v_isRef}function tw(e){return tE(e,!1)}function tA(e){return tE(e,!0)}function tE(e,t){return tN(e)?e:new tI(e,t)}class tI{constructor(e,t){this.dep=new eB,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=t?e:tx(e),this._value=t?e:tk(e),this.__v_isShallow=t}get value(){return this.dep.track(),this._value}set value(e){let t=this._rawValue,n=this.__v_isShallow||t_(e)||tb(e);Z(e=n?e:tx(e),t)&&(this._rawValue=e,this._value=n?e:tk(e),this.dep.trigger())}}function tR(e){return tN(e)?e.value:e}let tO={get:(e,t,n)=>"__v_raw"===t?e:tR(Reflect.get(e,t,n)),set:(e,t,n,r)=>{let i=e[t];return tN(i)&&!tN(n)?(i.value=n,!0):Reflect.set(e,t,n,r)}};function tP(e){return tv(e)?e:new Proxy(e,tO)}class tM{constructor(e){this.__v_isRef=!0,this._value=void 0;let t=this.dep=new eB,{get:n,set:r}=e(t.track.bind(t),t.trigger.bind(t));this._get=n,this._set=r}get value(){return this._value=this._get()}set value(e){this._set(e)}}function tL(e){return new tM(e)}class t${constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,this.__v_isRef=!0,this._value=void 0}get value(){let e=this._object[this._key];return this._value=void 0===e?this._defaultValue:e}set value(e){this._object[this._key]=e}get dep(){return function(e,t){let n=eU.get(e);return n&&n.get(t)}(tx(this._object),this._key)}}class tD{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function tF(e,t,n){let r=e[t];return tN(r)?r:new t$(e,t,n)}class tV{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep=new eB(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=eF-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!t,this.isSSR=n}notify(){if(this.flags|=16,!(8&this.flags)&&l!==this)return eN(this,!0),!0}get value(){let e=this.dep.track();return eR(this),e&&(e.version=this.dep.version),this._value}set value(e){this.setter&&this.setter(e)}}let tB={},tU=new WeakMap;function tj(e,t=!1,n=h){if(n){let t=tU.get(n);t||tU.set(n,t=[]),t.push(e)}}function tH(e,t=1/0,n){if(t<=0||!$(e)||e.__v_skip||(n=n||new Set).has(e))return e;if(n.add(e),t--,tN(e))tH(e.value,t,n);else if(A(e))for(let r=0;r<e.length;r++)tH(e[r],t,n);else if(I(e)||E(e))e.forEach(e=>{tH(e,t,n)});else if(U(e)){for(let r in e)tH(e[r],t,n);for(let r of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,r)&&tH(e[r],t,n)}return e}function tq(e,t,n,r){try{return r?e(...r):e()}catch(e){tK(e,t,n)}}function tW(e,t,n,r){if(P(e)){let i=tq(e,t,n,r);return i&&D(i)&&i.catch(e=>{tK(e,t,n)}),i}if(A(e)){let i=[];for(let l=0;l<e.length;l++)i.push(tW(e[l],t,n,r));return i}}function tK(e,t,n,r=!0){t&&t.vnode;let{errorHandler:i,throwUnhandledErrorInProduction:l}=t&&t.appContext.config||y;if(t){let r=t.parent,l=t.proxy,s=`https://vuejs.org/error-reference/#runtime-${n}`;for(;r;){let t=r.ec;if(t){for(let n=0;n<t.length;n++)if(!1===t[n](e,l,s))return}r=r.parent}if(i){eL(),tq(i,null,10,[e,l,s]),e$();return}}!function(e,t,n,r=!0,i=!1){if(i)throw e;console.error(e)}(e,0,0,r,l)}let tz=[],tJ=-1,tG=[],tX=null,tQ=0,tZ=Promise.resolve(),tY=null;function t0(e){let t=tY||tZ;return e?t.then(this?e.bind(this):e):t}function t1(e){if(!(1&e.flags)){let t=t8(e),n=tz[tz.length-1];!n||!(2&e.flags)&&t>=t8(n)?tz.push(e):tz.splice(function(e){let t=tJ+1,n=tz.length;for(;t<n;){let r=t+n>>>1,i=tz[r],l=t8(i);l<e||l===e&&2&i.flags?t=r+1:n=r}return t}(t),0,e),e.flags|=1,t2()}}function t2(){tY||(tY=tZ.then(function e(t){try{for(tJ=0;tJ<tz.length;tJ++){let e=tz[tJ];!e||8&e.flags||(4&e.flags&&(e.flags&=-2),tq(e,e.i,e.i?15:14),4&e.flags||(e.flags&=-2))}}finally{for(;tJ<tz.length;tJ++){let e=tz[tJ];e&&(e.flags&=-2)}tJ=-1,tz.length=0,t4(),tY=null,(tz.length||tG.length)&&e()}}))}function t3(e){A(e)?tG.push(...e):tX&&-1===e.id?tX.splice(tQ+1,0,e):1&e.flags||(tG.push(e),e.flags|=1),t2()}function t6(e,t,n=tJ+1){for(;n<tz.length;n++){let t=tz[n];if(t&&2&t.flags){if(e&&t.id!==e.uid)continue;tz.splice(n,1),n--,4&t.flags&&(t.flags&=-2),t(),4&t.flags||(t.flags&=-2)}}}function t4(e){if(tG.length){let e=[...new Set(tG)].sort((e,t)=>t8(e)-t8(t));if(tG.length=0,tX){tX.push(...e);return}for(tQ=0,tX=e;tQ<tX.length;tQ++){let e=tX[tQ];4&e.flags&&(e.flags&=-2),8&e.flags||e(),e.flags&=-2}tX=null,tQ=0}}let t8=e=>null==e.id?2&e.flags?-1:1/0:e.id,t5=null,t9=null;function t7(e){let t=t5;return t5=e,t9=e&&e.type.__scopeId||null,t}function ne(e,t=t5,n){if(!t||e._n)return e;let r=(...n)=>{let i;r._d&&im(-1);let l=t7(t);try{i=e(...n)}finally{t7(l),r._d&&im(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function nt(e,t,n,r){let i=e.dirs,l=t&&t.dirs;for(let s=0;s<i.length;s++){let o=i[s];l&&(o.oldValue=l[s].value);let a=o.dir[r];a&&(eL(),tW(a,n,8,[e.el,o,e,t]),e$())}}let nn=Symbol("_vte"),nr=e=>e.__isTeleport,ni=e=>e&&(e.disabled||""===e.disabled),nl=e=>e&&(e.defer||""===e.defer),ns=e=>"undefined"!=typeof SVGElement&&e instanceof SVGElement,no=e=>"function"==typeof MathMLElement&&e instanceof MathMLElement,na=(e,t)=>{let n=e&&e.to;return M(n)?t?t(n):null:n},nc={name:"Teleport",__isTeleport:!0,process(e,t,n,r,i,l,s,o,a,c){let{mc:u,pc:d,pbc:p,o:{insert:f,querySelector:h,createText:m,createComment:g}}=c,y=ni(t.props),{shapeFlag:b,children:_,dynamicChildren:S}=t;if(null==e){let e=t.el=m(""),c=t.anchor=m("");f(e,n,r),f(c,n,r);let d=(e,t)=>{16&b&&(i&&i.isCE&&(i.ce._teleportTarget=e),u(_,e,t,i,l,s,o,a))},p=()=>{let e=t.target=na(t.props,h),n=np(e,t,m,f);e&&("svg"!==s&&ns(e)?s="svg":"mathml"!==s&&no(e)&&(s="mathml"),y||(d(e,n),nd(t,!1)))};y&&(d(n,c),nd(t,!0)),nl(t.props)?rB(()=>{p(),t.el.__isMounted=!0},l):p()}else{if(nl(t.props)&&!e.el.__isMounted){rB(()=>{nc.process(e,t,n,r,i,l,s,o,a,c),delete e.el.__isMounted},l);return}t.el=e.el,t.targetStart=e.targetStart;let u=t.anchor=e.anchor,f=t.target=e.target,m=t.targetAnchor=e.targetAnchor,g=ni(e.props),b=g?n:f;if("svg"===s||ns(f)?s="svg":("mathml"===s||no(f))&&(s="mathml"),S?(p(e.dynamicChildren,S,b,i,l,s,o),rK(e,t,!0)):a||d(e,t,b,g?u:m,i,l,s,o,!1),y)g?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):nu(t,n,u,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){let e=t.target=na(t.props,h);e&&nu(t,e,null,c,0)}else g&&nu(t,f,m,c,1);nd(t,y)}},remove(e,t,n,{um:r,o:{remove:i}},l){let{shapeFlag:s,children:o,anchor:a,targetStart:c,targetAnchor:u,target:d,props:p}=e;if(d&&(i(c),i(u)),l&&i(a),16&s){let e=l||!ni(p);for(let i=0;i<o.length;i++){let l=o[i];r(l,t,n,e,!!l.dynamicChildren)}}},move:nu,hydrate:function(e,t,n,r,i,l,{o:{nextSibling:s,parentNode:o,querySelector:a,insert:c,createText:u}},d){let p=t.target=na(t.props,a);if(p){let a=ni(t.props),f=p._lpa||p.firstChild;if(16&t.shapeFlag){if(a)t.anchor=d(s(e),t,o(e),n,r,i,l),t.targetStart=f,t.targetAnchor=f&&s(f);else{t.anchor=s(e);let o=f;for(;o;){if(o&&8===o.nodeType){if("teleport start anchor"===o.data)t.targetStart=o;else if("teleport anchor"===o.data){t.targetAnchor=o,p._lpa=t.targetAnchor&&s(t.targetAnchor);break}}o=s(o)}t.targetAnchor||np(p,t,u,c),d(f&&s(f),t,p,n,r,i,l)}}nd(t,a)}return t.anchor&&s(t.anchor)}};function nu(e,t,n,{o:{insert:r},m:i},l=2){0===l&&r(e.targetAnchor,t,n);let{el:s,anchor:o,shapeFlag:a,children:c,props:u}=e,d=2===l;if(d&&r(s,t,n),(!d||ni(u))&&16&a)for(let e=0;e<c.length;e++)i(c[e],t,n,2);d&&r(o,t,n)}function nd(e,t){let n=e.ctx;if(n&&n.ut){let r,i;for(t?(r=e.el,i=e.anchor):(r=e.targetStart,i=e.targetAnchor);r&&r!==i;)1===r.nodeType&&r.setAttribute("data-v-owner",n.uid),r=r.nextSibling;n.ut()}}function np(e,t,n,r){let i=t.targetStart=n(""),l=t.targetAnchor=n("");return i[nn]=l,e&&(r(i,e),r(l,e)),l}let nf=Symbol("_leaveCb"),nh=Symbol("_enterCb");function nm(){let e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return n0(()=>{e.isMounted=!0}),n3(()=>{e.isUnmounting=!0}),e}let ng=[Function,Array],ny={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:ng,onEnter:ng,onAfterEnter:ng,onEnterCancelled:ng,onBeforeLeave:ng,onLeave:ng,onAfterLeave:ng,onLeaveCancelled:ng,onBeforeAppear:ng,onAppear:ng,onAfterAppear:ng,onAppearCancelled:ng},nv=e=>{let t=e.subTree;return t.component?nv(t.compon
Download .txt
gitextract_vkd5losq/

├── .eslintrc.js
├── .gitattributes
├── .gitignore
├── .npmignore
├── CHANGELOG.md
├── LICENSE
├── Makefile
├── NOTICE
├── README-connect-live-chat.md
├── README-css-style.md
├── README-file-upload.md
├── README-qbusiness.md
├── README-streaming-responses.md
├── README.md
├── build/
│   ├── Makefile
│   ├── copy-assets.js
│   ├── create-custom-css.js
│   ├── create-iframe-snippet-file.sh
│   ├── release.sh
│   ├── update-lex-web-ui-config.js
│   └── upload-bootstrap.sh
├── config/
│   ├── base.env.js
│   ├── dist.env.js
│   ├── env.mk
│   ├── full.env.js
│   ├── index.js
│   └── utils/
│       └── merge-config.js
├── dist/
│   ├── 3.5.13_dist_vue.global.prod.js
│   ├── Makefile
│   ├── aws-lex-web-ui.css
│   ├── custom-chatbot-style.css
│   ├── index.html
│   ├── initiate-loader.js
│   ├── lex-web-ui-loader.css
│   ├── lex-web-ui-loader.js
│   ├── lex-web-ui.css
│   ├── lex-web-ui.js
│   ├── material_icons.css
│   ├── parent.html
│   └── wav-worker.js
├── example-css/
│   ├── bright-yellow.css
│   ├── coral-pink.css
│   ├── dark-mode-theme.css
│   ├── elegant-purple-theme.css
│   ├── forest-green.css
│   ├── professional-blue.css
│   ├── sky-blue.css
│   └── sunset-orange.css
├── lex-web-ui/
│   ├── .browserslistrc
│   ├── .editorconfig
│   ├── .eslintignore
│   ├── .eslintrc.cjs
│   ├── .gitignore
│   ├── .sassrc.js
│   ├── README.md
│   ├── READMECONFIGSCREENS.md
│   ├── current/
│   │   ├── user-custom-chatbot-style.css
│   │   └── user-lex-web-ui-loader-config.json
│   ├── index.html
│   ├── package.json
│   ├── plugins/
│   │   ├── asset-handler-plugin.js
│   │   └── banner-plugin.js
│   ├── public/
│   │   ├── img/
│   │   │   └── note.md
│   │   └── index.html
│   ├── scripts/
│   │   └── post-build-css.js
│   ├── src/
│   │   ├── App.vue
│   │   ├── LexApp.vue
│   │   ├── assets/
│   │   │   ├── css-overrides.css
│   │   │   └── silent.ogg
│   │   ├── components/
│   │   │   ├── InputContainer.vue
│   │   │   ├── LexWeb.vue
│   │   │   ├── Message.vue
│   │   │   ├── MessageList.vue
│   │   │   ├── MessageLoading.vue
│   │   │   ├── MessageText.vue
│   │   │   ├── MinButton.vue
│   │   │   ├── RecorderStatus.vue
│   │   │   ├── ResponseCard.vue
│   │   │   └── ToolbarContainer.vue
│   │   ├── config/
│   │   │   ├── .gitattributes
│   │   │   ├── config.awstest.json
│   │   │   ├── config.current.json
│   │   │   ├── config.dev.json
│   │   │   ├── config.prod.json
│   │   │   ├── config.test.json
│   │   │   └── index.js
│   │   ├── init.js
│   │   ├── lex-web-ui.js
│   │   ├── lib/
│   │   │   └── lex/
│   │   │       ├── client.js
│   │   │       ├── recorder.js
│   │   │       └── wav-worker.js
│   │   ├── main.js
│   │   ├── router/
│   │   │   └── index.js
│   │   └── store/
│   │       ├── actions.js
│   │       ├── getters.js
│   │       ├── index.js
│   │       ├── live-chat-handlers.js
│   │       ├── mutations.js
│   │       ├── recorder-handlers.js
│   │       ├── sigv4-handlers.js
│   │       ├── state.js
│   │       └── talkdesk-live-chat-handlers.js
│   ├── test/
│   │   ├── e2e/
│   │   │   ├── custom-assertions/
│   │   │   │   └── elementCount.js
│   │   │   ├── nightwatch.conf.js
│   │   │   ├── runner.js
│   │   │   └── specs/
│   │   │       └── test.js
│   │   ├── integration/
│   │   │   ├── build-modes.test.js
│   │   │   ├── functionality.test.js
│   │   │   └── jest.config.js
│   │   └── unit/
│   │       ├── .eslintrc
│   │       ├── index.js
│   │       ├── karma.conf.js
│   │       └── specs/
│   │           ├── InputContainer.spec.js
│   │           ├── LexWeb.spec.js
│   │           ├── Message.spec.js
│   │           ├── MessageList.spec.js
│   │           ├── RecorderStatus.spec.js
│   │           ├── lex-web-ui.spec.js
│   │           └── store.spec.js
│   └── vite.config.js
├── package.json
├── postcss.config.js
├── server.js
├── src/
│   ├── README.md
│   ├── config/
│   │   ├── .gitattributes
│   │   ├── default-lex-web-ui-loader-config.json
│   │   └── lex-web-ui-loader-config.json
│   ├── dependencies/
│   │   ├── 3.5.13_dist_vue.global.prod.js
│   │   ├── initiate-loader.js
│   │   └── material_icons.css
│   ├── initiate-chat-lambda/
│   │   └── index.js
│   ├── lex-web-ui-loader/
│   │   ├── css/
│   │   │   ├── lex-web-ui-fullpage.css
│   │   │   └── lex-web-ui-iframe.css
│   │   └── js/
│   │       ├── defaults/
│   │       │   ├── dependencies.js
│   │       │   ├── lex-web-ui.js
│   │       │   └── loader.js
│   │       ├── index.js
│   │       └── lib/
│   │           ├── config-loader.js
│   │           ├── dependency-loader.js
│   │           ├── fullpage-component-loader.js
│   │           ├── iframe-component-loader.js
│   │           └── loginutil.js
│   ├── qbusiness-lambda/
│   │   └── index.py
│   ├── streaming-lambda/
│   │   └── index.js
│   └── website/
│       ├── custom-chatbot-style.css
│       ├── iframeparent.html
│       ├── index.css
│       ├── index.html
│       └── parent.html
├── templates/
│   ├── Makefile
│   ├── README.md
│   ├── codebuild-deploy.yaml
│   ├── cognito.yaml
│   ├── cognitouserpoolconfig.yaml
│   ├── custom-resources/
│   │   ├── cfnresponse.py
│   │   ├── codebuild-start.py
│   │   └── s3-cleanup.py
│   ├── lexbot.yaml
│   ├── master.yaml
│   ├── restapi.yaml
│   └── streaming-support.yaml
└── vite.config.js
Download .txt
Showing preview only (492K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5868 symbols across 36 files)

FILE: build/create-custom-css.js
  function modifyRule (line 5) | function modifyRule(styleSheet, selector, props) {

FILE: build/update-lex-web-ui-config.js
  function createMp3 (line 175) | function createMp3(text, languageCode, voiceId, output) {
  function translateAndCreateMp3 (line 197) | function translateAndCreateMp3(localeId, text, output) {

FILE: config/utils/merge-config.js
  function mergeConfig (line 6) | function mergeConfig(baseConfig, srcConfig) {

FILE: dist/3.5.13_dist_vue.global.prod.js
  function g (line 5) | function g(e){let t=Object.create(null);for(let n of e.split(","))t[n]=1...
  function el (line 5) | function el(e){if(A(e)){let t={};for(let n=0;n<e.length;n++){let r=e[n],...
  function ec (line 5) | function ec(e){let t={};return e.replace(ea,"").split(es).forEach(e=>{if...
  function eu (line 5) | function eu(e){let t="";if(M(e))t=e;else if(A(e))for(let n=0;n<e.length;...
  function eg (line 5) | function eg(e,t){if(e===t)return!0;let n=R(e),r=R(t);if(n||r)return!!n&&...
  function ey (line 5) | function ey(e,t){return e.findIndex(e=>eg(e,t))}
  class ex (line 5) | class ex{constructor(e=!1){this.detached=e,this._active=!0,this.effects=...
    method constructor (line 5) | constructor(e=!1){this.detached=e,this._active=!0,this.effects=[],this...
    method active (line 5) | get active(){return this._active}
    method pause (line 5) | pause(){if(this._active){let e,t;if(this._isPaused=!0,this.scopes)for(...
    method resume (line 5) | resume(){if(this._active&&this._isPaused){let e,t;if(this._isPaused=!1...
    method run (line 5) | run(e){if(this._active){let t=i;try{return i=this,e()}finally{i=t}}}
    method on (line 5) | on(){i=this}
    method off (line 5) | off(){i=this.parent}
    method stop (line 5) | stop(e){if(this._active){let t,n;for(t=0,this._active=!1,n=this.effect...
  class ek (line 5) | class ek{constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,...
    method constructor (line 5) | constructor(e){this.fn=e,this.deps=void 0,this.depsTail=void 0,this.fl...
    method pause (line 5) | pause(){this.flags|=64}
    method resume (line 5) | resume(){64&this.flags&&(this.flags&=-65,eC.has(this)&&(eC.delete(this...
    method notify (line 5) | notify(){(!(2&this.flags)||32&this.flags)&&(8&this.flags||eN(this))}
    method run (line 5) | run(){if(!(1&this.flags))return this.fn();this.flags|=2,eD(this),eA(th...
    method stop (line 5) | stop(){if(1&this.flags){for(let e=this.deps;e;e=e.nextDep)eO(e);this.d...
    method trigger (line 5) | trigger(){64&this.flags?eC.add(this):this.scheduler?this.scheduler():t...
    method runIfDirty (line 5) | runIfDirty(){eI(this)&&this.run()}
    method dirty (line 5) | get dirty(){return eI(this)}
  function eN (line 5) | function eN(e,t=!1){if(e.flags|=8,t){e.next=o,o=e;return}e.next=s,s=e}
  function ew (line 5) | function ew(){let e;if(!(--eT>0)){if(o){let e=o;for(o=void 0;e;){let t=e...
  function eA (line 5) | function eA(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveL...
  function eE (line 5) | function eE(e){let t;let n=e.depsTail,r=n;for(;r;){let e=r.prevDep;-1===...
  function eI (line 5) | function eI(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.versi...
  function eR (line 5) | function eR(e){if(4&e.flags&&!(16&e.flags)||(e.flags&=-17,e.globalVersio...
  function eO (line 5) | function eO(e,t=!1){let{dep:n,prevSub:r,nextSub:i}=e;if(r&&(r.nextSub=i,...
  function eL (line 5) | function eL(){eM.push(eP),eP=!1}
  function e$ (line 5) | function e$(){let e=eM.pop();eP=void 0===e||e}
  function eD (line 5) | function eD(e){let{cleanup:t}=e;if(e.cleanup=void 0,t){let e=l;l=void 0;...
  class eV (line 5) | class eV{constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,t...
    method constructor (line 5) | constructor(e,t){this.sub=e,this.dep=t,this.version=t.version,this.nex...
  class eB (line 5) | class eB{constructor(e){this.computed=e,this.version=0,this.activeLink=v...
    method constructor (line 5) | constructor(e){this.computed=e,this.version=0,this.activeLink=void 0,t...
    method track (line 5) | track(e){if(!l||!eP||l===this.computed)return;let t=this.activeLink;if...
    method trigger (line 5) | trigger(e){this.version++,eF++,this.notify(e)}
    method notify (line 5) | notify(e){eT++;try{for(let e=this.subs;e;e=e.prevSub)e.sub.notify()&&e...
  function eW (line 5) | function eW(e,t,n){if(eP&&l){let t=eU.get(e);t||eU.set(e,t=new Map);let ...
  function eK (line 5) | function eK(e,t,n,r,i,l){let s=eU.get(e);if(!s){eF++;return}let o=e=>{e&...
  function ez (line 5) | function ez(e){let t=tx(e);return t===e?t:(eW(t,"iterate",eq),t_(e)?t:t....
  function eJ (line 5) | function eJ(e){return eW(e=tx(e),"iterate",eq),e}
  method [Symbol.iterator] (line 5) | [Symbol.iterator](){return eX(this,Symbol.iterator,tk)}
  method concat (line 5) | concat(...e){return ez(this).concat(...e.map(e=>A(e)?ez(e):e))}
  method entries (line 5) | entries(){return eX(this,"entries",e=>(e[1]=tk(e[1]),e))}
  method every (line 5) | every(e,t){return eZ(this,"every",e,t,void 0,arguments)}
  method filter (line 5) | filter(e,t){return eZ(this,"filter",e,t,e=>e.map(tk),arguments)}
  method find (line 5) | find(e,t){return eZ(this,"find",e,t,tk,arguments)}
  method findIndex (line 5) | findIndex(e,t){return eZ(this,"findIndex",e,t,void 0,arguments)}
  method findLast (line 5) | findLast(e,t){return eZ(this,"findLast",e,t,tk,arguments)}
  method findLastIndex (line 5) | findLastIndex(e,t){return eZ(this,"findLastIndex",e,t,void 0,arguments)}
  method forEach (line 5) | forEach(e,t){return eZ(this,"forEach",e,t,void 0,arguments)}
  method includes (line 5) | includes(...e){return e0(this,"includes",e)}
  method indexOf (line 5) | indexOf(...e){return e0(this,"indexOf",e)}
  method join (line 5) | join(e){return ez(this).join(e)}
  method lastIndexOf (line 5) | lastIndexOf(...e){return e0(this,"lastIndexOf",e)}
  method map (line 5) | map(e,t){return eZ(this,"map",e,t,void 0,arguments)}
  method pop (line 5) | pop(){return e1(this,"pop")}
  method push (line 5) | push(...e){return e1(this,"push",e)}
  method reduce (line 5) | reduce(e,...t){return eY(this,"reduce",e,t)}
  method reduceRight (line 5) | reduceRight(e,...t){return eY(this,"reduceRight",e,t)}
  method shift (line 5) | shift(){return e1(this,"shift")}
  method some (line 5) | some(e,t){return eZ(this,"some",e,t,void 0,arguments)}
  method splice (line 5) | splice(...e){return e1(this,"splice",e)}
  method toReversed (line 5) | toReversed(){return ez(this).toReversed()}
  method toSorted (line 5) | toSorted(e){return ez(this).toSorted(e)}
  method toSpliced (line 5) | toSpliced(...e){return ez(this).toSpliced(...e)}
  method unshift (line 5) | unshift(...e){return e1(this,"unshift",e)}
  method values (line 5) | values(){return eX(this,"values",tk)}
  function eX (line 5) | function eX(e,t,n){let r=eJ(e),i=r[t]();return r===e||t_(e)||(i._next=i....
  function eZ (line 5) | function eZ(e,t,n,r,i,l){let s=eJ(e),o=s!==e&&!t_(e),a=s[t];if(a!==eQ[t]...
  function eY (line 5) | function eY(e,t,n,r){let i=eJ(e),l=n;return i!==e&&(t_(e)?n.length>3&&(l...
  function e0 (line 5) | function e0(e,t,n){let r=tx(e);eW(r,"iterate",eq);let i=r[t](...n);retur...
  function e1 (line 5) | function e1(e,t,n=[]){eL(),eT++;let r=tx(e)[t].apply(e,n);return ew(),e$...
  function e6 (line 5) | function e6(e){L(e)||(e=String(e));let t=tx(this);return eW(t,"has",e),t...
  class e4 (line 5) | class e4{constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}get...
    method constructor (line 5) | constructor(e=!1,t=!1){this._isReadonly=e,this._isShallow=t}
    method get (line 5) | get(e,t,n){if("__v_skip"===t)return e.__v_skip;let r=this._isReadonly,...
  class e8 (line 5) | class e8 extends e4{constructor(e=!1){super(!1,e)}set(e,t,n,r){let i=e[t...
    method constructor (line 5) | constructor(e=!1){super(!1,e)}
    method set (line 5) | set(e,t,n,r){let i=e[t];if(!this._isShallow){let t=tb(i);if(t_(n)||tb(...
    method deleteProperty (line 5) | deleteProperty(e,t){let n=w(e,t);e[t];let r=Reflect.deleteProperty(e,t...
    method has (line 5) | has(e,t){let n=Reflect.has(e,t);return L(t)&&e3.has(t)||eW(e,"has",t),n}
    method ownKeys (line 5) | ownKeys(e){return eW(e,"iterate",A(e)?"length":ej),Reflect.ownKeys(e)}
  class e5 (line 5) | class e5 extends e4{constructor(e=!1){super(!0,e)}set(e,t){return!0}dele...
    method constructor (line 5) | constructor(e=!1){super(!0,e)}
    method set (line 5) | set(e,t){return!0}
    method deleteProperty (line 5) | deleteProperty(e,t){return!0}
  function ti (line 5) | function ti(e){return function(...t){return"delete"!==e&&("clear"===e?vo...
  function tl (line 5) | function tl(e,t){let n=function(e,t){let n={get(n){let r=this.__v_raw,i=...
  function th (line 5) | function th(e){return tb(e)?e:ty(e,!1,e9,ts,tu)}
  function tm (line 5) | function tm(e){return ty(e,!1,te,to,td)}
  function tg (line 5) | function tg(e){return ty(e,!0,e7,ta,tp)}
  function ty (line 5) | function ty(e,t,n,r,i){if(!$(e)||e.__v_raw&&!(t&&e.__v_isReactive))retur...
  function tv (line 5) | function tv(e){return tb(e)?tv(e.__v_raw):!!(e&&e.__v_isReactive)}
  function tb (line 5) | function tb(e){return!!(e&&e.__v_isReadonly)}
  function t_ (line 5) | function t_(e){return!!(e&&e.__v_isShallow)}
  function tS (line 5) | function tS(e){return!!e&&!!e.__v_raw}
  function tx (line 5) | function tx(e){let t=e&&e.__v_raw;return t?tx(t):e}
  function tC (line 5) | function tC(e){return!w(e,"__v_skip")&&Object.isExtensible(e)&&ee(e,"__v...
  function tN (line 5) | function tN(e){return!!e&&!0===e.__v_isRef}
  function tw (line 5) | function tw(e){return tE(e,!1)}
  function tA (line 5) | function tA(e){return tE(e,!0)}
  function tE (line 5) | function tE(e,t){return tN(e)?e:new tI(e,t)}
  class tI (line 5) | class tI{constructor(e,t){this.dep=new eB,this.__v_isRef=!0,this.__v_isS...
    method constructor (line 5) | constructor(e,t){this.dep=new eB,this.__v_isRef=!0,this.__v_isShallow=...
    method value (line 5) | get value(){return this.dep.track(),this._value}
    method value (line 5) | set value(e){let t=this._rawValue,n=this.__v_isShallow||t_(e)||tb(e);Z...
  function tR (line 5) | function tR(e){return tN(e)?e.value:e}
  function tP (line 5) | function tP(e){return tv(e)?e:new Proxy(e,tO)}
  class tM (line 5) | class tM{constructor(e){this.__v_isRef=!0,this._value=void 0;let t=this....
    method constructor (line 5) | constructor(e){this.__v_isRef=!0,this._value=void 0;let t=this.dep=new...
    method value (line 5) | get value(){return this._value=this._get()}
    method value (line 5) | set value(e){this._set(e)}
  function tL (line 5) | function tL(e){return new tM(e)}
  class t$ (line 5) | class t${constructor(e,t,n){this._object=e,this._key=t,this._defaultValu...
    method constructor (line 5) | constructor(e,t,n){this._object=e,this._key=t,this._defaultValue=n,thi...
    method value (line 5) | get value(){let e=this._object[this._key];return this._value=void 0===...
    method value (line 5) | set value(e){this._object[this._key]=e}
    method dep (line 5) | get dep(){return function(e,t){let n=eU.get(e);return n&&n.get(t)}(tx(...
  class tD (line 5) | class tD{constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isRead...
    method constructor (line 5) | constructor(e){this._getter=e,this.__v_isRef=!0,this.__v_isReadonly=!0...
    method value (line 5) | get value(){return this._value=this._getter()}
  function tF (line 5) | function tF(e,t,n){let r=e[t];return tN(r)?r:new t$(e,t,n)}
  class tV (line 5) | class tV{constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,t...
    method constructor (line 5) | constructor(e,t,n){this.fn=e,this.setter=t,this._value=void 0,this.dep...
    method notify (line 5) | notify(){if(this.flags|=16,!(8&this.flags)&&l!==this)return eN(this,!0...
    method value (line 5) | get value(){let e=this.dep.track();return eR(this),e&&(e.version=this....
    method value (line 5) | set value(e){this.setter&&this.setter(e)}
  function tj (line 5) | function tj(e,t=!1,n=h){if(n){let t=tU.get(n);t||tU.set(n,t=[]),t.push(e)}}
  function tH (line 5) | function tH(e,t=1/0,n){if(t<=0||!$(e)||e.__v_skip||(n=n||new Set).has(e)...
  function tq (line 5) | function tq(e,t,n,r){try{return r?e(...r):e()}catch(e){tK(e,t,n)}}
  function tW (line 5) | function tW(e,t,n,r){if(P(e)){let i=tq(e,t,n,r);return i&&D(i)&&i.catch(...
  function tK (line 5) | function tK(e,t,n,r=!0){t&&t.vnode;let{errorHandler:i,throwUnhandledErro...
  function t0 (line 5) | function t0(e){let t=tY||tZ;return e?t.then(this?e.bind(this):e):t}
  function t1 (line 5) | function t1(e){if(!(1&e.flags)){let t=t8(e),n=tz[tz.length-1];!n||!(2&e....
  function t2 (line 5) | function t2(){tY||(tY=tZ.then(function e(t){try{for(tJ=0;tJ<tz.length;tJ...
  function t3 (line 5) | function t3(e){A(e)?tG.push(...e):tX&&-1===e.id?tX.splice(tQ+1,0,e):1&e....
  function t6 (line 5) | function t6(e,t,n=tJ+1){for(;n<tz.length;n++){let t=tz[n];if(t&&2&t.flag...
  function t4 (line 5) | function t4(e){if(tG.length){let e=[...new Set(tG)].sort((e,t)=>t8(e)-t8...
  function t7 (line 5) | function t7(e){let t=t5;return t5=e,t9=e&&e.type.__scopeId||null,t}
  function ne (line 5) | function ne(e,t=t5,n){if(!t||e._n)return e;let r=(...n)=>{let i;r._d&&im...
  function nt (line 5) | function nt(e,t,n,r){let i=e.dirs,l=t&&t.dirs;for(let s=0;s<i.length;s++...
  method process (line 5) | process(e,t,n,r,i,l,s,o,a,c){let{mc:u,pc:d,pbc:p,o:{insert:f,querySelect...
  method remove (line 5) | remove(e,t,n,{um:r,o:{remove:i}},l){let{shapeFlag:s,children:o,anchor:a,...
  function nu (line 5) | function nu(e,t,n,{o:{insert:r},m:i},l=2){0===l&&r(e.targetAnchor,t,n);l...
  function nd (line 5) | function nd(e,t){let n=e.ctx;if(n&&n.ut){let r,i;for(t?(r=e.el,i=e.ancho...
  function np (line 5) | function np(e,t,n,r){let i=t.targetStart=n(""),l=t.targetAnchor=n("");re...
  function nm (line 5) | function nm(){let e={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVN...
  function nb (line 5) | function nb(e){let t=e[0];if(e.length>1){for(let n of e)if(n.type!==io){...
  method setup (line 5) | setup(e,{slots:t}){let n=iL(),r=nm();return()=>{let i=t.default&&nN(t.de...
  function nS (line 5) | function nS(e,t){let{leavingVNodes:n}=e,r=n.get(t.type);return r||(r=Obj...
  function nx (line 5) | function nx(e,t,n,r,i){let{appear:l,mode:s,persisted:o=!1,onBeforeEnter:...
  function nC (line 5) | function nC(e){if(nq(e))return(e=iT(e)).children=null,e}
  function nk (line 5) | function nk(e){if(!nq(e))return nr(e.type)&&e.children?nb(e.children):e;...
  function nT (line 5) | function nT(e,t){6&e.shapeFlag&&e.component?(e.transition=t,nT(e.compone...
  function nN (line 5) | function nN(e,t=!1,n){let r=[],i=0;for(let l=0;l<e.length;l++){let s=e[l...
  function nw (line 5) | function nw(e,t){return P(e)?k({name:e.name},t,{setup:e}):e}
  function nA (line 5) | function nA(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}
  function nE (line 5) | function nE(e,t,n,r,i=!1){if(A(e)){e.forEach((e,l)=>nE(e,t&&(A(t)?t[l]:t...
  function n$ (line 5) | function n$(e){let{mt:t,p:n,o:{patchProp:r,createText:i,nextSibling:l,pa...
  function nV (line 5) | function nV(e,t){if(0===t||1===t)for(;e&&!e.hasAttribute(nD);)e=e.parent...
  function nH (line 5) | function nH(e,t){let{ref:n,props:r,children:i,ce:l}=t.vnode,s=iC(e,r,i);...
  function nW (line 5) | function nW(e,t){return A(e)?e.some(e=>nW(e,t)):M(e)?e.split(",").includ...
  function nK (line 5) | function nK(e,t){nJ(e,"a",t)}
  function nz (line 5) | function nz(e,t){nJ(e,"da",t)}
  function nJ (line 5) | function nJ(e,t,n=iM){let r=e.__wdc||(e.__wdc=()=>{let t=n;for(;t;){if(t...
  function nG (line 5) | function nG(e){e.shapeFlag&=-257,e.shapeFlag&=-513}
  function nX (line 5) | function nX(e){return 128&e.shapeFlag?e.ssContent:e}
  function nQ (line 5) | function nQ(e,t,n=iM,r=!1){if(n){let i=n[e]||(n[e]=[]),l=t.__weh||(t.__w...
  function n9 (line 5) | function n9(e,t=iM){nQ("ec",e,t)}
  function rt (line 5) | function rt(e,t,n=!0,r=!1){let i=t5||iM;if(i){let n=i.type;if(e===n7){le...
  function rn (line 5) | function rn(e,t){return e&&(e[t]||e[z(t)]||e[X(z(t))])}
  method get (line 5) | get({_:e},t){let n,r,i;if("__v_skip"===t)return!0;let{ctx:l,setupState:s...
  method set (line 5) | set({_:e},t,n){let{data:r,setupState:i,ctx:l}=e;return rl(i,t)?(i[t]=n,!...
  method has (line 5) | has({_:{data:e,setupState:t,accessCache:n,ctx:r,appContext:i,propsOption...
  method defineProperty (line 5) | defineProperty(e,t,n){return null!=n.get?e._.accessCache[t]=0:w(n,"value...
  method get (line 5) | get(e,t){if(t!==Symbol.unscopables)return rs.get(e,t,e)}
  function ra (line 5) | function ra(){let e=iL();return e.setupContext||(e.setupContext=iq(e))}
  function rc (line 5) | function rc(e){return A(e)?e.reduce((e,t)=>(e[t]=null,e),{}):e}
  function rd (line 5) | function rd(e,t,n){tW(A(e)?e.map(e=>e.bind(t.proxy)):e.bind(t.proxy),t,n)}
  function rp (line 5) | function rp(e){let t;let n=e.type,{mixins:r,extends:i}=n,{mixins:l,optio...
  function rf (line 5) | function rf(e,t,n,r=!1){let{mixins:i,extends:l}=t;for(let s in l&&rf(e,l...
  function rm (line 5) | function rm(e,t){return t?e?function(){return k(P(e)?e.call(this,this):e...
  function rg (line 5) | function rg(e){if(A(e)){let t={};for(let n=0;n<e.length;n++)t[e[n]]=e[n]...
  function ry (line 5) | function ry(e,t){return e?[...new Set([].concat(e,t))]:t}
  function rv (line 5) | function rv(e,t){return e?k(Object.create(null),e,t):t}
  function rb (line 5) | function rb(e,t){return e?A(e)&&A(t)?[...new Set([...e,...t])]:k(Object....
  function r_ (line 5) | function r_(){return{app:null,config:{isNativeTag:S,performance:!1,globa...
  function rC (line 5) | function rC(e,t){if(iM){let n=iM.provides,r=iM.parent&&iM.parent.provide...
  function rk (line 5) | function rk(e,t,n=!1){let r=iM||t5;if(r||rx){let i=rx?rx._context.provid...
  function rA (line 5) | function rA(e,t,n,r){let i;let[l,s]=e.propsOptions,o=!1;if(t)for(let a i...
  function rE (line 5) | function rE(e,t,n,r,i,l){let s=e[n];if(null!=s){let e=w(s,"default");if(...
  function rR (line 5) | function rR(e){return!("$"===e[0]||H(e))}
  function rU (line 5) | function rU(e){return rj(e,n$)}
  function rj (line 5) | function rj(e,t){var n;let r,i;er().__VUE__=!0;let{insert:l,remove:s,pat...
  function rH (line 5) | function rH({type:e,props:t},n){return"svg"===n&&"foreignObject"===e||"m...
  function rq (line 5) | function rq({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33...
  function rW (line 5) | function rW(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}
  function rK (line 5) | function rK(e,t,n=!1){let r=e.children,i=t.children;if(A(r)&&A(i))for(le...
  function rz (line 5) | function rz(e){if(e)for(let t=0;t<e.length;t++)e[t].flags|=8}
  function rG (line 5) | function rG(e,t){return rX(e,null,{flush:"sync"})}
  function rX (line 5) | function rX(e,t,n=y){let{immediate:r,deep:l,flush:s,once:o}=n,a=k({},n),...
  function rQ (line 5) | function rQ(e,t,n){let r;let i=this.proxy,l=M(e)?e.includes(".")?rZ(i,e)...
  function rZ (line 5) | function rZ(e,t){let n=t.split(".");return()=>{let t=e;for(let e=0;e<n.l...
  function r0 (line 5) | function r0(e,t,...n){let r;if(e.isUnmounted)return;let i=e.vnode.props|...
  function r1 (line 5) | function r1(e,t){return!!(e&&x(t))&&(w(e,(t=t.slice(2).replace(/Once$/,"...
  function r2 (line 5) | function r2(e){let t,n;let{type:r,vnode:i,proxy:l,withProxy:s,propsOptio...
  function r4 (line 5) | function r4(e,t,n){let r=Object.keys(t);if(r.length!==Object.keys(e).len...
  function r8 (line 5) | function r8({vnode:e,parent:t},n){for(;t;){let r=t.subTree;if(r.suspense...
  function r7 (line 5) | function r7(e,t){let n=e.props&&e.props[t];P(n)&&n()}
  function ie (line 5) | function ie(e,t,n,r,i,l,s,o,a,c,u=!1){let d;let{p:p,m:f,um:h,n:m,o:{pare...
  function it (line 5) | function it(e){let t;if(P(e)){let n=ih&&e._c;n&&(e._d=!1,id()),e=e(),n&&...
  function ir (line 5) | function ir(e,t){t&&t.pendingBranch?A(e)?t.effects.push(...e):t.effects....
  function ii (line 5) | function ii(e,t){e.activeBranch=t;let{vnode:n,parentComponent:r}=e,i=t.e...
  function id (line 5) | function id(e=!1){ic.push(iu=e?null:[])}
  function ip (line 5) | function ip(){ic.pop(),iu=ic[ic.length-1]||null}
  function im (line 5) | function im(e,t=!1){ih+=e,e<0&&iu&&t&&(iu.hasOnce=!0)}
  function ig (line 5) | function ig(e){return e.dynamicChildren=ih>0?iu||b:null,ip(),ih>0&&iu&&i...
  function iy (line 5) | function iy(e,t,n,r,i){return ig(iC(e,t,n,r,i,!0))}
  function iv (line 5) | function iv(e){return!!e&&!0===e.__v_isVNode}
  function ib (line 5) | function ib(e,t){return e.type===t.type&&e.key===t.key}
  function ix (line 5) | function ix(e,t=null,n=null,r=0,i=null,l=e===il?0:1,s=!1,o=!1){let a={__...
  function ik (line 5) | function ik(e){return e?tS(e)||rw(e)?k({},e):e:null}
  function iT (line 5) | function iT(e,t,n=!1,r=!1){let{props:i,ref:l,patchFlag:s,children:o,tran...
  function iN (line 5) | function iN(e=" ",t=0){return iC(is,null,e,t)}
  function iw (line 5) | function iw(e){return null==e||"boolean"==typeof e?iC(io):A(e)?iC(il,nul...
  function iA (line 5) | function iA(e){return null===e.el&&-1!==e.patchFlag||e.memo?e:iT(e)}
  function iE (line 5) | function iE(e,t){let n=0,{shapeFlag:r}=e;if(null==t)t=null;else if(A(t))...
  function iI (line 5) | function iI(...e){let t={};for(let n=0;n<e.length;n++){let r=e[n];for(le...
  function iR (line 5) | function iR(e,t,n,r=null){tW(e,t,7,[n,r])}
  function iF (line 5) | function iF(e){return 4&e.vnode.shapeFlag}
  function iB (line 5) | function iB(e,t,n){P(t)?e.render=t:$(t)&&(e.setupState=tP(t)),ij(e,n)}
  function iU (line 5) | function iU(e){u=e,d=e=>{e.render._rc&&(e.withProxy=new Proxy(e.ctx,ro))}}
  function ij (line 5) | function ij(e,t,n){let r=e.type;if(!e.render){if(!t&&u&&!r.render){let t...
  function iq (line 5) | function iq(e){return{attrs:new Proxy(e.attrs,iH),slots:e.slots,emit:e.e...
  function iW (line 5) | function iW(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(...
  function iK (line 5) | function iK(e,t=!0){return P(e)?e.displayName||e.name:e.name||t&&e.__name}
  function iJ (line 5) | function iJ(e,t,n){let r=arguments.length;return 2!==r?(r>3?n=Array.prot...
  function iG (line 5) | function iG(e,t){let n=e.memo;if(n.length!=t.length)return!1;for(let e=0...
  function i7 (line 5) | function i7(e){let t={};for(let n in e)n in i6||(t[n]=e[n]);if(!1===e.cs...
  function le (line 5) | function le(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.add(t)),(e[i3]...
  function lt (line 5) | function lt(e,t){t.split(/\s+/).forEach(t=>t&&e.classList.remove(t));let...
  function ln (line 5) | function ln(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}
  function li (line 5) | function li(e,t,n,r){let i=e._endId=++lr,l=()=>{i===e._endId&&r()};if(nu...
  function ll (line 5) | function ll(e,t){let n=window.getComputedStyle(e),r=e=>(n[e]||"").split(...
  function ls (line 5) | function ls(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max(....
  function lo (line 5) | function lo(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","...
  function la (line 5) | function la(){return document.body.offsetHeight}
  function ld (line 5) | function ld(e,t){e.style.display=t?e[lc]:"none",e[lu]=!t}
  function lf (line 5) | function lf(e,t){if(1===e.nodeType){let n=e.style,r="";for(let e in t)n....
  function lg (line 5) | function lg(e,t,n){if(A(n))n.forEach(n=>lg(e,t,n));else if(null==n&&(n="...
  function l_ (line 5) | function l_(e,t,n,r,i,l=em(t)){r&&t.startsWith("xlink:")?null==n?e.remov...
  function lS (line 5) | function lS(e,t,n,r,i){if("innerHTML"===t||"textContent"===t){null!=n&&(...
  function lx (line 5) | function lx(e,t,n,r){e.addEventListener(t,n,r)}
  function lI (line 5) | function lI(e,t,n){let r=nw(e,t);U(r)&&k(r,t);class i extends lO{constru...
  class lO (line 5) | class lO extends lR{constructor(e,t={},n=l9){super(),this._def=e,this._p...
    method constructor (line 5) | constructor(e,t={},n=l9){super(),this._def=e,this._props=t,this._creat...
    method connectedCallback (line 5) | connectedCallback(){if(!this.isConnected)return;this.shadowRoot||this....
    method _setParent (line 5) | _setParent(e=this._parent){e&&(this._instance.parent=e._instance,this....
    method disconnectedCallback (line 5) | disconnectedCallback(){this._connected=!1,t0(()=>{this._connected||(th...
    method _resolveDef (line 5) | _resolveDef(){if(this._pendingResolve)return;for(let e=0;e<this.attrib...
    method _mount (line 5) | _mount(e){this._app=this._createApp(e),e.configureApp&&e.configureApp(...
    method _resolveProps (line 5) | _resolveProps(e){let{props:t}=e,n=A(t)?t:Object.keys(t||{});for(let e ...
    method _setAttr (line 5) | _setAttr(e){if(e.startsWith("data-v-"))return;let t=this.hasAttribute(...
    method _getProp (line 5) | _getProp(e){return this._props[e]}
    method _setProp (line 5) | _setProp(e,t,n=!0,r=!1){if(t!==this._props[e]&&(t===lE?delete this._pr...
    method _update (line 5) | _update(){l5(this._createVNode(),this._root)}
    method _createVNode (line 5) | _createVNode(){let e={};this.shadowRoot||(e.onVnodeMounted=e.onVnodeUp...
    method _applyStyles (line 5) | _applyStyles(e,t){if(!e)return;if(t){if(t===this._def||this._styleChil...
    method _parseSlots (line 5) | _parseSlots(){let e;let t=this._slots={};for(;e=this.firstChild;){let ...
    method _renderSlots (line 5) | _renderSlots(){let e=(this._teleportTarget||this).querySelectorAll("sl...
    method _injectChildStyle (line 5) | _injectChildStyle(e){this._applyStyles(e.styles,e)}
    method _removeChildStyle (line 5) | _removeChildStyle(e){}
  function lP (line 5) | function lP(e){let t=iL();return t&&t.ce||null}
  method setup (line 5) | setup(e,{slots:t}){let n,r;let i=iL(),l=nm();return n2(()=>{if(!n.length...
  function lV (line 5) | function lV(e){let t=e.el;t[l$]&&t[l$](),t[lD]&&t[lD]()}
  function lB (line 5) | function lB(e){lL.set(e,e.el.getBoundingClientRect())}
  function lU (line 5) | function lU(e){let t=lM.get(e),n=lL.get(e),r=t.left-n.left,i=t.top-n.top...
  function lH (line 5) | function lH(e){e.target.composing=!0}
  function lq (line 5) | function lq(e){let t=e.target;t.composing&&(t.composing=!1,t.dispatchEve...
  method created (line 5) | created(e,{modifiers:{lazy:t,trim:n,number:r}},i){e[lW]=lj(i);let l=r||i...
  method mounted (line 5) | mounted(e,{value:t}){e.value=null==t?"":t}
  method beforeUpdate (line 5) | beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:r,trim:i,number:l}},s...
  method created (line 5) | created(e,t,n){e[lW]=lj(n),lx(e,"change",()=>{let t=e._modelValue,n=lZ(e...
  method beforeUpdate (line 5) | beforeUpdate(e,t,n){e[lW]=lj(n),lJ(e,t,n)}
  function lJ (line 5) | function lJ(e,{value:t,oldValue:n},r){let i;if(e._modelValue=t,A(t))i=ey...
  method created (line 5) | created(e,{value:t},n){e.checked=eg(t,n.props.value),e[lW]=lj(n),lx(e,"c...
  method beforeUpdate (line 5) | beforeUpdate(e,{value:t,oldValue:n},r){e[lW]=lj(r),t!==n&&(e.checked=eg(...
  method created (line 5) | created(e,{value:t,modifiers:{number:n}},r){let i=I(t);lx(e,"change",()=...
  method mounted (line 5) | mounted(e,{value:t}){lQ(e,t)}
  method beforeUpdate (line 5) | beforeUpdate(e,t,n){e[lW]=lj(n)}
  method updated (line 5) | updated(e,{value:t}){e._assigning||lQ(e,t)}
  function lQ (line 5) | function lQ(e,t){let n=e.multiple,r=A(t);if(!n||r||I(t)){for(let i=0,l=e...
  function lZ (line 5) | function lZ(e){return"_value"in e?e._value:e.value}
  function lY (line 5) | function lY(e,t){let n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}
  function l0 (line 5) | function l0(e,t,n,r,i){let l=function(e,t){switch(e){case"SELECT":return...
  method setScopeId (line 5) | setScopeId(e,t){e.setAttribute(t,"")}
  method insertStaticContent (line 5) | insertStaticContent(e,t,n,r,i,l){let s=n?n.previousSibling:t.lastChild;i...
  function l8 (line 5) | function l8(){return p=l4?p:rU(l6),l4=!0,p}
  function se (line 5) | function se(e){return e instanceof SVGElement?"svg":"function"==typeof M...
  function st (line 5) | function st(e){return M(e)?document.querySelector(e):e}
  function sH (line 5) | function sH(e,t,n,r,i,l,s,o=!1,a=!1,c=!1,u=sj){return e&&(o?(e.helper(so...
  function sq (line 5) | function sq(e,t=sj){return{type:17,loc:t,elements:e}}
  function sW (line 5) | function sW(e,t=sj){return{type:15,loc:t,properties:e}}
  function sK (line 5) | function sK(e,t){return{type:16,loc:sj,key:M(e)?sz(e,!0):e,value:t}}
  function sz (line 5) | function sz(e,t=!1,n=sj,r=0){return{type:4,loc:n,content:e,isStatic:t,co...
  function sJ (line 5) | function sJ(e,t=sj){return{type:8,loc:t,children:e}}
  function sG (line 5) | function sG(e,t=[],n=sj){return{type:14,loc:n,callee:e,arguments:t}}
  function sX (line 5) | function sX(e,t,n=!1,r=!1,i=sj){return{type:18,params:e,returns:t,newlin...
  function sQ (line 5) | function sQ(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,n...
  function sZ (line 5) | function sZ(e,{helper:t,removeHelper:n,inSSR:r}){if(!e.isBlock){var i,l;...
  function s1 (line 5) | function s1(e){return e>=97&&e<=122||e>=65&&e<=90}
  function s2 (line 5) | function s2(e){return 32===e||10===e||9===e||12===e||13===e}
  function s3 (line 5) | function s3(e){return 47===e||62===e||s2(e)}
  function s6 (line 5) | function s6(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++...
  function s8 (line 5) | function s8(e){throw e}
  function s5 (line 5) | function s5(e){}
  function s9 (line 5) | function s9(e,t,n,r){let i=SyntaxError(String(`https://vuejs.org/error-r...
  function oe (line 5) | function oe(e){switch(e){case"Teleport":case"teleport":return sr;case"Su...
  function ou (line 5) | function ou(e,t,n=!1){for(let r=0;r<e.props.length;r++){let i=e.props[r]...
  function od (line 5) | function od(e,t,n=!1,r=!1){for(let i=0;i<e.props.length;i++){let l=e.pro...
  function op (line 5) | function op(e,t){return!!(e&&s7(e)&&e.content===t)}
  function of (line 5) | function of(e){return 5===e.type||2===e.type}
  function oh (line 5) | function oh(e){return 7===e.type&&"slot"===e.name}
  function om (line 5) | function om(e){return 1===e.type&&3===e.tagType}
  function og (line 5) | function og(e){return 1===e.type&&2===e.tagType}
  function ov (line 5) | function ov(e,t,n){let r,i;let l=13===e.type?e.props:e.arguments[2],s=[]...
  function ob (line 5) | function ob(e,t){let n=!1;if(4===e.key.type){let r=e.key.content;n=t.pro...
  function o_ (line 5) | function o_(e,t){return`_${t}_${e.replace(/[^\w]/g,(t,n)=>"-"===t?"_":e....
  method constructor (line 5) | constructor(e,t){this.stack=e,this.cbs=t,this.state=1,this.buffer="",thi...
  method inSFCRoot (line 5) | get inSFCRoot(){return 2===this.mode&&0===this.stack.length}
  method reset (line 5) | reset(){this.state=1,this.mode=0,this.buffer="",this.sectionStart=0,this...
  method getPos (line 5) | getPos(e){let t=1,n=e+1;for(let r=this.newlines.length-1;r>=0;r--){let i...
  method peek (line 5) | peek(){return this.buffer.charCodeAt(this.index+1)}
  method stateText (line 5) | stateText(e){60===e?(this.index>this.sectionStart&&this.cbs.ontext(this....
  method stateInterpolationOpen (line 5) | stateInterpolationOpen(e){if(e===this.delimiterOpen[this.delimiterIndex]...
  method stateInterpolation (line 5) | stateInterpolation(e){e===this.delimiterClose[0]&&(this.state=4,this.del...
  method stateInterpolationClose (line 5) | stateInterpolationClose(e){e===this.delimiterClose[this.delimiterIndex]?...
  method stateSpecialStartSequence (line 5) | stateSpecialStartSequence(e){let t=this.sequenceIndex===this.currentSequ...
  method stateInRCDATA (line 5) | stateInRCDATA(e){if(this.sequenceIndex===this.currentSequence.length){if...
  method stateCDATASequence (line 5) | stateCDATASequence(e){e===s4.Cdata[this.sequenceIndex]?++this.sequenceIn...
  method fastForwardTo (line 5) | fastForwardTo(e){for(;++this.index<this.buffer.length;){let t=this.buffe...
  method stateInCommentLike (line 5) | stateInCommentLike(e){e===this.currentSequence[this.sequenceIndex]?++thi...
  method startSpecial (line 5) | startSpecial(e,t){this.enterRCDATA(e,t),this.state=31}
  method enterRCDATA (line 5) | enterRCDATA(e,t){this.inRCDATA=!0,this.currentSequence=e,this.sequenceIn...
  method stateBeforeTagName (line 5) | stateBeforeTagName(e){33===e?(this.state=22,this.sectionStart=this.index...
  method stateInTagName (line 5) | stateInTagName(e){s3(e)&&this.handleTagName(e)}
  method stateInSFCRootTagName (line 5) | stateInSFCRootTagName(e){if(s3(e)){let t=this.buffer.slice(this.sectionS...
  method handleTagName (line 5) | handleTagName(e){this.cbs.onopentagname(this.sectionStart,this.index),th...
  method stateBeforeClosingTagName (line 5) | stateBeforeClosingTagName(e){s2(e)||(62===e?(this.state=1,this.sectionSt...
  method stateInClosingTagName (line 5) | stateInClosingTagName(e){(62===e||s2(e))&&(this.cbs.onclosetag(this.sect...
  method stateAfterClosingTagName (line 5) | stateAfterClosingTagName(e){62===e&&(this.state=1,this.sectionStart=this...
  method stateBeforeAttrName (line 5) | stateBeforeAttrName(e){62===e?(this.cbs.onopentagend(this.index),this.in...
  method handleAttrStart (line 5) | handleAttrStart(e){118===e&&45===this.peek()?(this.state=13,this.section...
  method stateInSelfClosingTag (line 5) | stateInSelfClosingTag(e){62===e?(this.cbs.onselfclosingtag(this.index),t...
  method stateInAttrName (line 5) | stateInAttrName(e){(61===e||s3(e))&&(this.cbs.onattribname(this.sectionS...
  method stateInDirName (line 5) | stateInDirName(e){61===e||s3(e)?(this.cbs.ondirname(this.sectionStart,th...
  method stateInDirArg (line 5) | stateInDirArg(e){61===e||s3(e)?(this.cbs.ondirarg(this.sectionStart,this...
  method stateInDynamicDirArg (line 5) | stateInDynamicDirArg(e){93===e?this.state=14:(61===e||s3(e))&&(this.cbs....
  method stateInDirModifier (line 5) | stateInDirModifier(e){61===e||s3(e)?(this.cbs.ondirmodifier(this.section...
  method handleAttrNameEnd (line 5) | handleAttrNameEnd(e){this.sectionStart=this.index,this.state=17,this.cbs...
  method stateAfterAttrName (line 5) | stateAfterAttrName(e){61===e?this.state=18:47===e||62===e?(this.cbs.onat...
  method stateBeforeAttrValue (line 5) | stateBeforeAttrValue(e){34===e?(this.state=19,this.sectionStart=this.ind...
  method handleInAttrValue (line 5) | handleInAttrValue(e,t){(e===t||this.fastForwardTo(t))&&(this.cbs.onattri...
  method stateInAttrValueDoubleQuotes (line 5) | stateInAttrValueDoubleQuotes(e){this.handleInAttrValue(e,34)}
  method stateInAttrValueSingleQuotes (line 5) | stateInAttrValueSingleQuotes(e){this.handleInAttrValue(e,39)}
  method stateInAttrValueNoQuotes (line 5) | stateInAttrValueNoQuotes(e){s2(e)||62===e?(this.cbs.onattribdata(this.se...
  method stateBeforeDeclaration (line 5) | stateBeforeDeclaration(e){91===e?(this.state=26,this.sequenceIndex=0):th...
  method stateInDeclaration (line 5) | stateInDeclaration(e){(62===e||this.fastForwardTo(62))&&(this.state=1,th...
  method stateInProcessingInstruction (line 5) | stateInProcessingInstruction(e){(62===e||this.fastForwardTo(62))&&(this....
  method stateBeforeComment (line 5) | stateBeforeComment(e){45===e?(this.state=28,this.currentSequence=s4.Comm...
  method stateInSpecialComment (line 5) | stateInSpecialComment(e){(62===e||this.fastForwardTo(62))&&(this.cbs.onc...
  method stateBeforeSpecialS (line 5) | stateBeforeSpecialS(e){e===s4.ScriptEnd[3]?this.startSpecial(s4.ScriptEn...
  method stateBeforeSpecialT (line 5) | stateBeforeSpecialT(e){e===s4.TitleEnd[3]?this.startSpecial(s4.TitleEnd,...
  method startEntity (line 5) | startEntity(){}
  method stateInEntity (line 5) | stateInEntity(){}
  method parse (line 5) | parse(e){for(this.buffer=e;this.index<this.buffer.length;){let e=this.bu...
  method cleanup (line 5) | cleanup(){this.sectionStart!==this.index&&(1===this.state||32===this.sta...
  method finish (line 5) | finish(){this.handleTrailingData(),this.cbs.onend()}
  method handleTrailingData (line 5) | handleTrailingData(){let e=this.buffer.length;this.sectionStart>=e||(28=...
  method emitCodePoint (line 5) | emitCodePoint(e,t){}
  method ontext (line 5) | ontext(e,t){oB(oF(e,t),e,t)}
  method ontextentity (line 5) | ontextentity(e,t,n){oB(e,t,n)}
  method oninterpolation (line 5) | oninterpolation(e,t){if(oO)return oB(oF(e,t),e,t);let n=e+oL.delimiterOp...
  method onopentagname (line 5) | onopentagname(e,t){let n=oF(e,t);oN={type:1,tag:n,ns:oC.getNamespace(n,o...
  method onopentagend (line 5) | onopentagend(e){oV(e)}
  method onclosetag (line 5) | onclosetag(e,t){let n=oF(e,t);if(!oC.isVoidTag(n)){let r=!1;for(let e=0;...
  method onselfclosingtag (line 5) | onselfclosingtag(e){let t=oN.tag;oN.isSelfClosing=!0,oV(e),oM[0]&&oM[0]....
  method onattribname (line 5) | onattribname(e,t){ow={type:6,name:oF(e,t),nameLoc:oJ(e,t),value:void 0,l...
  method ondirname (line 5) | ondirname(e,t){let n=oF(e,t),r="."===n||":"===n?"bind":"@"===n?"on":"#"=...
  method ondirarg (line 5) | ondirarg(e,t){if(e===t)return;let n=oF(e,t);if(oO)ow.name+=n,oG(ow.nameL...
  method ondirmodifier (line 5) | ondirmodifier(e,t){let n=oF(e,t);if(oO)ow.name+="."+n,oG(ow.nameLoc,t);e...
  method onattribdata (line 5) | onattribdata(e,t){oA+=oF(e,t),oE<0&&(oE=e),oI=t}
  method onattribentity (line 5) | onattribentity(e,t,n){oA+=e,oE<0&&(oE=t),oI=n}
  method onattribnameend (line 5) | onattribnameend(e){let t=oF(ow.loc.start.offset,e);7===ow.type&&(ow.rawN...
  method onattribend (line 5) | onattribend(e,t){oN&&ow&&(oG(ow.loc,t),0!==e&&(oA.includes("&")&&(oA=oC....
  method oncomment (line 5) | oncomment(e,t){oC.comments&&oz({type:3,content:oF(e,t),loc:oJ(e-4,t+3)})}
  method onend (line 5) | onend(){let e=oT.length;for(let t=0;t<oM.length;t++)oU(oM[t],e-1),oM[t]....
  method oncdata (line 5) | oncdata(e,t){0!==oM[0].ns&&oB(oF(e,t),e,t)}
  method onprocessinginstruction (line 5) | onprocessinginstruction(e){(oM[0]?oM[0].ns:oC.ns)===0&&oQ(21,e-1)}
  function oF (line 5) | function oF(e,t){return oT.slice(e,t)}
  function oV (line 5) | function oV(e){oL.inSFCRoot&&(oN.innerLoc=oJ(e+1,e+1)),oz(oN);let{tag:t,...
  function oB (line 5) | function oB(e,t,n){{let t=oM[0]&&oM[0].tag;"script"!==t&&"style"!==t&&e....
  function oU (line 5) | function oU(e,t,n=!1){n?oG(e.loc,oj(t,60)):oG(e.loc,function(e,t){let n=...
  function oj (line 5) | function oj(e,t){let n=e;for(;oT.charCodeAt(n)!==t&&n>=0;)n--;return n}
  function oW (line 5) | function oW(e,t){let n="preserve"!==oC.whitespace,r=!1;for(let t=0;t<e.l...
  function oK (line 5) | function oK(e){let t="",n=!1;for(let r=0;r<e.length;r++)s2(e.charCodeAt(...
  function oz (line 5) | function oz(e){(oM[0]||ok).children.push(e)}
  function oJ (line 5) | function oJ(e,t){return{start:oL.getPos(e),end:null==t?t:oL.getPos(t),so...
  function oG (line 5) | function oG(e,t){e.end=oL.getPos(t),e.source=oF(e.start.offset,t)}
  function oX (line 5) | function oX(e,t=!1,n,r=0,i=0){return sz(e,t,n,r)}
  function oQ (line 5) | function oQ(e,t,n){oC.onError(s9(e,oJ(t,t)))}
  function oZ (line 5) | function oZ(e,t){let{children:n}=e;return 1===n.length&&1===t.type&&!og(t)}
  function oY (line 5) | function oY(e,t){let{constantCache:n}=t;switch(e.type){case 1:if(0!==e.t...
  function o1 (line 5) | function o1(e,t){let n=3,r=o2(e);if(r&&15===r.type){let{properties:e}=r;...
  function o2 (line 5) | function o2(e){let t=e.codegenNode;if(13===t.type)return t.props}
  function o3 (line 5) | function o3(e,t){t.currentNode=e;let{nodeTransforms:n}=t,r=[];for(let i=...
  function o6 (line 5) | function o6(e,t){let n=M(e)?t=>t===e:t=>e.test(t);return(e,r)=>{if(1===e...
  function o5 (line 5) | function o5(e,t,{helper:n,push:r,newline:i,isTS:l}){let s=n("component"=...
  function o9 (line 5) | function o9(e,t){let n=e.length>3;t.push("["),n&&t.indent(),o7(e,t,n),n&...
  function o7 (line 5) | function o7(e,t,n=!1,r=!0){let{push:i,newline:l}=t;for(let s=0;s<e.lengt...
  function ae (line 5) | function ae(e,t){if(M(e)){t.push(e,-3);return}if(L(e)){t.push(t.helper(e...
  function at (line 5) | function at(e,t){let{content:n,isStatic:r}=e;t.push(r?JSON.stringify(n):...
  function an (line 5) | function an(e,t){for(let n=0;n<e.children.length;n++){let r=e.children[n...
  function ai (line 5) | function ai(e,t){let n=3===e.tagType;return{type:10,loc:e.loc,condition:...
  function al (line 5) | function al(e,t,n){return e.condition?sQ(e.condition,as(e,t,n),sG(n.help...
  function as (line 5) | function as(e,t,n){let{helper:r}=n,i=sK("key",sz(`${t}`,!1,sj,2)),{child...
  function ad (line 5) | function ad(e,t){e.finalized||(e.finalized=!0)}
  function ap (line 5) | function ap({value:e,key:t,index:n},r=[]){return function(e){let t=e.len...
  function ag (line 5) | function ag(e,t,n){let r=[sK("name",e),sK("fn",t)];return null!=n&&r.pus...
  function ab (line 5) | function ab(e,t,n=e.props,r,i,l=!1){let s;let{tag:o,loc:a,children:c}=e,...
  function a_ (line 5) | function a_(e){let t=new Map,n=[];for(let r=0;r<e.length;r++){let i=e[r]...
  function aS (line 5) | function aS(e){return"component"===e||"Component"===e}
  function aA (line 5) | function aA(e=[]){return{props:e}}
  method getNamespace (line 5) | getNamespace(e,t,n){let r=t?t.ns:n;if(t&&2===r){if("annotation-xml"===t....
  function aY (line 5) | function aY(e,t){if(!M(e)){if(!e.nodeType)return _;e=e.innerHTML}let n=e...
  method setup (line 9) | setup(e,{slots:t}){let n=iL(),r=n.ctx,i=new Map,l=new Set,s=null,o=n.sus...
  method process (line 9) | process(e,t,n,r,i,l,s,o,a,c){if(null==e)(function(e,t,n,r,i,l,s,o,a){let...
  method __asyncHydrate (line 9) | __asyncHydrate(e,n,r){let i=s?()=>{let t=s(r,t=>(function(e,t){if(nL(e)&...
  method __asyncResolved (line 9) | get __asyncResolved(){return t}
  method setup (line 9) | setup(){let e=iM;if(nA(e),t)return()=>nH(t,e);let n=t=>{u=null,tK(t,e,13...
  method set (line 9) | set(e){let s=n.set?n.set(e):e;if(!Z(s,a)&&!(u!==y&&Z(e,u)))return;let d=...
  method created (line 9) | created(e,t,n){l0(e,t,n,null,"created")}
  method mounted (line 9) | mounted(e,t,n){l0(e,t,n,null,"mounted")}
  method beforeUpdate (line 9) | beforeUpdate(e,t,n,r){l0(e,t,n,r,"beforeUpdate")}
  method updated (line 9) | updated(e,t,n,r){l0(e,t,n,r,"updated")}
  method beforeMount (line 9) | beforeMount(e,{value:t},{transition:n}){e[lc]="none"===e.style.display?"...
  method mounted (line 9) | mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)}
  method updated (line 9) | updated(e,{value:t,oldValue:n},{transition:r}){!t!=!n&&(r?t?(r.beforeEnt...
  method beforeUnmount (line 9) | beforeUnmount(e,{value:t}){ld(e,t)}

FILE: dist/lex-web-ui-loader.js
  function requireGlobalThis (line 10) | function requireGlobalThis() {
  function requireFails (line 27) | function requireFails() {
  function requireDescriptors (line 41) | function requireDescriptors() {
  function requireFunctionBindNative (line 54) | function requireFunctionBindNative() {
  function requireFunctionCall (line 67) | function requireFunctionCall() {
  function requireObjectPropertyIsEnumerable (line 79) | function requireObjectPropertyIsEnumerable() {
  function requireCreatePropertyDescriptor (line 93) | function requireCreatePropertyDescriptor() {
  function requireFunctionUncurryThis (line 108) | function requireFunctionUncurryThis() {
  function requireClassofRaw (line 124) | function requireClassofRaw() {
  function requireIndexedObject (line 137) | function requireIndexedObject() {
  function requireIsNullOrUndefined (line 154) | function requireIsNullOrUndefined() {
  function requireRequireObjectCoercible (line 164) | function requireRequireObjectCoercible() {
  function requireToIndexedObject (line 177) | function requireToIndexedObject() {
  function requireIsCallable (line 189) | function requireIsCallable() {
  function requireIsObject (line 202) | function requireIsObject() {
  function requireGetBuiltIn (line 213) | function requireGetBuiltIn() {
  function requireObjectIsPrototypeOf (line 228) | function requireObjectIsPrototypeOf() {
  function requireEnvironmentUserAgent (line 237) | function requireEnvironmentUserAgent() {
  function requireEnvironmentV8Version (line 248) | function requireEnvironmentV8Version() {
  function requireSymbolConstructorDetection (line 274) | function requireSymbolConstructorDetection() {
  function requireUseSymbolAsUid (line 290) | function requireUseSymbolAsUid() {
  function requireIsSymbol (line 299) | function requireIsSymbol() {
  function requireTryToString (line 317) | function requireTryToString() {
  function requireACallable (line 332) | function requireACallable() {
  function requireGetMethod (line 346) | function requireGetMethod() {
  function requireOrdinaryToPrimitive (line 359) | function requireOrdinaryToPrimitive() {
  function requireIsPure (line 378) | function requireIsPure() {
  function requireDefineGlobalProperty (line 386) | function requireDefineGlobalProperty() {
  function requireSharedStore (line 402) | function requireSharedStore() {
  function requireShared (line 421) | function requireShared() {
  function requireToObject (line 432) | function requireToObject() {
  function requireHasOwnProperty (line 444) | function requireHasOwnProperty() {
  function requireUid (line 457) | function requireUid() {
  function requireWellKnownSymbol (line 471) | function requireWellKnownSymbol() {
  function requireToPrimitive (line 493) | function requireToPrimitive() {
  function requireToPropertyKey (line 521) | function requireToPropertyKey() {
  function requireDocumentCreateElement (line 534) | function requireDocumentCreateElement() {
  function requireIe8DomDefine (line 548) | function requireIe8DomDefine() {
  function requireObjectGetOwnPropertyDescriptor (line 564) | function requireObjectGetOwnPropertyDescriptor() {
  function requireV8PrototypeDefineBug (line 590) | function requireV8PrototypeDefineBug() {
  function requireAnObject (line 606) | function requireAnObject() {
  function requireObjectDefineProperty (line 619) | function requireObjectDefineProperty() {
  function requireCreateNonEnumerableProperty (line 665) | function requireCreateNonEnumerableProperty() {
  function requireFunctionName (line 682) | function requireFunctionName() {
  function requireInspectSource (line 702) | function requireInspectSource() {
  function requireWeakMapBasicDetection (line 719) | function requireWeakMapBasicDetection() {
  function requireSharedKey (line 730) | function requireSharedKey() {
  function requireHiddenKeys (line 743) | function requireHiddenKeys() {
  function requireInternalState (line 751) | function requireInternalState() {
  function requireMakeBuiltIn (line 821) | function requireMakeBuiltIn() {
  function requireDefineBuiltIn (line 876) | function requireDefineBuiltIn() {
  function requireMathTrunc (line 912) | function requireMathTrunc() {
  function requireToIntegerOrInfinity (line 925) | function requireToIntegerOrInfinity() {
  function requireToAbsoluteIndex (line 937) | function requireToAbsoluteIndex() {
  function requireToLength (line 951) | function requireToLength() {
  function requireLengthOfArrayLike (line 964) | function requireLengthOfArrayLike() {
  function requireArrayIncludes (line 975) | function requireArrayIncludes() {
  function requireObjectKeysInternal (line 1010) | function requireObjectKeysInternal() {
  function requireEnumBugKeys (line 1034) | function requireEnumBugKeys() {
  function requireObjectGetOwnPropertyNames (line 1049) | function requireObjectGetOwnPropertyNames() {
  function requireObjectGetOwnPropertySymbols (line 1062) | function requireObjectGetOwnPropertySymbols() {
  function requireOwnKeys (line 1070) | function requireOwnKeys() {
  function requireCopyConstructorProperties (line 1088) | function requireCopyConstructorProperties() {
  function requireIsForced (line 1110) | function requireIsForced() {
  function require_export (line 1131) | function require_export() {
  function requireToStringTagSupport (line 1174) | function requireToStringTagSupport() {
  function requireClassof (line 1186) | function requireClassof() {
  function requireToString (line 1212) | function requireToString() {
  function requireObjectKeys (line 1226) | function requireObjectKeys() {
  function requireObjectDefineProperties (line 1237) | function requireObjectDefineProperties() {
  function requireHtml (line 1260) | function requireHtml() {
  function requireObjectCreate (line 1269) | function requireObjectCreate() {
  function requireArraySlice (line 1336) | function requireArraySlice() {
  function requireObjectGetOwnPropertyNamesExternal (line 1344) | function requireObjectGetOwnPropertyNamesExternal() {
  function requireDefineBuiltInAccessor (line 1366) | function requireDefineBuiltInAccessor() {
  function requireWellKnownSymbolWrapped (line 1380) | function requireWellKnownSymbolWrapped() {
  function requirePath (line 1389) | function requirePath() {
  function requireWellKnownSymbolDefine (line 1398) | function requireWellKnownSymbolDefine() {
  function requireSymbolDefineToPrimitive (line 1415) | function requireSymbolDefineToPrimitive() {
  function requireSetToStringTag (line 1437) | function requireSetToStringTag() {
  function requireFunctionUncurryThisClause (line 1454) | function requireFunctionUncurryThisClause() {
  function requireFunctionBindContext (line 1466) | function requireFunctionBindContext() {
  function requireIsArray (line 1483) | function requireIsArray() {
  function requireIsConstructor (line 1494) | function requireIsConstructor() {
  function requireArraySpeciesConstructor (line 1543) | function requireArraySpeciesConstructor() {
  function requireArraySpeciesCreate (line 1568) | function requireArraySpeciesCreate() {
  function requireCreateProperty (line 1579) | function requireCreateProperty() {
  function requireArrayIteration (line 1593) | function requireArrayIteration() {
  function requireEs_symbol_constructor (line 1678) | function requireEs_symbol_constructor() {
  function requireSymbolRegistryDetection (line 1916) | function requireSymbolRegistryDetection() {
  function requireEs_symbol_for (line 1924) | function requireEs_symbol_for() {
  function requireEs_symbol_keyFor (line 1949) | function requireEs_symbol_keyFor() {
  function requireFunctionApply (line 1970) | function requireFunctionApply() {
  function requireIsRawJson (line 1984) | function requireIsRawJson() {
  function requireParseJsonString (line 1998) | function requireParseJsonString() {
  function requireNativeRawJson (line 2055) | function requireNativeRawJson() {
  function requireEs_json_stringify (line 2067) | function requireEs_json_stringify() {
  function requireEs_object_getOwnPropertySymbols (line 2176) | function requireEs_object_getOwnPropertySymbols() {
  function requireEs_symbol (line 2196) | function requireEs_symbol() {
  function requireEs_symbol_description (line 2208) | function requireEs_symbol_description() {
  function requireEs_symbol_asyncDispose (line 2259) | function requireEs_symbol_asyncDispose() {
  function requireEs_symbol_asyncIterator (line 2278) | function requireEs_symbol_asyncIterator() {
  function requireEs_symbol_dispose (line 2287) | function requireEs_symbol_dispose() {
  function requireEs_symbol_hasInstance (line 2306) | function requireEs_symbol_hasInstance() {
  function requireEs_symbol_isConcatSpreadable (line 2315) | function requireEs_symbol_isConcatSpreadable() {
  function requireEs_symbol_iterator (line 2324) | function requireEs_symbol_iterator() {
  function requireEs_symbol_match (line 2333) | function requireEs_symbol_match() {
  function requireEs_symbol_matchAll (line 2342) | function requireEs_symbol_matchAll() {
  function requireEs_symbol_replace (line 2351) | function requireEs_symbol_replace() {
  function requireEs_symbol_search (line 2360) | function requireEs_symbol_search() {
  function requireEs_symbol_species (line 2369) | function requireEs_symbol_species() {
  function requireEs_symbol_split (line 2378) | function requireEs_symbol_split() {
  function requireEs_symbol_toPrimitive (line 2387) | function requireEs_symbol_toPrimitive() {
  function requireEs_symbol_toStringTag (line 2398) | function requireEs_symbol_toStringTag() {
  function requireEs_symbol_unscopables (line 2410) | function requireEs_symbol_unscopables() {
  function requireFunctionUncurryThisAccessor (line 2420) | function requireFunctionUncurryThisAccessor() {
  function requireIsPossiblePrototype (line 2435) | function requireIsPossiblePrototype() {
  function requireAPossiblePrototype (line 2446) | function requireAPossiblePrototype() {
  function requireObjectSetPrototypeOf (line 2460) | function requireObjectSetPrototypeOf() {
  function requireProxyAccessor (line 2490) | function requireProxyAccessor() {
  function requireInheritIfRequired (line 2509) | function requireInheritIfRequired() {
  function requireNormalizeStringArgument (line 2528) | function requireNormalizeStringArgument() {
  function requireInstallErrorCause (line 2539) | function requireInstallErrorCause() {
  function requireErrorStackClear (line 2553) | function requireErrorStackClear() {
  function requireErrorStackInstallable (line 2574) | function requireErrorStackInstallable() {
  function requireErrorStackInstall (line 2589) | function requireErrorStackInstall() {
  function requireWrapErrorConstructorWithCause (line 2606) | function requireWrapErrorConstructorWithCause() {
  function requireEs_error_cause (line 2663) | function requireEs_error_cause() {
  function requireEs_error_isError (line 2739) | function requireEs_error_isError() {
  function requireErrorToString (line 2772) | function requireErrorToString() {
  function requireEs_error_toString (line 2798) | function requireEs_error_toString() {
  function requireCorrectPrototypeGetter (line 2813) | function requireCorrectPrototypeGetter() {
  function requireObjectGetPrototypeOf (line 2827) | function requireObjectGetPrototypeOf() {
  function requireIterators (line 2851) | function requireIterators() {
  function requireIsArrayIteratorMethod (line 2859) | function requireIsArrayIteratorMethod() {
  function requireGetIteratorMethod (line 2873) | function requireGetIteratorMethod() {
  function requireGetIterator (line 2889) | function requireGetIterator() {
  function requireIteratorClose (line 2907) | function requireIteratorClose() {
  function requireIterate (line 2936) | function requireIterate() {
  function requireEs_aggregateError_constructor (line 3004) | function requireEs_aggregateError_constructor() {
  function requireEs_aggregateError (line 3053) | function requireEs_aggregateError() {
  function requireEs_aggregateError_cause (line 3061) | function requireEs_aggregateError_cause() {
  function requireEs_suppressedError_constructor (line 3087) | function requireEs_suppressedError_constructor() {
  function requireAddToUnscopables (line 3143) | function requireAddToUnscopables() {
  function requireEs_array_at (line 3163) | function requireEs_array_at() {
  function requireDoesNotExceedSafeInteger (line 3186) | function requireDoesNotExceedSafeInteger() {
  function requireArraySetLength (line 3199) | function requireArraySetLength() {
  function requireArrayMethodHasSpeciesSupport (line 3226) | function requireArrayMethodHasSpeciesSupport() {
  function requireEs_array_concat (line 3246) | function requireEs_array_concat() {
  function requireDeletePropertyOrThrow (line 3301) | function requireDeletePropertyOrThrow() {
  function requireArrayCopyWithin (line 3313) | function requireArrayCopyWithin() {
  function requireEs_array_copyWithin (line 3345) | function requireEs_array_copyWithin() {
  function requireArrayMethodIsStrict (line 3360) | function requireArrayMethodIsStrict() {
  function requireEs_array_every (line 3375) | function requireEs_array_every() {
  function requireArrayFill (line 3392) | function requireArrayFill() {
  function requireEs_array_fill (line 3411) | function requireEs_array_fill() {
  function requireEs_array_filter (line 3425) | function requireEs_array_filter() {
  function requireEs_array_find (line 3441) | function requireEs_array_find() {
  function requireEs_array_findIndex (line 3462) | function requireEs_array_findIndex() {
  function requireArrayIterationFromLast (line 3484) | function requireArrayIterationFromLast() {
  function requireEs_array_findLast (line 3524) | function requireEs_array_findLast() {
  function requireEs_array_findLastIndex (line 3540) | function requireEs_array_findLastIndex() {
  function requireFlattenIntoArray (line 3557) | function requireFlattenIntoArray() {
  function requireEs_array_flat (line 3590) | function requireEs_array_flat() {
  function requireEs_array_flatMap (line 3613) | function requireEs_array_flatMap() {
  function requireArrayForEach (line 3638) | function requireArrayForEach() {
  function requireEs_array_forEach (line 3650) | function requireEs_array_forEach() {
  function requireCallWithSafeIterationClosing (line 3663) | function requireCallWithSafeIterationClosing() {
  function requireArrayFrom (line 3679) | function requireArrayFrom() {
  function requireCheckCorrectnessOfIteration (line 3727) | function requireCheckCorrectnessOfIteration() {
  function requireEs_array_from (line 3775) | function requireEs_array_from() {
  function requireEs_array_includes (line 3791) | function requireEs_array_includes() {
  function requireEs_array_indexOf (line 3811) | function requireEs_array_indexOf() {
  function requireEs_array_isArray (line 3831) | function requireEs_array_isArray() {
  function requireIteratorsCore (line 3843) | function requireIteratorsCore() {
  function requireIteratorCreateConstructor (line 3884) | function requireIteratorCreateConstructor() {
  function requireIteratorDefine (line 3906) | function requireIteratorDefine() {
  function requireCreateIterResultObject (line 4011) | function requireCreateIterResultObject() {
  function requireEs_array_iterator (line 4021) | function requireEs_array_iterator() {
  function requireEs_array_join (line 4074) | function requireEs_array_join() {
  function requireArrayLastIndexOf (line 4095) | function requireArrayLastIndexOf() {
  function requireEs_array_lastIndexOf (line 4122) | function requireEs_array_lastIndexOf() {
  function requireEs_array_map (line 4134) | function requireEs_array_map() {
  function requireEs_array_of (line 4150) | function requireEs_array_of() {
  function requireEs_array_push (line 4178) | function requireEs_array_push() {
  function requireArrayReduce (line 4218) | function requireArrayReduce() {
  function requireEnvironment (line 4265) | function requireEnvironment() {
  function requireEnvironmentIsNode (line 4289) | function requireEnvironmentIsNode() {
  function requireEs_array_reduce (line 4297) | function requireEs_array_reduce() {
  function requireEs_array_reduceRight (line 4317) | function requireEs_array_reduceRight() {
  function requireEs_array_reverse (line 4336) | function requireEs_array_reverse() {
  function requireEs_array_slice (line 4354) | function requireEs_array_slice() {
  function requireEs_array_some (line 4402) | function requireEs_array_some() {
  function requireArraySort (line 4419) | function requireArraySort() {
  function requireEnvironmentFfVersion (line 4456) | function requireEnvironmentFfVersion() {
  function requireEnvironmentIsIeOrEdge (line 4466) | function requireEnvironmentIsIeOrEdge() {
  function requireEnvironmentWebkitVersion (line 4475) | function requireEnvironmentWebkitVersion() {
  function requireEs_array_sort (line 4484) | function requireEs_array_sort() {
  function requireSetSpecies (line 4580) | function requireSetSpecies() {
  function requireEs_array_species (line 4602) | function requireEs_array_species() {
  function requireEs_array_splice (line 4611) | function requireEs_array_splice() {
  function requireEs_array_toReversed (line 4678) | function requireEs_array_toReversed() {
  function requireArrayFromConstructorAndList (line 4703) | function requireArrayFromConstructorAndList() {
  function requireGetBuiltInPrototypeMethod (line 4718) | function requireGetBuiltInPrototypeMethod() {
  function requireEs_array_toSorted (line 4730) | function requireEs_array_toSorted() {
  function requireEs_array_toSpliced (line 4755) | function requireEs_array_toSpliced() {
  function requireEs_array_unscopables_flat (line 4799) | function requireEs_array_unscopables_flat() {
  function requireEs_array_unscopables_flatMap (line 4808) | function requireEs_array_unscopables_flatMap() {
  function requireEs_array_unshift (line 4817) | function requireEs_array_unshift() {
  function requireEs_array_with (line 4860) | function requireEs_array_with() {
  function requireArrayBufferBasicDetection (line 4897) | function requireArrayBufferBasicDetection() {
  function requireDefineBuiltIns (line 4905) | function requireDefineBuiltIns() {
  function requireAnInstance (line 4917) | function requireAnInstance() {
  function requireToIndex (line 4930) | function requireToIndex() {
  function requireMathSign (line 4947) | function requireMathSign() {
  function requireMathRoundTiesToEven (line 4958) | function requireMathRoundTiesToEven() {
  function requireMathFloatRound (line 4970) | function requireMathFloatRound() {
  function requireMathFround (line 4991) | function requireMathFround() {
  function requireIeee754 (line 5005) | function requireIeee754() {
  function requireArrayBuffer (line 5109) | function requireArrayBuffer() {
  function requireEs_arrayBuffer_constructor (line 5346) | function requireEs_arrayBuffer_constructor() {
  function requireArrayBufferViewCore (line 5365) | function requireArrayBufferViewCore() {
  function requireEs_arrayBuffer_isView (line 5538) | function requireEs_arrayBuffer_isView() {
  function requireEs_arrayBuffer_slice (line 5551) | function requireEs_arrayBuffer_slice() {
  function requireEs_dataView_constructor (line 5593) | function requireEs_dataView_constructor() {
  function requireEs_dataView (line 5605) | function requireEs_dataView() {
  function requireEs_dataView_getFloat16 (line 5613) | function requireEs_dataView_getFloat16() {
  function requireADataView (line 5642) | function requireADataView() {
  function requireMathLog2 (line 5655) | function requireMathLog2() {
  function requireEs_dataView_setFloat16 (line 5666) | function requireEs_dataView_setFloat16() {
  function requireArrayBufferByteLength (line 5713) | function requireArrayBufferByteLength() {
  function requireArrayBufferIsDetached (line 5729) | function requireArrayBufferIsDetached() {
  function requireEs_arrayBuffer_detached (line 5748) | function requireEs_arrayBuffer_detached() {
  function requireArrayBufferNotDetached (line 5768) | function requireArrayBufferNotDetached() {
  function requireGetBuiltInNodeModule (line 5781) | function requireGetBuiltInNodeModule() {
  function requireStructuredCloneProperTransfer (line 5802) | function requireStructuredCloneProperTransfer() {
  function requireDetachTransferable (line 5820) | function requireDetachTransferable() {
  function requireArrayBufferTransfer (line 5858) | function requireArrayBufferTransfer() {
  function requireEs_arrayBuffer_transfer (line 5906) | function requireEs_arrayBuffer_transfer() {
  function requireEs_arrayBuffer_transferToFixedLength (line 5920) | function requireEs_arrayBuffer_transferToFixedLength() {
  function requireEs_date_getYear (line 5934) | function requireEs_date_getYear() {
  function requireEs_date_now (line 5953) | function requireEs_date_now() {
  function requireEs_date_setYear (line 5969) | function requireEs_date_setYear() {
  function requireEs_date_toGmtString (line 5990) | function requireEs_date_toGmtString() {
  function requireStringRepeat (line 6002) | function requireStringRepeat() {
  function requireStringPad (line 6021) | function requireStringPad() {
  function requireDateToIsoString (line 6058) | function requireDateToIsoString() {
  function requireEs_date_toIsoString (line 6092) | function requireEs_date_toIsoString() {
  function requireEs_date_toJson (line 6104) | function requireEs_date_toJson() {
  function requireDateToPrimitive (line 6129) | function requireDateToPrimitive() {
  function requireEs_date_toPrimitive (line 6144) | function requireEs_date_toPrimitive() {
  function requireEs_date_toString (line 6160) | function requireEs_date_toString() {
  function requireAddDisposableResource (line 6181) | function requireAddDisposableResource() {
  function requireEs_disposableStack_constructor (line 6234) | function requireEs_disposableStack_constructor() {
  function requireEs_escape (line 6341) | function requireEs_escape() {
  function requireFunctionBind (line 6386) | function requireFunctionBind() {
  function requireEs_function_bind (line 6422) | function requireEs_function_bind() {
  function requireEs_function_hasInstance (line 6434) | function requireEs_function_hasInstance() {
  function requireEs_function_name (line 6456) | function requireEs_function_name() {
  function requireEs_globalThis (line 6484) | function requireEs_globalThis() {
  function requireEs_iterator_constructor (line 6496) | function requireEs_iterator_constructor() {
  function requireIteratorCloseAll (line 6554) | function requireIteratorCloseAll() {
  function requireIteratorCreateProxy (line 6575) | function requireIteratorCreateProxy() {
  function requireEs_iterator_concat (line 6655) | function requireEs_iterator_concat() {
  function requireEs_iterator_dispose (line 6712) | function requireEs_iterator_dispose() {
  function requireGetIteratorDirect (line 6733) | function requireGetIteratorDirect() {
  function requireNotANan (line 6747) | function requireNotANan() {
  function requireToPositiveInteger (line 6759) | function requireToPositiveInteger() {
  function requireIteratorHelperThrowsOnInvalidIterator (line 6773) | function requireIteratorHelperThrowsOnInvalidIterator() {
  function requireIteratorHelperWithoutClosingOnEarlyError (line 6788) | function requireIteratorHelperWithoutClosingOnEarlyError() {
  function requireEs_iterator_drop (line 6814) | function requireEs_iterator_drop() {
  function requireEs_iterator_every (line 6864) | function requireEs_iterator_every() {
  function requireEs_iterator_filter (line 6896) | function requireEs_iterator_filter() {
  function requireEs_iterator_find (line 6945) | function requireEs_iterator_find() {
  function requireGetIteratorFlattenable (line 6978) | function requireGetIteratorFlattenable() {
  function requireEs_iterator_flatMap (line 6993) | function requireEs_iterator_flatMap() {
  function requireEs_iterator_forEach (line 7062) | function requireEs_iterator_forEach() {
  function requireEs_iterator_from (line 7094) | function requireEs_iterator_from() {
  function requireEs_iterator_map (line 7125) | function requireEs_iterator_map() {
  function requireEs_iterator_reduce (line 7167) | function requireEs_iterator_reduce() {
  function requireEs_iterator_some (line 7217) | function requireEs_iterator_some() {
  function requireEs_iterator_take (line 7249) | function requireEs_iterator_take() {
  function requireEs_iterator_toArray (line 7292) | function requireEs_iterator_toArray() {
  function requireEs_json_isRawJson (line 7314) | function requireEs_json_isRawJson() {
  function requireEs_json_parse (line 7327) | function requireEs_json_parse() {
  function requireFreezing (line 7566) | function requireFreezing() {
  function requireEs_json_rawJson (line 7576) | function requireEs_json_rawJson() {
  function requireEs_json_toStringTag (line 7614) | function requireEs_json_toStringTag() {
  function requireArrayBufferNonExtensible (line 7627) | function requireArrayBufferNonExtensible() {
  function requireObjectIsExtensible (line 7641) | function requireObjectIsExtensible() {
  function requireInternalMetadata (line 7659) | function requireInternalMetadata() {
  function requireCollection (line 7740) | function requireCollection() {
  function requireCollectionStrong (line 7838) | function requireCollectionStrong() {
  function requireEs_map_constructor (line 8020) | function requireEs_map_constructor() {
  function requireEs_map (line 8033) | function requireEs_map() {
  function requireMapHelpers (line 8042) | function requireMapHelpers() {
  function requireEs_map_groupBy (line 8059) | function requireEs_map_groupBy() {
  function requireAMap (line 8099) | function requireAMap() {
  function requireEs_map_getOrInsert (line 8110) | function requireEs_map_getOrInsert() {
  function requireEs_map_getOrInsertComputed (line 8131) | function requireEs_map_getOrInsertComputed() {
  function requireMathLog1p (line 8158) | function requireMathLog1p() {
  function requireEs_math_acosh (line 8169) | function requireEs_math_acosh() {
  function requireEs_math_asinh (line 8189) | function requireEs_math_asinh() {
  function requireEs_math_atanh (line 8208) | function requireEs_math_atanh() {
  function requireEs_math_cbrt (line 8225) | function requireEs_math_cbrt() {
  function requireEs_math_clz32 (line 8242) | function requireEs_math_clz32() {
  function requireMathExpm1 (line 8260) | function requireMathExpm1() {
  function requireEs_math_cosh (line 8272) | function requireEs_math_cosh() {
  function requireEs_math_expm1 (line 8291) | function requireEs_math_expm1() {
  function requireEs_math_fround (line 8301) | function requireEs_math_fround() {
  function requireEs_math_f16round (line 8311) | function requireEs_math_f16round() {
  function requireEs_math_hypot (line 8328) | function requireEs_math_hypot() {
  function requireEs_math_imul (line 8362) | function requireEs_math_imul() {
  function requireMathLog10 (line 8386) | function requireMathLog10() {
  function requireEs_math_log10 (line 8397) | function requireEs_math_log10() {
  function requireEs_math_log1p (line 8409) | function requireEs_math_log1p() {
  function requireEs_math_log2 (line 8419) | function requireEs_math_log2() {
  function requireEs_math_sign (line 8431) | function requireEs_math_sign() {
  function requireEs_math_sinh (line 8443) | function requireEs_math_sinh() {
  function requireEs_math_sumPrecise (line 8465) | function requireEs_math_sumPrecise() {
  function requireEs_math_tanh (line 8599) | function requireEs_math_tanh() {
  function requireEs_math_toStringTag (line 8617) | function requireEs_math_toStringTag() {
  function requireEs_math_trunc (line 8626) | function requireEs_math_trunc() {
  function requireThisNumberValue (line 8639) | function requireThisNumberValue() {
  function requireWhitespaces (line 8648) | function requireWhitespaces() {
  function requireStringTrim (line 8656) | function requireStringTrim() {
  function requireEs_number_constructor (line 8688) | function requireEs_number_constructor() {
  function requireEs_number_epsilon (line 8789) | function requireEs_number_epsilon() {
  function requireNumberIsFinite (line 8801) | function requireNumberIsFinite() {
  function requireEs_number_isFinite (line 8812) | function requireEs_number_isFinite() {
  function requireIsIntegralNumber (line 8823) | function requireIsIntegralNumber() {
  function requireEs_number_isInteger (line 8834) | function requireEs_number_isInteger() {
  function requireEs_number_isNan (line 8846) | function requireEs_number_isNan() {
  function requireEs_number_isSafeInteger (line 8859) | function requireEs_number_isSafeInteger() {
  function requireEs_number_maxSafeInteger (line 8874) | function requireEs_number_maxSafeInteger() {
  function requireEs_number_minSafeInteger (line 8885) | function requireEs_number_minSafeInteger() {
  function requireNumberParseFloat (line 8897) | function requireNumberParseFloat() {
  function requireEs_number_parseFloat (line 8921) | function requireEs_number_parseFloat() {
  function requireNumberParseInt (line 8934) | function requireNumberParseInt() {
  function requireEs_number_parseInt (line 8958) | function requireEs_number_parseInt() {
  function requireEs_number_toExponential (line 8970) | function requireEs_number_toExponential() {
  function requireEs_number_toFixed (line 9054) | function requireEs_number_toFixed() {
  function requireEs_number_toPrecision (line 9175) | function requireEs_number_toPrecision() {
  function requireObjectAssign (line 9198) | function requireObjectAssign() {
  function requireEs_object_assign (line 9254) | function requireEs_object_assign() {
  function requireEs_object_create (line 9266) | function requireEs_object_create() {
  function requireObjectPrototypeAccessorsForced (line 9280) | function requireObjectPrototypeAccessorsForced() {
  function requireEs_object_defineGetter (line 9297) | function requireEs_object_defineGetter() {
  function requireEs_object_defineProperties (line 9317) | function requireEs_object_defineProperties() {
  function requireEs_object_defineProperty (line 9330) | function requireEs_object_defineProperty() {
  function requireEs_object_defineSetter (line 9343) | function requireEs_object_defineSetter() {
  function requireObjectToArray (line 9364) | function requireObjectToArray() {
  function requireEs_object_entries (line 9410) | function requireEs_object_entries() {
  function requireEs_object_freeze (line 9424) | function requireEs_object_freeze() {
  function requireEs_object_fromEntries (line 9445) | function requireEs_object_fromEntries() {
  function requireEs_object_getOwnPropertyDescriptor (line 9464) | function requireEs_object_getOwnPropertyDescriptor() {
  function requireEs_object_getOwnPropertyDescriptors (line 9484) | function requireEs_object_getOwnPropertyDescriptors() {
  function requireEs_object_getOwnPropertyNames (line 9512) | function requireEs_object_getOwnPropertyNames() {
  function requireEs_object_getPrototypeOf (line 9528) | function requireEs_object_getPrototypeOf() {
  function requireEs_object_groupBy (line 9548) | function requireEs_object_groupBy() {
  function requireEs_object_hasOwn (line 9586) | function requireEs_object_hasOwn() {
  function requireSameValue (line 9599) | function requireSameValue() {
  function requireEs_object_is (line 9608) | function requireEs_object_is() {
  function requireEs_object_isExtensible (line 9620) | function requireEs_object_isExtensible() {
  function requireEs_object_isFrozen (line 9632) | function requireEs_object_isFrozen() {
  function requireEs_object_isSealed (line 9654) | function requireEs_object_isSealed() {
  function requireEs_object_keys (line 9676) | function requireEs_object_keys() {
  function requireEs_object_lookupGetter (line 9695) | function requireEs_object_lookupGetter() {
  function requireEs_object_lookupSetter (line 9721) | function requireEs_object_lookupSetter() {
  function requireEs_object_preventExtensions (line 9747) | function requireEs_object_preventExtensions() {
  function requireEs_object_proto (line 9768) | function requireEs_object_proto() {
  function requireEs_object_seal (line 9800) | function requireEs_object_seal() {
  function requireEs_object_setPrototypeOf (line 9821) | function requireEs_object_setPrototypeOf() {
  function requireObjectToString (line 9834) | function requireObjectToString() {
  function requireEs_object_toString (line 9845) | function requireEs_object_toString() {
  function requireEs_object_values (line 9858) | function requireEs_object_values() {
  function requireEs_parseFloat (line 9872) | function requireEs_parseFloat() {
  function requireEs_parseInt (line 9884) | function requireEs_parseInt() {
  function requireAConstructor (line 9898) | function requireAConstructor() {
  function requireSpeciesConstructor (line 9912) | function requireSpeciesConstructor() {
  function requireValidateArgumentsLength (line 9929) | function requireValidateArgumentsLength() {
  function requireEnvironmentIsIos (line 9941) | function requireEnvironmentIsIos() {
  function requireTask (line 9950) | function requireTask() {
  function requireSafeGetBuiltIn (line 10048) | function requireSafeGetBuiltIn() {
  function requireQueue (line 10063) | function requireQueue() {
  function requireEnvironmentIsIosPebble (line 10092) | function requireEnvironmentIsIosPebble() {
  function requireEnvironmentIsWebosWebkit (line 10101) | function requireEnvironmentIsWebosWebkit() {
  function requireMicrotask (line 10110) | function requireMicrotask() {
  function requireHostReportErrors (line 10175) | function requireHostReportErrors() {
  function requirePerform (line 10188) | function requirePerform() {
  function requirePromiseNativeConstructor (line 10202) | function requirePromiseNativeConstructor() {
  function requirePromiseConstructorDetection (line 10211) | function requirePromiseConstructorDetection() {
  function requireNewPromiseCapability (line 10258) | function requireNewPromiseCapability() {
  function requireEs_promise_constructor (line 10279) | function requireEs_promise_constructor() {
  function requirePromiseStaticsIncorrectIteration (line 10541) | function requirePromiseStaticsIncorrectIteration() {
  function requireEs_promise_all (line 10554) | function requireEs_promise_all() {
  function requireEs_promise_catch (line 10596) | function requireEs_promise_catch() {
  function requireEs_promise_race (line 10622) | function requireEs_promise_race() {
  function requireEs_promise_reject (line 10651) | function requireEs_promise_reject() {
  function requirePromiseResolve (line 10670) | function requirePromiseResolve() {
  function requireEs_promise_resolve (line 10687) | function requireEs_promise_resolve() {
  function requireEs_promise (line 10706) | function requireEs_promise() {
  function requireEs_promise_allSettled (line 10719) | function requireEs_promise_allSettled() {
  function requireEs_promise_any (line 10766) | function requireEs_promise_any() {
  function requireEs_promise_finally (line 10816) | function requireEs_promise_finally() {
  function requireEs_promise_try (line 10862) | function requireEs_promise_try() {
  function requireEs_promise_withResolvers (line 10894) | function requireEs_promise_withResolvers() {
  function requireAsyncIteratorPrototype (line 10914) | function requireAsyncIteratorPrototype() {
  function requireAsyncFromSyncIterator (line 10953) | function requireAsyncFromSyncIterator() {
  function requireGetAsyncIterator (line 11012) | function requireGetAsyncIterator() {
  function requireAsyncIteratorClose (line 11031) | function requireAsyncIteratorClose() {
  function requireAsyncIteratorIteration (line 11056) | function requireAsyncIteratorIteration() {
  function requireArrayFromAsync (line 11160) | function requireArrayFromAsync() {
  function requireEs_array_fromAsync (line 11207) | function requireEs_array_fromAsync() {
  function requireEs_asyncDisposableStack_constructor (line 11229) | function requireEs_asyncDisposableStack_constructor() {
  function requireEs_asyncIterator_asyncDispose (line 11350) | function requireEs_asyncIterator_asyncDispose() {
  function requireEs_reflect_apply (line 11379) | function requireEs_reflect_apply() {
  function requireEs_reflect_construct (line 11400) | function requireEs_reflect_construct() {
  function requireEs_reflect_defineProperty (line 11459) | function requireEs_reflect_defineProperty() {
  function requireEs_reflect_deleteProperty (line 11488) | function requireEs_reflect_deleteProperty() {
  function requireIsDataDescriptor (line 11505) | function requireIsDataDescriptor() {
  function requireEs_reflect_get (line 11515) | function requireEs_reflect_get() {
  function requireEs_reflect_getOwnPropertyDescriptor (line 11540) | function requireEs_reflect_getOwnPropertyDescriptor() {
  function requireEs_reflect_getPrototypeOf (line 11556) | function requireEs_reflect_getPrototypeOf() {
  function requireEs_reflect_has (line 11572) | function requireEs_reflect_has() {
  function requireEs_reflect_isExtensible (line 11585) | function requireEs_reflect_isExtensible() {
  function requireEs_reflect_ownKeys (line 11601) | function requireEs_reflect_ownKeys() {
  function requireEs_reflect_preventExtensions (line 11613) | function requireEs_reflect_preventExtensions() {
  function requireEs_reflect_set (line 11636) | function requireEs_reflect_set() {
  function requireEs_reflect_setPrototypeOf (line 11686) | function requireEs_reflect_setPrototypeOf() {
  function requireEs_reflect_toStringTag (line 11709) | function requireEs_reflect_toStringTag() {
  function requireIsRegexp (line 11722) | function requireIsRegexp() {
  function requireRegexpFlagsDetection (line 11737) | function requireRegexpFlagsDetection() {
  function requireRegexpFlags (line 11776) | function requireRegexpFlags() {
  function requireRegexpGetFlags (line 11797) | function requireRegexpGetFlags() {
  function requireRegexpStickyHelpers (line 11815) | function requireRegexpStickyHelpers() {
  function requireRegexpUnsupportedDotAll (line 11843) | function requireRegexpUnsupportedDotAll() {
  function requireRegexpUnsupportedNcg (line 11857) | function requireRegexpUnsupportedNcg() {
  function requireEs_regexp_constructor (line 11870) | function requireEs_regexp_constructor() {
  function requireAString (line 12047) | function requireAString() {
  function requireEs_regexp_escape (line 12058) | function requireEs_regexp_escape() {
  function requireEs_regexp_dotAll (line 12121) | function requireEs_regexp_dotAll() {
  function requireRegexpExec (line 12148) | function requireRegexpExec() {
  function requireEs_regexp_exec (line 12246) | function requireEs_regexp_exec() {
  function requireEs_regexp_flags (line 12258) | function requireEs_regexp_flags() {
  function requireEs_regexp_sticky (line 12276) | function requireEs_regexp_sticky() {
  function requireEs_regexp_test (line 12302) | function requireEs_regexp_test() {
  function requireEs_regexp_toString (line 12337) | function requireEs_regexp_toString() {
  function requireEs_set_constructor (line 12366) | function requireEs_set_constructor() {
  function requireEs_set (line 12379) | function requireEs_set() {
  function requireSetHelpers (line 12388) | function requireSetHelpers() {
  function requireASet (line 12405) | function requireASet() {
  function requireIterateSimple (line 12417) | function requireIterateSimple() {
  function requireSetIterate (line 12434) | function requireSetIterate() {
  function requireSetClone (line 12452) | function requireSetClone() {
  function requireSetSize (line 12470) | function requireSetSize() {
  function requireGetSetRecord (line 12482) | function requireGetSetRecord() {
  function requireSetDifference (line 12520) | function requireSetDifference() {
  function requireSetMethodAcceptSetLike (line 12548) | function requireSetMethodAcceptSetLike() {
  function requireEs_set_difference_v2 (line 12602) | function requireEs_set_difference_v2() {
  function requireSetIntersection (line 12640) | function requireSetIntersection() {
  function requireEs_set_intersection_v2 (line 12670) | function requireEs_set_intersection_v2() {
  function requireSetIsDisjointFrom (line 12690) | function requireSetIsDisjointFrom() {
  function requireEs_set_isDisjointFrom_v2 (line 12714) | function requireEs_set_isDisjointFrom_v2() {
  function requireSetIsSubsetOf (line 12731) | function requireSetIsSubsetOf() {
  function requireEs_set_isSubsetOf_v2 (line 12749) | function requireEs_set_isSubsetOf_v2() {
  function requireSetIsSupersetOf (line 12766) | function requireSetIsSupersetOf() {
  function requireEs_set_isSupersetOf_v2 (line 12787) | function requireEs_set_isSupersetOf_v2() {
  function requireSetSymmetricDifference (line 12804) | function requireSetSymmetricDifference() {
  function requireSetMethodGetKeysBeforeCloningDetection (line 12829) | function requireSetMethodGetKeysBeforeCloningDetection() {
  function requireEs_set_symmetricDifference_v2 (line 12861) | function requireEs_set_symmetricDifference_v2() {
  function requireSetUnion (line 12877) | function requireSetUnion() {
  function requireEs_set_union_v2 (line 12897) | function requireEs_set_union_v2() {
  function requireEs_string_atAlternative (line 12912) | function requireEs_string_atAlternative() {
  function requireStringMultibyte (line 12939) | function requireStringMultibyte() {
  function requireEs_string_codePointAt (line 12971) | function requireEs_string_codePointAt() {
  function requireNotARegexp (line 12986) | function requireNotARegexp() {
  function requireCorrectIsRegexpLogic (line 13001) | function requireCorrectIsRegexpLogic() {
  function requireEs_string_endsWith (line 13022) | function requireEs_string_endsWith() {
  function requireEs_string_fromCodePoint (line 13056) | function requireEs_string_fromCodePoint() {
  function requireEs_string_includes (line 13086) | function requireEs_string_includes() {
  function requireEs_string_isWellFormed (line 13109) | function requireEs_string_isWellFormed() {
  function requireEs_string_iterator (line 13133) | function requireEs_string_iterator() {
  function requireFixRegexpWellKnownSymbolLogic (line 13165) | function requireFixRegexpWellKnownSymbolLogic() {
  function requireAdvanceStringIndex (line 13225) | function requireAdvanceStringIndex() {
  function requireRegexpExecAbstract (line 13236) | function requireRegexpExecAbstract() {
  function requireEs_string_match (line 13258) | function requireEs_string_match() {
  function requireEs_string_matchAll (line 13311) | function requireEs_string_matchAll() {
  function requireStringPadWebkitBug (line 13411) | function requireStringPadWebkitBug() {
  function requireEs_string_padEnd (line 13419) | function requireEs_string_padEnd() {
  function requireEs_string_padStart (line 13434) | function requireEs_string_padStart() {
  function requireEs_string_raw (line 13449) | function requireEs_string_raw() {
  function requireEs_string_repeat (line 13479) | function requireEs_string_repeat() {
  function requireGetSubstitution (line 13492) | function requireGetSubstitution() {
  function requireEs_string_replace (line 13542) | function requireEs_string_replace() {
  function requireEs_string_replaceAll (line 13659) | function requireEs_string_replaceAll() {
  function requireEs_string_search (line 13720) | function requireEs_string_search() {
  function requireEs_string_split (line 13760) | function requireEs_string_split() {
  function requireEs_string_startsWith (line 13853) | function requireEs_string_startsWith() {
  function requireEs_string_substr (line 13885) | function requireEs_string_substr() {
  function requireEs_string_toWellFormed (line 13915) | function requireEs_string_toWellFormed() {
  function requireStringTrimForced (line 13956) | function requireStringTrimForced() {
  function requireEs_string_trim (line 13971) | function requireEs_string_trim() {
  function requireStringTrimEnd (line 13988) | function requireStringTrimEnd() {
  function requireEs_string_trimRight (line 13999) | function requireEs_string_trimRight() {
  function requireEs_string_trimEnd (line 14010) | function requireEs_string_trimEnd() {
  function requireStringTrimStart (line 14025) | function requireStringTrimStart() {
  function requireEs_string_trimLeft (line 14036) | function requireEs_string_trimLeft() {
  function requireEs_string_trimStart (line 14047) | function requireEs_string_trimStart() {
  function requireCreateHtml (line 14061) | function requireCreateHtml() {
  function requireStringHtmlForced (line 14079) | function requireStringHtmlForced() {
  function requireEs_string_anchor (line 14092) | function requireEs_string_anchor() {
  function requireEs_string_big (line 14107) | function requireEs_string_big() {
  function requireEs_string_blink (line 14122) | function requireEs_string_blink() {
  function requireEs_string_bold (line 14137) | function requireEs_string_bold() {
  function requireEs_string_fixed (line 14152) | function requireEs_string_fixed() {
  function requireEs_string_fontcolor (line 14167) | function requireEs_string_fontcolor() {
  function requireEs_string_fontsize (line 14182) | function requireEs_string_fontsize() {
  function requireEs_string_italics (line 14197) | function requireEs_string_italics() {
  function requireEs_string_link (line 14212) | function requireEs_string_link() {
  function requireEs_string_small (line 14227) | function requireEs_string_small() {
  function requireEs_string_strike (line 14242) | function requireEs_string_strike() {
  function requireEs_string_sub (line 14257) | function requireEs_string_sub() {
  function requireEs_string_sup (line 14272) | function requireEs_string_sup() {
  function requireTypedArrayConstructorsRequireWrappers (line 14289) | function requireTypedArrayConstructorsRequireWrappers() {
  function requireToOffset (line 14314) | function requireToOffset() {
  function requireToUint8Clamped (line 14328) | function requireToUint8Clamped() {
  function requireIsBigIntArray (line 14340) | function requireIsBigIntArray() {
  function requireToBigInt (line 14352) | function requireToBigInt() {
  function requireTypedArrayFrom (line 14366) | function requireTypedArrayFrom() {
  function requireTypedArrayConstructor (line 14411) | function requireTypedArrayConstructor() {
  function requireEs_typedArray_float32Array (line 14611) | function requireEs_typedArray_float32Array() {
  function requireEs_typedArray_float64Array (line 14624) | function requireEs_typedArray_float64Array() {
  function requireEs_typedArray_int8Array (line 14637) | function requireEs_typedArray_int8Array() {
  function requireEs_typedArray_int16Array (line 14650) | function requireEs_typedArray_int16Array() {
  function requireEs_typedArray_int32Array (line 14663) | function requireEs_typedArray_int32Array() {
  function requireEs_typedArray_uint8Array (line 14676) | function requireEs_typedArray_uint8Array() {
  function requireEs_typedArray_uint8ClampedArray (line 14689) | function requireEs_typedArray_uint8ClampedArray() {
  function requireEs_typedArray_uint16Array (line 14702) | function requireEs_typedArray_uint16Array() {
  function requireEs_typedArray_uint32Array (line 14715) | function requireEs_typedArray_uint32Array() {
  function requireEs_typedArray_at (line 14728) | function requireEs_typedArray_at() {
  function requireEs_typedArray_copyWithin (line 14747) | function requireEs_typedArray_copyWithin() {
  function requireEs_typedArray_every (line 14763) | function requireEs_typedArray_every() {
  function requireEs_typedArray_fill (line 14777) | function requireEs_typedArray_fill() {
  function requireTypedArrayFromSameTypeAndList (line 14808) | function requireTypedArrayFromSameTypeAndList() {
  function requireEs_typedArray_filter (line 14819) | function requireEs_typedArray_filter() {
  function requireEs_typedArray_find (line 14835) | function requireEs_typedArray_find() {
  function requireEs_typedArray_findIndex (line 14849) | function requireEs_typedArray_findIndex() {
  function requireEs_typedArray_findLast (line 14863) | function requireEs_typedArray_findLast() {
  function requireEs_typedArray_findLastIndex (line 14877) | function requireEs_typedArray_findLastIndex() {
  function requireEs_typedArray_forEach (line 14891) | function requireEs_typedArray_forEach() {
  function requireEs_typedArray_from (line 14905) | function requireEs_typedArray_from() {
  function requireEs_typedArray_includes (line 14916) | function requireEs_typedArray_includes() {
  function requireEs_typedArray_indexOf (line 14930) | function requireEs_typedArray_indexOf() {
  function requireEs_typedArray_iterator (line 14944) | function requireEs_typedArray_iterator() {
  function requireEs_typedArray_join (line 14980) | function requireEs_typedArray_join() {
  function requireEs_typedArray_lastIndexOf (line 14995) | function requireEs_typedArray_lastIndexOf() {
  function requireEs_typedArray_map (line 15011) | function requireEs_typedArray_map() {
  function requireEs_typedArray_of (line 15027) | function requireEs_typedArray_of() {
  function requireEs_typedArray_reduce (line 15045) | function requireEs_typedArray_reduce() {
  function requireEs_typedArray_reduceRight (line 15060) | function requireEs_typedArray_reduceRight() {
  function requireEs_typedArray_reverse (line 15075) | function requireEs_typedArray_reverse() {
  function requireEs_typedArray_set (line 15099) | function requireEs_typedArray_set() {
  function requireEs_typedArray_slice (line 15141) | function requireEs_typedArray_slice() {
  function requireEs_typedArray_some (line 15166) | function requireEs_typedArray_some() {
  function requireEs_typedArray_sort (line 15180) | function requireEs_typedArray_sort() {
  function requireEs_typedArray_subarray (line 15240) | function requireEs_typedArray_subarray() {
  function requireEs_typedArray_toLocaleString (line 15264) | function requireEs_typedArray_toLocaleString() {
  function requireEs_typedArray_toReversed (line 15295) | function requireEs_typedArray_toReversed() {
  function requireEs_typedArray_toSorted (line 15315) | function requireEs_typedArray_toSorted() {
  function requireEs_typedArray_toString (line 15336) | function requireEs_typedArray_toString() {
  function requireEs_typedArray_with (line 15360) | function requireEs_typedArray_with() {
  function requireAnObjectOrUndefined (line 15405) | function requireAnObjectOrUndefined() {
  function requireBase64Map (line 15419) | function requireBase64Map() {
  function requireGetAlphabetOption (line 15441) | function requireGetAlphabetOption() {
  function requireUint8FromBase64 (line 15454) | function requireUint8FromBase64() {
  function requireEs_uint8Array_fromBase64 (line 15593) | function requireEs_uint8Array_fromBase64() {
  function requireUint8FromHex (line 15624) | function requireUint8FromHex() {
  function requireEs_uint8Array_fromHex (line 15653) | function requireEs_uint8Array_fromHex() {
  function requireAnUint8Array (line 15670) | function requireAnUint8Array() {
  function requireEs_uint8Array_setFromBase64 (line 15682) | function requireEs_uint8Array_setFromBase64() {
  function requireEs_uint8Array_setFromHex (line 15719) | function requireEs_uint8Array_setFromHex() {
  function requireEs_uint8Array_toBase64 (line 15749) | function requireEs_uint8Array_toBase64() {
  function requireEs_uint8Array_toHex (line 15804) | function requireEs_uint8Array_toHex() {
  function requireEs_unescape (line 15838) | function requireEs_unescape() {
  function requireCollectionWeak (line 15887) | function requireCollectionWeak() {
  function requireEs_weakMap_constructor (line 16010) | function requireEs_weakMap_constructor() {
  function requireEs_weakMap (line 16107) | function requireEs_weakMap() {
  function requireWeakMapHelpers (line 16116) | function requireWeakMapHelpers() {
  function requireAWeakMap (line 16133) | function requireAWeakMap() {
  function requireEs_weakMap_getOrInsert (line 16144) | function requireEs_weakMap_getOrInsert() {
  function requireAWeakKey (line 16166) | function requireAWeakKey() {
  function requireEs_weakMap_getOrInsertComputed (line 16181) | function requireEs_weakMap_getOrInsertComputed() {
  function requireEs_weakSet_constructor (line 16218) | function requireEs_weakSet_constructor() {
  function requireEs_weakSet (line 16231) | function requireEs_weakSet() {
  function requireWeb_atob (line 16239) | function requireWeb_atob() {
  function requireWeb_btoa (line 16301) | function requireWeb_btoa() {
  function requireDomIterables (line 16351) | function requireDomIterables() {
  function requireDomTokenListPrototype (line 16391) | function requireDomTokenListPrototype() {
  function requireWeb_domCollections_forEach (line 16401) | function requireWeb_domCollections_forEach() {
  function requireWeb_domCollections_iterator (line 16426) | function requireWeb_domCollections_iterator() {
  function requireDomExceptionConstants (line 16464) | function requireDomExceptionConstants() {
  function requireWeb_domException_constructor (line 16497) | function requireWeb_domException_constructor() {
  function requireWeb_domException_stack (line 16615) | function requireWeb_domException_stack() {
  function requireWeb_domException_toStringTag (line 16674) | function requireWeb_domException_toStringTag() {
  function requireWeb_clearImmediate (line 16686) | function requireWeb_clearImmediate() {
  function requireSchedulersFix (line 16700) | function requireSchedulersFix() {
  function requireWeb_setImmediate (line 16730) | function requireWeb_setImmediate() {
  function requireWeb_immediate (line 16744) | function requireWeb_immediate() {
  function requireWeb_queueMicrotask (line 16753) | function requireWeb_queueMicrotask() {
  function requireWeb_self (line 16776) | function requireWeb_self() {
  function requireWeb_structuredClone (line 16816) | function requireWeb_structuredClone() {
  function requireWeb_setInterval (line 17278) | function requireWeb_setInterval() {
  function requireWeb_setTimeout (line 17292) | function requireWeb_setTimeout() {
  function requireWeb_timers (line 17305) | function requireWeb_timers() {
  function requireUrlConstructorDetection (line 17316) | function requireUrlConstructorDetection() {
  function requireStringPunycodeToAscii (line 17342) | function requireStringPunycodeToAscii() {
  function requireWeb_urlSearchParams_constructor (line 17477) | function requireWeb_urlSearchParams_constructor() {
  function requireWeb_url_constructor (line 17934) | function requireWeb_url_constructor() {
  function requireWeb_url (line 18884) | function requireWeb_url() {
  function requireWeb_url_canParse (line 18892) | function requireWeb_url_canParse() {
  function requireWeb_url_parse (line 18924) | function requireWeb_url_parse() {
  function requireWeb_url_toJson (line 18949) | function requireWeb_url_toJson() {
  function requireWeb_urlSearchParams (line 18963) | function requireWeb_urlSearchParams() {
  function requireWeb_urlSearchParams_delete (line 18971) | function requireWeb_urlSearchParams_delete() {
  function requireWeb_urlSearchParams_has (line 19021) | function requireWeb_urlSearchParams_has() {
  function requireWeb_urlSearchParams_size (line 19052) | function requireWeb_urlSearchParams_size() {
  function requireStable (line 19077) | function requireStable() {
  function requireRuntime (line 19403) | function requireRuntime() {
  class DependencyLoader (line 20034) | class DependencyLoader {
    method constructor (line 20075) | constructor({ shouldLoadMinDeps = true, dependencies, baseUrl = "/" }) {
    method load (line 20095) | load() {
    method getMinUrl (line 20105) | static getMinUrl(url) {
    method getTypeAttributes (line 20115) | static getTypeAttributes(type) {
    method addDependency (line 20144) | static addDependency(useMin = true, baseUrl = "/", type, dependency) {
  class ConfigLoader (line 20206) | class ConfigLoader {
    method constructor (line 20207) | constructor(options$1 = options) {
    method load (line 20218) | load(configParam = {}) {
    method loadJsonFile (line 20233) | static loadJsonFile(url) {
    method loadConfigFromEvent (line 20261) | static loadConfigFromEvent(config, timeoutInMs = 1e4) {
    method filterConfigWhenEmedded (line 20294) | filterConfigWhenEmedded(config) {
    method mergeConfig (line 20311) | static mergeConfig(baseConfig, srcConfig = {}) {
  function _classCallCheck$6 (line 20348) | function _classCallCheck$6(instance, Constructor) {
  function CognitoAccessToken2 (line 20354) | function CognitoAccessToken2(AccessToken) {
  function _classCallCheck$5 (line 20389) | function _classCallCheck$5(instance, Constructor) {
  function CognitoIdToken2 (line 20395) | function CognitoIdToken2(IdToken) {
  function _classCallCheck$4 (line 20423) | function _classCallCheck$4(instance, Constructor) {
  function CognitoRefreshToken2 (line 20429) | function CognitoRefreshToken2(RefreshToken) {
  function _classCallCheck$3 (line 20441) | function _classCallCheck$3(instance, Constructor) {
  function CognitoTokenScopes2 (line 20447) | function CognitoTokenScopes2(TokenScopesArray) {
  function _classCallCheck$2 (line 20459) | function _classCallCheck$2(instance, Constructor) {
  function CognitoAuthSession2 (line 20465) | function CognitoAuthSession2() {
  function _classCallCheck$1 (line 20540) | function _classCallCheck$1(instance, Constructor) {
  function MemoryStorage2 (line 20547) | function MemoryStorage2() {
  function StorageHelper2 (line 20567) | function StorageHelper2() {
  function _classCallCheck (line 20591) | function _classCallCheck(instance, Constructor) {
  function CognitoAuth2 (line 20597) | function CognitoAuth2(data) {
  function requireJs_cookie (line 21071) | function requireJs_cookie() {
  class InvalidTokenError (line 21202) | class InvalidTokenError extends Error {
  function b64DecodeUnicode (line 21205) | function b64DecodeUnicode(str) {
  function base64UrlDecode (line 21214) | function base64UrlDecode(str) {
  function jwtDecode (line 21234) | function jwtDecode(token, options2) {
  function getLoopCount (line 21258) | function getLoopCount(config) {
  function incrementLoopCount (line 21267) | function incrementLoopCount(config) {
  function getAuth (line 21272) | function getAuth(config) {
  function completeLogin (line 21305) | function completeLogin(config) {
  function completeLogout (line 21319) | function completeLogout(config) {
  function logout (line 21327) | function logout(config) {
  function login (line 21335) | function login(config) {
  function refreshLogin (line 21349) | function refreshLogin(config, token, callback) {
  function isTokenExpired (line 21373) | function isTokenExpired(token) {
  class ProviderError (line 21384) | class ProviderError extends Error {
    method constructor (line 21387) | constructor(message, options2 = true) {
    method from (line 21402) | static from(error, options2 = true) {
  class CredentialsProviderError (line 21406) | class CredentialsProviderError extends ProviderError {
    method constructor (line 21408) | constructor(message, options2 = true) {
  function resolveLogins (line 21440) | function resolveLogins(logins) {
  function fromCognitoIdentity (line 21454) | function fromCognitoIdentity(parameters) {
  function throwOnMissingAccessKeyId (line 21477) | function throwOnMissingAccessKeyId(logger2) {
  function throwOnMissingCredentials (line 21480) | function throwOnMissingCredentials(logger2) {
  function throwOnMissingSecretKey (line 21483) | function throwOnMissingSecretKey(logger2) {
  class IndexedDbStorage (line 21487) | class IndexedDbStorage {
    method constructor (line 21489) | constructor(dbName = "aws:cognito-identity-ids") {
    method getItem (line 21492) | getItem(key) {
    method removeItem (line 21501) | removeItem(key) {
    method setItem (line 21510) | setItem(id, value) {
    method getDb (line 21519) | getDb() {
    method withObjectStore (line 21540) | withObjectStore(mode, action) {
  class InMemoryStorage (line 21554) | class InMemoryStorage {
    method constructor (line 21556) | constructor(store = {}) {
    method getItem (line 21559) | getItem(key) {
    method removeItem (line 21565) | removeItem(key) {
    method setItem (line 21568) | setItem(key, value) {
  function localStorage$1 (line 21573) | function localStorage$1() {
  function fromCognitoIdentityPool$1 (line 21582) | function fromCognitoIdentityPool$1({ accountId, cache: cache2 = localSto...
  function throwOnMissingId (line 21622) | function throwOnMissingId(logger2) {
  method setHttpHandler (line 21630) | setHttpHandler(handler) {
  method httpHandler (line 21633) | httpHandler() {
  method updateHttpClientConfig (line 21636) | updateHttpClientConfig(key, value) {
  method httpHandlerConfigs (line 21639) | httpHandlerConfigs() {
  class HttpRequest (line 21663) | class HttpRequest {
    method constructor (line 21675) | constructor(options2) {
    method clone (line 21688) | static clone(request) {
    method isInstance (line 21698) | static isInstance(request) {
    method clone (line 21705) | clone() {
  function cloneQuery (line 21709) | function cloneQuery(query) {
  class HttpResponse (line 21718) | class HttpResponse {
    method constructor (line 21723) | constructor(options2) {
    method isInstance (line 21729) | static isInstance(response) {
  function buildQueryString (line 21738) | function buildQueryString(query) {
  function createRequest (line 21757) | function createRequest(url, requestOptions) {
  function requestTimeout (line 21760) | function requestTimeout(timeoutInMs = 0) {
  class FetchHttpHandler (line 21774) | class FetchHttpHandler {
    method create (line 21777) | static create(instanceOrOptions) {
    method constructor (line 21783) | constructor(options2) {
    method destroy (line 21794) | destroy() {
    method handle (line 21796) | async handle(request, { abortSignal, requestTimeout: requestTimeout$1 ...
    method updateHttpClientConfig (line 21894) | updateHttpClientConfig(key, value) {
    method httpHandlerConfigs (line 21901) | httpHandlerConfigs() {
  function buildAbortError (line 21905) | function buildAbortError(abortSignal) {
  function toBase64 (line 21983) | function toBase64(_input) {
  function collectBlob (line 22022) | async function collectBlob(blob) {
  function collectStream (line 22027) | async function collectStream(stream) {
  function readToBase64 (line 22048) | function readToBase64(blob) {
  method identifyOnResolve (line 22299) | identifyOnResolve(toggle) {
  class Client (line 22328) | class Client {
    method constructor (line 22333) | constructor(config) {
    method send (line 22342) | send(command, optionsOrCb, cb) {
    method destroy (line 22369) | destroy() {
  class Uint8ArrayBlobAdapter (line 22374) | class Uint8ArrayBlobAdapter extends Uint8Array {
    method fromString (line 22375) | static fromString(source, encoding = "utf-8") {
    method mutate (line 22384) | static mutate(source) {
    method transformToString (line 22388) | transformToString(encoding = "utf-8") {
  function getLens (line 22410) | function getLens(b64) {
  function byteLength (line 22420) | function byteLength(b64) {
  function _byteLength (line 22426) | function _byteLength(b64, validLen, placeHoldersLen) {
  function toByteArray (line 22429) | function toByteArray(b64) {
  function tripletToBase64 (line 22455) | function tripletToBase64(num) {
  function encodeChunk (line 22458) | function encodeChunk(uint8, start, end) {
  function fromByteArray (line 22467) | function fromByteArray(uint8) {
  function typedArraySupport (line 22583) | function typedArraySupport() {
  function createBuffer (line 22610) | function createBuffer(length) {
  function Buffer2 (line 22618) | function Buffer2(arg, encodingOrOffset, length) {
  function from (line 22630) | function from(value, encodingOrOffset, length) {
  function assertSize (line 22671) | function assertSize(size) {
  function alloc (line 22678) | function alloc(size, fill, encoding) {
  function allocUnsafe (line 22691) | function allocUnsafe(size) {
  function fromString (line 22701) | function fromString(string, encoding) {
  function fromArrayLike (line 22716) | function fromArrayLike(array) {
  function fromArrayView (line 22724) | function fromArrayView(arrayView) {
  function fromArrayBuffer (line 22731) | function fromArrayBuffer(array, byteOffset, length) {
  function fromObject (line 22749) | function fromObject(obj) {
  function checked (line 22769) | function checked(length) {
  function SlowBuffer (line 22775) | function SlowBuffer(length) {
  function byteLength2 (line 22862) | function byteLength2(string, encoding) {
  function slowToString (line 22906) | function slowToString(encoding, start, end) {
  function swap (line 22953) | function swap(b2, n2, m2) {
  function bidirectionalIndexOf (line 23068) | function bidirectionalIndexOf(buffer2, val, byteOffset, encoding, dir) {
  function arrayIndexOf (line 23111) | function arrayIndexOf(arr, val, byteOffset, encoding, dir) {
  function hexWrite (line 23170) | function hexWrite(buf, string, offset, length) {
  function utf8Write (line 23193) | function utf8Write(buf, string, offset, length) {
  function asciiWrite (line 23196) | function asciiWrite(buf, string, offset, length) {
  function base64Write (line 23199) | function base64Write(buf, string, offset, length) {
  function ucs2Write (line 23202) | function ucs2Write(buf, string, offset, length) {
  function base64Slice (line 23266) | function base64Slice(buf, start, end) {
  function utf8Slice (line 23273) | function utf8Slice(buf, start, end) {
  function decodeCodePointsArray (line 23334) | function decodeCodePointsArray(codePoints) {
  function asciiSlice (line 23349) | function asciiSlice(buf, start, end) {
  function latin1Slice (line 23357) | function latin1Slice(buf, start, end) {
  function hexSlice (line 23365) | function hexSlice(buf, start, end) {
  function utf16leSlice (line 23375) | function utf16leSlice(buf, start, end) {
  function checkOffset (line 23404) | function checkOffset(offset, ext, length) {
  function checkInt (line 23581) | function checkInt(buf, value, offset, ext, max, min) {
  function wrtBigUInt64LE (line 23661) | function wrtBigUInt64LE(buf, value, offset, min, max) {
  function wrtBigUInt64BE (line 23681) | function wrtBigUInt64BE(buf, value, offset, min, max) {
  function checkIEEE754 (line 23796) | function checkIEEE754(buf, value, offset, ext, max, min) {
  function writeFloat (line 23800) | function writeFloat(buf, value, offset, littleEndian, noAssert) {
  function writeDouble (line 23815) | function writeDouble(buf, value, offset, littleEndian, noAssert) {
  function E (line 23914) | function E(sym, getMessage, Base) {
  function addNumericalSeparator (line 23979) | function addNumericalSeparator(val) {
  function checkBounds (line 23988) | function checkBounds(buf, offset, byteLength3) {
  function checkIntBI (line 23994) | function checkIntBI(value, min, max, buf, offset, byteLength3) {
  function validateNumber (line 24009) | function validateNumber(value, name) {
  function boundsError (line 24014) | function boundsError(value, length, type) {
  function base64clean (line 24029) | function base64clean(str) {
  function utf8ToBytes (line 24038) | function utf8ToBytes(string, units) {
  function asciiToBytes (line 24098) | function asciiToBytes(str) {
  function utf16leToBytes (line 24105) | function utf16leToBytes(str, units) {
  function base64ToBytes (line 24118) | function base64ToBytes(str) {
  function blitBuffer (line 24121) | function blitBuffer(src, dst, offset, length) {
  function isInstance (line 24129) | function isInstance(obj, type) {
  function numberIsNaN (line 24132) | function numberIsNaN(obj) {
  function defineBigIntMethod (line 24146) | function defineBigIntMethod(fn) {
  function BufferBigIntNotDefined (line 24149) | function BufferBigIntNotDefined() {
  function fromHex (line 24164) | function fromHex(encoded) {
  function toHex (line 24179) | function toHex(bytes) {
  function parseQueryString (line 24274) | function parseQueryString(querystring) {
  function getSchemaSerdePlugin (line 24354) | function getSchemaSerdePlugin(config) {
  function translateTraits (line 24364) | function translateTraits(indicator) {
  class NormalizedSchema (line 24395) | class NormalizedSchema {
    method constructor (line 24406) | constructor(ref, memberName) {
    method of (line 24456) | static of(ref) {
    method getSchema (line 24495) | getSchema() {
    method getName (line 24502) | getName(withNamespace = false) {
    method getMemberName (line 24507) | getMemberName() {
    method isMemberSchema (line 24510) | isMemberSchema() {
    method isListSchema (line 24513) | isListSchema() {
    method isMapSchema (line 24517) | isMapSchema() {
    method isStructSchema (line 24521) | isStructSchema() {
    method isUnionSchema (line 24529) | isUnionSchema() {
    method isBlobSchema (line 24536) | isBlobSchema() {
    method isTimestampSchema (line 24540) | isTimestampSchema() {
    method isUnitSchema (line 24544) | isUnitSchema() {
    method isDocumentSchema (line 24547) | isDocumentSchema() {
    method isStringSchema (line 24550) | isStringSchema() {
    method isBooleanSchema (line 24553) | isBooleanSchema() {
    method isNumericSchema (line 24556) | isNumericSchema() {
    method isBigIntegerSchema (line 24559) | isBigIntegerSchema() {
    method isBigDecimalSchema (line 24562) | isBigDecimalSchema() {
    method isStreaming (line 24565) | isStreaming() {
    method isIdempotencyToken (line 24569) | isIdempotencyToken() {
    method getMergedTraits (line 24572) | getMergedTraits() {
    method getMemberTraits (line 24578) | getMemberTraits() {
    method getOwnTraits (line 24581) | getOwnTraits() {
    method getKeySchema (line 24584) | getKeySchema() {
    method getValueSchema (line 24593) | getValueSchema() {
    method getMemberSchema (line 24602) | getMemberSchema(memberName) {
    method getMemberSchemas (line 24614) | getMemberSchemas() {
    method getEventStreamMember (line 24624) | getEventStreamMember() {
    method structIterator (line 24634) | *structIterator() {
  method [Symbol.hasInstance] (line 24448) | static [Symbol.hasInstance](lhs) {
  function member (line 24657) | function member(memberSchema, memberName) {
  class TypeRegistry (line 24669) | class TypeRegistry {
    method constructor (line 24674) | constructor(namespace, schemas = /* @__PURE__ */ new Map(), exceptions...
    method for (line 24679) | static for(namespace) {
    method copyFrom (line 24685) | copyFrom(other) {
    method register (line 24698) | register(shapeId, schema) {
    method getSchema (line 24704) | getSchema(shapeId) {
    method registerError (line 24711) | registerError(es, ctor) {
    method getErrorCtor (line 24719) | getErrorCtor(es) {
    method getBaseException (line 24727) | getBaseException() {
    method find (line 24739) | find(predicate) {
    method clear (line 24742) | clear() {
    method normalizeShapeId (line 24746) | normalizeShapeId(shapeId) {
  function dateToUtcString (line 24849) | function dateToUtcString(date) {
  method deserializeJSON (line 25027) | deserializeJSON() {
  method toString (line 25030) | toString() {
  method toJSON (line 25033) | toJSON() {
  class NumericValue (line 25049) | class NumericValue {
    method constructor (line 25052) | constructor(string, type) {
    method toString (line 25059) | toString() {
  method [Symbol.hasInstance] (line 25062) | static [Symbol.hasInstance](object) {
  class SerdeContext (line 25070) | class SerdeContext {
    method setSerdeContext (line 25072) | setSerdeContext(serdeContext) {
  class HttpProtocol (line 25076) | class HttpProtocol extends SerdeContext {
    method constructor (line 25079) | constructor(options2) {
    method getRequestType (line 25087) | getRequestType() {
    method getResponseType (line 25090) | getResponseType() {
    method setSerdeContext (line 25093) | setSerdeContext(serdeContext) {
    method updateServiceEndpoint (line 25101) | updateServiceEndpoint(request, endpoint) {
    method setHostPrefix (line 25138) | setHostPrefix(request, operationSchema, input) {
    method deserializeMetadata (line 25159) | deserializeMetadata(output) {
    method serializeEventStream (line 25167) | async serializeEventStream({ eventStream, requestSchema, initialReques...
    method deserializeEventStream (line 25175) | async deserializeEventStream({ response, responseSchema, initialRespon...
    method loadEventStreamCapability (line 25183) | async loadEventStreamCapability() {
    method getDefaultContentType (line 25193) | getDefaultContentType() {
    method deserializeHttpMessage (line 25196) | async deserializeHttpMessage(schema, context, response, arg4, arg5) {
    method getEventStreamMarshaller (line 25199) | getEventStreamMarshaller() {
  class RpcProtocol (line 25207) | class RpcProtocol extends HttpProtocol {
    method serializeRequest (line 25208) | async serializeRequest(operationSchema, input, context) {
    method deserializeResponse (line 25261) | async deserializeResponse(operationSchema, context, response) {
  function determineTimestampFormat (line 25295) | function determineTimestampFormat(ns, settings) {
  function schemaLogFilter (line 25306) | function schemaLogFilter(schema, data) {
  class Command (line 25336) | class Command {
    method classBuilder (line 25339) | static classBuilder() {
    method resolveMiddlewareWithContext (line 25342) | resolveMiddlewareWithContext(clientStack, configuration, options2, { m...
  class ClassBuilder (line 25364) | class ClassBuilder {
    method init (line 25378) | init(cb) {
    method ep (line 25381) | ep(endpointParameterInstructions) {
    method m (line 25385) | m(middlewareSupplier) {
    method s (line 25389) | s(service, operation2, smithyContext = {}) {
    method c (line 25397) | c(additionalContext = {}) {
    method n (line 25401) | n(clientName, commandName) {
    method f (line 25406) | f(inputFilter = (_) => _, outputFilter = (_) => _) {
    method ser (line 25411) | ser(serializer) {
    method de (line 25415) | de(deserializer) {
    method sc (line 25419) | sc(operation2) {
    method build (line 25424) | build() {
  class ServiceException (line 25458) | class ServiceException extends Error {
    method constructor (line 25463) | constructor(options2) {
    method isInstance (line 25470) | static isInstance(value) {
  method [Symbol.hasInstance] (line 25476) | static [Symbol.hasInstance](instance) {
  method addChecksumAlgorithm (line 25549) | addChecksumAlgorithm(algo) {
  method checksumAlgorithms (line 25560) | checksumAlgorithms() {
  method setRetryStrategy (line 25577) | setRetryStrategy(retryStrategy) {
  method retryStrategy (line 25580) | retryStrategy() {
  class NoOpLogger (line 25596) | class NoOpLogger {
    method trace (line 25597) | trace() {
    method debug (line 25599) | debug() {
    method info (line 25601) | info() {
    method warn (line 25603) | warn() {
    method error (line 25605) | error() {
  function convertHttpAuthSchemesToMap (line 25628) | function convertHttpAuthSchemesToMap(httpAuthSchemes) {
  function setFeature$1 (line 25726) | function setFeature$1(context, feature, value) {
  class DefaultIdentityProviderConfig (line 25736) | class DefaultIdentityProviderConfig {
    method constructor (line 25738) | constructor(config) {
    method getIdentityProvider (line 25745) | getIdentityProvider(schemeId) {
  class NoAuthSigner (line 25749) | class NoAuthSigner {
    method sign (line 25750) | async sign(httpRequest, identity, signingProperties) {
  function resolveHostHeaderConfig (line 25808) | function resolveHostHeaderConfig(input) {
  function isValidUserAgentAppId (line 25894) | function isValidUserAgentAppId(appId) {
  function resolveUserAgentConfig (line 25900) | function resolveUserAgentConfig(input) {
  class EndpointCache (line 25919) | class EndpointCache {
    method constructor (line 25923) | constructor({ size, params }) {
    method get (line 25929) | get(endpointParams, resolver) {
    method size (line 25950) | size() {
    method hash (line 25953) | hash(endpointParams) {
  function toDebugString (line 25986) | function toDebugString(input) {
  class EndpointError (line 25998) | class EndpointError extends Error {
    method constructor (line 25999) | constructor(message) {
  function setCredentialFeature (line 26416) | function setCredentialFeature(credentials, feature, value) {
  function setFeature (line 26423) | function setFeature(context, feature, value) {
  class AwsSdkSigV4Signer (line 26466) | class AwsSdkSigV4Signer {
    method sign (line 26467) | async sign(httpRequest, identity, signingProperties) {
    method errorHandler (line 26489) | errorHandler(signingProperties) {
    method successHandler (line 26504) | successHandler(httpResponse, signingProperties) {
  class HeaderFormatter (line 26607) | class HeaderFormatter {
    method format (line 26608) | format(headers) {
    method formatHeaderValue (line 26622) | formatHeaderValue(header) {
  class Int64 (line 26688) | class Int64 {
    method constructor (line 26690) | constructor(bytes) {
    method fromNumber (line 26696) | static fromNumber(number) {
    method valueOf (line 26709) | valueOf() {
    method toString (line 26717) | toString() {
  function negate (line 26721) | function negate(bytes) {
  class SignatureV4Base (line 26795) | class SignatureV4Base {
    method constructor (line 26802) | constructor({ applyChecksum, credentials, region, service, sha256, uri...
    method createCanonicalRequest (line 26810) | createCanonicalRequest(request, canonicalHeaders, payloadHash) {
    method createStringToSign (line 26820) | async createStringToSign(longDate, credentialScope, canonicalRequest, ...
    method getCanonicalPath (line 26829) | getCanonicalPath({ path: path2 }) {
    method validateResolvedCredentials (line 26849) | validateResolvedCredentials(credentials) {
    method formatDate (line 26854) | formatDate(now) {
    method getCanonicalHeaderList (line 26861) | getCanonicalHeaderList(headers) {
  class SignatureV4 (line 26865) | class SignatureV4 extends SignatureV4Base {
    method constructor (line 26867) | constructor({ applyChecksum, credentials, region, service, sha256, uri...
    method presign (line 26877) | async presign(originalRequest, options2 = {}) {
    method sign (line 26900) | async sign(toSign, options2) {
    method signEvent (line 26911) | async signEvent({ headers, payload }, { signingDate = /* @__PURE__ */ ...
    method signMessage (line 26929) | async signMessage(signableMessage, { signingDate = /* @__PURE__ */ new...
    method signString (line 26943) | async signString(stringToSign, { signingDate = /* @__PURE__ */ new Dat...
    method signRequest (line 26952) | async signRequest(requestToSign, { signingDate = /* @__PURE__ */ new D...
    method getSignature (line 26972) | async getSignature(longDate, credentialScope, keyPromise, canonicalReq...
    method getSigningKey (line 26978) | getSigningKey(credentials, region, shortDate, service) {
  method set (line 26987) | set(credentials) {
  method get (line 27014) | get() {
  function normalizeCredentialProvider (line 27078) | function normalizeCredentialProvider(config, { credentials, credentialDe...
  function bindCallerConfig (line 27100) | function bindCallerConfig(config, credentialsProvider) {
  class ProtocolLib (line 27133) | class ProtocolLib {
    method constructor (line 27136) | constructor(queryCompat = false) {
    method resolveRestContentType (line 27139) | resolveRestContentType(defaultContentType, inputSchema) {
    method getErrorSchemaOrThrowBaseException (line 27166) | async getErrorSchemaOrThrowBaseException(errorIdentifier, defaultNames...
    method compose (line 27196) | compose(composite, errorIdentifier, defaultNamespace) {
    method decorateServiceException (line 27207) | decorateServiceException(exception, additions = {}) {
    method setQueryCompatError (line 27228) | setQueryCompatError(output, response) {
    method queryCompatOutput (line 27245) | queryCompatOutput(queryCompatErrorData, errorData) {
    method findQueryCompatibleError (line 27256) | findQueryCompatibleError(registry, errorName) {
  class SerdeContextConfig (line 27264) | class SerdeContextConfig {
    method setSerdeContext (line 27266) | setSerdeContext(serdeContext) {
  class UnionSerde (line 27270) | class UnionSerde {
    method constructor (line 27274) | constructor(from, to) {
    method mark (line 27279) | mark(key) {
    method hasUnknown (line 27282) | hasUnknown() {
    method writeUnknown (line 27285) | writeUnknown() {
  function jsonReviver (line 27293) | function jsonReviver(key, value, context) {
  class JsonShapeDeserializer (line 27357) | class JsonShapeDeserializer extends SerdeContextConfig {
    method constructor (line 27359) | constructor(settings) {
    method read (line 27363) | async read(schema, data) {
    method readObject (line 27366) | readObject(schema, data) {
    method _read (line 27369) | _read(schema, value) {
  class JsonReplacer (line 27496) | class JsonReplacer {
    method createReplacer (line 27500) | createReplacer() {
    method replaceInJson (line 27523) | replaceInJson(json) {
  class JsonShapeSerializer (line 27540) | class JsonShapeSerializer extends SerdeContextConfig {
    method constructor (line 27545) | constructor(settings) {
    method write (line 27549) | write(schema, value) {
    method writeDiscriminatedDocument (line 27553) | writeDiscriminatedDocument(schema, value) {
    method flush (line 27559) | flush() {
    method _write (line 27572) | _write(schema, value, container) {
  class JsonCodec (line 27707) | class JsonCodec extends SerdeContextConfig {
    method constructor (line 27709) | constructor(settings) {
    method createSerializer (line 27713) | createSerializer() {
    method createDeserializer (line 27718) | createDeserializer() {
  class AwsJsonRpcProtocol (line 27724) | class AwsJsonRpcProtocol extends RpcProtocol {
    method constructor (line 27731) | constructor({ defaultNamespace, errorTypeRegistries: errorTypeRegistri...
    method serializeRequest (line 27749) | async serializeRequest(operationSchema, input, context) {
    method getPayloadCodec (line 27766) | getPayloadCodec() {
    method handleError (line 27769) | async handleError(operationSchema, context, response, dataObject, meta...
  class AwsJson1_1Protocol (line 27795) | class AwsJson1_1Protocol extends AwsJsonRpcProtocol {
    method constructor (line 27796) | constructor({ defaultNamespace, errorTypeRegistries: errorTypeRegistri...
    method getShapeId (line 27805) | getShapeId() {
    method getJsonRpcVersion (line 27808) | getJsonRpcVersion() {
    method getDefaultContentType (line 27811) | getDefaultContentType() {
  class DefaultRateLimiter (line 27870) | class DefaultRateLimiter {
    method constructor (line 27888) | constructor(options2) {
    method getCurrentTimeInSeconds (line 27900) | getCurrentTimeInSeconds() {
    method getSendToken (line 27903) | async getSendToken() {
    method acquireTokenBucket (line 27906) | async acquireTokenBucket(amount) {
    method refillTokenBucket (line 27917) | refillTokenBucket() {
    method updateClientSendingRate (line 27927) | updateClientSendingRate(response) {
    method calculateTimeWindow (line 27944) | calculateTimeWindow() {
    method cubicThrottle (line 27947) | cubicThrottle(rateToUse) {
    method cubicSuccess (line 27950) | cubicSuccess(timestamp) {
    method enableTokenBucket (line 27953) | enableTokenBucket() {
    method updateTokenBucketRate (line 27956) | updateTokenBucketRate(newRate) {
    method updateMeasuredRate (line 27962) | updateMeasuredRate() {
    method getPrecise (line 27973) | getPrecise(num) {
  class StandardRetryStrategy (line 28009) | class StandardRetryStrategy {
    method constructor (line 28015) | constructor(maxAttempts) {
    method acquireInitialRetryToken (line 28019) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 28025) | async refreshRetryTokenForRetry(token, errorInfo) {
    method recordSuccess (line 28042) | recordSuccess(token) {
    method getCapacity (line 28045) | getCapacity() {
    method getMaxAttempts (line 28048) | async getMaxAttempts() {
    method shouldRetry (line 28056) | shouldRetry(tokenToRenew, errorInfo, maxAttempts) {
    method getCapacityCost (line 28060) | getCapacityCost(errorType) {
    method isRetryableError (line 28063) | isRetryableError(errorType) {
  class AdaptiveRetryStrategy (line 28067) | class AdaptiveRetryStrategy {
    method constructor (line 28072) | constructor(maxAttemptsProvider, options2) {
    method acquireInitialRetryToken (line 28078) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 28082) | async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
    method recordSuccess (line 28086) | recordSuccess(token) {
  function checkFeatures (line 28092) | async function checkFeatures(context, config, args) {
  function encodeFeatures (line 28146) | function encodeFeatures(features) {
  function contentLengthMiddleware (line 28266) | function contentLengthMiddleware(bodyLengthChecker) {
  method getEndpointParameterInstructions (line 28461) | getEndpointParameterInstructions() {
  function createAwsAuthSigv4HttpAuthOption$1 (line 28656) | function createAwsAuthSigv4HttpAuthOption$1(authParameters) {
  function createSmithyApiNoAuthHttpAuthOption$1 (line 28671) | function createSmithyApiNoAuthHttpAuthOption$1(authParameters) {
  function convertToBuffer (line 28728) | function convertToBuffer(data) {
  function isEmptyData (line 28739) | function isEmptyData(data) {
  function locateWindow (line 28785) | function locateWindow() {
  function Sha2562 (line 28796) | function Sha2562(secret) {
  function __awaiter (line 28843) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 28870) | function __generator(thisArg, body) {
  function RawSha2562 (line 29025) | function RawSha2562() {
  function Sha2562 (line 29121) | function Sha2562(secret) {
  function bufferFromSecret (line 29176) | function bufferFromSecret(secret) {
  function supportsWebCrypto (line 29197) | function supportsWebCrypto(window2) {
  function supportsSecureRandom (line 29204) | function supportsSecureRandom(window2) {
  function supportsSubtleCrypto (line 29211) | function supportsSubtleCrypto(subtle) {
  function Sha2562 (line 29219) | function Sha2562(secret) {
  method os (line 29264) | os(ua) {
  method browser (line 29277) | browser(ua) {
  method constructor (line 29335) | constructor(options2) {
  method constructor (line 29343) | constructor(opts) {
  method constructor (line 29355) | constructor(opts) {
  method constructor (line 29367) | constructor(opts) {
  method constructor (line 29379) | constructor(opts) {
  method constructor (line 29391) | constructor(opts) {
  method constructor (line 29403) | constructor(opts) {
  method constructor (line 29415) | constructor(opts) {
  method constructor (line 29427) | constructor(opts) {
  method constructor (line 29439) | constructor(opts) {
  class DeveloperUserAlreadyRegisteredException (line 29448) | class DeveloperUserAlreadyRegisteredException extends CognitoIdentitySer...
    method constructor (line 29451) | constructor(opts) {
  class ConcurrentModificationException (line 29460) | class ConcurrentModificationException extends CognitoIdentityServiceExce...
    method constructor (line 29463) | constructor(opts) {
  method setRegion (line 29750) | setRegion(region) {
  method region (line 29753) | region() {
  method setHttpAuthScheme (line 29768) | setHttpAuthScheme(httpAuthScheme) {
  method httpAuthSchemes (line 29776) | httpAuthSchemes() {
  method setHttpAuthSchemeProvider (line 29779) | setHttpAuthSchemeProvider(httpAuthSchemeProvider) {
  method httpAuthSchemeProvider (line 29782) | httpAuthSchemeProvider() {
  method setCredentials (line 29785) | setCredentials(credentials) {
  method credentials (line 29788) | credentials() {
  method constructor (line 29807) | constructor(...[configuration]) {
  method destroy (line 29835) | destroy() {
  class IframeComponentLoader (line 29847) | class IframeComponentLoader {
    method constructor (line 29854) | constructor({
    method load (line 29872) | load(configParam) {
    method validateConfig (line 29899) | static validateConfig(config) {
    method initContainer (line 29927) | initContainer() {
    method generateConfigObj (line 29950) | generateConfigObj() {
    method updateCredentials (line 29963) | updateCredentials() {
    method validateIdToken (line 29993) | validateIdToken() {
    method initCognitoCredentials (line 30023) | initCognitoCredentials() {
    method setupIframeMessageListener (line 30073) | setupIframeMessageListener() {
    method onMessageFromIframe (line 30088) | onMessageFromIframe(evt) {
    method initIframe (line 30122) | initIframe() {
    method waitForIframe (line 30155) | waitForIframe() {
    method waitForChatBotReady (line 30196) | waitForChatBotReady() {
    method getCredentials (line 30257) | async getCredentials(poolId, region, logins) {
    method initIframeMessageHandlers (line 30300) | initIframeMessageHandlers() {
    method sendMessageToIframe (line 30393) | sendMessageToIframe(message) {
    method toggleShowUiClass (line 30422) | toggleShowUiClass() {
    method toggleMinimizeUiClass (line 30433) | toggleMinimizeUiClass() {
    method showIframe (line 30449) | showIframe() {
    method onMessageToIframe (line 30466) | onMessageToIframe(evt) {
    method initParentToIframeApi (line 30475) | initParentToIframeApi() {
  class FullPageComponentLoader (line 30498) | class FullPageComponentLoader {
    method constructor (line 30504) | constructor({ elementId = "lex-web-ui", config = {} }) {
    method generateConfigObj (line 30508) | generateConfigObj() {
    method requestTokens (line 30516) | async requestTokens() {
    method getCredentials (line 30530) | async getCredentials(poolId, region, logins) {
    method propagateTokensUpdateCredentials (line 30573) | propagateTokensUpdateCredentials() {
    method refreshAuthTokens (line 30618) | async refreshAuthTokens() {
    method validateIdToken (line 30632) | validateIdToken() {
    method initCognitoCredentials (line 30662) | initCognitoCredentials() {
    method initBotMessageHandlers (line 30714) | initBotMessageHandlers() {
    method initPageToComponentApi (line 30732) | initPageToComponentApi() {
    method setupBotMessageListener (line 30742) | setupBotMessageListener() {
    method isRunningEmbeded (line 30753) | isRunningEmbeded() {
    method load (line 30762) | load(configParam) {
    method sendMessageToComponent (line 30782) | static sendMessageToComponent(message) {
    method createComponent (line 30798) | static createComponent(config = {}) {
    method mountComponent (line 30812) | static mountComponent(elId = "lex-web-ui", lexWebUi) {
  function setCustomEventShim (line 30833) | function setCustomEventShim() {
  class Loader (line 30846) | class Loader {
    method constructor (line 30851) | constructor(options2) {
    method load (line 30858) | load(configParam = {}) {
  class FullPageLoader (line 30865) | class FullPageLoader extends Loader {
    method constructor (line 30870) | constructor(options2 = {}) {
    method load (line 30883) | load(configParam = {}) {
  class IframeLoader (line 30887) | class IframeLoader extends Loader {
    method constructor (line 30892) | constructor(options2 = {}) {
    method load (line 30906) | load(configParam = {}) {
    method mergeSrcPath (line 30916) | mergeSrcPath(configParam) {
  function createAwsAuthSigv4HttpAuthOption (line 30936) | function createAwsAuthSigv4HttpAuthOption(authParameters) {
  function createSmithyApiNoAuthHttpAuthOption (line 30951) | function createSmithyApiNoAuthHttpAuthOption(authParameters) {
  class CognitoIdentityServiceException (line 31149) | class CognitoIdentityServiceException extends ServiceException {
    method constructor (line 31150) | constructor(options2) {
  class ExternalServiceException (line 31155) | class ExternalServiceException extends CognitoIdentityServiceException {
    method constructor (line 31158) | constructor(opts) {
  class InternalErrorException (line 31167) | class InternalErrorException extends CognitoIdentityServiceException {
    method constructor (line 31170) | constructor(opts) {
  class InvalidIdentityPoolConfigurationException (line 31179) | class InvalidIdentityPoolConfigurationException extends CognitoIdentityS...
    method constructor (line 31182) | constructor(opts) {
  class InvalidParameterException (line 31191) | class InvalidParameterException extends CognitoIdentityServiceException {
    method constructor (line 31194) | constructor(opts) {
  class NotAuthorizedException (line 31203) | class NotAuthorizedException extends CognitoIdentityServiceException {
    method constructor (line 31206) | constructor(opts) {
  class ResourceConflictException (line 31215) | class ResourceConflictException extends CognitoIdentityServiceException {
    method constructor (line 31218) | constructor(opts) {
  class ResourceNotFoundException (line 31227) | class ResourceNotFoundException extends CognitoIdentityServiceException {
    method constructor (line 31230) | constructor(opts) {
  class TooManyRequestsException (line 31239) | class TooManyRequestsException extends CognitoIdentityServiceException {
    method constructor (line 31242) | constructor(opts) {
  class LimitExceededException (line 31251) | class LimitExceededException extends CognitoIdentityServiceException {
    method constructor (line 31254) | constructor(opts) {
  method setHttpAuthScheme (line 31429) | setHttpAuthScheme(httpAuthScheme) {
  method httpAuthSchemes (line 31437) | httpAuthSchemes() {
  method setHttpAuthSchemeProvider (line 31440) | setHttpAuthSchemeProvider(httpAuthSchemeProvider) {
  method httpAuthSchemeProvider (line 31443) | httpAuthSchemeProvider() {
  method setCredentials (line 31446) | setCredentials(credentials) {
  method credentials (line 31449) | credentials() {
  class CognitoIdentityClient (line 31466) | class CognitoIdentityClient extends Client {
    method constructor (line 31468) | constructor(...[configuration]) {
    method destroy (line 31496) | destroy() {
  class GetCredentialsForIdentityCommand (line 31500) | class GetCredentialsForIdentityCommand extends Command.classBuilder().ep...
  class GetIdCommand (line 31504) | class GetIdCommand extends Command.classBuilder().ep(commonParams).m(fun...
  class EventStreamSerde (line 31514) | class EventStreamSerde {
    method constructor (line 31520) | constructor({ marshaller, serializer, deserializer, serdeContext, defa...
    method serializeEventStream (line 31527) | async serializeEventStream({ eventStream, requestSchema, initialReques...
    method deserializeEventStream (line 31578) | async deserializeEventStream({ response, responseSchema, initialRespon...
    method writeEventBody (line 31675) | writeEventBody(unionMember, unionSchema, event) {

FILE: dist/lex-web-ui.js
  function Signer (line 53) | function Signer() {
  function RawSha256 (line 1061) | function RawSha256() {
  function Sha256 (line 1318) | function Sha256(secret) {
  function bufferFromSecret (line 1378) | function bufferFromSecret(secret) {
  function convertToBuffer (line 1411) | function convertToBuffer(data) {
  function isEmptyData (line 1464) | function isEmptyData(data) {
  function numToUint8 (line 1487) | function numToUint8(num) {
  function uint32ArrayFrom (line 1513) | function uint32ArrayFrom(a_lookUpTable) {
  function __extends (line 1585) | function __extends(d, b) {
  function __rest (line 1602) | function __rest(s, e) {
  function __decorate (line 1614) | function __decorate(decorators, target, key, desc) {
  function __param (line 1621) | function __param(paramIndex, decorator) {
  function __metadata (line 1625) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 1629) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 1639) | function __generator(thisArg, body) {
  function __createBinding (line 1667) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 1672) | function __exportStar(m, exports) {
  function __values (line 1676) | function __values(o) {
  function __read (line 1688) | function __read(o, n) {
  function __spread (line 1705) | function __spread() {
  function __spreadArrays (line 1711) | function __spreadArrays() {
  function __await (line 1719) | function __await(v) {
  function __asyncGenerator (line 1723) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 1735) | function __asyncDelegator(o) {
  function __asyncValues (line 1741) | function __asyncValues(o) {
  function __makeTemplateObject (line 1749) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 1754) | function __importStar(mod) {
  function __importDefault (line 1762) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 1766) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 1773) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function AwsCrc32 (line 1800) | function AwsCrc32() {
  function crc32 (line 1837) | function crc32(data) {
  function Crc32 (line 1842) | function Crc32() {
  function __extends (line 1999) | function __extends(d, b) {
  function __rest (line 2016) | function __rest(s, e) {
  function __decorate (line 2028) | function __decorate(decorators, target, key, desc) {
  function __param (line 2035) | function __param(paramIndex, decorator) {
  function __metadata (line 2039) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 2043) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 2053) | function __generator(thisArg, body) {
  function __createBinding (line 2081) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 2086) | function __exportStar(m, exports) {
  function __values (line 2090) | function __values(o) {
  function __read (line 2102) | function __read(o, n) {
  function __spread (line 2119) | function __spread() {
  function __spreadArrays (line 2125) | function __spreadArrays() {
  function __await (line 2133) | function __await(v) {
  function __asyncGenerator (line 2137) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 2149) | function __asyncDelegator(o) {
  function __asyncValues (line 2155) | function __asyncValues(o) {
  function __makeTemplateObject (line 2163) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 2168) | function __importStar(mod) {
  function __importDefault (line 2176) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 2180) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 2187) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function AwsCrc32c (line 2214) | function AwsCrc32c() {
  function crc32c (line 2253) | function crc32c(data) {
  function Crc32c (line 2258) | function Crc32c() {
  function __extends (line 2383) | function __extends(d, b) {
  function __rest (line 2400) | function __rest(s, e) {
  function __decorate (line 2412) | function __decorate(decorators, target, key, desc) {
  function __param (line 2419) | function __param(paramIndex, decorator) {
  function __metadata (line 2423) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 2427) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 2437) | function __generator(thisArg, body) {
  function __createBinding (line 2465) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 2470) | function __exportStar(m, exports) {
  function __values (line 2474) | function __values(o) {
  function __read (line 2486) | function __read(o, n) {
  function __spread (line 2503) | function __spread() {
  function __spreadArrays (line 2509) | function __spreadArrays() {
  function __await (line 2517) | function __await(v) {
  function __asyncGenerator (line 2521) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 2533) | function __asyncDelegator(o) {
  function __asyncValues (line 2539) | function __asyncValues(o) {
  function __makeTemplateObject (line 2547) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 2552) | function __importStar(mod) {
  function __importDefault (line 2560) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 2564) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 2571) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function quacksLikeAnMsWindow (line 2654) | function quacksLikeAnMsWindow(window) {
  function isMsWindow (line 2661) | function isMsWindow(window) {
  function __extends (line 2751) | function __extends(d, b) {
  function __rest (line 2768) | function __rest(s, e) {
  function __decorate (line 2780) | function __decorate(decorators, target, key, desc) {
  function __param (line 2787) | function __param(paramIndex, decorator) {
  function __metadata (line 2791) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 2795) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 2805) | function __generator(thisArg, body) {
  function __createBinding (line 2833) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 2838) | function __exportStar(m, exports) {
  function __values (line 2842) | function __values(o) {
  function __read (line 2854) | function __read(o, n) {
  function __spread (line 2871) | function __spread() {
  function __spreadArrays (line 2877) | function __spreadArrays() {
  function __await (line 2885) | function __await(v) {
  function __asyncGenerator (line 2889) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 2901) | function __asyncDelegator(o) {
  function __asyncValues (line 2907) | function __asyncValues(o) {
  function __makeTemplateObject (line 2915) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 2920) | function __importStar(mod) {
  function __importDefault (line 2928) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 2932) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 2939) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function Sha1 (line 3008) | function Sha1(secret) {
  function Sha1 (line 3050) | function Sha1(secret) {
  function getKeyPromise (line 3098) | function getKeyPromise(secret) {
  function toArrayBufferView (line 3112) | function toArrayBufferView(data) {
  function isEmptyData (line 3155) | function isEmptyData(data) {
  function Sha1 (line 3181) | function Sha1(secret) {
  function convertToBuffer (line 3224) | function convertToBuffer(data) {
  function __extends (line 3293) | function __extends(d, b) {
  function __rest (line 3310) | function __rest(s, e) {
  function __decorate (line 3322) | function __decorate(decorators, target, key, desc) {
  function __param (line 3329) | function __param(paramIndex, decorator) {
  function __metadata (line 3333) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 3337) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 3347) | function __generator(thisArg, body) {
  function __createBinding (line 3375) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 3380) | function __exportStar(m, exports) {
  function __values (line 3384) | function __values(o) {
  function __read (line 3396) | function __read(o, n) {
  function __spread (line 3413) | function __spread() {
  function __spreadArrays (line 3419) | function __spreadArrays() {
  function __await (line 3427) | function __await(v) {
  function __asyncGenerator (line 3431) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 3443) | function __asyncDelegator(o) {
  function __asyncValues (line 3449) | function __asyncValues(o) {
  function __makeTemplateObject (line 3457) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 3462) | function __importStar(mod) {
  function __importDefault (line 3470) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 3474) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 3481) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function Sha256 (line 3563) | function Sha256(secret) {
  function Sha256 (line 3605) | function Sha256(secret) {
  function getKeyPromise (line 3653) | function getKeyPromise(secret) {
  function toArrayBufferView (line 3667) | function toArrayBufferView(data) {
  function isEmptyData (line 3710) | function isEmptyData(data) {
  function Sha256 (line 3735) | function Sha256(secret) {
  function __extends (line 3843) | function __extends(d, b) {
  function __rest (line 3860) | function __rest(s, e) {
  function __decorate (line 3872) | function __decorate(decorators, target, key, desc) {
  function __param (line 3879) | function __param(paramIndex, decorator) {
  function __metadata (line 3883) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 3887) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 3897) | function __generator(thisArg, body) {
  function __createBinding (line 3925) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 3930) | function __exportStar(m, exports) {
  function __values (line 3934) | function __values(o) {
  function __read (line 3946) | function __read(o, n) {
  function __spread (line 3963) | function __spread() {
  function __spreadArrays (line 3969) | function __spreadArrays() {
  function __await (line 3977) | function __await(v) {
  function __asyncGenerator (line 3981) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 3993) | function __asyncDelegator(o) {
  function __asyncValues (line 3999) | function __asyncValues(o) {
  function __makeTemplateObject (line 4007) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 4012) | function __importStar(mod) {
  function __importDefault (line 4020) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 4024) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 4031) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function RawSha256 (line 4057) | function RawSha256() {
  function Sha256 (line 4314) | function Sha256(secret) {
  function bufferFromSecret (line 4379) | function bufferFromSecret(secret) {
  function __extends (line 4450) | function __extends(d, b) {
  function __rest (line 4467) | function __rest(s, e) {
  function __decorate (line 4479) | function __decorate(decorators, target, key, desc) {
  function __param (line 4486) | function __param(paramIndex, decorator) {
  function __metadata (line 4490) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 4494) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 4504) | function __generator(thisArg, body) {
  function __createBinding (line 4532) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 4537) | function __exportStar(m, exports) {
  function __values (line 4541) | function __values(o) {
  function __read (line 4553) | function __read(o, n) {
  function __spread (line 4570) | function __spread() {
  function __spreadArrays (line 4576) | function __spreadArrays() {
  function __await (line 4584) | function __await(v) {
  function __asyncGenerator (line 4588) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 4600) | function __asyncDelegator(o) {
  function __asyncValues (line 4606) | function __asyncValues(o) {
  function __makeTemplateObject (line 4614) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 4619) | function __importStar(mod) {
  function __importDefault (line 4627) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 4631) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 4638) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function supportsWebCrypto (line 4685) | function supportsWebCrypto(window) {
  function supportsSecureRandom (line 4694) | function supportsSecureRandom(window) {
  function supportsSubtleCrypto (line 4702) | function supportsSubtleCrypto(subtle) {
  function supportsZeroByteGCM (line 4707) | function supportsZeroByteGCM(subtle) {
  function __extends (line 4799) | function __extends(d, b) {
  function __rest (line 4816) | function __rest(s, e) {
  function __decorate (line 4828) | function __decorate(decorators, target, key, desc) {
  function __param (line 4835) | function __param(paramIndex, decorator) {
  function __metadata (line 4839) | function __metadata(metadataKey, metadataValue) {
  function __awaiter (line 4843) | function __awaiter(thisArg, _arguments, P, generator) {
  function __generator (line 4853) | function __generator(thisArg, body) {
  function __createBinding (line 4881) | function __createBinding(o, m, k, k2) {
  function __exportStar (line 4886) | function __exportStar(m, exports) {
  function __values (line 4890) | function __values(o) {
  function __read (line 4902) | function __read(o, n) {
  function __spread (line 4919) | function __spread() {
  function __spreadArrays (line 4925) | function __spreadArrays() {
  function __await (line 4933) | function __await(v) {
  function __asyncGenerator (line 4937) | function __asyncGenerator(thisArg, _arguments, generator) {
  function __asyncDelegator (line 4949) | function __asyncDelegator(o) {
  function __asyncValues (line 4955) | function __asyncValues(o) {
  function __makeTemplateObject (line 4963) | function __makeTemplateObject(cooked, raw) {
  function __importStar (line 4968) | function __importStar(mod) {
  function __importDefault (line 4976) | function __importDefault(mod) {
  function __classPrivateFieldGet (line 4980) | function __classPrivateFieldGet(receiver, privateMap) {
  function __classPrivateFieldSet (line 4987) | function __classPrivateFieldSet(receiver, privateMap, value) {
  function convertToBuffer (line 5016) | function convertToBuffer(data) {
  function isEmptyData (line 5069) | function isEmptyData(data) {
  function numToUint8 (line 5092) | function numToUint8(num) {
  function uint32ArrayFrom (line 5118) | function uint32ArrayFrom(a_lookUpTable) {
  class CognitoIdentityClient (line 5174) | class CognitoIdentityClient extends _smithy_smithy_client__WEBPACK_IMPOR...
    method constructor (line 5175) | constructor(...[configuration]) {
    method destroy (line 5194) | destroy() {
  class GetCredentialsForIdentityCommand (line 5225) | class GetCredentialsForIdentityCommand extends _smithy_smithy_client__WE...
    method getEndpointParameterInstructions (line 5226) | static getEndpointParameterInstructions() {
    method constructor (line 5234) | constructor(input) {
    method resolveMiddleware (line 5238) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 5259) | serialize(input, context) {
    method deserialize (line 5262) | deserialize(output, context) {
  class GetIdCommand (line 5293) | class GetIdCommand extends _smithy_smithy_client__WEBPACK_IMPORTED_MODUL...
    method getEndpointParameterInstructions (line 5294) | static getEndpointParameterInstructions() {
    method constructor (line 5302) | constructor(input) {
    method resolveMiddleware (line 5306) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 5327) | serialize(input, context) {
    method deserialize (line 5330) | deserialize(output, context) {
  class CognitoIdentityServiceException (line 5420) | class CognitoIdentityServiceException extends _smithy_smithy_client__WEB...
    method constructor (line 5421) | constructor(options) {
  class InternalErrorException (line 5461) | class InternalErrorException extends _CognitoIdentityServiceException__W...
    method constructor (line 5462) | constructor(opts) {
  class InvalidParameterException (line 5473) | class InvalidParameterException extends _CognitoIdentityServiceException...
    method constructor (line 5474) | constructor(opts) {
  class LimitExceededException (line 5485) | class LimitExceededException extends _CognitoIdentityServiceException__W...
    method constructor (line 5486) | constructor(opts) {
  class NotAuthorizedException (line 5497) | class NotAuthorizedException extends _CognitoIdentityServiceException__W...
    method constructor (line 5498) | constructor(opts) {
  class ResourceConflictException (line 5509) | class ResourceConflictException extends _CognitoIdentityServiceException...
    method constructor (line 5510) | constructor(opts) {
  class TooManyRequestsException (line 5521) | class TooManyRequestsException extends _CognitoIdentityServiceException_...
    method constructor (line 5522) | constructor(opts) {
  class ResourceNotFoundException (line 5537) | class ResourceNotFoundException extends _CognitoIdentityServiceException...
    method constructor (line 5538) | constructor(opts) {
    method constructor (line 7768) | constructor(opts) {
  class ExternalServiceException (line 5549) | class ExternalServiceException extends _CognitoIdentityServiceException_...
    method constructor (line 5550) | constructor(opts) {
  class InvalidIdentityPoolConfigurationException (line 5561) | class InvalidIdentityPoolConfigurationException extends _CognitoIdentity...
    method constructor (line 5562) | constructor(opts) {
  class DeveloperUserAlreadyRegisteredException (line 5583) | class DeveloperUserAlreadyRegisteredException extends _CognitoIdentitySe...
    method constructor (line 5584) | constructor(opts) {
  class ConcurrentModificationException (line 5595) | class ConcurrentModificationException extends _CognitoIdentityServiceExc...
    method constructor (line 5596) | constructor(opts) {
  function sharedHeaders (line 7035) | function sharedHeaders(operation) {
  class LexRuntimeV2Client (line 7276) | class LexRuntimeV2Client extends _smithy_smithy_client__WEBPACK_IMPORTED...
    method constructor (line 7277) | constructor(...[configuration]) {
    method destroy (line 7299) | destroy() {
  class DeleteSessionCommand (line 7330) | class DeleteSessionCommand extends _smithy_smithy_client__WEBPACK_IMPORT...
    method getEndpointParameterInstructions (line 7331) | static getEndpointParameterInstructions() {
    method constructor (line 7339) | constructor(input) {
    method resolveMiddleware (line 7343) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 7364) | serialize(input, context) {
    method deserialize (line 7367) | deserialize(output, context) {
  class PutSessionCommand (line 7400) | class PutSessionCommand extends _smithy_smithy_client__WEBPACK_IMPORTED_...
    method getEndpointParameterInstructions (line 7401) | static getEndpointParameterInstructions() {
    method constructor (line 7409) | constructor(input) {
    method resolveMiddleware (line 7413) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 7434) | serialize(input, context) {
    method deserialize (line 7437) | deserialize(output, context) {
  class RecognizeTextCommand (line 7470) | class RecognizeTextCommand extends _smithy_smithy_client__WEBPACK_IMPORT...
    method getEndpointParameterInstructions (line 7471) | static getEndpointParameterInstructions() {
    method constructor (line 7479) | constructor(input) {
    method resolveMiddleware (line 7483) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 7504) | serialize(input, context) {
    method deserialize (line 7507) | deserialize(output, context) {
  class RecognizeUtteranceCommand (line 7540) | class RecognizeUtteranceCommand extends _smithy_smithy_client__WEBPACK_I...
    method getEndpointParameterInstructions (line 7541) | static getEndpointParameterInstructions() {
    method constructor (line 7549) | constructor(input) {
    method resolveMiddleware (line 7553) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 7574) | serialize(input, context) {
    method deserialize (line 7577) | deserialize(output, context) {
  class LexRuntimeV2ServiceException (line 7667) | class LexRuntimeV2ServiceException extends _smithy_smithy_client__WEBPAC...
    method constructor (line 7668) | constructor(options) {
  class AccessDeniedException (line 7731) | class AccessDeniedException extends _LexRuntimeV2ServiceException__WEBPA...
    method constructor (line 7732) | constructor(opts) {
  class ConflictException (line 7743) | class ConflictException extends _LexRuntimeV2ServiceException__WEBPACK_I...
    method constructor (line 7744) | constructor(opts) {
  class InternalServerException (line 7755) | class InternalServerException extends _LexRuntimeV2ServiceException__WEB...
    method constructor (line 7756) | constructor(opts) {
  class ResourceNotFoundException (line 7767) | class ResourceNotFoundException extends _LexRuntimeV2ServiceException__W...
    method constructor (line 5538) | constructor(opts) {
    method constructor (line 7768) | constructor(opts) {
  class ThrottlingException (line 7779) | class ThrottlingException extends _LexRuntimeV2ServiceException__WEBPACK...
    method constructor (line 7780) | constructor(opts) {
  class ValidationException (line 7791) | class ValidationException extends _LexRuntimeV2ServiceException__WEBPACK...
    method constructor (line 7792) | constructor(opts) {
  class BadGatewayException (line 7850) | class BadGatewayException extends _LexRuntimeV2ServiceException__WEBPACK...
    method constructor (line 7851) | constructor(opts) {
  class DependencyFailedException (line 7862) | class DependencyFailedException extends _LexRuntimeV2ServiceException__W...
    method constructor (line 7863) | constructor(opts) {
  class PollyClient (line 9398) | class PollyClient extends _smithy_smithy_client__WEBPACK_IMPORTED_MODULE...
    method constructor (line 9399) | constructor(...[configuration]) {
    method destroy (line 9419) | destroy() {
  class S3Client (line 9692) | class S3Client extends _smithy_smithy_client__WEBPACK_IMPORTED_MODULE_12...
    method constructor (line 9693) | constructor(...[configuration]) {
    method destroy (line 9719) | destroy() {
  class CreateSessionCommand (line 9752) | class CreateSessionCommand extends _smithy_smithy_client__WEBPACK_IMPORT...
    method getEndpointParameterInstructions (line 9753) | static getEndpointParameterInstructions() {
    method constructor (line 9768) | constructor(input) {
    method resolveMiddleware (line 9772) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 9793) | serialize(input, context) {
    method deserialize (line 9796) | deserialize(output, context) {
  class PutObjectCommand (line 9835) | class PutObjectCommand extends _smithy_smithy_client__WEBPACK_IMPORTED_M...
    method getEndpointParameterInstructions (line 9836) | static getEndpointParameterInstructions() {
    method constructor (line 9852) | constructor(input) {
    method resolveMiddleware (line 9856) | resolveMiddleware(clientStack, configuration, options) {
    method serialize (line 9884) | serialize(input, context) {
    method deserialize (line 9887) | deserialize(output, context) {
  class S3ServiceException (line 9981) | class S3ServiceException extends _smithy_smithy_client__WEBPACK_IMPORTED...
    method constructor (line 9982) | constructor(options) {
  class NoSuchUpload (line 10107) | class NoSuchUpload extends _S3ServiceException__WEBPACK_IMPORTED_MODULE_...
    method constructor (line 10108) | constructor(opts) {
  class ObjectNotInActiveTierError (line 10187) | class ObjectNotInActiveTierError extends _S3ServiceException__WEBPACK_IM...
    method constructor (line 10188) | constructor(opts) {
  class BucketAlreadyExists (line 10199) | class BucketAlreadyExists extends _S3ServiceException__WEBPACK_IMPORTED_...
    method constructor (line 10200) | constructor(opts) {
  class BucketAlreadyOwnedByYou (line 10211) | class BucketAlreadyOwnedByYou extends _S3ServiceException__WEBPACK_IMPOR...
    method constructor (line 10212) | constructor(opts) {
  class NoSuchBucket (line 10277) | class NoSuchBucket extends _S3ServiceException__WEBPACK_IMPORTED_MODULE_...
    method constructor (line 10278) | constructor(opts) {
  class InvalidObjectState (line 10495) | class InvalidObjectState extends _S3ServiceException__WEBPACK_IMPORTED_M...
    method constructor (line 10496) | constructor(opts) {
  class NoSuchKey (line 10509) | class NoSuchKey extends _S3ServiceException__WEBPACK_IMPORTED_MODULE_1__...
    method constructor (line 10510) | constructor(opts) {
  class NotFound (line 10535) | class NotFound extends _S3ServiceException__WEBPACK_IMPORTED_MODULE_1__....
    method constructor (line 10536) | constructor(opts) {
  class ObjectAlreadyInActiveTierError (line 10753) | class ObjectAlreadyInActiveTierError extends _S3ServiceException__WEBPAC...
    method constructor (line 10754) | constructor(opts) {
  class InMemoryStorage (line 20998) | class InMemoryStorage {
    method constructor (line 20999) | constructor(store = {}) {
    method getItem (line 21002) | getItem(key) {
    method removeItem (line 21008) | removeItem(key) {
    method setItem (line 21011) | setItem(key, value) {
  class IndexedDbStorage (line 21031) | class IndexedDbStorage {
    method constructor (line 21032) | constructor(dbName = "aws:cognito-identity-ids") {
    method getItem (line 21035) | getItem(key) {
    method removeItem (line 21044) | removeItem(key) {
    method setItem (line 21053) | setItem(id, value) {
    method getDb (line 21062) | getDb() {
    method withObjectStore (line 21083) | withObjectStore(mode, action) {
  function fromCognitoIdentity (line 21118) | function fromCognitoIdentity(parameters) {
  function throwOnMissingAccessKeyId (line 21134) | function throwOnMissingAccessKeyId() {
  function throwOnMissingCredentials (line 21137) | function throwOnMissingCredentials() {
  function throwOnMissingSecretKey (line 21140) | function throwOnMissingSecretKey() {
  function fromCognitoIdentityPool (line 21168) | function fromCognitoIdentityPool({ accountId, cache = (0,_localStorage__...
  function throwOnMissingId (line 21198) | function throwOnMissingId() {
  function localStorage (line 21221) | function localStorage() {
  function resolveLogins (line 21245) | function resolveLogins(logins) {
  function resolveEventStreamConfig (line 21298) | function resolveEventStreamConfig(input) {
  function addExpectContinueMiddleware (line 21452) | function addExpectContinueMiddleware(options) {
  function createReadStreamOnBuffer (line 21940) | function createReadStreamOnBuffer(buffer) {
  function resolveHostHeaderConfig (line 22056) | function resolveHostHeaderConfig(input) {
  function checkContentLengthHeader (line 22241) | function checkContentLengthHeader() {
  function regionRedirectMiddleware (line 22382) | function regionRedirectMiddleware(clientConfig) {
  class S3ExpressIdentityCache (line 22433) | class S3ExpressIdentityCache {
    method constructor (line 22434) | constructor(data = {}) {
    method get (line 22438) | get(key) {
    method set (line 22445) | set(key, entry) {
    method delete (line 22449) | delete(key) {
    method purgeExpired (line 22452) | async purgeExpired() {
  class S3ExpressIdentityCacheEntry (line 22486) | class S3ExpressIdentityCacheEntry {
    method constructor (line 22487) | constructor(_identity, isRefreshing = false, accessed = Date.now()) {
    method identity (line 22492) | get identity() {
  class S3ExpressIdentityProviderImpl (line 22517) | class S3ExpressIdentityProviderImpl {
    method constructor (line 22518) | constructor(createSessionFn, cache = new _S3ExpressIdentityCache__WEBP...
    method getS3ExpressIdentity (line 22522) | async getS3ExpressIdentity(awsIdentity, identityProperties) {
    method getIdentity (line 22544) | async getIdentity(key) {
  class SignatureV4S3Express (line 22581) | class SignatureV4S3Express extends _smithy_signature_v4__WEBPACK_IMPORTE...
    method signWithCredentials (line 22582) | async signWithCredentials(requestToSign, credentials, options) {
    method presignWithCredentials (line 22589) | async presignWithCredentials(requestToSign, credentials, options) {
  function getCredentialsWithoutSessionToken (line 22600) | function getCredentialsWithoutSessionToken(credentials) {
  function setSingleOverride (line 22608) | function setSingleOverride(privateAccess, credentialsWithoutSessionToken) {
  function validateBucketNameMiddleware (line 22858) | function validateBucketNameMiddleware() {
  function ssecMiddleware (line 23177) | function ssecMiddleware(options) {
  function resolveUserAgentConfig (line 23240) | function resolveUserAgentConfig(input) {
  method setRegion (line 23416) | setRegion(region) {
  method region (line 23419) | region() {
  class SignatureV4MultiRegion (line 23606) | class SignatureV4MultiRegion {
    method constructor (line 23607) | constructor(options) {
    method sign (line 23611) | async sign(requestToSign, options = {}) {
    method signWithCredentials (line 23619) | async signWithCredentials(requestToSign, credentials, options = {}) {
    method presign (line 23627) | async presign(originalRequest, options = {}) {
    method presignWithCredentials (line 23635) | async presignWithCredentials(originalRequest, credentials, options = {...
    method getSigv4aSigner (line 23641) | getSigv4aSigner() {
  function fromHex (line 24117) | function fromHex(encoded) {
  function toHex (line 24138) | function toHex(bytes) {
  function locateWindow (line 24161) | function locateWindow() {
  function fromUtf8 (line 24300) | function fromUtf8(input) {
  function toUtf8 (line 24303) | function toUtf8(input) {
  class XmlNode (line 24325) | class XmlNode {
    method of (line 24326) | static of(name, childText, withName) {
    method constructor (line 24336) | constructor(name, children = []) {
    method withName (line 24341) | withName(name) {
    method addAttribute (line 24345) | addAttribute(name, value) {
    method addChildNode (line 24349) | addChildNode(child) {
    method removeAttribute (line 24353) | removeAttribute(name) {
    method toString (line 24357) | toString() {
    method constructor (line 79432) | constructor(tagname) {
    method add (line 79437) | add(key,val){
    method addChild (line 79442) | addChild(node) {
  class XmlText (line 24387) | class XmlText {
    method constructor (line 24388) | constructor(value) {
    method toString (line 24391) | toString() {
  function escapeAttribute (line 24410) | function escapeAttribute(value) {
  function escapeElement (line 24428) | function escapeElement(value) {
  function _defineProperty (line 24477) | function _defineProperty(e, r, t) {
  function toPrimitive (line 24502) | function toPrimitive(t, r) {
  function toPropertyKey (line 24531) | function toPropertyKey(t) {
  function _typeof (line 24550) | function _typeof(o) {
  function blobReader (line 24574) | function blobReader(blob, onChunk, chunkSize = 1024 * 1024) {
  class EventStreamCodec (line 25138) | class EventStreamCodec {
    method constructor (line 25139) | constructor(toUtf8, fromUtf8) {
    method feed (line 25144) | feed(message) {
    method endOfStream (line 25147) | endOfStream() {
    method getMessage (line 25150) | getMessage() {
    method getAvailableMessages (line 25162) | getAvailableMessages() {
    method encode (line 25175) | encode({ headers: rawHeaders, body }) {
    method decode (line 25189) | decode(message) {
    method formatHeaders (line 25193) | formatHeaders(rawHeaders) {
  class HeaderMarshaller (line 25216) | class HeaderMarshaller {
    method constructor (line 25217) | constructor(toUtf8, fromUtf8) {
    method format (line 25221) | format(headers) {
    method formatHeaderValue (line 25235) | formatHeaderValue(header) {
    method parse (line 25286) | parse(headers) {
  class Int64 (line 25413) | class Int64 {
    method constructor (line 25414) | constructor(bytes) {
    method fromNumber (line 25420) | static fromNumber(number) {
    method valueOf (line 25433) | valueOf() {
    method toString (line 25441) | toString() {
    method constructor (line 29050) | constructor(bytes) {
    method fromNumber (line 29056) | static fromNumber(number) {
    method valueOf (line 29069) | valueOf() {
    method toString (line 29077) | toString() {
  function negate (line 25445) | function negate(bytes) {
  class MessageDecoderStream (line 25483) | class MessageDecoderStream {
    method constructor (line 25484) | constructor(options) {
    method asyncIterator (line 25490) | async *asyncIterator() {
  method [Symbol.asyncIterator] (line 25487) | [Symbol.asyncIterator]() {
  class MessageEncoderStream (line 25512) | class MessageEncoderStream {
    method constructor (line 25513) | constructor(options) {
    method asyncIterator (line 25519) | async *asyncIterator() {
  method [Symbol.asyncIterator] (line 25516) | [Symbol.asyncIterator]() {
  class SmithyMessageDecoderStream (line 25544) | class SmithyMessageDecoderStream {
    method constructor (line 25545) | constructor(options) {
    method asyncIterator (line 25551) | async *asyncIterator() {
  method [Symbol.asyncIterator] (line 25548) | [Symbol.asyncIterator]() {
  class SmithyMessageEncoderStream (line 25575) | class SmithyMessageEncoderStream {
    method constructor (line 25576) | constructor(options) {
    method asyncIterator (line 25582) | async *asyncIterator() {
  method [Symbol.asyncIterator] (line 25579) | [Symbol.asyncIterator]() {
  function splitMessage (line 25647) | function splitMessage({ byteLength, byteOffset, buffer }) {
  class EventStreamMarshaller (line 25691) | class EventStreamMarshaller {
    method constructor (line 25692) | constructor({ utf8Encoder, utf8Decoder }) {
    method deserialize (line 25698) | deserialize(body, deserializer) {
    method serialize (line 25702) | serialize(input, serializer) {
    method constructor (line 25852) | constructor({ utf8Encoder, utf8Decoder }) {
    method deserialize (line 25856) | deserialize(body, deserializer) {
    method serialize (line 25863) | serialize(inputStream, serializer) {
  method pull (line 25785) | async pull(controller) {
  class EventStreamMarshaller (line 25851) | class EventStreamMarshaller {
    method constructor (line 25692) | constructor({ utf8Encoder, utf8Decoder }) {
    method deserialize (line 25698) | deserialize(body, deserializer) {
    method serialize (line 25702) | serialize(input, serializer) {
    method constructor (line 25852) | constructor({ utf8Encoder, utf8Decoder }) {
    method deserialize (line 25856) | deserialize(body, deserializer) {
    method serialize (line 25863) | serialize(inputStream, serializer) {
  function getChunkedStream (line 25886) | function getChunkedStream(source) {
  function getUnmarshalledStream (line 25968) | function getUnmarshalledStream(source, options) {
  function getMessageUnmarshaller (line 25982) | function getMessageUnmarshaller(deserializer, toUtf8) {
  class FetchHttpHandler (line 26078) | class FetchHttpHandler {
    method create (line 26079) | static create(instanceOrOptions) {
    method constructor (line 26085) | constructor(options) {
    method destroy (line 26094) | destroy() {
    method handle (line 26096) | async handle(request, { abortSignal } = {}) {
    method updateHttpClientConfig (line 26172) | updateHttpClientConfig(key, value) {
    method httpHandlerConfigs (line 26179) | httpHandlerConfigs() {
  function requestTimeout (line 26219) | function requestTimeout(timeoutInMs = 0) {
  function collectBlob (line 26253) | async function collectBlob(blob) {
  function collectStream (line 26258) | async function collectStream(stream) {
  function readToBase64 (line 26274) | function readToBase64(blob) {
  class Md5 (line 26425) | class Md5 {
    method constructor (line 26426) | constructor() {
    method update (line 26429) | update(sourceData) {
    method digest (line 26449) | async digest() {
    method hashBuffer (line 26475) | hashBuffer() {
    method reset (line 26547) | reset() {
  function cmn (line 26555) | function cmn(q, a, b, x, s, t) {
  function ff (line 26559) | function ff(a, b, c, d, x, s, t) {
  function gg (line 26562) | function gg(a, b, c, d, x, s, t) {
  function hh (line 26565) | function hh(a, b, c, d, x, s, t) {
  function ii (line 26568) | function ii(a, b, c, d, x, s, t) {
  function isEmptyData (line 26571) | function isEmptyData(data) {
  function convertToBuffer (line 26577) | function convertToBuffer(data) {
  function contentLengthMiddleware (line 26606) | function contentLengthMiddleware(bodyLengthChecker) {
  method getEndpointParameterInstructions (line 26840) | getEndpointParameterInstructions() {
  class AdaptiveRetryStrategy (line 27076) | class AdaptiveRetryStrategy extends _StandardRetryStrategy__WEBPACK_IMPO...
    method constructor (line 27077) | constructor(maxAttemptsProvider, options) {
    method retry (line 27083) | async retry(next, args) {
    method constructor (line 33969) | constructor(maxAttemptsProvider, options) {
    method acquireInitialRetryToken (line 33976) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 33980) | async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
    method recordSuccess (line 33984) | recordSuccess(token) {
  class StandardRetryStrategy (line 27125) | class StandardRetryStrategy {
    method constructor (line 27126) | constructor(maxAttemptsProvider, options) {
    method shouldRetry (line 27133) | shouldRetry(error, attempts, maxAttempts) {
    method getMaxAttempts (line 27136) | async getMaxAttempts() {
    method retry (line 27146) | async retry(next, args, options) {
    method constructor (line 34164) | constructor(maxAttempts) {
    method acquireInitialRetryToken (line 34171) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 34177) | async refreshRetryTokenForRetry(token, errorInfo) {
    method recordSuccess (line 34196) | recordSuccess(token) {
    method getCapacity (line 34199) | getCapacity() {
    method getMaxAttempts (line 34202) | async getMaxAttempts() {
    method shouldRetry (line 34211) | shouldRetry(tokenToRenew, errorInfo, maxAttempts) {
    method getCapacityCost (line 34217) | getCapacityCost(errorType) {
    method isRetryableError (line 34220) | isRetryableError(errorType) {
  function rng (line 27684) | function rng() {
  function unsafeStringify (line 27725) | function unsafeStringify(arr, offset = 0) {
  function stringify (line 27731) | function stringify(arr, offset = 0) {
  function v4 (line 27767) | function v4(options, buf, offset) {
  function validate (line 27809) | function validate(uuid) {
  function getSerdePlugin (line 27911) | function getSerdePlugin(config, serializer, deserializer) {
  method identifyOnResolve (line 28213) | identifyOnResolve(toggle) {
  class CredentialsProviderError (line 28278) | class CredentialsProviderError extends _ProviderError__WEBPACK_IMPORTED_...
    method constructor (line 28279) | constructor(message, tryNextLink = true) {
  class ProviderError (line 28301) | class ProviderError extends Error {
    method constructor (line 28302) | constructor(message, tryNextLink = true) {
    method from (line 28308) | static from(error, tryNextLink = true) {
  class TokenProviderError (line 28329) | class TokenProviderError extends _ProviderError__WEBPACK_IMPORTED_MODULE...
    method constructor (line 28330) | constructor(message, tryNextLink = true) {
  class Field (line 28499) | class Field {
    method constructor (line 28500) | constructor({ name, kind = _smithy_types__WEBPACK_IMPORTED_MODULE_0__....
    method add (line 28505) | add(value) {
    method set (line 28508) | set(values) {
    method remove (line 28511) | remove(value) {
    method toString (line 28514) | toString() {
    method get (line 28517) | get() {
  class Fields (line 28536) | class Fields {
    method constructor (line 28537) | constructor({ fields = [], encoding = "utf-8" }) {
    method setField (line 28542) | setField(field) {
    method getField (line 28545) | getField(name) {
    method removeField (line 28548) | removeField(name) {
    method getByType (line 28551) | getByType(kind) {
  method setHttpHandler (line 28574) | setHttpHandler(handler) {
  method httpHandler (line 28577) | httpHandler() {
  method updateHttpClientConfig (line 28580) | updateHttpClientConfig(key, value) {
  method httpHandlerConfigs (line 28583) | httpHandlerConfigs() {
  class HttpRequest (line 28639) | class HttpRequest {
    method constructor (line 28640) | constructor(options) {
    method isInstance (line 28657) | static isInstance(request) {
    method clone (line 28668) | clone() {
  function cloneQuery (line 28678) | function cloneQuery(query) {
  class HttpResponse (line 28702) | class HttpResponse {
    method constructor (line 28703) | constructor(options) {
    method isInstance (line 28709) | static isInstance(response) {
  function isValidHostname (line 28768) | function isValidHostname(hostname) {
  function buildQueryString (line 28802) | function buildQueryString(query) {
  function parseQueryString (line 28837) | function parseQueryString(querystring) {
  class HeaderFormatter (line 28968) | class HeaderFormatter {
    method format (line 28969) | format(headers) {
    method formatHeaderValue (line 28983) | formatHeaderValue(header) {
  class Int64 (line 29049) | class Int64 {
    method constructor (line 25414) | constructor(bytes) {
    method fromNumber (line 25420) | static fromNumber(number) {
    method valueOf (line 25433) | valueOf() {
    method toString (line 25441) | toString() {
    method constructor (line 29050) | constructor(bytes) {
    method fromNumber (line 29056) | static fromNumber(number) {
    method valueOf (line 29069) | valueOf() {
    method toString (line 29077) | toString() {
  function negate (line 29081) | function negate(bytes) {
  class SignatureV4 (line 29134) | class SignatureV4 {
    method constructor (line 29135) | constructor({ applyChecksum, credentials, region, service, sha256, uri...
    method presign (line 29144) | async presign(originalRequest, options = {}) {
    method sign (line 29167) | async sign(toSign, options) {
    method signEvent (line 29181) | async signEvent({ headers, payload }, { signingDate = new Date(), prio...
    method signMessage (line 29199) | async signMessage(signableMessage, { signingDate = new Date(), signing...
    method signString (line 29213) | async signString(stringToSign, { signingDate = new Date(), signingRegi...
    method signRequest (line 29222) | async signRequest(requestToSign, { signingDate = new Date(), signableH...
    method createCanonicalRequest (line 29246) | createCanonicalRequest(request, canonicalHeaders, payloadHash) {
    method createStringToSign (line 29256) | async createStringToSign(longDate, credentialScope, canonicalRequest) {
    method getCanonicalPath (line 29265) | getCanonicalPath({ path }) {
    method getSignature (line 29286) | async getSignature(longDate, credentialScope, keyPromise, canonicalReq...
    method getSigningKey (line 29292) | getSigningKey(credentials, region, shortDate, service) {
    method validateResolvedCredentials (line 29295) | validateResolvedCredentials(credentials) {
  class NoOpLogger (line 29781) | class NoOpLogger {
    method trace (line 29782) | trace() { }
    method debug (line 29783) | debug() { }
    method info (line 29784) | info() { }
    method warn (line 29785) | warn() { }
    method error (line 29786) | error() { }
  class Client (line 29805) | class Client {
    method constructor (line 29806) | constructor(config) {
    method send (line 29810) | send(command, optionsOrCb, cb) {
    method destroy (line 29823) | destroy() {
  class Command (line 29874) | class Command {
    method constructor (line 29875) | constructor() {
    method classBuilder (line 29878) | static classBuilder() {
    method resolveMiddlewareWithContext (line 29881) | resolveMiddlewareWithContext(clientStack, configuration, options, { mi...
  class ClassBuilder (line 29902) | class ClassBuilder {
    method constructor (line 29903) | constructor() {
    method init (line 29916) | init(cb) {
    method ep (line 29919) | ep(endpointParameterInstructions) {
    method m (line 29923) | m(middlewareSupplier) {
    method s (line 29927) | s(service, operation, smithyContext = {}) {
    method c (line 29935) | c(additionalContext = {}) {
    method n (line 29939) | n(clientName, commandName) {
    method f (line 29944) | f(inputFilter = (_) => _, outputFilter = (_) => _) {
    method ser (line 29949) | ser(serializer) {
    method de (line 29953) | de(deserializer) {
    method build (line 29957) | build() {
  function dateToUtcString (line 30061) | function dateToUtcString(date) {
  class ServiceException (line 30362) | class ServiceException extends Error {
    method constructor (line 30363) | constructor(options) {
  function extendedEncodeURIComponent (line 30399) | function extendedEncodeURIComponent(str) {
  method addChecksumAlgorithm (line 30438) | addChecksumAlgorithm(algo) {
  method checksumAlgorithms (line 30441) | checksumAlgorithms() {
  method setRetryStrategy (line 30525) | setRetryStrategy(retryStrategy) {
  method retryStrategy (line 30528) | retryStrategy() {
  class LazyJsonString (line 30729) | class LazyJsonString extends StringWrapper {
    method deserializeJSON (line 30730) | deserializeJSON() {
    method toJSON (line 30733) | toJSON() {
    method fromObject (line 30736) | static fromObject(object) {
  function map (line 30763) | function map(arg0, arg1, arg2) {
  function splitEvery (line 31238) | function splitEvery(value, delimiter, numDelimiters) {
  method addChecksumAlgorithm (line 31694) | addChecksumAlgorithm(algo) {
  method checksumAlgorithms (line 31697) | checksumAlgorithms() {
  function toBase64 (line 32425) | function toBase64(_input) {
  function toDebugString (line 32737) | function toDebugString(input) {
  class EndpointError (line 33176) | class EndpointError extends Error {
    method constructor (line 33177) | constructor(message) {
  function fromHex (line 33865) | function fromHex(encoded) {
  function toHex (line 33881) | function toHex(bytes) {
  class AdaptiveRetryStrategy (line 33968) | class AdaptiveRetryStrategy {
    method constructor (line 27077) | constructor(maxAttemptsProvider, options) {
    method retry (line 27083) | async retry(next, args) {
    method constructor (line 33969) | constructor(maxAttemptsProvider, options) {
    method acquireInitialRetryToken (line 33976) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 33980) | async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
    method recordSuccess (line 33984) | recordSuccess(token) {
  class ConfiguredRetryStrategy (line 34008) | class ConfiguredRetryStrategy extends _StandardRetryStrategy__WEBPACK_IM...
    method constructor (line 34009) | constructor(maxAttempts, computeNextBackoffDelay = _constants__WEBPACK...
    method refreshRetryTokenForRetry (line 34018) | async refreshRetryTokenForRetry(tokenToRenew, errorInfo) {
  class DefaultRateLimiter (line 34041) | class DefaultRateLimiter {
    method constructor (line 34042) | constructor(options) {
    method getCurrentTimeInSeconds (line 34061) | getCurrentTimeInSeconds() {
    method getSendToken (line 34064) | async getSendToken() {
    method acquireTokenBucket (line 34067) | async acquireTokenBucket(amount) {
    method refillTokenBucket (line 34078) | refillTokenBucket() {
    method updateClientSendingRate (line 34088) | updateClientSendingRate(response) {
    method calculateTimeWindow (line 34106) | calculateTimeWindow() {
    method cubicThrottle (line 34109) | cubicThrottle(rateToUse) {
    method cubicSuccess (line 34112) | cubicSuccess(timestamp) {
    method enableTokenBucket (line 34115) | enableTokenBucket() {
    method updateTokenBucketRate (line 34118) | updateTokenBucketRate(newRate) {
    method updateMeasuredRate (line 34124) | updateMeasuredRate() {
    method getPrecise (line 34135) | getPrecise(num) {
  class StandardRetryStrategy (line 34163) | class StandardRetryStrategy {
    method constructor (line 27126) | constructor(maxAttemptsProvider, options) {
    method shouldRetry (line 27133) | shouldRetry(error, attempts, maxAttempts) {
    method getMaxAttempts (line 27136) | async getMaxAttempts() {
    method retry (line 27146) | async retry(next, args, options) {
    method constructor (line 34164) | constructor(maxAttempts) {
    method acquireInitialRetryToken (line 34171) | async acquireInitialRetryToken(retryTokenScope) {
    method refreshRetryTokenForRetry (line 34177) | async refreshRetryTokenForRetry(token, errorInfo) {
    method recordSuccess (line 34196) | recordSuccess(token) {
    method getCapacity (line 34199) | getCapacity() {
    method getMaxAttempts (line 34202) | async getMaxAttempts() {
    method shouldRetry (line 34211) | shouldRetry(tokenToRenew, errorInfo, maxAttempts) {
    method getCapacityCost (line 34217) | getCapacityCost(errorType) {
    method isRetryableError (line 34220) | isRetryableError(errorType) {
  class Uint8ArrayBlobAdapter (line 34411) | class Uint8ArrayBlobAdapter extends Uint8Array {
    method fromString (line 34412) | static fromString(source, encoding = "utf-8") {
    method mutate (line 34420) | static mutate(source) {
    method transformToString (line 34424) | transformToString(encoding = "utf-8") {
  function transformToString (line 34450) | function transformToString(payload, encoding = "utf-8") {
  function transformFromString (line 34456) | function transformFromString(str, encoding) {
  method pull (line 34487) | async pull(controller) {
  function registerRuntimeHelpers (line 35033) | function registerRuntimeHelpers(helpers) {
  function createRoot (line 35128) | function createRoot(children, source = "") {
  function createVNodeCall (line 35144) | function createVNodeCall(context, tag, props, children, patchFlag, dynam...
  function createArrayExpression (line 35170) | function createArrayExpression(elements, loc = locStub) {
  function createObjectExpression (line 35177) | function createObjectExpression(properties, loc = locStub) {
  function createObjectProperty (line 35184) | function createObjectProperty(key, value) {
  function createSimpleExpression (line 35192) | function createSimpleExpression(content, isStatic = false, loc = locStub...
  function createInterpolation (line 35201) | function createInterpolation(content, loc) {
  function createCompoundExpression (line 35208) | function createCompoundExpression(children, loc = locStub) {
  function createCallExpression (line 35215) | function createCallExpression(callee, args = [], loc = locStub) {
  function createFunctionExpression (line 35223) | function createFunctionExpression(params, returns = void 0, newline = fa...
  function createConditionalExpression (line 35233) | function createConditionalExpression(test, consequent, alternate, newlin...
  function createCacheExpression (line 35243) | function createCacheExpression(index, value, needPauseTracking = false, ...
  function createBlockStatement (line 35254) | function createBlockStatement(body) {
  function createTemplateLiteral (line 35261) | function createTemplateLiteral(elements) {
  function createIfStatement (line 35268) | function createIfStatement(test, consequent, alternate) {
  function createAssignmentExpression (line 35277) | function createAssignmentExpression(left, right) {
  function createSequenceExpression (line 35285) | function createSequenceExpression(expressions) {
  function createReturnStatement (line 35292) | function createReturnStatement(returns) {
  function getVNodeHelper (line 35299) | function getVNodeHelper(ssr, isComponent) {
  function getVNodeBlockHelper (line 35302) | function getVNodeBlockHelper(ssr, isComponent) {
  function convertToBlock (line 35305) | function convertToBlock(node, { helper, removeHelper, inSSR }) {
  function isTagStartChar (line 35316) | function isTagStartChar(c) {
  function isWhitespace (line 35319) | function isWhitespace(c) {
  function isEndOfTagSection (line 35322) | function isEndOfTagSection(c) {
  function toCharCodes (line 35325) | function toCharCodes(str) {
  class Tokenizer (line 35359) | class Tokenizer {
    method constructor (line 35360) | constructor(stack, cbs) {
    method inSFCRoot (line 35390) | get inSFCRoot() {
    method reset (line 35393) | reset() {
    method getPos (line 35412) | getPos(index) {
    method peek (line 35429) | peek() {
    method stateText (line 35432) | stateText(c) {
    method stateInterpolationOpen (line 35445) | stateInterpolationOpen(c) {
    method stateInterpolation (line 35465) | stateInterpolation(c) {
    method stateInterpolationClose (line 35472) | stateInterpolationClose(c) {
    method stateSpecialStartSequence (line 35490) | stateSpecialStartSequence(c) {
    method stateInRCDATA (line 35510) | stateInRCDATA(c) {
    method stateCDATASequence (line 35543) | stateCDATASequence(c) {
    method fastForwardTo (line 35563) | fastForwardTo(c) {
    method stateInCommentLike (line 35584) | stateInCommentLike(c) {
    method startSpecial (line 35604) | startSpecial(sequence, offset) {
    method enterRCDATA (line 35608) | enterRCDATA(sequence, offset) {
    method stateBeforeTagName (line 35613) | stateBeforeTagName(c) {
    method stateInTagName (line 35642) | stateInTagName(c) {
    method stateInSFCRootTagName (line 35647) | stateInSFCRootTagName(c) {
    method handleTagName (line 35656) | handleTagName(c) {
    method stateBeforeClosingTagName (line 35662) | stateBeforeClosingTagName(c) {
    method stateInClosingTagName (line 35674) | stateInClosingTagName(c) {
    method stateAfterClosingTagName (line 35682) | stateAfterClosingTagName(c) {
    method stateBeforeAttrName (line 35688) | stateBeforeAttrName(c) {
    method handleAttrStart (line 35716) | handleAttrStart(c) {
    method stateInSelfClosingTag (line 35729) | stateInSelfClosingTag(c) {
    method stateInAttrName (line 35740) | stateInAttrName(c) {
    method stateInDirName (line 35751) | stateInDirName(c) {
    method stateInDirArg (line 35765) | stateInDirArg(c) {
    method stateInDynamicDirArg (line 35777) | stateInDynamicDirArg(c) {
    method stateInDirModifier (line 35791) | stateInDirModifier(c) {
    method handleAttrNameEnd (line 35800) | handleAttrNameEnd(c) {
    method stateAfterAttrName (line 35806) | stateAfterAttrName(c) {
    method stateBeforeAttrValue (line 35819) | stateBeforeAttrValue(c) {
    method handleInAttrValue (line 35832) | handleInAttrValue(c, quote) {
    method stateInAttrValueDoubleQuotes (line 35843) | stateInAttrValueDoubleQuotes(c) {
    method stateInAttrValueSingleQuotes (line 35846) | stateInAttrValueSingleQuotes(c) {
    method stateInAttrValueNoQuotes (line 35849) | stateInAttrValueNoQuotes(c) {
    method stateBeforeDeclaration (line 35863) | stateBeforeDeclaration(c) {
    method stateInDeclaration (line 35871) | stateInDeclaration(c) {
    method stateInProcessingInstruction (line 35877) | stateInProcessingInstruction(c) {
    method stateBeforeComment (line 35884) | stateBeforeComment(c) {
    method stateInSpecialComment (line 35894) | stateInSpecialComment(c) {
    method stateBeforeSpecialS (line 35901) | stateBeforeSpecialS(c) {
    method stateBeforeSpecialT (line 35911) | stateBeforeSpecialT(c) {
    method startEntity (line 35921) | startEntity() {
    method stateInEntity (line 35923) | stateInEntity() {
    method parse (line 35930) | parse(input) {
    method cleanup (line 36083) | cleanup() {
    method finish (line 36094) | finish() {
    method handleTrailingData (line 36099) | handleTrailingData() {
    method emitCodePoint (line 36114) | emitCodePoint(cp, consumed) {
  function getCompatValue (line 36161) | function getCompatValue(key, { compatConfig }) {
  function isCompatEnabled (line 36169) | function isCompatEnabled(key, context) {
  function checkCompatEnabled (line 36174) | function checkCompatEnabled(key, context, loc, ...args) {
  function warnDeprecation (line 36181) | function warnDeprecation(key, context, loc, ...args) {
  function defaultOnError (line 36195) | function defaultOnError(error) {
  function defaultOnWarn (line 36198) | function defaultOnWarn(msg) {
  function createCompilerError (line 36201) | function createCompilerError(code, loc, messages, additionalMessage) {
  function walkIdentifiers (line 36381) | function walkIdentifiers(root, onIdentifier, includeAll = false, parentS...
  function isReferencedIdentifier (line 36386) | function isReferencedIdentifier(id, parent, parentStack) {
  function isInDestructureAssignment (line 36391) | function isInDestructureAssignment(parent, parentStack) {
  function isInNewExpression (line 36405) | function isInNewExpression(parentStack) {
  function walkFunctionParams (line 36417) | function walkFunctionParams(node, onIdent) {
  function walkBlockDeclarations (line 36424) | function walkBlockDeclarations(block, onIdent) {
  function isForStatement (line 36441) | function isForStatement(stmt) {
  function walkForStatement (line 36444) | function walkForStatement(stmt, isVar, onIdent) {
  function extractIdentifiers (line 36454) | function extractIdentifiers(param, nodes = []) {
  function unwrapTSNode (line 36506) | function unwrapTSNode(node) {
  function isCoreComponent (line 36515) | function isCoreComponent(tag) {
  function advancePositionWithClone (line 36605) | function advancePositionWithClone(pos, source, numberOfCharacters = sour...
  function advancePositionWithMutation (line 36616) | function advancePositionWithMutation(pos, source, numberOfCharacters = s...
  function assert (line 36630) | function assert(condition, msg) {
  function findDir (line 36635) | function findDir(node, name, allowEmpty = false) {
  function findProp (line 36643) | function findProp(node, name, dynamicOnly = false, allowEmpty = false) {
  function isStaticArgOf (line 36656) | function isStaticArgOf(arg, name) {
  function hasDynamicKeyVBind (line 36659) | function hasDynamicKeyVBind(node) {
  function isText$1 (line 36667) | function isText$1(node) {
  function isVSlot (line 36670) | function isVSlot(p) {
  function isTemplateNode (line 36673) | function isTemplateNode(node) {
  function isSlotOutlet (line 36676) | function isSlotOutlet(node) {
  function getUnnormalizedProps (line 36680) | function getUnnormalizedProps(props, callPath = []) {
  function injectProp (line 36692) | function injectProp(node, prop, context) {
  function hasProp (line 36750) | function hasProp(prop, props) {
  function toValidAssetId (line 36760) | function toValidAssetId(name, type) {
  function hasScopeRef (line 36765) | function hasScopeRef(node, ids) {
  function getMemoedVNodeCall (line 36806) | function getMemoedVNodeCall(node) {
  method ontext (line 36843) | ontext(start, end) {
  method ontextentity (line 36846) | ontextentity(char, start, end) {
  method oninterpolation (line 36849) | oninterpolation(start, end) {
  method onopentagname (line 36873) | onopentagname(start, end) {
  method onopentagend (line 36887) | onopentagend(end) {
  method onclosetag (line 36890) | onclosetag(start, end) {
  method onselfclosingtag (line 36913) | onselfclosingtag(end) {
  method onattribname (line 3
Copy disabled (too large) Download .json
Condensed preview — 162 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (10,761K chars).
[
  {
    "path": ".eslintrc.js",
    "chars": 291,
    "preview": "module.exports = {\n  root: true,\n  parser: 'babel-eslint',\n  parserOptions: {\n    sourceType: 'module'\n  },\n  env: {\n   "
  },
  {
    "path": ".gitattributes",
    "chars": 67,
    "preview": "dist/*.js -diff\ndist/*.css -diff\ndist/*.map -diff\ndist/*.zip -diff\n"
  },
  {
    "path": ".gitignore",
    "chars": 80,
    "preview": "out/\nnode_modules/\n.DS_Store\n.idea/\npy_modules/\n*/*/py_modules/\n.kiro/\n.vscode/\n"
  },
  {
    "path": ".npmignore",
    "chars": 37,
    "preview": "build\nconfig\nimg\nlex-web-ui\nMakefile\n"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 49333,
    "preview": "# Change Log\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Change"
  },
  {
    "path": "LICENSE",
    "chars": 4647,
    "preview": "Amazon Software License\n1. Definitions\n“Licensor” means any person or entity that distributes its Work.\n\n“Software” mean"
  },
  {
    "path": "Makefile",
    "chars": 6726,
    "preview": "# This Makefile is used to configure and deploy the sample app.\n# It is used in CodeBuild by the CloudFormation stack.\n#"
  },
  {
    "path": "NOTICE",
    "chars": 92,
    "preview": "aws-lex-web-ui\nCopyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n"
  },
  {
    "path": "README-connect-live-chat.md",
    "chars": 8040,
    "preview": "# Transfer to Amazon Connect Live Chat\n\nThis feature allows users of the Lex Web UI to have conversations with an Amazon"
  },
  {
    "path": "README-css-style.md",
    "chars": 5903,
    "preview": "# Quick CSS guide for Lex Web Ui\n\nThe ability to update the style of the lex-web-ui to conform to an existing site's sty"
  },
  {
    "path": "README-file-upload.md",
    "chars": 3443,
    "preview": "# Lex File Uploads\n\nThis feature allows users of the Lex Web UI to upload documents directly to a designated S3 bucket. "
  },
  {
    "path": "README-qbusiness.md",
    "chars": 7430,
    "preview": "# Amazon Q Business Integration\n\nAmazon Q is a new generative AI-powered application that helps users get work done. Ama"
  },
  {
    "path": "README-streaming-responses.md",
    "chars": 7811,
    "preview": "# Lex Streaming Responses\n\nIn addition to the documentation below, a full workshop walking through how to integrate stre"
  },
  {
    "path": "README.md",
    "chars": 37987,
    "preview": "# Sample Amazon Lex Web Interface\n\n# Overview\nThis is a sample [Amazon Lex](https://aws.amazon.com/lex/)\nweb interface. "
  },
  {
    "path": "build/Makefile",
    "chars": 4748,
    "preview": "#  This Makefile is used to update the bootstrap bucket containing\n#  the project source and CloudFormation templates\n\n#"
  },
  {
    "path": "build/copy-assets.js",
    "chars": 2269,
    "preview": "#!/usr/bin/env node\n\n/**\n * Copy assets script - replaces dist/Makefile functionality\n * Copies dependencies and bundle "
  },
  {
    "path": "build/create-custom-css.js",
    "chars": 3454,
    "preview": "import jsdom from \"jsdom\";\nimport fs from \"fs\";\nconst { JSDOM } = jsdom;\n\nfunction modifyRule(styleSheet, selector, prop"
  },
  {
    "path": "build/create-iframe-snippet-file.sh",
    "chars": 3731,
    "preview": "#!/usr/bin/env bash\n\n# This script is used at build time to generate a page with\n# config info and an HTML snippet showi"
  },
  {
    "path": "build/release.sh",
    "chars": 1552,
    "preview": "#! /bin/bash\ntimestamp=$(date +%s)\nunamestr=$(uname)\nexport VERSION=v$(node -p \"require('../package.json').version\")\nech"
  },
  {
    "path": "build/update-lex-web-ui-config.js",
    "chars": 9493,
    "preview": "/**\n * Updates config files used by the build environment\n * It merges the values from the environment with the\n * exist"
  },
  {
    "path": "build/upload-bootstrap.sh",
    "chars": 1403,
    "preview": "#!/usr/bin/env bash\n# utility to manually bootstrap a bucket with source files\n# this is intended for testing - use the "
  },
  {
    "path": "config/base.env.js",
    "chars": 4916,
    "preview": "/**\n * Base config common to builds\n */\nexport default {\n  region: process.env.AWS_DEFAULT_REGION,\n  cognito: {\n    pool"
  },
  {
    "path": "config/dist.env.js",
    "chars": 1185,
    "preview": "/**\n * Config used when deploying the app using the pre-built dist library\n */\nimport path from 'path';\nimport { fileURL"
  },
  {
    "path": "config/env.mk",
    "chars": 2164,
    "preview": "# This environment file is sourced from the Makefiles in this project\n# it is in Makefile format (not shell)\n\n# bucket n"
  },
  {
    "path": "config/full.env.js",
    "chars": 1462,
    "preview": "/**\n * Configs to be updated when performing a full build from source\n * This module exports an object with a key for ea"
  },
  {
    "path": "config/index.js",
    "chars": 520,
    "preview": "/**\n * Provides a config object depending on the build target\n * Used by ../build/update-lex-web-ui-config.js\n */\n\n// co"
  },
  {
    "path": "config/utils/merge-config.js",
    "chars": 1975,
    "preview": "/**\n * Merges config objects. The initial set of keys to merge are driven by\n * the baseConfig. The srcConfig values ove"
  },
  {
    "path": "dist/3.5.13_dist_vue.global.prod.js",
    "chars": 157923,
    "preview": "/**\n* vue v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/var Vue=function(e){\"use str"
  },
  {
    "path": "dist/Makefile",
    "chars": 2064,
    "preview": "all: copy-bundle build-loader\n.PHONY: all\n\n# build the application bundle\nWEB_UI_DIR := ../lex-web-ui\nWEB_UI_SRC_FILES :"
  },
  {
    "path": "dist/aws-lex-web-ui.css",
    "chars": 1323,
    "preview": "#lex-web-ui-fullpage{height:100%;width:100%}.lex-web-ui-iframe{bottom:1.5rem;display:none;height:80vh;margin:2px 3vw 0 2"
  },
  {
    "path": "dist/custom-chatbot-style.css",
    "chars": 1576,
    "preview": "/* Example custom css file for lex-web-ui. Entire file is commented out as a default. Uncomment and\n adjust as needed.\n\n"
  },
  {
    "path": "dist/index.html",
    "chars": 1923,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <!-- Frame and Image source CSP is controlled by Cloudfro"
  },
  {
    "path": "dist/initiate-loader.js",
    "chars": 1993,
    "preview": "// In the most simple form, you can load the component in a single statement:\n//   new ChatBotUiLoader.FullPageLoader()."
  },
  {
    "path": "dist/lex-web-ui-loader.css",
    "chars": 2674,
    "preview": "/*!***************************************************************************************!*\\\n  !*** css ../../../node_m"
  },
  {
    "path": "dist/lex-web-ui-loader.js",
    "chars": 1245438,
    "preview": "(function(global2, factory) {\n  typeof exports === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof"
  },
  {
    "path": "dist/lex-web-ui.css",
    "chars": 524548,
    "preview": "@charset \"UTF-8\";.min-button-content{border-radius:60px}.v-btn{align-items:center;border-radius:4px;display:inline-grid;"
  },
  {
    "path": "dist/lex-web-ui.js",
    "chars": 7262772,
    "preview": "/*!\n* lex-web-ui v0.23.0\n* (c) 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n* Released under the A"
  },
  {
    "path": "dist/material_icons.css",
    "chars": 9046,
    "preview": "@font-face {\n  font-family: 'Material Icons';\n  font-style: normal;\n  font-weight: 400;\n  src: url(https://fonts.gstatic"
  },
  {
    "path": "dist/parent.html",
    "chars": 12554,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initia"
  },
  {
    "path": "dist/wav-worker.js",
    "chars": 128973,
    "preview": "/*!\n* lex-web-ui v0.23.0\n* (c) 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n* Released under the A"
  },
  {
    "path": "example-css/bright-yellow.css",
    "chars": 1778,
    "preview": "/* ========================================\n   BRIGHT YELLOW THEME\n   Bright yellow theme for energetic environments\n   "
  },
  {
    "path": "example-css/coral-pink.css",
    "chars": 1774,
    "preview": "/* ========================================\n   CORAL PINK THEME\n   Warm coral pink theme for friendly interfaces\n   ===="
  },
  {
    "path": "example-css/dark-mode-theme.css",
    "chars": 1868,
    "preview": "/* ========================================\n   DARK MODE THEME\n   Modern dark theme for tech-savvy users\n   ============"
  },
  {
    "path": "example-css/elegant-purple-theme.css",
    "chars": 1777,
    "preview": "/* ========================================\n   ELEGANT PURPLE THEME\n   Sophisticated purple theme for premium services\n "
  },
  {
    "path": "example-css/forest-green.css",
    "chars": 1787,
    "preview": "/* ========================================\n   FOREST GREEN THEME\n   Natural forest green theme for eco-friendly environ"
  },
  {
    "path": "example-css/professional-blue.css",
    "chars": 1782,
    "preview": "/* ========================================\n   CORPORATE BLUE THEME\n   Professional blue theme for business environments"
  },
  {
    "path": "example-css/sky-blue.css",
    "chars": 1767,
    "preview": "/* ========================================\n   SKY BLUE THEME\n   Light sky blue theme for calm interfaces\n   ==========="
  },
  {
    "path": "example-css/sunset-orange.css",
    "chars": 1782,
    "preview": "/* ========================================\n   SUNSET ORANGE THEME\n   Warm sunset orange theme for creative environments"
  },
  {
    "path": "lex-web-ui/.browserslistrc",
    "chars": 38,
    "preview": "defaults and fully supports es6-module"
  },
  {
    "path": "lex-web-ui/.editorconfig",
    "chars": 147,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_"
  },
  {
    "path": "lex-web-ui/.eslintignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "lex-web-ui/.eslintrc.cjs",
    "chars": 606,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    node: true,\n    browser: true,\n    es2022: true,\n  },\n  extends: [\n    'pl"
  },
  {
    "path": "lex-web-ui/.gitignore",
    "chars": 337,
    "preview": ".DS_Store\nnode_modules/\ndist/\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyar"
  },
  {
    "path": "lex-web-ui/.sassrc.js",
    "chars": 264,
    "preview": "export default {\n  silenceDeprecations: ['legacy-js-api'],\n  quietDeps: true,\n  logger: {\n    warn: function(message) {\n"
  },
  {
    "path": "lex-web-ui/README.md",
    "chars": 28166,
    "preview": "# Lex Chatbot Web Interface\n\n> Sample Lex Chatbot Web Interface Application\n\n## Overview\nThis application provides a sam"
  },
  {
    "path": "lex-web-ui/READMECONFIGSCREENS.md",
    "chars": 1402,
    "preview": "### Create a user pool flow\n\nThe following images display the flow of configuration screens after selecting \ncreate new "
  },
  {
    "path": "lex-web-ui/current/user-custom-chatbot-style.css",
    "chars": 40,
    "preview": "button.min-button {border-radius: 60px;}"
  },
  {
    "path": "lex-web-ui/current/user-lex-web-ui-loader-config.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "lex-web-ui/index.html",
    "chars": 644,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-wid"
  },
  {
    "path": "lex-web-ui/package.json",
    "chars": 2242,
    "preview": "{\n  \"name\": \"lex-web-ui\",\n  \"version\": \"0.24.1\",\n  \"description\": \"Amazon Lex Web Interface\",\n  \"author\": \"AWS\",\n  \"lice"
  },
  {
    "path": "lex-web-ui/plugins/asset-handler-plugin.js",
    "chars": 6858,
    "preview": "import fs from 'fs'\nimport path from 'path'\n\n/**\n * Handle copying individual assets with fallback logic\n */\nfunction ha"
  },
  {
    "path": "lex-web-ui/plugins/banner-plugin.js",
    "chars": 3222,
    "preview": "/**\n * Custom Vite plugin for banner injection\n * Adds license headers with version and license information to library b"
  },
  {
    "path": "lex-web-ui/public/img/note.md",
    "chars": 196,
    "preview": "# Flowers Image Credit\n[Photo](https://www.pexels.com/photo/red-whiet-and-pink-tulips-52571/)\nby: [@juhg](https://unspla"
  },
  {
    "path": "lex-web-ui/public/index.html",
    "chars": 644,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-wid"
  },
  {
    "path": "lex-web-ui/scripts/post-build-css.js",
    "chars": 2456,
    "preview": "#!/usr/bin/env node\n\n/**\n * Post-build script to handle CSS file naming for library builds\n * This script copies the gen"
  },
  {
    "path": "lex-web-ui/src/App.vue",
    "chars": 1033,
    "preview": "<script setup>\nimport LexWeb from './components/LexWeb.vue'\n</script>\n\n<template>\n  <div id=\"lex-app\">\n    <router-view>"
  },
  {
    "path": "lex-web-ui/src/LexApp.vue",
    "chars": 962,
    "preview": "<template>\n  <div id=\"lex-app\">\n    <router-view></router-view>\n  </div>\n</template>\n\n<style scoped>\nheader {\n  line-hei"
  },
  {
    "path": "lex-web-ui/src/assets/css-overrides.css",
    "chars": 356,
    "preview": "/* CSS overrides to fix calc-size() compatibility issues */\n.v-time-picker .v-picker__body {\n  /* Override the problemat"
  },
  {
    "path": "lex-web-ui/src/components/InputContainer.vue",
    "chars": 11780,
    "preview": "<template>\n  <v-toolbar elevation=\"3\" color=\"white\" :dense=\"this.$store.state.isRunningEmbedded\" class=\"toolbar-content\""
  },
  {
    "path": "lex-web-ui/src/components/LexWeb.vue",
    "chars": 19151,
    "preview": "<template>\n  <v-app id=\"lex-web\"\n    v-bind:ui-minimized=\"isUiMinimized\"\n  >\n    <min-button\n      :toolbar-color=\"toolb"
  },
  {
    "path": "lex-web-ui/src/components/Message.vue",
    "chars": 22866,
    "preview": "<template>\n  <v-row d-flex class=\"message\">\n    <!-- contains message and response card -->\n    <v-col ma-2 class=\"messa"
  },
  {
    "path": "lex-web-ui/src/components/MessageList.vue",
    "chars": 2456,
    "preview": "<template>\n  <div\n    aria-live=\"polite\"\n    class=\"layout message-list column fill-height\"\n  >\n    <message\n      ref=\""
  },
  {
    "path": "lex-web-ui/src/components/MessageLoading.vue",
    "chars": 2303,
    "preview": "<template>\n  <v-row d-flex class=\"message message-bot messsge-loading\" aria-hidden=\"true\">\n    <!-- contains message and"
  },
  {
    "path": "lex-web-ui/src/components/MessageText.vue",
    "chars": 7228,
    "preview": "<template>\n  <div\n    v-if=\"message.text && (message.type === 'human' || message.type === 'feedback')\"\n    class=\"messag"
  },
  {
    "path": "lex-web-ui/src/components/MinButton.vue",
    "chars": 2795,
    "preview": "<template>\n  <v-container fluid class=\"pa-0 min-button-container\">\n    <v-row justify=\"end\">\n      <v-col cols=\"auto\">\n "
  },
  {
    "path": "lex-web-ui/src/components/RecorderStatus.vue",
    "chars": 4810,
    "preview": "<template>\n  <v-row class=\"recorder-status bg-white\">\n    <div class=\"status-text\" aria-live=\"polite\">\n      <span>{{sta"
  },
  {
    "path": "lex-web-ui/src/components/ResponseCard.vue",
    "chars": 3518,
    "preview": "<template>\n  <v-card flat>\n    <div v-if=shouldDisplayResponseCardTitle>\n      <v-card-title v-if=\"responseCard.title &&"
  },
  {
    "path": "lex-web-ui/src/components/ToolbarContainer.vue",
    "chars": 18284,
    "preview": "<template>\n  <!-- eslint-disable max-len -->\n  <v-toolbar\n    elevation=\"3\"\n    :color=\"toolbarColor\"\n    v-if=\"!isUiMin"
  },
  {
    "path": "lex-web-ui/src/config/.gitattributes",
    "chars": 25,
    "preview": "config.*.json merge=ours\n"
  },
  {
    "path": "lex-web-ui/src/config/config.awstest.json",
    "chars": 835,
    "preview": "{\n    \"cognito\": {\n      \"poolId\": \"us-east-1:aa8c83df-49e8-4a53-adea-c0a90d762a83\",\n      \"appUserPoolClientId\": \"727um"
  },
  {
    "path": "lex-web-ui/src/config/config.current.json",
    "chars": 2,
    "preview": "{}"
  },
  {
    "path": "lex-web-ui/src/config/config.dev.json",
    "chars": 1932,
    "preview": "{\n  \"region\": \"us-east-1\",\n  \"cognito\": {\n    \"poolId\": \"\",\n    \"appUserPoolClientId\": \"\",\n    \"appUserPoolName\": \"\",\n  "
  },
  {
    "path": "lex-web-ui/src/config/config.prod.json",
    "chars": 588,
    "preview": "{\n  \"cognito\": {\n    \"poolId\": \"\"\n  },\n  \"lex\": {\n    \"initialText\": \"You can ask me for help ordering flowers. Just typ"
  },
  {
    "path": "lex-web-ui/src/config/config.test.json",
    "chars": 580,
    "preview": "{\n  \"cognito\": {\n    \"poolId\": \"\"\n  },\n  \"connect\": {\n    \"contactFlowId\" : \"\",\n    \"instanceId\" : \"\",\n    \"apiGatewayEn"
  },
  {
    "path": "lex-web-ui/src/config/index.js",
    "chars": 17381,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/init.js",
    "chars": 24,
    "preview": "window.global ||= window"
  },
  {
    "path": "lex-web-ui/src/lex-web-ui.js",
    "chars": 5174,
    "preview": "/*\nCopyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "lex-web-ui/src/lib/lex/client.js",
    "chars": 10100,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/lib/lex/recorder.js",
    "chars": 22609,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/lib/lex/wav-worker.js",
    "chars": 6747,
    "preview": "// based on https://github.com/mattdiamond/Recorderjs/blob/master/src/recorder.js\n// with a few optimizations including "
  },
  {
    "path": "lex-web-ui/src/main.js",
    "chars": 758,
    "preview": "// import './init'\n// import { createApp } from 'vue/dist/vue.esm-bundler';\n// import App from './App.vue'\n// import 'vu"
  },
  {
    "path": "lex-web-ui/src/router/index.js",
    "chars": 855,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/store/actions.js",
    "chars": 56295,
    "preview": "/*\nCopyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "lex-web-ui/src/store/getters.js",
    "chars": 4846,
    "preview": "/*\nCopyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "lex-web-ui/src/store/index.js",
    "chars": 1024,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/store/live-chat-handlers.js",
    "chars": 7241,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/store/mutations.js",
    "chars": 16760,
    "preview": "/*\nCopyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "lex-web-ui/src/store/recorder-handlers.js",
    "chars": 6830,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/store/sigv4-handlers.js",
    "chars": 4026,
    "preview": "/*\n Copyright 2017-2024 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/src/store/state.js",
    "chars": 3441,
    "preview": "/*\nCopyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "lex-web-ui/src/store/talkdesk-live-chat-handlers.js",
    "chars": 2899,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "lex-web-ui/test/e2e/custom-assertions/elementCount.js",
    "chars": 785,
    "preview": "// A custom Nightwatch assertion.\n// the name of the method is the filename.\n// can be used in tests like this:\n//\n//   "
  },
  {
    "path": "lex-web-ui/test/e2e/nightwatch.conf.js",
    "chars": 1226,
    "preview": "require('babel-register')\nvar config = require('../../config')\n\n// http://nightwatchjs.org/gettingstarted#settings-file\n"
  },
  {
    "path": "lex-web-ui/test/e2e/runner.js",
    "chars": 1897,
    "preview": "// 1. start the dev server using production config\nvar server;\nprocess.env.NODE_ENV = 'testing';\n\n// lex-web-ui: added a"
  },
  {
    "path": "lex-web-ui/test/e2e/specs/test.js",
    "chars": 2166,
    "preview": "// For authoring Nightwatch tests, see\n// http://nightwatchjs.org/guide#usage\n\nvar config = require('../../../src/config"
  },
  {
    "path": "lex-web-ui/test/integration/build-modes.test.js",
    "chars": 13848,
    "preview": "/**\n * Integration tests for all build modes\n * Tests Requirements: 9.1, 9.3, 9.4\n * \n * This test suite verifies:\n * - "
  },
  {
    "path": "lex-web-ui/test/integration/functionality.test.js",
    "chars": 11680,
    "preview": "/**\n * Functionality integration tests\n * Tests Requirements: 9.1, 9.3, 9.4\n * \n * This test suite verifies:\n * - AWS SD"
  },
  {
    "path": "lex-web-ui/test/integration/jest.config.js",
    "chars": 741,
    "preview": "/**\n * Jest configuration for integration tests\n */\n\nexport default {\n  // Test environment\n  testEnvironment: 'node',\n "
  },
  {
    "path": "lex-web-ui/test/unit/.eslintrc",
    "chars": 95,
    "preview": "{\n  \"env\": {\n    \"mocha\": true\n  },\n  \"globals\": {\n    \"expect\": true,\n    \"sinon\": true\n  }\n}\n"
  },
  {
    "path": "lex-web-ui/test/unit/index.js",
    "chars": 566,
    "preview": "import Vue from 'vue';\n\nVue.config.productionTip = false;\n\n// require all test files (files that ends with .spec.js)\ncon"
  },
  {
    "path": "lex-web-ui/test/unit/karma.conf.js",
    "chars": 998,
    "preview": "// This is a karma config file. For more details see\n//   http://karma-runner.github.io/0.13/config/configuration-file.h"
  },
  {
    "path": "lex-web-ui/test/unit/specs/InputContainer.spec.js",
    "chars": 13933,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport Vuetify from 'vuetify';\n\nimport InputCon"
  },
  {
    "path": "lex-web-ui/test/unit/specs/LexWeb.spec.js",
    "chars": 1504,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport Vuetify from 'vuetify';\n\nimport LexWeb f"
  },
  {
    "path": "lex-web-ui/test/unit/specs/Message.spec.js",
    "chars": 10630,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport Vuetify from 'vuetify';\n\nimport Message "
  },
  {
    "path": "lex-web-ui/test/unit/specs/MessageList.spec.js",
    "chars": 2875,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport Vuetify from 'vuetify';\n\nimport MessageL"
  },
  {
    "path": "lex-web-ui/test/unit/specs/RecorderStatus.spec.js",
    "chars": 7953,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport Vuetify from 'vuetify';\n\nimport Recorder"
  },
  {
    "path": "lex-web-ui/test/unit/specs/lex-web-ui.spec.js",
    "chars": 834,
    "preview": "import 'babel-polyfill';\nimport Vue from 'vue';\nimport Vuex from 'vuex';\n\nimport { Loader as LexWebUi } from '@/lex-web-"
  },
  {
    "path": "lex-web-ui/test/unit/specs/store.spec.js",
    "chars": 1097,
    "preview": "import 'babel-polyfill';\n\nimport Vue from 'vue';\nimport Vuex from 'vuex';\nimport { config } from '@/config';\nimport Stor"
  },
  {
    "path": "lex-web-ui/vite.config.js",
    "chars": 14826,
    "preview": "import { defineConfig } from 'vite'\nimport vue from '@vitejs/plugin-vue'\nimport vuetify from 'vite-plugin-vuetify'\nimpor"
  },
  {
    "path": "package.json",
    "chars": 2206,
    "preview": "{\n  \"name\": \"aws-lex-web-ui\",\n  \"version\": \"0.24.1\",\n  \"type\": \"module\",\n  \"description\": \"Sample Amazon Lex Web Interfa"
  },
  {
    "path": "postcss.config.js",
    "chars": 74,
    "preview": "export default {\n  plugins: {\n    autoprefixer: {},\n    cssnano: {}\n  }\n}\n"
  },
  {
    "path": "server.js",
    "chars": 640,
    "preview": "// Usage: npm start\n// Used for local serving and quick dev/testing of the prebuilt files.\n// For heavy development, you"
  },
  {
    "path": "src/README.md",
    "chars": 40599,
    "preview": "# Overview\nThis directory contains the source of a JavaScript loader library used\nto integrate the chatbot UI component "
  },
  {
    "path": "src/config/.gitattributes",
    "chars": 17,
    "preview": "*.js* merge=ours\n"
  },
  {
    "path": "src/config/default-lex-web-ui-loader-config.json",
    "chars": 2152,
    "preview": "{\n  \"region\": \"us-east-1\",\n  \"cognito\": {\n    \"poolId\": \"\",\n    \"aws_cognito_region\": \"us-east-1\",\n    \"region\": \"us-eas"
  },
  {
    "path": "src/config/lex-web-ui-loader-config.json",
    "chars": 436,
    "preview": "{\n  \"connect\": {\n    \"contactFlowId\": \"\",\n    \"instanceId\": \"\",\n    \"apiGatewayEndpoint\": \"\",\n    \"promptForNameMessage\""
  },
  {
    "path": "src/dependencies/3.5.13_dist_vue.global.prod.js",
    "chars": 157923,
    "preview": "/**\n* vue v3.5.13\n* (c) 2018-present Yuxi (Evan) You and Vue contributors\n* @license MIT\n**/var Vue=function(e){\"use str"
  },
  {
    "path": "src/dependencies/initiate-loader.js",
    "chars": 1993,
    "preview": "// In the most simple form, you can load the component in a single statement:\n//   new ChatBotUiLoader.FullPageLoader()."
  },
  {
    "path": "src/dependencies/material_icons.css",
    "chars": 9046,
    "preview": "@font-face {\n  font-family: 'Material Icons';\n  font-style: normal;\n  font-weight: 400;\n  src: url(https://fonts.gstatic"
  },
  {
    "path": "src/initiate-chat-lambda/index.js",
    "chars": 3706,
    "preview": "const { ConnectClient, StartChatContactCommand } = require(\"@aws-sdk/client-connect\");\nconst client = new ConnectClient("
  },
  {
    "path": "src/lex-web-ui-loader/css/lex-web-ui-fullpage.css",
    "chars": 56,
    "preview": "#lex-web-ui-fullpage {\n  height: 100%;\n  width: 100%;\n}\n"
  },
  {
    "path": "src/lex-web-ui-loader/css/lex-web-ui-iframe.css",
    "chars": 2016,
    "preview": ".lex-web-ui-iframe {\n  bottom: 1.5rem;\n  display: none; /* hidden by default changed once iframe is loaded */\n  margin-b"
  },
  {
    "path": "src/lex-web-ui-loader/js/defaults/dependencies.js",
    "chars": 1951,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/defaults/lex-web-ui.js",
    "chars": 967,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/defaults/loader.js",
    "chars": 2532,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/index.js",
    "chars": 5983,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/lib/config-loader.js",
    "chars": 7199,
    "preview": "/*\n Copyright 2017-2021 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/lib/dependency-loader.js",
    "chars": 7455,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/lib/fullpage-component-loader.js",
    "chars": 13938,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/lib/iframe-component-loader.js",
    "chars": 27883,
    "preview": "/*\n Copyright 2017-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\n Licensed under the Amazon Software Li"
  },
  {
    "path": "src/lex-web-ui-loader/js/lib/loginutil.js",
    "chars": 5795,
    "preview": "/*\nCopyright 2017-2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n\nLicensed under the Amazon Software Lice"
  },
  {
    "path": "src/qbusiness-lambda/index.py",
    "chars": 7906,
    "preview": "# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n# SPDX-License-Identifier: MIT-0\nimport base64\nimpo"
  },
  {
    "path": "src/streaming-lambda/index.js",
    "chars": 968,
    "preview": "const { PutCommand, DynamoDBDocumentClient } = require('@aws-sdk/lib-dynamodb');\nconst { DynamoDBClient } = require('@aw"
  },
  {
    "path": "src/website/custom-chatbot-style.css",
    "chars": 1576,
    "preview": "/* Example custom css file for lex-web-ui. Entire file is commented out as a default. Uncomment and\n adjust as needed.\n\n"
  },
  {
    "path": "src/website/iframeparent.html",
    "chars": 8518,
    "preview": "\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n   "
  },
  {
    "path": "src/website/index.css",
    "chars": 508,
    "preview": "/* put overriding CSS here,  \nbecause of the configuration of the code it may be \nneccessary to include !important */\n\n/"
  },
  {
    "path": "src/website/index.html",
    "chars": 1891,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <!-- Frame and Image source CSP is controlled by Cloudfro"
  },
  {
    "path": "src/website/parent.html",
    "chars": 12542,
    "preview": "<!DOCTYPE html>\n<html>\n  <head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initia"
  },
  {
    "path": "templates/Makefile",
    "chars": 1456,
    "preview": "TEMPLATES := $(wildcard *.json *.yml *.yaml)\n\n# build output directory\nOUT := out\n# put output dir in VPATH to simplify "
  },
  {
    "path": "templates/README.md",
    "chars": 15490,
    "preview": "# CloudFormation Stack\n\n> Sample CloudFormation Stack\n\n## Overview\nThis directory provides a set of [AWS\nCloudFormation]"
  },
  {
    "path": "templates/codebuild-deploy.yaml",
    "chars": 52855,
    "preview": "AWSTemplateFormatVersion: 2010-09-09\nDescription: >\n    This template creates a CodeBuild project used to configure and "
  },
  {
    "path": "templates/cognito.yaml",
    "chars": 10861,
    "preview": "AWSTemplateFormatVersion: 2010-09-09\nTransform: AWS::Serverless-2016-10-31\nDescription: >\n  This template configures a u"
  },
  {
    "path": "templates/cognitouserpoolconfig.yaml",
    "chars": 20800,
    "preview": "AWSTemplateFormatVersion: 2010-09-09\nDescription: >\n    This template updates a cognito user pool client with a domain a"
  },
  {
    "path": "templates/custom-resources/cfnresponse.py",
    "chars": 1982,
    "preview": "# Copyright 2016-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n#\n# Licensed under the Amazon Software Li"
  },
  {
    "path": "templates/custom-resources/codebuild-start.py",
    "chars": 2855,
    "preview": "#!/usr/bin/env python\n\n##########################################################################\n# Copyright 2017-2019 "
  },
  {
    "path": "templates/custom-resources/s3-cleanup.py",
    "chars": 3120,
    "preview": "#!/usr/bin/env python3.13\n\n##########################################################################\n# Copyright 2017-2"
  },
  {
    "path": "templates/lexbot.yaml",
    "chars": 16117,
    "preview": "AWSTemplateFormatVersion: 2010-09-09\nDescription: >\n    This template creates a Lex bot and associated resources.\n\nParam"
  },
  {
    "path": "templates/master.yaml",
    "chars": 44631,
    "preview": "AWSTemplateFormatVersion: 2010-09-09\nDescription: |\n    Master Lex Web UI CloudFormation template (v0.24.1)\n    The Lex "
  },
  {
    "path": "templates/restapi.yaml",
    "chars": 8985,
    "preview": "AWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\n\nDescription: >\n  This template deploys the"
  },
  {
    "path": "templates/streaming-support.yaml",
    "chars": 6753,
    "preview": "AWSTemplateFormatVersion: '2010-09-09'\nTransform: AWS::Serverless-2016-10-31\n\nDescription: >\n  This template deploys the"
  },
  {
    "path": "vite.config.js",
    "chars": 4245,
    "preview": "import { defineConfig } from 'vite'\nimport path from 'path'\nimport fs from 'fs'\nimport { nodePolyfills } from 'vite-plug"
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the awslabs/aws-lex-web-ui GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 162 files (10.0 MB), approximately 2.6M tokens, and a symbol index with 5868 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!