diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,44 @@
+# Amazon Amplify UI Builder SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+ 
+`2.0` - Derived from API version @2021-08-11@ of the AWS service descriptions, licensed under Apache 2.0.
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-amplifyuibuilder)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Amazonka.AmplifyUiBuilder](http://hackage.haskell.org/package/amazonka-amplifyuibuilder/docs/Amazonka-AmplifyUiBuilder.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-amplifyuibuilder` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/amazonka-amplifyuibuilder.cabal b/amazonka-amplifyuibuilder.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-amplifyuibuilder.cabal
@@ -0,0 +1,155 @@
+cabal-version:      2.2
+name:               amazonka-amplifyuibuilder
+version:            2.0
+synopsis:           Amazon Amplify UI Builder SDK.
+homepage:           https://github.com/brendanhay/amazonka
+bug-reports:        https://github.com/brendanhay/amazonka/issues
+license:            MPL-2.0
+license-file:       LICENSE
+author:             Brendan Hay
+maintainer:
+  Brendan Hay <brendan.g.hay+amazonka@gmail.com>, Jack Kelly <jack@jackkelly.name>
+
+copyright:          Copyright (c) 2013-2023 Brendan Hay
+category:           AWS
+build-type:         Simple
+extra-source-files:
+  fixture/*.proto
+  fixture/*.yaml
+  README.md
+  src/.gitkeep
+
+description:
+  Derived from API version @2021-08-11@ of the AWS service descriptions, licensed under Apache 2.0.
+  .
+  The types from this library are intended to be used with <http://hackage.haskell.org/package/amazonka amazonka>,
+  which provides mechanisms for specifying AuthN/AuthZ information, sending requests, and receiving responses.
+  .
+  It is recommended to use generic lenses or optics from packages such as <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify optional fields and deconstruct responses.
+  .
+  Generated lenses can be found in "Amazonka.AmplifyUiBuilder.Lens" and are
+  suitable for use with a lens package such as <http://hackage.haskell.org/package/lens lens> or <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+  .
+  See "Amazonka.AmplifyUiBuilder" and the <https://aws.amazon.com/documentation/ AWS documentation> to get started.
+
+source-repository head
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-amplifyuibuilder
+
+library
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
+
+  exposed-modules:
+    Amazonka.AmplifyUiBuilder
+    Amazonka.AmplifyUiBuilder.CreateComponent
+    Amazonka.AmplifyUiBuilder.CreateForm
+    Amazonka.AmplifyUiBuilder.CreateTheme
+    Amazonka.AmplifyUiBuilder.DeleteComponent
+    Amazonka.AmplifyUiBuilder.DeleteForm
+    Amazonka.AmplifyUiBuilder.DeleteTheme
+    Amazonka.AmplifyUiBuilder.ExchangeCodeForToken
+    Amazonka.AmplifyUiBuilder.ExportComponents
+    Amazonka.AmplifyUiBuilder.ExportForms
+    Amazonka.AmplifyUiBuilder.ExportThemes
+    Amazonka.AmplifyUiBuilder.GetComponent
+    Amazonka.AmplifyUiBuilder.GetForm
+    Amazonka.AmplifyUiBuilder.GetMetadata
+    Amazonka.AmplifyUiBuilder.GetTheme
+    Amazonka.AmplifyUiBuilder.Lens
+    Amazonka.AmplifyUiBuilder.ListComponents
+    Amazonka.AmplifyUiBuilder.ListForms
+    Amazonka.AmplifyUiBuilder.ListThemes
+    Amazonka.AmplifyUiBuilder.PutMetadataFlag
+    Amazonka.AmplifyUiBuilder.RefreshToken
+    Amazonka.AmplifyUiBuilder.Types
+    Amazonka.AmplifyUiBuilder.Types.ActionParameters
+    Amazonka.AmplifyUiBuilder.Types.Component
+    Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+    Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties
+    Amazonka.AmplifyUiBuilder.Types.ComponentChild
+    Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+    Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+    Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+    Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+    Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
+    Amazonka.AmplifyUiBuilder.Types.ComponentSummary
+    Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+    Amazonka.AmplifyUiBuilder.Types.CreateComponentData
+    Amazonka.AmplifyUiBuilder.Types.CreateFormData
+    Amazonka.AmplifyUiBuilder.Types.CreateThemeData
+    Amazonka.AmplifyUiBuilder.Types.ExchangeCodeForTokenRequestBody
+    Amazonka.AmplifyUiBuilder.Types.FieldConfig
+    Amazonka.AmplifyUiBuilder.Types.FieldInputConfig
+    Amazonka.AmplifyUiBuilder.Types.FieldPosition
+    Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration
+    Amazonka.AmplifyUiBuilder.Types.FixedPosition
+    Amazonka.AmplifyUiBuilder.Types.Form
+    Amazonka.AmplifyUiBuilder.Types.FormActionType
+    Amazonka.AmplifyUiBuilder.Types.FormBindingElement
+    Amazonka.AmplifyUiBuilder.Types.FormButton
+    Amazonka.AmplifyUiBuilder.Types.FormButtonsPosition
+    Amazonka.AmplifyUiBuilder.Types.FormCTA
+    Amazonka.AmplifyUiBuilder.Types.FormDataSourceType
+    Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+    Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty
+    Amazonka.AmplifyUiBuilder.Types.FormStyle
+    Amazonka.AmplifyUiBuilder.Types.FormStyleConfig
+    Amazonka.AmplifyUiBuilder.Types.FormSummary
+    Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter
+    Amazonka.AmplifyUiBuilder.Types.Predicate
+    Amazonka.AmplifyUiBuilder.Types.PutMetadataFlagBody
+    Amazonka.AmplifyUiBuilder.Types.RefreshTokenRequestBody
+    Amazonka.AmplifyUiBuilder.Types.SectionalElement
+    Amazonka.AmplifyUiBuilder.Types.SortDirection
+    Amazonka.AmplifyUiBuilder.Types.SortProperty
+    Amazonka.AmplifyUiBuilder.Types.Theme
+    Amazonka.AmplifyUiBuilder.Types.ThemeSummary
+    Amazonka.AmplifyUiBuilder.Types.ThemeValue
+    Amazonka.AmplifyUiBuilder.Types.ThemeValues
+    Amazonka.AmplifyUiBuilder.Types.TokenProviders
+    Amazonka.AmplifyUiBuilder.Types.UpdateComponentData
+    Amazonka.AmplifyUiBuilder.Types.UpdateFormData
+    Amazonka.AmplifyUiBuilder.Types.UpdateThemeData
+    Amazonka.AmplifyUiBuilder.Types.ValueMapping
+    Amazonka.AmplifyUiBuilder.Types.ValueMappings
+    Amazonka.AmplifyUiBuilder.UpdateComponent
+    Amazonka.AmplifyUiBuilder.UpdateForm
+    Amazonka.AmplifyUiBuilder.UpdateTheme
+    Amazonka.AmplifyUiBuilder.Waiters
+
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
+
+test-suite amazonka-amplifyuibuilder-test
+  type:             exitcode-stdio-1.0
+  default-language: Haskell2010
+  hs-source-dirs:   test
+  main-is:          Main.hs
+  ghc-options:      -Wall -threaded
+
+  -- This section is encoded by the template and any modules added by
+  -- hand outside these namespaces will not correctly be added to the
+  -- distribution package.
+  other-modules:
+    Test.Amazonka.AmplifyUiBuilder
+    Test.Amazonka.AmplifyUiBuilder.Internal
+    Test.Amazonka.Gen.AmplifyUiBuilder
+
+  build-depends:
+    , amazonka-amplifyuibuilder
+    , amazonka-core              >=2.0 && <2.1
+    , amazonka-test              >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateComponent.yaml b/fixture/CreateComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateComponentResponse.proto b/fixture/CreateComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateComponentResponse.proto
diff --git a/fixture/CreateForm.yaml b/fixture/CreateForm.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateForm.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateFormResponse.proto b/fixture/CreateFormResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFormResponse.proto
diff --git a/fixture/CreateTheme.yaml b/fixture/CreateTheme.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTheme.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateThemeResponse.proto b/fixture/CreateThemeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateThemeResponse.proto
diff --git a/fixture/DeleteComponent.yaml b/fixture/DeleteComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteComponentResponse.proto b/fixture/DeleteComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteComponentResponse.proto
diff --git a/fixture/DeleteForm.yaml b/fixture/DeleteForm.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteForm.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteFormResponse.proto b/fixture/DeleteFormResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFormResponse.proto
diff --git a/fixture/DeleteTheme.yaml b/fixture/DeleteTheme.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTheme.yaml
@@ -0,0 +1,10 @@
+---
+method: DELETE
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteThemeResponse.proto b/fixture/DeleteThemeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteThemeResponse.proto
diff --git a/fixture/ExchangeCodeForToken.yaml b/fixture/ExchangeCodeForToken.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExchangeCodeForToken.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExchangeCodeForTokenResponse.proto b/fixture/ExchangeCodeForTokenResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExchangeCodeForTokenResponse.proto
diff --git a/fixture/ExportComponents.yaml b/fixture/ExportComponents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportComponents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportComponentsResponse.proto b/fixture/ExportComponentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportComponentsResponse.proto
diff --git a/fixture/ExportForms.yaml b/fixture/ExportForms.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportForms.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportFormsResponse.proto b/fixture/ExportFormsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportFormsResponse.proto
diff --git a/fixture/ExportThemes.yaml b/fixture/ExportThemes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ExportThemes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ExportThemesResponse.proto b/fixture/ExportThemesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ExportThemesResponse.proto
diff --git a/fixture/GetComponent.yaml b/fixture/GetComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetComponentResponse.proto b/fixture/GetComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetComponentResponse.proto
diff --git a/fixture/GetForm.yaml b/fixture/GetForm.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetForm.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetFormResponse.proto b/fixture/GetFormResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetFormResponse.proto
diff --git a/fixture/GetMetadata.yaml b/fixture/GetMetadata.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetMetadataResponse.proto b/fixture/GetMetadataResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMetadataResponse.proto
diff --git a/fixture/GetTheme.yaml b/fixture/GetTheme.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTheme.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetThemeResponse.proto b/fixture/GetThemeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetThemeResponse.proto
diff --git a/fixture/ListComponents.yaml b/fixture/ListComponents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponents.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListComponentsResponse.proto b/fixture/ListComponentsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListComponentsResponse.proto
diff --git a/fixture/ListForms.yaml b/fixture/ListForms.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListForms.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListFormsResponse.proto b/fixture/ListFormsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFormsResponse.proto
diff --git a/fixture/ListThemes.yaml b/fixture/ListThemes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListThemes.yaml
@@ -0,0 +1,10 @@
+---
+method: GET
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListThemesResponse.proto b/fixture/ListThemesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListThemesResponse.proto
diff --git a/fixture/PutMetadataFlag.yaml b/fixture/PutMetadataFlag.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutMetadataFlag.yaml
@@ -0,0 +1,10 @@
+---
+method: PUT
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/PutMetadataFlagResponse.proto b/fixture/PutMetadataFlagResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutMetadataFlagResponse.proto
diff --git a/fixture/RefreshToken.yaml b/fixture/RefreshToken.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RefreshToken.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/RefreshTokenResponse.proto b/fixture/RefreshTokenResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RefreshTokenResponse.proto
diff --git a/fixture/UpdateComponent.yaml b/fixture/UpdateComponent.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateComponent.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateComponentResponse.proto b/fixture/UpdateComponentResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateComponentResponse.proto
diff --git a/fixture/UpdateForm.yaml b/fixture/UpdateForm.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateForm.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateFormResponse.proto b/fixture/UpdateFormResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFormResponse.proto
diff --git a/fixture/UpdateTheme.yaml b/fixture/UpdateTheme.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTheme.yaml
@@ -0,0 +1,10 @@
+---
+method: PATCH
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/amplifyuibuilder/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  amplifyuibuilder.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateThemeResponse.proto b/fixture/UpdateThemeResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateThemeResponse.proto
diff --git a/gen/Amazonka/AmplifyUiBuilder.hs b/gen/Amazonka/AmplifyUiBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder.hs
@@ -0,0 +1,442 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2021-08-11@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- The Amplify UI Builder API provides a programmatic interface for
+-- creating and configuring user interface (UI) component libraries and
+-- themes for use in your Amplify applications. You can then connect these
+-- UI components to an application\'s backend Amazon Web Services
+-- resources.
+--
+-- You can also use the Amplify Studio visual designer to create UI
+-- components and model data for an app. For more information, see
+-- <https://docs.amplify.aws/console/adminui/intro Introduction> in the
+-- /Amplify Docs/.
+--
+-- The Amplify Framework is a comprehensive set of SDKs, libraries, tools,
+-- and documentation for client app development. For more information, see
+-- the <https://docs.amplify.aws/ Amplify Framework>. For more information
+-- about deploying an Amplify application to Amazon Web Services, see the
+-- <https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html Amplify User Guide>.
+module Amazonka.AmplifyUiBuilder
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** InternalServerException
+    _InternalServerException,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** ResourceConflictException
+    _ResourceConflictException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- ** ServiceQuotaExceededException
+    _ServiceQuotaExceededException,
+
+    -- ** UnauthorizedException
+    _UnauthorizedException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateComponent
+    CreateComponent (CreateComponent'),
+    newCreateComponent,
+    CreateComponentResponse (CreateComponentResponse'),
+    newCreateComponentResponse,
+
+    -- ** CreateForm
+    CreateForm (CreateForm'),
+    newCreateForm,
+    CreateFormResponse (CreateFormResponse'),
+    newCreateFormResponse,
+
+    -- ** CreateTheme
+    CreateTheme (CreateTheme'),
+    newCreateTheme,
+    CreateThemeResponse (CreateThemeResponse'),
+    newCreateThemeResponse,
+
+    -- ** DeleteComponent
+    DeleteComponent (DeleteComponent'),
+    newDeleteComponent,
+    DeleteComponentResponse (DeleteComponentResponse'),
+    newDeleteComponentResponse,
+
+    -- ** DeleteForm
+    DeleteForm (DeleteForm'),
+    newDeleteForm,
+    DeleteFormResponse (DeleteFormResponse'),
+    newDeleteFormResponse,
+
+    -- ** DeleteTheme
+    DeleteTheme (DeleteTheme'),
+    newDeleteTheme,
+    DeleteThemeResponse (DeleteThemeResponse'),
+    newDeleteThemeResponse,
+
+    -- ** ExchangeCodeForToken
+    ExchangeCodeForToken (ExchangeCodeForToken'),
+    newExchangeCodeForToken,
+    ExchangeCodeForTokenResponse (ExchangeCodeForTokenResponse'),
+    newExchangeCodeForTokenResponse,
+
+    -- ** ExportComponents (Paginated)
+    ExportComponents (ExportComponents'),
+    newExportComponents,
+    ExportComponentsResponse (ExportComponentsResponse'),
+    newExportComponentsResponse,
+
+    -- ** ExportForms (Paginated)
+    ExportForms (ExportForms'),
+    newExportForms,
+    ExportFormsResponse (ExportFormsResponse'),
+    newExportFormsResponse,
+
+    -- ** ExportThemes (Paginated)
+    ExportThemes (ExportThemes'),
+    newExportThemes,
+    ExportThemesResponse (ExportThemesResponse'),
+    newExportThemesResponse,
+
+    -- ** GetComponent
+    GetComponent (GetComponent'),
+    newGetComponent,
+    GetComponentResponse (GetComponentResponse'),
+    newGetComponentResponse,
+
+    -- ** GetForm
+    GetForm (GetForm'),
+    newGetForm,
+    GetFormResponse (GetFormResponse'),
+    newGetFormResponse,
+
+    -- ** GetMetadata
+    GetMetadata (GetMetadata'),
+    newGetMetadata,
+    GetMetadataResponse (GetMetadataResponse'),
+    newGetMetadataResponse,
+
+    -- ** GetTheme
+    GetTheme (GetTheme'),
+    newGetTheme,
+    GetThemeResponse (GetThemeResponse'),
+    newGetThemeResponse,
+
+    -- ** ListComponents (Paginated)
+    ListComponents (ListComponents'),
+    newListComponents,
+    ListComponentsResponse (ListComponentsResponse'),
+    newListComponentsResponse,
+
+    -- ** ListForms (Paginated)
+    ListForms (ListForms'),
+    newListForms,
+    ListFormsResponse (ListFormsResponse'),
+    newListFormsResponse,
+
+    -- ** ListThemes (Paginated)
+    ListThemes (ListThemes'),
+    newListThemes,
+    ListThemesResponse (ListThemesResponse'),
+    newListThemesResponse,
+
+    -- ** PutMetadataFlag
+    PutMetadataFlag (PutMetadataFlag'),
+    newPutMetadataFlag,
+    PutMetadataFlagResponse (PutMetadataFlagResponse'),
+    newPutMetadataFlagResponse,
+
+    -- ** RefreshToken
+    RefreshToken (RefreshToken'),
+    newRefreshToken,
+    RefreshTokenResponse (RefreshTokenResponse'),
+    newRefreshTokenResponse,
+
+    -- ** UpdateComponent
+    UpdateComponent (UpdateComponent'),
+    newUpdateComponent,
+    UpdateComponentResponse (UpdateComponentResponse'),
+    newUpdateComponentResponse,
+
+    -- ** UpdateForm
+    UpdateForm (UpdateForm'),
+    newUpdateForm,
+    UpdateFormResponse (UpdateFormResponse'),
+    newUpdateFormResponse,
+
+    -- ** UpdateTheme
+    UpdateTheme (UpdateTheme'),
+    newUpdateTheme,
+    UpdateThemeResponse (UpdateThemeResponse'),
+    newUpdateThemeResponse,
+
+    -- * Types
+
+    -- ** FixedPosition
+    FixedPosition (..),
+
+    -- ** FormActionType
+    FormActionType (..),
+
+    -- ** FormButtonsPosition
+    FormButtonsPosition (..),
+
+    -- ** FormDataSourceType
+    FormDataSourceType (..),
+
+    -- ** SortDirection
+    SortDirection (..),
+
+    -- ** TokenProviders
+    TokenProviders (..),
+
+    -- ** ActionParameters
+    ActionParameters (ActionParameters'),
+    newActionParameters,
+
+    -- ** Component
+    Component (Component'),
+    newComponent,
+
+    -- ** ComponentBindingPropertiesValue
+    ComponentBindingPropertiesValue (ComponentBindingPropertiesValue'),
+    newComponentBindingPropertiesValue,
+
+    -- ** ComponentBindingPropertiesValueProperties
+    ComponentBindingPropertiesValueProperties (ComponentBindingPropertiesValueProperties'),
+    newComponentBindingPropertiesValueProperties,
+
+    -- ** ComponentChild
+    ComponentChild (ComponentChild'),
+    newComponentChild,
+
+    -- ** ComponentConditionProperty
+    ComponentConditionProperty (ComponentConditionProperty'),
+    newComponentConditionProperty,
+
+    -- ** ComponentDataConfiguration
+    ComponentDataConfiguration (ComponentDataConfiguration'),
+    newComponentDataConfiguration,
+
+    -- ** ComponentEvent
+    ComponentEvent (ComponentEvent'),
+    newComponentEvent,
+
+    -- ** ComponentProperty
+    ComponentProperty (ComponentProperty'),
+    newComponentProperty,
+
+    -- ** ComponentPropertyBindingProperties
+    ComponentPropertyBindingProperties (ComponentPropertyBindingProperties'),
+    newComponentPropertyBindingProperties,
+
+    -- ** ComponentSummary
+    ComponentSummary (ComponentSummary'),
+    newComponentSummary,
+
+    -- ** ComponentVariant
+    ComponentVariant (ComponentVariant'),
+    newComponentVariant,
+
+    -- ** CreateComponentData
+    CreateComponentData (CreateComponentData'),
+    newCreateComponentData,
+
+    -- ** CreateFormData
+    CreateFormData (CreateFormData'),
+    newCreateFormData,
+
+    -- ** CreateThemeData
+    CreateThemeData (CreateThemeData'),
+    newCreateThemeData,
+
+    -- ** ExchangeCodeForTokenRequestBody
+    ExchangeCodeForTokenRequestBody (ExchangeCodeForTokenRequestBody'),
+    newExchangeCodeForTokenRequestBody,
+
+    -- ** FieldConfig
+    FieldConfig (FieldConfig'),
+    newFieldConfig,
+
+    -- ** FieldInputConfig
+    FieldInputConfig (FieldInputConfig'),
+    newFieldInputConfig,
+
+    -- ** FieldPosition
+    FieldPosition (FieldPosition'),
+    newFieldPosition,
+
+    -- ** FieldValidationConfiguration
+    FieldValidationConfiguration (FieldValidationConfiguration'),
+    newFieldValidationConfiguration,
+
+    -- ** Form
+    Form (Form'),
+    newForm,
+
+    -- ** FormBindingElement
+    FormBindingElement (FormBindingElement'),
+    newFormBindingElement,
+
+    -- ** FormButton
+    FormButton (FormButton'),
+    newFormButton,
+
+    -- ** FormCTA
+    FormCTA (FormCTA'),
+    newFormCTA,
+
+    -- ** FormDataTypeConfig
+    FormDataTypeConfig (FormDataTypeConfig'),
+    newFormDataTypeConfig,
+
+    -- ** FormInputValueProperty
+    FormInputValueProperty (FormInputValueProperty'),
+    newFormInputValueProperty,
+
+    -- ** FormStyle
+    FormStyle (FormStyle'),
+    newFormStyle,
+
+    -- ** FormStyleConfig
+    FormStyleConfig (FormStyleConfig'),
+    newFormStyleConfig,
+
+    -- ** FormSummary
+    FormSummary (FormSummary'),
+    newFormSummary,
+
+    -- ** MutationActionSetStateParameter
+    MutationActionSetStateParameter (MutationActionSetStateParameter'),
+    newMutationActionSetStateParameter,
+
+    -- ** Predicate
+    Predicate (Predicate'),
+    newPredicate,
+
+    -- ** PutMetadataFlagBody
+    PutMetadataFlagBody (PutMetadataFlagBody'),
+    newPutMetadataFlagBody,
+
+    -- ** RefreshTokenRequestBody
+    RefreshTokenRequestBody (RefreshTokenRequestBody'),
+    newRefreshTokenRequestBody,
+
+    -- ** SectionalElement
+    SectionalElement (SectionalElement'),
+    newSectionalElement,
+
+    -- ** SortProperty
+    SortProperty (SortProperty'),
+    newSortProperty,
+
+    -- ** Theme
+    Theme (Theme'),
+    newTheme,
+
+    -- ** ThemeSummary
+    ThemeSummary (ThemeSummary'),
+    newThemeSummary,
+
+    -- ** ThemeValue
+    ThemeValue (ThemeValue'),
+    newThemeValue,
+
+    -- ** ThemeValues
+    ThemeValues (ThemeValues'),
+    newThemeValues,
+
+    -- ** UpdateComponentData
+    UpdateComponentData (UpdateComponentData'),
+    newUpdateComponentData,
+
+    -- ** UpdateFormData
+    UpdateFormData (UpdateFormData'),
+    newUpdateFormData,
+
+    -- ** UpdateThemeData
+    UpdateThemeData (UpdateThemeData'),
+    newUpdateThemeData,
+
+    -- ** ValueMapping
+    ValueMapping (ValueMapping'),
+    newValueMapping,
+
+    -- ** ValueMappings
+    ValueMappings (ValueMappings'),
+    newValueMappings,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.CreateComponent
+import Amazonka.AmplifyUiBuilder.CreateForm
+import Amazonka.AmplifyUiBuilder.CreateTheme
+import Amazonka.AmplifyUiBuilder.DeleteComponent
+import Amazonka.AmplifyUiBuilder.DeleteForm
+import Amazonka.AmplifyUiBuilder.DeleteTheme
+import Amazonka.AmplifyUiBuilder.ExchangeCodeForToken
+import Amazonka.AmplifyUiBuilder.ExportComponents
+import Amazonka.AmplifyUiBuilder.ExportForms
+import Amazonka.AmplifyUiBuilder.ExportThemes
+import Amazonka.AmplifyUiBuilder.GetComponent
+import Amazonka.AmplifyUiBuilder.GetForm
+import Amazonka.AmplifyUiBuilder.GetMetadata
+import Amazonka.AmplifyUiBuilder.GetTheme
+import Amazonka.AmplifyUiBuilder.Lens
+import Amazonka.AmplifyUiBuilder.ListComponents
+import Amazonka.AmplifyUiBuilder.ListForms
+import Amazonka.AmplifyUiBuilder.ListThemes
+import Amazonka.AmplifyUiBuilder.PutMetadataFlag
+import Amazonka.AmplifyUiBuilder.RefreshToken
+import Amazonka.AmplifyUiBuilder.Types
+import Amazonka.AmplifyUiBuilder.UpdateComponent
+import Amazonka.AmplifyUiBuilder.UpdateForm
+import Amazonka.AmplifyUiBuilder.UpdateTheme
+import Amazonka.AmplifyUiBuilder.Waiters
+
+-- $errors
+-- Error matchers are designed for use with the functions provided by
+-- <http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+-- This allows catching (and rethrowing) service specific errors returned
+-- by 'AmplifyUiBuilder'.
+
+-- $operations
+-- Some AWS operations return results that are incomplete and require subsequent
+-- requests in order to obtain the entire result set. The process of sending
+-- subsequent requests to continue where a previous request left off is called
+-- pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+-- 1000 objects at a time, and you must send subsequent requests with the
+-- appropriate Marker in order to retrieve the next page of results.
+--
+-- Operations that have an 'AWSPager' instance can transparently perform subsequent
+-- requests, correctly setting Markers and other request facets to iterate through
+-- the entire result set of a truncated API operation. Operations which support
+-- this have an additional note in the documentation.
+--
+-- Many operations have the ability to filter results on the server side. See the
+-- individual operation parameters for details.
+
+-- $waiters
+-- Waiters poll by repeatedly sending a request until some remote success condition
+-- configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+-- determines how many attempts should be made, in addition to delay and retry strategies.
diff --git a/gen/Amazonka/AmplifyUiBuilder/CreateComponent.hs b/gen/Amazonka/AmplifyUiBuilder/CreateComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/CreateComponent.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.CreateComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new component for an Amplify app.
+module Amazonka.AmplifyUiBuilder.CreateComponent
+  ( -- * Creating a Request
+    CreateComponent (..),
+    newCreateComponent,
+
+    -- * Request Lenses
+    createComponent_clientToken,
+    createComponent_appId,
+    createComponent_componentToCreate,
+    createComponent_environmentName,
+
+    -- * Destructuring the Response
+    CreateComponentResponse (..),
+    newCreateComponentResponse,
+
+    -- * Response Lenses
+    createComponentResponse_entity,
+    createComponentResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateComponent' smart constructor.
+data CreateComponent = CreateComponent'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app to associate with the component.
+    appId :: Prelude.Text,
+    -- | Represents the configuration of the component to create.
+    componentToCreate :: CreateComponentData,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createComponent_clientToken' - The unique client token.
+--
+-- 'appId', 'createComponent_appId' - The unique ID of the Amplify app to associate with the component.
+--
+-- 'componentToCreate', 'createComponent_componentToCreate' - Represents the configuration of the component to create.
+--
+-- 'environmentName', 'createComponent_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newCreateComponent ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'componentToCreate'
+  CreateComponentData ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  CreateComponent
+newCreateComponent
+  pAppId_
+  pComponentToCreate_
+  pEnvironmentName_ =
+    CreateComponent'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        componentToCreate = pComponentToCreate_,
+        environmentName = pEnvironmentName_
+      }
+
+-- | The unique client token.
+createComponent_clientToken :: Lens.Lens' CreateComponent (Prelude.Maybe Prelude.Text)
+createComponent_clientToken = Lens.lens (\CreateComponent' {clientToken} -> clientToken) (\s@CreateComponent' {} a -> s {clientToken = a} :: CreateComponent)
+
+-- | The unique ID of the Amplify app to associate with the component.
+createComponent_appId :: Lens.Lens' CreateComponent Prelude.Text
+createComponent_appId = Lens.lens (\CreateComponent' {appId} -> appId) (\s@CreateComponent' {} a -> s {appId = a} :: CreateComponent)
+
+-- | Represents the configuration of the component to create.
+createComponent_componentToCreate :: Lens.Lens' CreateComponent CreateComponentData
+createComponent_componentToCreate = Lens.lens (\CreateComponent' {componentToCreate} -> componentToCreate) (\s@CreateComponent' {} a -> s {componentToCreate = a} :: CreateComponent)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+createComponent_environmentName :: Lens.Lens' CreateComponent Prelude.Text
+createComponent_environmentName = Lens.lens (\CreateComponent' {environmentName} -> environmentName) (\s@CreateComponent' {} a -> s {environmentName = a} :: CreateComponent)
+
+instance Core.AWSRequest CreateComponent where
+  type
+    AWSResponse CreateComponent =
+      CreateComponentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateComponentResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateComponent where
+  hashWithSalt _salt CreateComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` componentToCreate
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData CreateComponent where
+  rnf CreateComponent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf componentToCreate
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders CreateComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateComponent where
+  toJSON CreateComponent' {..} =
+    Data.toJSON componentToCreate
+
+instance Data.ToPath CreateComponent where
+  toPath CreateComponent' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components"
+      ]
+
+instance Data.ToQuery CreateComponent where
+  toQuery CreateComponent' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newCreateComponentResponse' smart constructor.
+data CreateComponentResponse = CreateComponentResponse'
+  { -- | Describes the configuration of the new component.
+    entity :: Prelude.Maybe Component,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'createComponentResponse_entity' - Describes the configuration of the new component.
+--
+-- 'httpStatus', 'createComponentResponse_httpStatus' - The response's http status code.
+newCreateComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateComponentResponse
+newCreateComponentResponse pHttpStatus_ =
+  CreateComponentResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the new component.
+createComponentResponse_entity :: Lens.Lens' CreateComponentResponse (Prelude.Maybe Component)
+createComponentResponse_entity = Lens.lens (\CreateComponentResponse' {entity} -> entity) (\s@CreateComponentResponse' {} a -> s {entity = a} :: CreateComponentResponse)
+
+-- | The response's http status code.
+createComponentResponse_httpStatus :: Lens.Lens' CreateComponentResponse Prelude.Int
+createComponentResponse_httpStatus = Lens.lens (\CreateComponentResponse' {httpStatus} -> httpStatus) (\s@CreateComponentResponse' {} a -> s {httpStatus = a} :: CreateComponentResponse)
+
+instance Prelude.NFData CreateComponentResponse where
+  rnf CreateComponentResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/CreateForm.hs b/gen/Amazonka/AmplifyUiBuilder/CreateForm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/CreateForm.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.CreateForm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new form for an Amplify app.
+module Amazonka.AmplifyUiBuilder.CreateForm
+  ( -- * Creating a Request
+    CreateForm (..),
+    newCreateForm,
+
+    -- * Request Lenses
+    createForm_clientToken,
+    createForm_appId,
+    createForm_environmentName,
+    createForm_formToCreate,
+
+    -- * Destructuring the Response
+    CreateFormResponse (..),
+    newCreateFormResponse,
+
+    -- * Response Lenses
+    createFormResponse_entity,
+    createFormResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateForm' smart constructor.
+data CreateForm = CreateForm'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app to associate with the form.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | Represents the configuration of the form to create.
+    formToCreate :: CreateFormData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateForm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createForm_clientToken' - The unique client token.
+--
+-- 'appId', 'createForm_appId' - The unique ID of the Amplify app to associate with the form.
+--
+-- 'environmentName', 'createForm_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'formToCreate', 'createForm_formToCreate' - Represents the configuration of the form to create.
+newCreateForm ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'formToCreate'
+  CreateFormData ->
+  CreateForm
+newCreateForm
+  pAppId_
+  pEnvironmentName_
+  pFormToCreate_ =
+    CreateForm'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        environmentName = pEnvironmentName_,
+        formToCreate = pFormToCreate_
+      }
+
+-- | The unique client token.
+createForm_clientToken :: Lens.Lens' CreateForm (Prelude.Maybe Prelude.Text)
+createForm_clientToken = Lens.lens (\CreateForm' {clientToken} -> clientToken) (\s@CreateForm' {} a -> s {clientToken = a} :: CreateForm)
+
+-- | The unique ID of the Amplify app to associate with the form.
+createForm_appId :: Lens.Lens' CreateForm Prelude.Text
+createForm_appId = Lens.lens (\CreateForm' {appId} -> appId) (\s@CreateForm' {} a -> s {appId = a} :: CreateForm)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+createForm_environmentName :: Lens.Lens' CreateForm Prelude.Text
+createForm_environmentName = Lens.lens (\CreateForm' {environmentName} -> environmentName) (\s@CreateForm' {} a -> s {environmentName = a} :: CreateForm)
+
+-- | Represents the configuration of the form to create.
+createForm_formToCreate :: Lens.Lens' CreateForm CreateFormData
+createForm_formToCreate = Lens.lens (\CreateForm' {formToCreate} -> formToCreate) (\s@CreateForm' {} a -> s {formToCreate = a} :: CreateForm)
+
+instance Core.AWSRequest CreateForm where
+  type AWSResponse CreateForm = CreateFormResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFormResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateForm where
+  hashWithSalt _salt CreateForm' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` formToCreate
+
+instance Prelude.NFData CreateForm where
+  rnf CreateForm' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf formToCreate
+
+instance Data.ToHeaders CreateForm where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateForm where
+  toJSON CreateForm' {..} = Data.toJSON formToCreate
+
+instance Data.ToPath CreateForm where
+  toPath CreateForm' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms"
+      ]
+
+instance Data.ToQuery CreateForm where
+  toQuery CreateForm' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newCreateFormResponse' smart constructor.
+data CreateFormResponse = CreateFormResponse'
+  { -- | Describes the configuration of the new form.
+    entity :: Prelude.Maybe Form,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFormResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'createFormResponse_entity' - Describes the configuration of the new form.
+--
+-- 'httpStatus', 'createFormResponse_httpStatus' - The response's http status code.
+newCreateFormResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFormResponse
+newCreateFormResponse pHttpStatus_ =
+  CreateFormResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the new form.
+createFormResponse_entity :: Lens.Lens' CreateFormResponse (Prelude.Maybe Form)
+createFormResponse_entity = Lens.lens (\CreateFormResponse' {entity} -> entity) (\s@CreateFormResponse' {} a -> s {entity = a} :: CreateFormResponse)
+
+-- | The response's http status code.
+createFormResponse_httpStatus :: Lens.Lens' CreateFormResponse Prelude.Int
+createFormResponse_httpStatus = Lens.lens (\CreateFormResponse' {httpStatus} -> httpStatus) (\s@CreateFormResponse' {} a -> s {httpStatus = a} :: CreateFormResponse)
+
+instance Prelude.NFData CreateFormResponse where
+  rnf CreateFormResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/CreateTheme.hs b/gen/Amazonka/AmplifyUiBuilder/CreateTheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/CreateTheme.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.CreateTheme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a theme to apply to the components in an Amplify app.
+module Amazonka.AmplifyUiBuilder.CreateTheme
+  ( -- * Creating a Request
+    CreateTheme (..),
+    newCreateTheme,
+
+    -- * Request Lenses
+    createTheme_clientToken,
+    createTheme_appId,
+    createTheme_environmentName,
+    createTheme_themeToCreate,
+
+    -- * Destructuring the Response
+    CreateThemeResponse (..),
+    newCreateThemeResponse,
+
+    -- * Response Lenses
+    createThemeResponse_entity,
+    createThemeResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateTheme' smart constructor.
+data CreateTheme = CreateTheme'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app associated with the theme.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | Represents the configuration of the theme to create.
+    themeToCreate :: CreateThemeData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateTheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createTheme_clientToken' - The unique client token.
+--
+-- 'appId', 'createTheme_appId' - The unique ID of the Amplify app associated with the theme.
+--
+-- 'environmentName', 'createTheme_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'themeToCreate', 'createTheme_themeToCreate' - Represents the configuration of the theme to create.
+newCreateTheme ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'themeToCreate'
+  CreateThemeData ->
+  CreateTheme
+newCreateTheme
+  pAppId_
+  pEnvironmentName_
+  pThemeToCreate_ =
+    CreateTheme'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        environmentName = pEnvironmentName_,
+        themeToCreate = pThemeToCreate_
+      }
+
+-- | The unique client token.
+createTheme_clientToken :: Lens.Lens' CreateTheme (Prelude.Maybe Prelude.Text)
+createTheme_clientToken = Lens.lens (\CreateTheme' {clientToken} -> clientToken) (\s@CreateTheme' {} a -> s {clientToken = a} :: CreateTheme)
+
+-- | The unique ID of the Amplify app associated with the theme.
+createTheme_appId :: Lens.Lens' CreateTheme Prelude.Text
+createTheme_appId = Lens.lens (\CreateTheme' {appId} -> appId) (\s@CreateTheme' {} a -> s {appId = a} :: CreateTheme)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+createTheme_environmentName :: Lens.Lens' CreateTheme Prelude.Text
+createTheme_environmentName = Lens.lens (\CreateTheme' {environmentName} -> environmentName) (\s@CreateTheme' {} a -> s {environmentName = a} :: CreateTheme)
+
+-- | Represents the configuration of the theme to create.
+createTheme_themeToCreate :: Lens.Lens' CreateTheme CreateThemeData
+createTheme_themeToCreate = Lens.lens (\CreateTheme' {themeToCreate} -> themeToCreate) (\s@CreateTheme' {} a -> s {themeToCreate = a} :: CreateTheme)
+
+instance Core.AWSRequest CreateTheme where
+  type AWSResponse CreateTheme = CreateThemeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateThemeResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateTheme where
+  hashWithSalt _salt CreateTheme' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` themeToCreate
+
+instance Prelude.NFData CreateTheme where
+  rnf CreateTheme' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf themeToCreate
+
+instance Data.ToHeaders CreateTheme where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateTheme where
+  toJSON CreateTheme' {..} = Data.toJSON themeToCreate
+
+instance Data.ToPath CreateTheme where
+  toPath CreateTheme' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes"
+      ]
+
+instance Data.ToQuery CreateTheme where
+  toQuery CreateTheme' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newCreateThemeResponse' smart constructor.
+data CreateThemeResponse = CreateThemeResponse'
+  { -- | Describes the configuration of the new theme.
+    entity :: Prelude.Maybe Theme,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateThemeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'createThemeResponse_entity' - Describes the configuration of the new theme.
+--
+-- 'httpStatus', 'createThemeResponse_httpStatus' - The response's http status code.
+newCreateThemeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateThemeResponse
+newCreateThemeResponse pHttpStatus_ =
+  CreateThemeResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the new theme.
+createThemeResponse_entity :: Lens.Lens' CreateThemeResponse (Prelude.Maybe Theme)
+createThemeResponse_entity = Lens.lens (\CreateThemeResponse' {entity} -> entity) (\s@CreateThemeResponse' {} a -> s {entity = a} :: CreateThemeResponse)
+
+-- | The response's http status code.
+createThemeResponse_httpStatus :: Lens.Lens' CreateThemeResponse Prelude.Int
+createThemeResponse_httpStatus = Lens.lens (\CreateThemeResponse' {httpStatus} -> httpStatus) (\s@CreateThemeResponse' {} a -> s {httpStatus = a} :: CreateThemeResponse)
+
+instance Prelude.NFData CreateThemeResponse where
+  rnf CreateThemeResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/DeleteComponent.hs b/gen/Amazonka/AmplifyUiBuilder/DeleteComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/DeleteComponent.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.DeleteComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a component from an Amplify app.
+module Amazonka.AmplifyUiBuilder.DeleteComponent
+  ( -- * Creating a Request
+    DeleteComponent (..),
+    newDeleteComponent,
+
+    -- * Request Lenses
+    deleteComponent_appId,
+    deleteComponent_environmentName,
+    deleteComponent_id,
+
+    -- * Destructuring the Response
+    DeleteComponentResponse (..),
+    newDeleteComponentResponse,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteComponent' smart constructor.
+data DeleteComponent = DeleteComponent'
+  { -- | The unique ID of the Amplify app associated with the component to
+    -- delete.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the component to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteComponent_appId' - The unique ID of the Amplify app associated with the component to
+-- delete.
+--
+-- 'environmentName', 'deleteComponent_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'deleteComponent_id' - The unique ID of the component to delete.
+newDeleteComponent ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteComponent
+newDeleteComponent pAppId_ pEnvironmentName_ pId_ =
+  DeleteComponent'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app associated with the component to
+-- delete.
+deleteComponent_appId :: Lens.Lens' DeleteComponent Prelude.Text
+deleteComponent_appId = Lens.lens (\DeleteComponent' {appId} -> appId) (\s@DeleteComponent' {} a -> s {appId = a} :: DeleteComponent)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+deleteComponent_environmentName :: Lens.Lens' DeleteComponent Prelude.Text
+deleteComponent_environmentName = Lens.lens (\DeleteComponent' {environmentName} -> environmentName) (\s@DeleteComponent' {} a -> s {environmentName = a} :: DeleteComponent)
+
+-- | The unique ID of the component to delete.
+deleteComponent_id :: Lens.Lens' DeleteComponent Prelude.Text
+deleteComponent_id = Lens.lens (\DeleteComponent' {id} -> id) (\s@DeleteComponent' {} a -> s {id = a} :: DeleteComponent)
+
+instance Core.AWSRequest DeleteComponent where
+  type
+    AWSResponse DeleteComponent =
+      DeleteComponentResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response =
+    Response.receiveNull DeleteComponentResponse'
+
+instance Prelude.Hashable DeleteComponent where
+  hashWithSalt _salt DeleteComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteComponent where
+  rnf DeleteComponent' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteComponent where
+  toPath DeleteComponent' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery DeleteComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteComponentResponse' smart constructor.
+data DeleteComponentResponse = DeleteComponentResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteComponentResponse ::
+  DeleteComponentResponse
+newDeleteComponentResponse = DeleteComponentResponse'
+
+instance Prelude.NFData DeleteComponentResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AmplifyUiBuilder/DeleteForm.hs b/gen/Amazonka/AmplifyUiBuilder/DeleteForm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/DeleteForm.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.DeleteForm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a form from an Amplify app.
+module Amazonka.AmplifyUiBuilder.DeleteForm
+  ( -- * Creating a Request
+    DeleteForm (..),
+    newDeleteForm,
+
+    -- * Request Lenses
+    deleteForm_appId,
+    deleteForm_environmentName,
+    deleteForm_id,
+
+    -- * Destructuring the Response
+    DeleteFormResponse (..),
+    newDeleteFormResponse,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteForm' smart constructor.
+data DeleteForm = DeleteForm'
+  { -- | The unique ID of the Amplify app associated with the form to delete.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the form to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteForm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteForm_appId' - The unique ID of the Amplify app associated with the form to delete.
+--
+-- 'environmentName', 'deleteForm_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'deleteForm_id' - The unique ID of the form to delete.
+newDeleteForm ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteForm
+newDeleteForm pAppId_ pEnvironmentName_ pId_ =
+  DeleteForm'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app associated with the form to delete.
+deleteForm_appId :: Lens.Lens' DeleteForm Prelude.Text
+deleteForm_appId = Lens.lens (\DeleteForm' {appId} -> appId) (\s@DeleteForm' {} a -> s {appId = a} :: DeleteForm)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+deleteForm_environmentName :: Lens.Lens' DeleteForm Prelude.Text
+deleteForm_environmentName = Lens.lens (\DeleteForm' {environmentName} -> environmentName) (\s@DeleteForm' {} a -> s {environmentName = a} :: DeleteForm)
+
+-- | The unique ID of the form to delete.
+deleteForm_id :: Lens.Lens' DeleteForm Prelude.Text
+deleteForm_id = Lens.lens (\DeleteForm' {id} -> id) (\s@DeleteForm' {} a -> s {id = a} :: DeleteForm)
+
+instance Core.AWSRequest DeleteForm where
+  type AWSResponse DeleteForm = DeleteFormResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteFormResponse'
+
+instance Prelude.Hashable DeleteForm where
+  hashWithSalt _salt DeleteForm' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteForm where
+  rnf DeleteForm' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteForm where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteForm where
+  toPath DeleteForm' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery DeleteForm where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFormResponse' smart constructor.
+data DeleteFormResponse = DeleteFormResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFormResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteFormResponse ::
+  DeleteFormResponse
+newDeleteFormResponse = DeleteFormResponse'
+
+instance Prelude.NFData DeleteFormResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AmplifyUiBuilder/DeleteTheme.hs b/gen/Amazonka/AmplifyUiBuilder/DeleteTheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/DeleteTheme.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.DeleteTheme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a theme from an Amplify app.
+module Amazonka.AmplifyUiBuilder.DeleteTheme
+  ( -- * Creating a Request
+    DeleteTheme (..),
+    newDeleteTheme,
+
+    -- * Request Lenses
+    deleteTheme_appId,
+    deleteTheme_environmentName,
+    deleteTheme_id,
+
+    -- * Destructuring the Response
+    DeleteThemeResponse (..),
+    newDeleteThemeResponse,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteTheme' smart constructor.
+data DeleteTheme = DeleteTheme'
+  { -- | The unique ID of the Amplify app associated with the theme to delete.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the theme to delete.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteTheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteTheme_appId' - The unique ID of the Amplify app associated with the theme to delete.
+--
+-- 'environmentName', 'deleteTheme_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'deleteTheme_id' - The unique ID of the theme to delete.
+newDeleteTheme ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  DeleteTheme
+newDeleteTheme pAppId_ pEnvironmentName_ pId_ =
+  DeleteTheme'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app associated with the theme to delete.
+deleteTheme_appId :: Lens.Lens' DeleteTheme Prelude.Text
+deleteTheme_appId = Lens.lens (\DeleteTheme' {appId} -> appId) (\s@DeleteTheme' {} a -> s {appId = a} :: DeleteTheme)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+deleteTheme_environmentName :: Lens.Lens' DeleteTheme Prelude.Text
+deleteTheme_environmentName = Lens.lens (\DeleteTheme' {environmentName} -> environmentName) (\s@DeleteTheme' {} a -> s {environmentName = a} :: DeleteTheme)
+
+-- | The unique ID of the theme to delete.
+deleteTheme_id :: Lens.Lens' DeleteTheme Prelude.Text
+deleteTheme_id = Lens.lens (\DeleteTheme' {id} -> id) (\s@DeleteTheme' {} a -> s {id = a} :: DeleteTheme)
+
+instance Core.AWSRequest DeleteTheme where
+  type AWSResponse DeleteTheme = DeleteThemeResponse
+  request overrides =
+    Request.delete (overrides defaultService)
+  response = Response.receiveNull DeleteThemeResponse'
+
+instance Prelude.Hashable DeleteTheme where
+  hashWithSalt _salt DeleteTheme' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData DeleteTheme where
+  rnf DeleteTheme' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders DeleteTheme where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath DeleteTheme where
+  toPath DeleteTheme' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery DeleteTheme where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteThemeResponse' smart constructor.
+data DeleteThemeResponse = DeleteThemeResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteThemeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteThemeResponse ::
+  DeleteThemeResponse
+newDeleteThemeResponse = DeleteThemeResponse'
+
+instance Prelude.NFData DeleteThemeResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AmplifyUiBuilder/ExchangeCodeForToken.hs b/gen/Amazonka/AmplifyUiBuilder/ExchangeCodeForToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ExchangeCodeForToken.hs
@@ -0,0 +1,219 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ExchangeCodeForToken
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exchanges an access code for a token.
+module Amazonka.AmplifyUiBuilder.ExchangeCodeForToken
+  ( -- * Creating a Request
+    ExchangeCodeForToken (..),
+    newExchangeCodeForToken,
+
+    -- * Request Lenses
+    exchangeCodeForToken_provider,
+    exchangeCodeForToken_request,
+
+    -- * Destructuring the Response
+    ExchangeCodeForTokenResponse (..),
+    newExchangeCodeForTokenResponse,
+
+    -- * Response Lenses
+    exchangeCodeForTokenResponse_httpStatus,
+    exchangeCodeForTokenResponse_accessToken,
+    exchangeCodeForTokenResponse_expiresIn,
+    exchangeCodeForTokenResponse_refreshToken,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExchangeCodeForToken' smart constructor.
+data ExchangeCodeForToken = ExchangeCodeForToken'
+  { -- | The third-party provider for the token. The only valid value is @figma@.
+    provider :: TokenProviders,
+    -- | Describes the configuration of the request.
+    request :: ExchangeCodeForTokenRequestBody
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExchangeCodeForToken' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'provider', 'exchangeCodeForToken_provider' - The third-party provider for the token. The only valid value is @figma@.
+--
+-- 'request', 'exchangeCodeForToken_request' - Describes the configuration of the request.
+newExchangeCodeForToken ::
+  -- | 'provider'
+  TokenProviders ->
+  -- | 'request'
+  ExchangeCodeForTokenRequestBody ->
+  ExchangeCodeForToken
+newExchangeCodeForToken pProvider_ pRequest_ =
+  ExchangeCodeForToken'
+    { provider = pProvider_,
+      request = pRequest_
+    }
+
+-- | The third-party provider for the token. The only valid value is @figma@.
+exchangeCodeForToken_provider :: Lens.Lens' ExchangeCodeForToken TokenProviders
+exchangeCodeForToken_provider = Lens.lens (\ExchangeCodeForToken' {provider} -> provider) (\s@ExchangeCodeForToken' {} a -> s {provider = a} :: ExchangeCodeForToken)
+
+-- | Describes the configuration of the request.
+exchangeCodeForToken_request :: Lens.Lens' ExchangeCodeForToken ExchangeCodeForTokenRequestBody
+exchangeCodeForToken_request = Lens.lens (\ExchangeCodeForToken' {request} -> request) (\s@ExchangeCodeForToken' {} a -> s {request = a} :: ExchangeCodeForToken)
+
+instance Core.AWSRequest ExchangeCodeForToken where
+  type
+    AWSResponse ExchangeCodeForToken =
+      ExchangeCodeForTokenResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExchangeCodeForTokenResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "accessToken")
+            Prelude.<*> (x Data..:> "expiresIn")
+            Prelude.<*> (x Data..:> "refreshToken")
+      )
+
+instance Prelude.Hashable ExchangeCodeForToken where
+  hashWithSalt _salt ExchangeCodeForToken' {..} =
+    _salt
+      `Prelude.hashWithSalt` provider
+      `Prelude.hashWithSalt` request
+
+instance Prelude.NFData ExchangeCodeForToken where
+  rnf ExchangeCodeForToken' {..} =
+    Prelude.rnf provider
+      `Prelude.seq` Prelude.rnf request
+
+instance Data.ToHeaders ExchangeCodeForToken where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ExchangeCodeForToken where
+  toJSON ExchangeCodeForToken' {..} =
+    Data.toJSON request
+
+instance Data.ToPath ExchangeCodeForToken where
+  toPath ExchangeCodeForToken' {..} =
+    Prelude.mconcat ["/tokens/", Data.toBS provider]
+
+instance Data.ToQuery ExchangeCodeForToken where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newExchangeCodeForTokenResponse' smart constructor.
+data ExchangeCodeForTokenResponse = ExchangeCodeForTokenResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The access token.
+    accessToken :: Data.Sensitive Prelude.Text,
+    -- | The date and time when the new access token expires.
+    expiresIn :: Prelude.Int,
+    -- | The token to use to refresh a previously issued access token that might
+    -- have expired.
+    refreshToken :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExchangeCodeForTokenResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'exchangeCodeForTokenResponse_httpStatus' - The response's http status code.
+--
+-- 'accessToken', 'exchangeCodeForTokenResponse_accessToken' - The access token.
+--
+-- 'expiresIn', 'exchangeCodeForTokenResponse_expiresIn' - The date and time when the new access token expires.
+--
+-- 'refreshToken', 'exchangeCodeForTokenResponse_refreshToken' - The token to use to refresh a previously issued access token that might
+-- have expired.
+newExchangeCodeForTokenResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'accessToken'
+  Prelude.Text ->
+  -- | 'expiresIn'
+  Prelude.Int ->
+  -- | 'refreshToken'
+  Prelude.Text ->
+  ExchangeCodeForTokenResponse
+newExchangeCodeForTokenResponse
+  pHttpStatus_
+  pAccessToken_
+  pExpiresIn_
+  pRefreshToken_ =
+    ExchangeCodeForTokenResponse'
+      { httpStatus =
+          pHttpStatus_,
+        accessToken =
+          Data._Sensitive Lens.# pAccessToken_,
+        expiresIn = pExpiresIn_,
+        refreshToken =
+          Data._Sensitive Lens.# pRefreshToken_
+      }
+
+-- | The response's http status code.
+exchangeCodeForTokenResponse_httpStatus :: Lens.Lens' ExchangeCodeForTokenResponse Prelude.Int
+exchangeCodeForTokenResponse_httpStatus = Lens.lens (\ExchangeCodeForTokenResponse' {httpStatus} -> httpStatus) (\s@ExchangeCodeForTokenResponse' {} a -> s {httpStatus = a} :: ExchangeCodeForTokenResponse)
+
+-- | The access token.
+exchangeCodeForTokenResponse_accessToken :: Lens.Lens' ExchangeCodeForTokenResponse Prelude.Text
+exchangeCodeForTokenResponse_accessToken = Lens.lens (\ExchangeCodeForTokenResponse' {accessToken} -> accessToken) (\s@ExchangeCodeForTokenResponse' {} a -> s {accessToken = a} :: ExchangeCodeForTokenResponse) Prelude.. Data._Sensitive
+
+-- | The date and time when the new access token expires.
+exchangeCodeForTokenResponse_expiresIn :: Lens.Lens' ExchangeCodeForTokenResponse Prelude.Int
+exchangeCodeForTokenResponse_expiresIn = Lens.lens (\ExchangeCodeForTokenResponse' {expiresIn} -> expiresIn) (\s@ExchangeCodeForTokenResponse' {} a -> s {expiresIn = a} :: ExchangeCodeForTokenResponse)
+
+-- | The token to use to refresh a previously issued access token that might
+-- have expired.
+exchangeCodeForTokenResponse_refreshToken :: Lens.Lens' ExchangeCodeForTokenResponse Prelude.Text
+exchangeCodeForTokenResponse_refreshToken = Lens.lens (\ExchangeCodeForTokenResponse' {refreshToken} -> refreshToken) (\s@ExchangeCodeForTokenResponse' {} a -> s {refreshToken = a} :: ExchangeCodeForTokenResponse) Prelude.. Data._Sensitive
+
+instance Prelude.NFData ExchangeCodeForTokenResponse where
+  rnf ExchangeCodeForTokenResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf accessToken
+      `Prelude.seq` Prelude.rnf expiresIn
+      `Prelude.seq` Prelude.rnf refreshToken
diff --git a/gen/Amazonka/AmplifyUiBuilder/ExportComponents.hs b/gen/Amazonka/AmplifyUiBuilder/ExportComponents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ExportComponents.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ExportComponents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports component configurations to code that is ready to integrate into
+-- an Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ExportComponents
+  ( -- * Creating a Request
+    ExportComponents (..),
+    newExportComponents,
+
+    -- * Request Lenses
+    exportComponents_nextToken,
+    exportComponents_appId,
+    exportComponents_environmentName,
+
+    -- * Destructuring the Response
+    ExportComponentsResponse (..),
+    newExportComponentsResponse,
+
+    -- * Response Lenses
+    exportComponentsResponse_nextToken,
+    exportComponentsResponse_httpStatus,
+    exportComponentsResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportComponents' smart constructor.
+data ExportComponents = ExportComponents'
+  { -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app to export components to.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportComponents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportComponents_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'exportComponents_appId' - The unique ID of the Amplify app to export components to.
+--
+-- 'environmentName', 'exportComponents_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newExportComponents ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ExportComponents
+newExportComponents pAppId_ pEnvironmentName_ =
+  ExportComponents'
+    { nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The token to request the next page of results.
+exportComponents_nextToken :: Lens.Lens' ExportComponents (Prelude.Maybe Prelude.Text)
+exportComponents_nextToken = Lens.lens (\ExportComponents' {nextToken} -> nextToken) (\s@ExportComponents' {} a -> s {nextToken = a} :: ExportComponents)
+
+-- | The unique ID of the Amplify app to export components to.
+exportComponents_appId :: Lens.Lens' ExportComponents Prelude.Text
+exportComponents_appId = Lens.lens (\ExportComponents' {appId} -> appId) (\s@ExportComponents' {} a -> s {appId = a} :: ExportComponents)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+exportComponents_environmentName :: Lens.Lens' ExportComponents Prelude.Text
+exportComponents_environmentName = Lens.lens (\ExportComponents' {environmentName} -> environmentName) (\s@ExportComponents' {} a -> s {environmentName = a} :: ExportComponents)
+
+instance Core.AWSPager ExportComponents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? exportComponentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. exportComponentsResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& exportComponents_nextToken
+          Lens..~ rs
+          Lens.^? exportComponentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ExportComponents where
+  type
+    AWSResponse ExportComponents =
+      ExportComponentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportComponentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ExportComponents where
+  hashWithSalt _salt ExportComponents' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ExportComponents where
+  rnf ExportComponents' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ExportComponents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ExportComponents where
+  toPath ExportComponents' {..} =
+    Prelude.mconcat
+      [ "/export/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components"
+      ]
+
+instance Data.ToQuery ExportComponents where
+  toQuery ExportComponents' {..} =
+    Prelude.mconcat ["nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newExportComponentsResponse' smart constructor.
+data ExportComponentsResponse = ExportComponentsResponse'
+  { -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Represents the configuration of the exported components.
+    entities :: [Component]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportComponentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportComponentsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'exportComponentsResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'exportComponentsResponse_entities' - Represents the configuration of the exported components.
+newExportComponentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportComponentsResponse
+newExportComponentsResponse pHttpStatus_ =
+  ExportComponentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s included if more results are available.
+exportComponentsResponse_nextToken :: Lens.Lens' ExportComponentsResponse (Prelude.Maybe Prelude.Text)
+exportComponentsResponse_nextToken = Lens.lens (\ExportComponentsResponse' {nextToken} -> nextToken) (\s@ExportComponentsResponse' {} a -> s {nextToken = a} :: ExportComponentsResponse)
+
+-- | The response's http status code.
+exportComponentsResponse_httpStatus :: Lens.Lens' ExportComponentsResponse Prelude.Int
+exportComponentsResponse_httpStatus = Lens.lens (\ExportComponentsResponse' {httpStatus} -> httpStatus) (\s@ExportComponentsResponse' {} a -> s {httpStatus = a} :: ExportComponentsResponse)
+
+-- | Represents the configuration of the exported components.
+exportComponentsResponse_entities :: Lens.Lens' ExportComponentsResponse [Component]
+exportComponentsResponse_entities = Lens.lens (\ExportComponentsResponse' {entities} -> entities) (\s@ExportComponentsResponse' {} a -> s {entities = a} :: ExportComponentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ExportComponentsResponse where
+  rnf ExportComponentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/ExportForms.hs b/gen/Amazonka/AmplifyUiBuilder/ExportForms.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ExportForms.hs
@@ -0,0 +1,225 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ExportForms
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports form configurations to code that is ready to integrate into an
+-- Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ExportForms
+  ( -- * Creating a Request
+    ExportForms (..),
+    newExportForms,
+
+    -- * Request Lenses
+    exportForms_nextToken,
+    exportForms_appId,
+    exportForms_environmentName,
+
+    -- * Destructuring the Response
+    ExportFormsResponse (..),
+    newExportFormsResponse,
+
+    -- * Response Lenses
+    exportFormsResponse_nextToken,
+    exportFormsResponse_httpStatus,
+    exportFormsResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportForms' smart constructor.
+data ExportForms = ExportForms'
+  { -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app to export forms to.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportForms' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportForms_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'exportForms_appId' - The unique ID of the Amplify app to export forms to.
+--
+-- 'environmentName', 'exportForms_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newExportForms ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ExportForms
+newExportForms pAppId_ pEnvironmentName_ =
+  ExportForms'
+    { nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The token to request the next page of results.
+exportForms_nextToken :: Lens.Lens' ExportForms (Prelude.Maybe Prelude.Text)
+exportForms_nextToken = Lens.lens (\ExportForms' {nextToken} -> nextToken) (\s@ExportForms' {} a -> s {nextToken = a} :: ExportForms)
+
+-- | The unique ID of the Amplify app to export forms to.
+exportForms_appId :: Lens.Lens' ExportForms Prelude.Text
+exportForms_appId = Lens.lens (\ExportForms' {appId} -> appId) (\s@ExportForms' {} a -> s {appId = a} :: ExportForms)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+exportForms_environmentName :: Lens.Lens' ExportForms Prelude.Text
+exportForms_environmentName = Lens.lens (\ExportForms' {environmentName} -> environmentName) (\s@ExportForms' {} a -> s {environmentName = a} :: ExportForms)
+
+instance Core.AWSPager ExportForms where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? exportFormsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. exportFormsResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& exportForms_nextToken
+          Lens..~ rs
+          Lens.^? exportFormsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ExportForms where
+  type AWSResponse ExportForms = ExportFormsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportFormsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ExportForms where
+  hashWithSalt _salt ExportForms' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ExportForms where
+  rnf ExportForms' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ExportForms where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ExportForms where
+  toPath ExportForms' {..} =
+    Prelude.mconcat
+      [ "/export/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms"
+      ]
+
+instance Data.ToQuery ExportForms where
+  toQuery ExportForms' {..} =
+    Prelude.mconcat ["nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newExportFormsResponse' smart constructor.
+data ExportFormsResponse = ExportFormsResponse'
+  { -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Represents the configuration of the exported forms.
+    entities :: [Form]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportFormsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportFormsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'exportFormsResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'exportFormsResponse_entities' - Represents the configuration of the exported forms.
+newExportFormsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportFormsResponse
+newExportFormsResponse pHttpStatus_ =
+  ExportFormsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s included if more results are available.
+exportFormsResponse_nextToken :: Lens.Lens' ExportFormsResponse (Prelude.Maybe Prelude.Text)
+exportFormsResponse_nextToken = Lens.lens (\ExportFormsResponse' {nextToken} -> nextToken) (\s@ExportFormsResponse' {} a -> s {nextToken = a} :: ExportFormsResponse)
+
+-- | The response's http status code.
+exportFormsResponse_httpStatus :: Lens.Lens' ExportFormsResponse Prelude.Int
+exportFormsResponse_httpStatus = Lens.lens (\ExportFormsResponse' {httpStatus} -> httpStatus) (\s@ExportFormsResponse' {} a -> s {httpStatus = a} :: ExportFormsResponse)
+
+-- | Represents the configuration of the exported forms.
+exportFormsResponse_entities :: Lens.Lens' ExportFormsResponse [Form]
+exportFormsResponse_entities = Lens.lens (\ExportFormsResponse' {entities} -> entities) (\s@ExportFormsResponse' {} a -> s {entities = a} :: ExportFormsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ExportFormsResponse where
+  rnf ExportFormsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/ExportThemes.hs b/gen/Amazonka/AmplifyUiBuilder/ExportThemes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ExportThemes.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ExportThemes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Exports theme configurations to code that is ready to integrate into an
+-- Amplify app.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ExportThemes
+  ( -- * Creating a Request
+    ExportThemes (..),
+    newExportThemes,
+
+    -- * Request Lenses
+    exportThemes_nextToken,
+    exportThemes_appId,
+    exportThemes_environmentName,
+
+    -- * Destructuring the Response
+    ExportThemesResponse (..),
+    newExportThemesResponse,
+
+    -- * Response Lenses
+    exportThemesResponse_nextToken,
+    exportThemesResponse_httpStatus,
+    exportThemesResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExportThemes' smart constructor.
+data ExportThemes = ExportThemes'
+  { -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the Amplify app to export the themes to.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportThemes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportThemes_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'exportThemes_appId' - The unique ID of the Amplify app to export the themes to.
+--
+-- 'environmentName', 'exportThemes_environmentName' - The name of the backend environment that is part of the Amplify app.
+newExportThemes ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ExportThemes
+newExportThemes pAppId_ pEnvironmentName_ =
+  ExportThemes'
+    { nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The token to request the next page of results.
+exportThemes_nextToken :: Lens.Lens' ExportThemes (Prelude.Maybe Prelude.Text)
+exportThemes_nextToken = Lens.lens (\ExportThemes' {nextToken} -> nextToken) (\s@ExportThemes' {} a -> s {nextToken = a} :: ExportThemes)
+
+-- | The unique ID of the Amplify app to export the themes to.
+exportThemes_appId :: Lens.Lens' ExportThemes Prelude.Text
+exportThemes_appId = Lens.lens (\ExportThemes' {appId} -> appId) (\s@ExportThemes' {} a -> s {appId = a} :: ExportThemes)
+
+-- | The name of the backend environment that is part of the Amplify app.
+exportThemes_environmentName :: Lens.Lens' ExportThemes Prelude.Text
+exportThemes_environmentName = Lens.lens (\ExportThemes' {environmentName} -> environmentName) (\s@ExportThemes' {} a -> s {environmentName = a} :: ExportThemes)
+
+instance Core.AWSPager ExportThemes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? exportThemesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. exportThemesResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& exportThemes_nextToken
+          Lens..~ rs
+          Lens.^? exportThemesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ExportThemes where
+  type AWSResponse ExportThemes = ExportThemesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ExportThemesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ExportThemes where
+  hashWithSalt _salt ExportThemes' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ExportThemes where
+  rnf ExportThemes' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ExportThemes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ExportThemes where
+  toPath ExportThemes' {..} =
+    Prelude.mconcat
+      [ "/export/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes"
+      ]
+
+instance Data.ToQuery ExportThemes where
+  toQuery ExportThemes' {..} =
+    Prelude.mconcat ["nextToken" Data.=: nextToken]
+
+-- | /See:/ 'newExportThemesResponse' smart constructor.
+data ExportThemesResponse = ExportThemesResponse'
+  { -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Represents the configuration of the exported themes.
+    entities :: [Theme]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExportThemesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'exportThemesResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'exportThemesResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'exportThemesResponse_entities' - Represents the configuration of the exported themes.
+newExportThemesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExportThemesResponse
+newExportThemesResponse pHttpStatus_ =
+  ExportThemesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s included if more results are available.
+exportThemesResponse_nextToken :: Lens.Lens' ExportThemesResponse (Prelude.Maybe Prelude.Text)
+exportThemesResponse_nextToken = Lens.lens (\ExportThemesResponse' {nextToken} -> nextToken) (\s@ExportThemesResponse' {} a -> s {nextToken = a} :: ExportThemesResponse)
+
+-- | The response's http status code.
+exportThemesResponse_httpStatus :: Lens.Lens' ExportThemesResponse Prelude.Int
+exportThemesResponse_httpStatus = Lens.lens (\ExportThemesResponse' {httpStatus} -> httpStatus) (\s@ExportThemesResponse' {} a -> s {httpStatus = a} :: ExportThemesResponse)
+
+-- | Represents the configuration of the exported themes.
+exportThemesResponse_entities :: Lens.Lens' ExportThemesResponse [Theme]
+exportThemesResponse_entities = Lens.lens (\ExportThemesResponse' {entities} -> entities) (\s@ExportThemesResponse' {} a -> s {entities = a} :: ExportThemesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ExportThemesResponse where
+  rnf ExportThemesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/GetComponent.hs b/gen/Amazonka/AmplifyUiBuilder/GetComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/GetComponent.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.GetComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an existing component for an Amplify app.
+module Amazonka.AmplifyUiBuilder.GetComponent
+  ( -- * Creating a Request
+    GetComponent (..),
+    newGetComponent,
+
+    -- * Request Lenses
+    getComponent_appId,
+    getComponent_environmentName,
+    getComponent_id,
+
+    -- * Destructuring the Response
+    GetComponentResponse (..),
+    newGetComponentResponse,
+
+    -- * Response Lenses
+    getComponentResponse_component,
+    getComponentResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetComponent' smart constructor.
+data GetComponent = GetComponent'
+  { -- | The unique ID of the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the component.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getComponent_appId' - The unique ID of the Amplify app.
+--
+-- 'environmentName', 'getComponent_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'getComponent_id' - The unique ID of the component.
+newGetComponent ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  GetComponent
+newGetComponent pAppId_ pEnvironmentName_ pId_ =
+  GetComponent'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app.
+getComponent_appId :: Lens.Lens' GetComponent Prelude.Text
+getComponent_appId = Lens.lens (\GetComponent' {appId} -> appId) (\s@GetComponent' {} a -> s {appId = a} :: GetComponent)
+
+-- | The name of the backend environment that is part of the Amplify app.
+getComponent_environmentName :: Lens.Lens' GetComponent Prelude.Text
+getComponent_environmentName = Lens.lens (\GetComponent' {environmentName} -> environmentName) (\s@GetComponent' {} a -> s {environmentName = a} :: GetComponent)
+
+-- | The unique ID of the component.
+getComponent_id :: Lens.Lens' GetComponent Prelude.Text
+getComponent_id = Lens.lens (\GetComponent' {id} -> id) (\s@GetComponent' {} a -> s {id = a} :: GetComponent)
+
+instance Core.AWSRequest GetComponent where
+  type AWSResponse GetComponent = GetComponentResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetComponentResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetComponent where
+  hashWithSalt _salt GetComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetComponent where
+  rnf GetComponent' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders GetComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetComponent where
+  toPath GetComponent' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery GetComponent where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetComponentResponse' smart constructor.
+data GetComponentResponse = GetComponentResponse'
+  { -- | Represents the configuration settings for the component.
+    component :: Prelude.Maybe Component,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'component', 'getComponentResponse_component' - Represents the configuration settings for the component.
+--
+-- 'httpStatus', 'getComponentResponse_httpStatus' - The response's http status code.
+newGetComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetComponentResponse
+newGetComponentResponse pHttpStatus_ =
+  GetComponentResponse'
+    { component = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the configuration settings for the component.
+getComponentResponse_component :: Lens.Lens' GetComponentResponse (Prelude.Maybe Component)
+getComponentResponse_component = Lens.lens (\GetComponentResponse' {component} -> component) (\s@GetComponentResponse' {} a -> s {component = a} :: GetComponentResponse)
+
+-- | The response's http status code.
+getComponentResponse_httpStatus :: Lens.Lens' GetComponentResponse Prelude.Int
+getComponentResponse_httpStatus = Lens.lens (\GetComponentResponse' {httpStatus} -> httpStatus) (\s@GetComponentResponse' {} a -> s {httpStatus = a} :: GetComponentResponse)
+
+instance Prelude.NFData GetComponentResponse where
+  rnf GetComponentResponse' {..} =
+    Prelude.rnf component
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/GetForm.hs b/gen/Amazonka/AmplifyUiBuilder/GetForm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/GetForm.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.GetForm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an existing form for an Amplify app.
+module Amazonka.AmplifyUiBuilder.GetForm
+  ( -- * Creating a Request
+    GetForm (..),
+    newGetForm,
+
+    -- * Request Lenses
+    getForm_appId,
+    getForm_environmentName,
+    getForm_id,
+
+    -- * Destructuring the Response
+    GetFormResponse (..),
+    newGetFormResponse,
+
+    -- * Response Lenses
+    getFormResponse_form,
+    getFormResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetForm' smart constructor.
+data GetForm = GetForm'
+  { -- | The unique ID of the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the form.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetForm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getForm_appId' - The unique ID of the Amplify app.
+--
+-- 'environmentName', 'getForm_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'getForm_id' - The unique ID of the form.
+newGetForm ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  GetForm
+newGetForm pAppId_ pEnvironmentName_ pId_ =
+  GetForm'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app.
+getForm_appId :: Lens.Lens' GetForm Prelude.Text
+getForm_appId = Lens.lens (\GetForm' {appId} -> appId) (\s@GetForm' {} a -> s {appId = a} :: GetForm)
+
+-- | The name of the backend environment that is part of the Amplify app.
+getForm_environmentName :: Lens.Lens' GetForm Prelude.Text
+getForm_environmentName = Lens.lens (\GetForm' {environmentName} -> environmentName) (\s@GetForm' {} a -> s {environmentName = a} :: GetForm)
+
+-- | The unique ID of the form.
+getForm_id :: Lens.Lens' GetForm Prelude.Text
+getForm_id = Lens.lens (\GetForm' {id} -> id) (\s@GetForm' {} a -> s {id = a} :: GetForm)
+
+instance Core.AWSRequest GetForm where
+  type AWSResponse GetForm = GetFormResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetFormResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetForm where
+  hashWithSalt _salt GetForm' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetForm where
+  rnf GetForm' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders GetForm where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetForm where
+  toPath GetForm' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery GetForm where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetFormResponse' smart constructor.
+data GetFormResponse = GetFormResponse'
+  { -- | Represents the configuration settings for the form.
+    form :: Prelude.Maybe Form,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetFormResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'form', 'getFormResponse_form' - Represents the configuration settings for the form.
+--
+-- 'httpStatus', 'getFormResponse_httpStatus' - The response's http status code.
+newGetFormResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetFormResponse
+newGetFormResponse pHttpStatus_ =
+  GetFormResponse'
+    { form = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the configuration settings for the form.
+getFormResponse_form :: Lens.Lens' GetFormResponse (Prelude.Maybe Form)
+getFormResponse_form = Lens.lens (\GetFormResponse' {form} -> form) (\s@GetFormResponse' {} a -> s {form = a} :: GetFormResponse)
+
+-- | The response's http status code.
+getFormResponse_httpStatus :: Lens.Lens' GetFormResponse Prelude.Int
+getFormResponse_httpStatus = Lens.lens (\GetFormResponse' {httpStatus} -> httpStatus) (\s@GetFormResponse' {} a -> s {httpStatus = a} :: GetFormResponse)
+
+instance Prelude.NFData GetFormResponse where
+  rnf GetFormResponse' {..} =
+    Prelude.rnf form
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/GetMetadata.hs b/gen/Amazonka/AmplifyUiBuilder/GetMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/GetMetadata.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.GetMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns existing metadata for an Amplify app.
+module Amazonka.AmplifyUiBuilder.GetMetadata
+  ( -- * Creating a Request
+    GetMetadata (..),
+    newGetMetadata,
+
+    -- * Request Lenses
+    getMetadata_appId,
+    getMetadata_environmentName,
+
+    -- * Destructuring the Response
+    GetMetadataResponse (..),
+    newGetMetadataResponse,
+
+    -- * Response Lenses
+    getMetadataResponse_httpStatus,
+    getMetadataResponse_features,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetMetadata' smart constructor.
+data GetMetadata = GetMetadata'
+  { -- | The unique ID of the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getMetadata_appId' - The unique ID of the Amplify app.
+--
+-- 'environmentName', 'getMetadata_environmentName' - The name of the backend environment that is part of the Amplify app.
+newGetMetadata ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  GetMetadata
+newGetMetadata pAppId_ pEnvironmentName_ =
+  GetMetadata'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The unique ID of the Amplify app.
+getMetadata_appId :: Lens.Lens' GetMetadata Prelude.Text
+getMetadata_appId = Lens.lens (\GetMetadata' {appId} -> appId) (\s@GetMetadata' {} a -> s {appId = a} :: GetMetadata)
+
+-- | The name of the backend environment that is part of the Amplify app.
+getMetadata_environmentName :: Lens.Lens' GetMetadata Prelude.Text
+getMetadata_environmentName = Lens.lens (\GetMetadata' {environmentName} -> environmentName) (\s@GetMetadata' {} a -> s {environmentName = a} :: GetMetadata)
+
+instance Core.AWSRequest GetMetadata where
+  type AWSResponse GetMetadata = GetMetadataResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetMetadataResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "features" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable GetMetadata where
+  hashWithSalt _salt GetMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData GetMetadata where
+  rnf GetMetadata' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders GetMetadata where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetMetadata where
+  toPath GetMetadata' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/metadata"
+      ]
+
+instance Data.ToQuery GetMetadata where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetMetadataResponse' smart constructor.
+data GetMetadataResponse = GetMetadataResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Represents the configuration settings for the features metadata.
+    features :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetMetadataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'getMetadataResponse_httpStatus' - The response's http status code.
+--
+-- 'features', 'getMetadataResponse_features' - Represents the configuration settings for the features metadata.
+newGetMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetMetadataResponse
+newGetMetadataResponse pHttpStatus_ =
+  GetMetadataResponse'
+    { httpStatus = pHttpStatus_,
+      features = Prelude.mempty
+    }
+
+-- | The response's http status code.
+getMetadataResponse_httpStatus :: Lens.Lens' GetMetadataResponse Prelude.Int
+getMetadataResponse_httpStatus = Lens.lens (\GetMetadataResponse' {httpStatus} -> httpStatus) (\s@GetMetadataResponse' {} a -> s {httpStatus = a} :: GetMetadataResponse)
+
+-- | Represents the configuration settings for the features metadata.
+getMetadataResponse_features :: Lens.Lens' GetMetadataResponse (Prelude.HashMap Prelude.Text Prelude.Text)
+getMetadataResponse_features = Lens.lens (\GetMetadataResponse' {features} -> features) (\s@GetMetadataResponse' {} a -> s {features = a} :: GetMetadataResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData GetMetadataResponse where
+  rnf GetMetadataResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf features
diff --git a/gen/Amazonka/AmplifyUiBuilder/GetTheme.hs b/gen/Amazonka/AmplifyUiBuilder/GetTheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/GetTheme.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.GetTheme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns an existing theme for an Amplify app.
+module Amazonka.AmplifyUiBuilder.GetTheme
+  ( -- * Creating a Request
+    GetTheme (..),
+    newGetTheme,
+
+    -- * Request Lenses
+    getTheme_appId,
+    getTheme_environmentName,
+    getTheme_id,
+
+    -- * Destructuring the Response
+    GetThemeResponse (..),
+    newGetThemeResponse,
+
+    -- * Response Lenses
+    getThemeResponse_theme,
+    getThemeResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newGetTheme' smart constructor.
+data GetTheme = GetTheme'
+  { -- | The unique ID of the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID for the theme.
+    id :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetTheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getTheme_appId' - The unique ID of the Amplify app.
+--
+-- 'environmentName', 'getTheme_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'getTheme_id' - The unique ID for the theme.
+newGetTheme ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  GetTheme
+newGetTheme pAppId_ pEnvironmentName_ pId_ =
+  GetTheme'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_
+    }
+
+-- | The unique ID of the Amplify app.
+getTheme_appId :: Lens.Lens' GetTheme Prelude.Text
+getTheme_appId = Lens.lens (\GetTheme' {appId} -> appId) (\s@GetTheme' {} a -> s {appId = a} :: GetTheme)
+
+-- | The name of the backend environment that is part of the Amplify app.
+getTheme_environmentName :: Lens.Lens' GetTheme Prelude.Text
+getTheme_environmentName = Lens.lens (\GetTheme' {environmentName} -> environmentName) (\s@GetTheme' {} a -> s {environmentName = a} :: GetTheme)
+
+-- | The unique ID for the theme.
+getTheme_id :: Lens.Lens' GetTheme Prelude.Text
+getTheme_id = Lens.lens (\GetTheme' {id} -> id) (\s@GetTheme' {} a -> s {id = a} :: GetTheme)
+
+instance Core.AWSRequest GetTheme where
+  type AWSResponse GetTheme = GetThemeResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetThemeResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetTheme where
+  hashWithSalt _salt GetTheme' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+
+instance Prelude.NFData GetTheme where
+  rnf GetTheme' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+
+instance Data.ToHeaders GetTheme where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath GetTheme where
+  toPath GetTheme' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery GetTheme where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetThemeResponse' smart constructor.
+data GetThemeResponse = GetThemeResponse'
+  { -- | Represents the configuration settings for the theme.
+    theme :: Prelude.Maybe Theme,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetThemeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'theme', 'getThemeResponse_theme' - Represents the configuration settings for the theme.
+--
+-- 'httpStatus', 'getThemeResponse_httpStatus' - The response's http status code.
+newGetThemeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetThemeResponse
+newGetThemeResponse pHttpStatus_ =
+  GetThemeResponse'
+    { theme = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Represents the configuration settings for the theme.
+getThemeResponse_theme :: Lens.Lens' GetThemeResponse (Prelude.Maybe Theme)
+getThemeResponse_theme = Lens.lens (\GetThemeResponse' {theme} -> theme) (\s@GetThemeResponse' {} a -> s {theme = a} :: GetThemeResponse)
+
+-- | The response's http status code.
+getThemeResponse_httpStatus :: Lens.Lens' GetThemeResponse Prelude.Int
+getThemeResponse_httpStatus = Lens.lens (\GetThemeResponse' {httpStatus} -> httpStatus) (\s@GetThemeResponse' {} a -> s {httpStatus = a} :: GetThemeResponse)
+
+instance Prelude.NFData GetThemeResponse where
+  rnf GetThemeResponse' {..} =
+    Prelude.rnf theme
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/Lens.hs b/gen/Amazonka/AmplifyUiBuilder/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Lens.hs
@@ -0,0 +1,570 @@
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Lens
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Lens
+  ( -- * Operations
+
+    -- ** CreateComponent
+    createComponent_clientToken,
+    createComponent_appId,
+    createComponent_componentToCreate,
+    createComponent_environmentName,
+    createComponentResponse_entity,
+    createComponentResponse_httpStatus,
+
+    -- ** CreateForm
+    createForm_clientToken,
+    createForm_appId,
+    createForm_environmentName,
+    createForm_formToCreate,
+    createFormResponse_entity,
+    createFormResponse_httpStatus,
+
+    -- ** CreateTheme
+    createTheme_clientToken,
+    createTheme_appId,
+    createTheme_environmentName,
+    createTheme_themeToCreate,
+    createThemeResponse_entity,
+    createThemeResponse_httpStatus,
+
+    -- ** DeleteComponent
+    deleteComponent_appId,
+    deleteComponent_environmentName,
+    deleteComponent_id,
+
+    -- ** DeleteForm
+    deleteForm_appId,
+    deleteForm_environmentName,
+    deleteForm_id,
+
+    -- ** DeleteTheme
+    deleteTheme_appId,
+    deleteTheme_environmentName,
+    deleteTheme_id,
+
+    -- ** ExchangeCodeForToken
+    exchangeCodeForToken_provider,
+    exchangeCodeForToken_request,
+    exchangeCodeForTokenResponse_httpStatus,
+    exchangeCodeForTokenResponse_accessToken,
+    exchangeCodeForTokenResponse_expiresIn,
+    exchangeCodeForTokenResponse_refreshToken,
+
+    -- ** ExportComponents
+    exportComponents_nextToken,
+    exportComponents_appId,
+    exportComponents_environmentName,
+    exportComponentsResponse_nextToken,
+    exportComponentsResponse_httpStatus,
+    exportComponentsResponse_entities,
+
+    -- ** ExportForms
+    exportForms_nextToken,
+    exportForms_appId,
+    exportForms_environmentName,
+    exportFormsResponse_nextToken,
+    exportFormsResponse_httpStatus,
+    exportFormsResponse_entities,
+
+    -- ** ExportThemes
+    exportThemes_nextToken,
+    exportThemes_appId,
+    exportThemes_environmentName,
+    exportThemesResponse_nextToken,
+    exportThemesResponse_httpStatus,
+    exportThemesResponse_entities,
+
+    -- ** GetComponent
+    getComponent_appId,
+    getComponent_environmentName,
+    getComponent_id,
+    getComponentResponse_component,
+    getComponentResponse_httpStatus,
+
+    -- ** GetForm
+    getForm_appId,
+    getForm_environmentName,
+    getForm_id,
+    getFormResponse_form,
+    getFormResponse_httpStatus,
+
+    -- ** GetMetadata
+    getMetadata_appId,
+    getMetadata_environmentName,
+    getMetadataResponse_httpStatus,
+    getMetadataResponse_features,
+
+    -- ** GetTheme
+    getTheme_appId,
+    getTheme_environmentName,
+    getTheme_id,
+    getThemeResponse_theme,
+    getThemeResponse_httpStatus,
+
+    -- ** ListComponents
+    listComponents_maxResults,
+    listComponents_nextToken,
+    listComponents_appId,
+    listComponents_environmentName,
+    listComponentsResponse_nextToken,
+    listComponentsResponse_httpStatus,
+    listComponentsResponse_entities,
+
+    -- ** ListForms
+    listForms_maxResults,
+    listForms_nextToken,
+    listForms_appId,
+    listForms_environmentName,
+    listFormsResponse_nextToken,
+    listFormsResponse_httpStatus,
+    listFormsResponse_entities,
+
+    -- ** ListThemes
+    listThemes_maxResults,
+    listThemes_nextToken,
+    listThemes_appId,
+    listThemes_environmentName,
+    listThemesResponse_nextToken,
+    listThemesResponse_httpStatus,
+    listThemesResponse_entities,
+
+    -- ** PutMetadataFlag
+    putMetadataFlag_appId,
+    putMetadataFlag_body,
+    putMetadataFlag_environmentName,
+    putMetadataFlag_featureName,
+
+    -- ** RefreshToken
+    refreshToken_provider,
+    refreshToken_refreshTokenBody,
+    refreshTokenResponse_httpStatus,
+    refreshTokenResponse_accessToken,
+    refreshTokenResponse_expiresIn,
+
+    -- ** UpdateComponent
+    updateComponent_clientToken,
+    updateComponent_appId,
+    updateComponent_environmentName,
+    updateComponent_id,
+    updateComponent_updatedComponent,
+    updateComponentResponse_entity,
+    updateComponentResponse_httpStatus,
+
+    -- ** UpdateForm
+    updateForm_clientToken,
+    updateForm_appId,
+    updateForm_environmentName,
+    updateForm_id,
+    updateForm_updatedForm,
+    updateFormResponse_entity,
+    updateFormResponse_httpStatus,
+
+    -- ** UpdateTheme
+    updateTheme_clientToken,
+    updateTheme_appId,
+    updateTheme_environmentName,
+    updateTheme_id,
+    updateTheme_updatedTheme,
+    updateThemeResponse_entity,
+    updateThemeResponse_httpStatus,
+
+    -- * Types
+
+    -- ** ActionParameters
+    actionParameters_anchor,
+    actionParameters_fields,
+    actionParameters_global,
+    actionParameters_id,
+    actionParameters_model,
+    actionParameters_state,
+    actionParameters_target,
+    actionParameters_type,
+    actionParameters_url,
+
+    -- ** Component
+    component_children,
+    component_collectionProperties,
+    component_events,
+    component_modifiedAt,
+    component_schemaVersion,
+    component_sourceId,
+    component_tags,
+    component_appId,
+    component_bindingProperties,
+    component_componentType,
+    component_createdAt,
+    component_environmentName,
+    component_id,
+    component_name,
+    component_overrides,
+    component_properties,
+    component_variants,
+
+    -- ** ComponentBindingPropertiesValue
+    componentBindingPropertiesValue_bindingProperties,
+    componentBindingPropertiesValue_defaultValue,
+    componentBindingPropertiesValue_type,
+
+    -- ** ComponentBindingPropertiesValueProperties
+    componentBindingPropertiesValueProperties_bucket,
+    componentBindingPropertiesValueProperties_defaultValue,
+    componentBindingPropertiesValueProperties_field,
+    componentBindingPropertiesValueProperties_key,
+    componentBindingPropertiesValueProperties_model,
+    componentBindingPropertiesValueProperties_predicates,
+    componentBindingPropertiesValueProperties_slotName,
+    componentBindingPropertiesValueProperties_userAttribute,
+
+    -- ** ComponentChild
+    componentChild_children,
+    componentChild_events,
+    componentChild_sourceId,
+    componentChild_componentType,
+    componentChild_name,
+    componentChild_properties,
+
+    -- ** ComponentConditionProperty
+    componentConditionProperty_else,
+    componentConditionProperty_field,
+    componentConditionProperty_operand,
+    componentConditionProperty_operandType,
+    componentConditionProperty_operator,
+    componentConditionProperty_property,
+    componentConditionProperty_then,
+
+    -- ** ComponentDataConfiguration
+    componentDataConfiguration_identifiers,
+    componentDataConfiguration_predicate,
+    componentDataConfiguration_sort,
+    componentDataConfiguration_model,
+
+    -- ** ComponentEvent
+    componentEvent_action,
+    componentEvent_bindingEvent,
+    componentEvent_parameters,
+
+    -- ** ComponentProperty
+    componentProperty_bindingProperties,
+    componentProperty_bindings,
+    componentProperty_collectionBindingProperties,
+    componentProperty_componentName,
+    componentProperty_concat,
+    componentProperty_condition,
+    componentProperty_configured,
+    componentProperty_defaultValue,
+    componentProperty_event,
+    componentProperty_importedValue,
+    componentProperty_model,
+    componentProperty_property,
+    componentProperty_type,
+    componentProperty_userAttribute,
+    componentProperty_value,
+
+    -- ** ComponentPropertyBindingProperties
+    componentPropertyBindingProperties_field,
+    componentPropertyBindingProperties_property,
+
+    -- ** ComponentSummary
+    componentSummary_appId,
+    componentSummary_componentType,
+    componentSummary_environmentName,
+    componentSummary_id,
+    componentSummary_name,
+
+    -- ** ComponentVariant
+    componentVariant_overrides,
+    componentVariant_variantValues,
+
+    -- ** CreateComponentData
+    createComponentData_children,
+    createComponentData_collectionProperties,
+    createComponentData_events,
+    createComponentData_schemaVersion,
+    createComponentData_sourceId,
+    createComponentData_tags,
+    createComponentData_bindingProperties,
+    createComponentData_componentType,
+    createComponentData_name,
+    createComponentData_overrides,
+    createComponentData_properties,
+    createComponentData_variants,
+
+    -- ** CreateFormData
+    createFormData_cta,
+    createFormData_tags,
+    createFormData_dataType,
+    createFormData_fields,
+    createFormData_formActionType,
+    createFormData_name,
+    createFormData_schemaVersion,
+    createFormData_sectionalElements,
+    createFormData_style,
+
+    -- ** CreateThemeData
+    createThemeData_overrides,
+    createThemeData_tags,
+    createThemeData_name,
+    createThemeData_values,
+
+    -- ** ExchangeCodeForTokenRequestBody
+    exchangeCodeForTokenRequestBody_code,
+    exchangeCodeForTokenRequestBody_redirectUri,
+
+    -- ** FieldConfig
+    fieldConfig_excluded,
+    fieldConfig_inputType,
+    fieldConfig_label,
+    fieldConfig_position,
+    fieldConfig_validations,
+
+    -- ** FieldInputConfig
+    fieldInputConfig_defaultChecked,
+    fieldInputConfig_defaultCountryCode,
+    fieldInputConfig_defaultValue,
+    fieldInputConfig_descriptiveText,
+    fieldInputConfig_isArray,
+    fieldInputConfig_maxValue,
+    fieldInputConfig_minValue,
+    fieldInputConfig_name,
+    fieldInputConfig_placeholder,
+    fieldInputConfig_readOnly,
+    fieldInputConfig_required,
+    fieldInputConfig_step,
+    fieldInputConfig_value,
+    fieldInputConfig_valueMappings,
+    fieldInputConfig_type,
+
+    -- ** FieldPosition
+    fieldPosition_below,
+    fieldPosition_fixed,
+    fieldPosition_rightOf,
+
+    -- ** FieldValidationConfiguration
+    fieldValidationConfiguration_numValues,
+    fieldValidationConfiguration_strValues,
+    fieldValidationConfiguration_validationMessage,
+    fieldValidationConfiguration_type,
+
+    -- ** Form
+    form_cta,
+    form_tags,
+    form_appId,
+    form_dataType,
+    form_environmentName,
+    form_fields,
+    form_formActionType,
+    form_id,
+    form_name,
+    form_schemaVersion,
+    form_sectionalElements,
+    form_style,
+
+    -- ** FormBindingElement
+    formBindingElement_element,
+    formBindingElement_property,
+
+    -- ** FormButton
+    formButton_children,
+    formButton_excluded,
+    formButton_position,
+
+    -- ** FormCTA
+    formCTA_cancel,
+    formCTA_clear,
+    formCTA_position,
+    formCTA_submit,
+
+    -- ** FormDataTypeConfig
+    formDataTypeConfig_dataSourceType,
+    formDataTypeConfig_dataTypeName,
+
+    -- ** FormInputValueProperty
+    formInputValueProperty_value,
+
+    -- ** FormStyle
+    formStyle_horizontalGap,
+    formStyle_outerPadding,
+    formStyle_verticalGap,
+
+    -- ** FormStyleConfig
+    formStyleConfig_tokenReference,
+    formStyleConfig_value,
+
+    -- ** FormSummary
+    formSummary_appId,
+    formSummary_dataType,
+    formSummary_environmentName,
+    formSummary_formActionType,
+    formSummary_id,
+    formSummary_name,
+
+    -- ** MutationActionSetStateParameter
+    mutationActionSetStateParameter_componentName,
+    mutationActionSetStateParameter_property,
+    mutationActionSetStateParameter_set,
+
+    -- ** Predicate
+    predicate_and,
+    predicate_field,
+    predicate_operand,
+    predicate_operator,
+    predicate_or,
+
+    -- ** PutMetadataFlagBody
+    putMetadataFlagBody_newValue,
+
+    -- ** RefreshTokenRequestBody
+    refreshTokenRequestBody_token,
+
+    -- ** SectionalElement
+    sectionalElement_level,
+    sectionalElement_orientation,
+    sectionalElement_position,
+    sectionalElement_text,
+    sectionalElement_type,
+
+    -- ** SortProperty
+    sortProperty_direction,
+    sortProperty_field,
+
+    -- ** Theme
+    theme_modifiedAt,
+    theme_overrides,
+    theme_tags,
+    theme_appId,
+    theme_createdAt,
+    theme_environmentName,
+    theme_id,
+    theme_name,
+    theme_values,
+
+    -- ** ThemeSummary
+    themeSummary_appId,
+    themeSummary_environmentName,
+    themeSummary_id,
+    themeSummary_name,
+
+    -- ** ThemeValue
+    themeValue_children,
+    themeValue_value,
+
+    -- ** ThemeValues
+    themeValues_key,
+    themeValues_value,
+
+    -- ** UpdateComponentData
+    updateComponentData_bindingProperties,
+    updateComponentData_children,
+    updateComponentData_collectionProperties,
+    updateComponentData_componentType,
+    updateComponentData_events,
+    updateComponentData_id,
+    updateComponentData_name,
+    updateComponentData_overrides,
+    updateComponentData_properties,
+    updateComponentData_schemaVersion,
+    updateComponentData_sourceId,
+    updateComponentData_variants,
+
+    -- ** UpdateFormData
+    updateFormData_cta,
+    updateFormData_dataType,
+    updateFormData_fields,
+    updateFormData_formActionType,
+    updateFormData_name,
+    updateFormData_schemaVersion,
+    updateFormData_sectionalElements,
+    updateFormData_style,
+
+    -- ** UpdateThemeData
+    updateThemeData_id,
+    updateThemeData_name,
+    updateThemeData_overrides,
+    updateThemeData_values,
+
+    -- ** ValueMapping
+    valueMapping_displayValue,
+    valueMapping_value,
+
+    -- ** ValueMappings
+    valueMappings_values,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.CreateComponent
+import Amazonka.AmplifyUiBuilder.CreateForm
+import Amazonka.AmplifyUiBuilder.CreateTheme
+import Amazonka.AmplifyUiBuilder.DeleteComponent
+import Amazonka.AmplifyUiBuilder.DeleteForm
+import Amazonka.AmplifyUiBuilder.DeleteTheme
+import Amazonka.AmplifyUiBuilder.ExchangeCodeForToken
+import Amazonka.AmplifyUiBuilder.ExportComponents
+import Amazonka.AmplifyUiBuilder.ExportForms
+import Amazonka.AmplifyUiBuilder.ExportThemes
+import Amazonka.AmplifyUiBuilder.GetComponent
+import Amazonka.AmplifyUiBuilder.GetForm
+import Amazonka.AmplifyUiBuilder.GetMetadata
+import Amazonka.AmplifyUiBuilder.GetTheme
+import Amazonka.AmplifyUiBuilder.ListComponents
+import Amazonka.AmplifyUiBuilder.ListForms
+import Amazonka.AmplifyUiBuilder.ListThemes
+import Amazonka.AmplifyUiBuilder.PutMetadataFlag
+import Amazonka.AmplifyUiBuilder.RefreshToken
+import Amazonka.AmplifyUiBuilder.Types.ActionParameters
+import Amazonka.AmplifyUiBuilder.Types.Component
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties
+import Amazonka.AmplifyUiBuilder.Types.ComponentChild
+import Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
+import Amazonka.AmplifyUiBuilder.Types.ComponentSummary
+import Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+import Amazonka.AmplifyUiBuilder.Types.CreateComponentData
+import Amazonka.AmplifyUiBuilder.Types.CreateFormData
+import Amazonka.AmplifyUiBuilder.Types.CreateThemeData
+import Amazonka.AmplifyUiBuilder.Types.ExchangeCodeForTokenRequestBody
+import Amazonka.AmplifyUiBuilder.Types.FieldConfig
+import Amazonka.AmplifyUiBuilder.Types.FieldInputConfig
+import Amazonka.AmplifyUiBuilder.Types.FieldPosition
+import Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration
+import Amazonka.AmplifyUiBuilder.Types.Form
+import Amazonka.AmplifyUiBuilder.Types.FormBindingElement
+import Amazonka.AmplifyUiBuilder.Types.FormButton
+import Amazonka.AmplifyUiBuilder.Types.FormCTA
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty
+import Amazonka.AmplifyUiBuilder.Types.FormStyle
+import Amazonka.AmplifyUiBuilder.Types.FormStyleConfig
+import Amazonka.AmplifyUiBuilder.Types.FormSummary
+import Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter
+import Amazonka.AmplifyUiBuilder.Types.Predicate
+import Amazonka.AmplifyUiBuilder.Types.PutMetadataFlagBody
+import Amazonka.AmplifyUiBuilder.Types.RefreshTokenRequestBody
+import Amazonka.AmplifyUiBuilder.Types.SectionalElement
+import Amazonka.AmplifyUiBuilder.Types.SortProperty
+import Amazonka.AmplifyUiBuilder.Types.Theme
+import Amazonka.AmplifyUiBuilder.Types.ThemeSummary
+import Amazonka.AmplifyUiBuilder.Types.ThemeValue
+import Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import Amazonka.AmplifyUiBuilder.Types.UpdateComponentData
+import Amazonka.AmplifyUiBuilder.Types.UpdateFormData
+import Amazonka.AmplifyUiBuilder.Types.UpdateThemeData
+import Amazonka.AmplifyUiBuilder.Types.ValueMapping
+import Amazonka.AmplifyUiBuilder.Types.ValueMappings
+import Amazonka.AmplifyUiBuilder.UpdateComponent
+import Amazonka.AmplifyUiBuilder.UpdateForm
+import Amazonka.AmplifyUiBuilder.UpdateTheme
diff --git a/gen/Amazonka/AmplifyUiBuilder/ListComponents.hs b/gen/Amazonka/AmplifyUiBuilder/ListComponents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ListComponents.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ListComponents
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of components for a specified Amplify app and backend
+-- environment.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ListComponents
+  ( -- * Creating a Request
+    ListComponents (..),
+    newListComponents,
+
+    -- * Request Lenses
+    listComponents_maxResults,
+    listComponents_nextToken,
+    listComponents_appId,
+    listComponents_environmentName,
+
+    -- * Destructuring the Response
+    ListComponentsResponse (..),
+    newListComponentsResponse,
+
+    -- * Response Lenses
+    listComponentsResponse_nextToken,
+    listComponentsResponse_httpStatus,
+    listComponentsResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListComponents' smart constructor.
+data ListComponents = ListComponents'
+  { -- | The maximum number of components to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponents' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listComponents_maxResults' - The maximum number of components to retrieve.
+--
+-- 'nextToken', 'listComponents_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'listComponents_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'listComponents_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newListComponents ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ListComponents
+newListComponents pAppId_ pEnvironmentName_ =
+  ListComponents'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The maximum number of components to retrieve.
+listComponents_maxResults :: Lens.Lens' ListComponents (Prelude.Maybe Prelude.Natural)
+listComponents_maxResults = Lens.lens (\ListComponents' {maxResults} -> maxResults) (\s@ListComponents' {} a -> s {maxResults = a} :: ListComponents)
+
+-- | The token to request the next page of results.
+listComponents_nextToken :: Lens.Lens' ListComponents (Prelude.Maybe Prelude.Text)
+listComponents_nextToken = Lens.lens (\ListComponents' {nextToken} -> nextToken) (\s@ListComponents' {} a -> s {nextToken = a} :: ListComponents)
+
+-- | The unique ID for the Amplify app.
+listComponents_appId :: Lens.Lens' ListComponents Prelude.Text
+listComponents_appId = Lens.lens (\ListComponents' {appId} -> appId) (\s@ListComponents' {} a -> s {appId = a} :: ListComponents)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+listComponents_environmentName :: Lens.Lens' ListComponents Prelude.Text
+listComponents_environmentName = Lens.lens (\ListComponents' {environmentName} -> environmentName) (\s@ListComponents' {} a -> s {environmentName = a} :: ListComponents)
+
+instance Core.AWSPager ListComponents where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listComponentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        (rs Lens.^. listComponentsResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listComponents_nextToken
+          Lens..~ rs
+          Lens.^? listComponentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListComponents where
+  type
+    AWSResponse ListComponents =
+      ListComponentsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListComponentsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListComponents where
+  hashWithSalt _salt ListComponents' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ListComponents where
+  rnf ListComponents' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ListComponents where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListComponents where
+  toPath ListComponents' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components"
+      ]
+
+instance Data.ToQuery ListComponents where
+  toQuery ListComponents' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListComponentsResponse' smart constructor.
+data ListComponentsResponse = ListComponentsResponse'
+  { -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of components for the Amplify app.
+    entities :: [ComponentSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListComponentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listComponentsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'listComponentsResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'listComponentsResponse_entities' - The list of components for the Amplify app.
+newListComponentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListComponentsResponse
+newListComponentsResponse pHttpStatus_ =
+  ListComponentsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s included if more results are available.
+listComponentsResponse_nextToken :: Lens.Lens' ListComponentsResponse (Prelude.Maybe Prelude.Text)
+listComponentsResponse_nextToken = Lens.lens (\ListComponentsResponse' {nextToken} -> nextToken) (\s@ListComponentsResponse' {} a -> s {nextToken = a} :: ListComponentsResponse)
+
+-- | The response's http status code.
+listComponentsResponse_httpStatus :: Lens.Lens' ListComponentsResponse Prelude.Int
+listComponentsResponse_httpStatus = Lens.lens (\ListComponentsResponse' {httpStatus} -> httpStatus) (\s@ListComponentsResponse' {} a -> s {httpStatus = a} :: ListComponentsResponse)
+
+-- | The list of components for the Amplify app.
+listComponentsResponse_entities :: Lens.Lens' ListComponentsResponse [ComponentSummary]
+listComponentsResponse_entities = Lens.lens (\ListComponentsResponse' {entities} -> entities) (\s@ListComponentsResponse' {} a -> s {entities = a} :: ListComponentsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListComponentsResponse where
+  rnf ListComponentsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/ListForms.hs b/gen/Amazonka/AmplifyUiBuilder/ListForms.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ListForms.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ListForms
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of forms for a specified Amplify app and backend
+-- environment.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ListForms
+  ( -- * Creating a Request
+    ListForms (..),
+    newListForms,
+
+    -- * Request Lenses
+    listForms_maxResults,
+    listForms_nextToken,
+    listForms_appId,
+    listForms_environmentName,
+
+    -- * Destructuring the Response
+    ListFormsResponse (..),
+    newListFormsResponse,
+
+    -- * Response Lenses
+    listFormsResponse_nextToken,
+    listFormsResponse_httpStatus,
+    listFormsResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListForms' smart constructor.
+data ListForms = ListForms'
+  { -- | The maximum number of forms to retrieve.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListForms' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listForms_maxResults' - The maximum number of forms to retrieve.
+--
+-- 'nextToken', 'listForms_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'listForms_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'listForms_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newListForms ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ListForms
+newListForms pAppId_ pEnvironmentName_ =
+  ListForms'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The maximum number of forms to retrieve.
+listForms_maxResults :: Lens.Lens' ListForms (Prelude.Maybe Prelude.Natural)
+listForms_maxResults = Lens.lens (\ListForms' {maxResults} -> maxResults) (\s@ListForms' {} a -> s {maxResults = a} :: ListForms)
+
+-- | The token to request the next page of results.
+listForms_nextToken :: Lens.Lens' ListForms (Prelude.Maybe Prelude.Text)
+listForms_nextToken = Lens.lens (\ListForms' {nextToken} -> nextToken) (\s@ListForms' {} a -> s {nextToken = a} :: ListForms)
+
+-- | The unique ID for the Amplify app.
+listForms_appId :: Lens.Lens' ListForms Prelude.Text
+listForms_appId = Lens.lens (\ListForms' {appId} -> appId) (\s@ListForms' {} a -> s {appId = a} :: ListForms)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+listForms_environmentName :: Lens.Lens' ListForms Prelude.Text
+listForms_environmentName = Lens.lens (\ListForms' {environmentName} -> environmentName) (\s@ListForms' {} a -> s {environmentName = a} :: ListForms)
+
+instance Core.AWSPager ListForms where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listFormsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listFormsResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listForms_nextToken
+          Lens..~ rs
+          Lens.^? listFormsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListForms where
+  type AWSResponse ListForms = ListFormsResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListFormsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListForms where
+  hashWithSalt _salt ListForms' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ListForms where
+  rnf ListForms' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ListForms where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListForms where
+  toPath ListForms' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms"
+      ]
+
+instance Data.ToQuery ListForms where
+  toQuery ListForms' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListFormsResponse' smart constructor.
+data ListFormsResponse = ListFormsResponse'
+  { -- | The pagination token that\'s included if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of forms for the Amplify app.
+    entities :: [FormSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListFormsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listFormsResponse_nextToken' - The pagination token that\'s included if more results are available.
+--
+-- 'httpStatus', 'listFormsResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'listFormsResponse_entities' - The list of forms for the Amplify app.
+newListFormsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListFormsResponse
+newListFormsResponse pHttpStatus_ =
+  ListFormsResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s included if more results are available.
+listFormsResponse_nextToken :: Lens.Lens' ListFormsResponse (Prelude.Maybe Prelude.Text)
+listFormsResponse_nextToken = Lens.lens (\ListFormsResponse' {nextToken} -> nextToken) (\s@ListFormsResponse' {} a -> s {nextToken = a} :: ListFormsResponse)
+
+-- | The response's http status code.
+listFormsResponse_httpStatus :: Lens.Lens' ListFormsResponse Prelude.Int
+listFormsResponse_httpStatus = Lens.lens (\ListFormsResponse' {httpStatus} -> httpStatus) (\s@ListFormsResponse' {} a -> s {httpStatus = a} :: ListFormsResponse)
+
+-- | The list of forms for the Amplify app.
+listFormsResponse_entities :: Lens.Lens' ListFormsResponse [FormSummary]
+listFormsResponse_entities = Lens.lens (\ListFormsResponse' {entities} -> entities) (\s@ListFormsResponse' {} a -> s {entities = a} :: ListFormsResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListFormsResponse where
+  rnf ListFormsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/ListThemes.hs b/gen/Amazonka/AmplifyUiBuilder/ListThemes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/ListThemes.hs
@@ -0,0 +1,240 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.ListThemes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of themes for a specified Amplify app and backend
+-- environment.
+--
+-- This operation returns paginated results.
+module Amazonka.AmplifyUiBuilder.ListThemes
+  ( -- * Creating a Request
+    ListThemes (..),
+    newListThemes,
+
+    -- * Request Lenses
+    listThemes_maxResults,
+    listThemes_nextToken,
+    listThemes_appId,
+    listThemes_environmentName,
+
+    -- * Destructuring the Response
+    ListThemesResponse (..),
+    newListThemesResponse,
+
+    -- * Response Lenses
+    listThemesResponse_nextToken,
+    listThemesResponse_httpStatus,
+    listThemesResponse_entities,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListThemes' smart constructor.
+data ListThemes = ListThemes'
+  { -- | The maximum number of theme results to return in the response.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The token to request the next page of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListThemes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listThemes_maxResults' - The maximum number of theme results to return in the response.
+--
+-- 'nextToken', 'listThemes_nextToken' - The token to request the next page of results.
+--
+-- 'appId', 'listThemes_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'listThemes_environmentName' - The name of the backend environment that is a part of the Amplify app.
+newListThemes ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  ListThemes
+newListThemes pAppId_ pEnvironmentName_ =
+  ListThemes'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      appId = pAppId_,
+      environmentName = pEnvironmentName_
+    }
+
+-- | The maximum number of theme results to return in the response.
+listThemes_maxResults :: Lens.Lens' ListThemes (Prelude.Maybe Prelude.Natural)
+listThemes_maxResults = Lens.lens (\ListThemes' {maxResults} -> maxResults) (\s@ListThemes' {} a -> s {maxResults = a} :: ListThemes)
+
+-- | The token to request the next page of results.
+listThemes_nextToken :: Lens.Lens' ListThemes (Prelude.Maybe Prelude.Text)
+listThemes_nextToken = Lens.lens (\ListThemes' {nextToken} -> nextToken) (\s@ListThemes' {} a -> s {nextToken = a} :: ListThemes)
+
+-- | The unique ID for the Amplify app.
+listThemes_appId :: Lens.Lens' ListThemes Prelude.Text
+listThemes_appId = Lens.lens (\ListThemes' {appId} -> appId) (\s@ListThemes' {} a -> s {appId = a} :: ListThemes)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+listThemes_environmentName :: Lens.Lens' ListThemes Prelude.Text
+listThemes_environmentName = Lens.lens (\ListThemes' {environmentName} -> environmentName) (\s@ListThemes' {} a -> s {environmentName = a} :: ListThemes)
+
+instance Core.AWSPager ListThemes where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listThemesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop (rs Lens.^. listThemesResponse_entities) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listThemes_nextToken
+          Lens..~ rs
+          Lens.^? listThemesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListThemes where
+  type AWSResponse ListThemes = ListThemesResponse
+  request overrides =
+    Request.get (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListThemesResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..?> "entities" Core..!@ Prelude.mempty)
+      )
+
+instance Prelude.Hashable ListThemes where
+  hashWithSalt _salt ListThemes' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+
+instance Prelude.NFData ListThemes where
+  rnf ListThemes' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+
+instance Data.ToHeaders ListThemes where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToPath ListThemes where
+  toPath ListThemes' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes"
+      ]
+
+instance Data.ToQuery ListThemes where
+  toQuery ListThemes' {..} =
+    Prelude.mconcat
+      [ "maxResults" Data.=: maxResults,
+        "nextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListThemesResponse' smart constructor.
+data ListThemesResponse = ListThemesResponse'
+  { -- | The pagination token that\'s returned if more results are available.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The list of themes for the Amplify app.
+    entities :: [ThemeSummary]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListThemesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'listThemesResponse_nextToken' - The pagination token that\'s returned if more results are available.
+--
+-- 'httpStatus', 'listThemesResponse_httpStatus' - The response's http status code.
+--
+-- 'entities', 'listThemesResponse_entities' - The list of themes for the Amplify app.
+newListThemesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListThemesResponse
+newListThemesResponse pHttpStatus_ =
+  ListThemesResponse'
+    { nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_,
+      entities = Prelude.mempty
+    }
+
+-- | The pagination token that\'s returned if more results are available.
+listThemesResponse_nextToken :: Lens.Lens' ListThemesResponse (Prelude.Maybe Prelude.Text)
+listThemesResponse_nextToken = Lens.lens (\ListThemesResponse' {nextToken} -> nextToken) (\s@ListThemesResponse' {} a -> s {nextToken = a} :: ListThemesResponse)
+
+-- | The response's http status code.
+listThemesResponse_httpStatus :: Lens.Lens' ListThemesResponse Prelude.Int
+listThemesResponse_httpStatus = Lens.lens (\ListThemesResponse' {httpStatus} -> httpStatus) (\s@ListThemesResponse' {} a -> s {httpStatus = a} :: ListThemesResponse)
+
+-- | The list of themes for the Amplify app.
+listThemesResponse_entities :: Lens.Lens' ListThemesResponse [ThemeSummary]
+listThemesResponse_entities = Lens.lens (\ListThemesResponse' {entities} -> entities) (\s@ListThemesResponse' {} a -> s {entities = a} :: ListThemesResponse) Prelude.. Lens.coerced
+
+instance Prelude.NFData ListThemesResponse where
+  rnf ListThemesResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf entities
diff --git a/gen/Amazonka/AmplifyUiBuilder/PutMetadataFlag.hs b/gen/Amazonka/AmplifyUiBuilder/PutMetadataFlag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/PutMetadataFlag.hs
@@ -0,0 +1,182 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.PutMetadataFlag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stores the metadata information about a feature on a form or view.
+module Amazonka.AmplifyUiBuilder.PutMetadataFlag
+  ( -- * Creating a Request
+    PutMetadataFlag (..),
+    newPutMetadataFlag,
+
+    -- * Request Lenses
+    putMetadataFlag_appId,
+    putMetadataFlag_body,
+    putMetadataFlag_environmentName,
+    putMetadataFlag_featureName,
+
+    -- * Destructuring the Response
+    PutMetadataFlagResponse (..),
+    newPutMetadataFlagResponse,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newPutMetadataFlag' smart constructor.
+data PutMetadataFlag = PutMetadataFlag'
+  { -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The metadata information to store.
+    body :: PutMetadataFlagBody,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The name of the feature associated with the metadata.
+    featureName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutMetadataFlag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'putMetadataFlag_appId' - The unique ID for the Amplify app.
+--
+-- 'body', 'putMetadataFlag_body' - The metadata information to store.
+--
+-- 'environmentName', 'putMetadataFlag_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'featureName', 'putMetadataFlag_featureName' - The name of the feature associated with the metadata.
+newPutMetadataFlag ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'body'
+  PutMetadataFlagBody ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'featureName'
+  Prelude.Text ->
+  PutMetadataFlag
+newPutMetadataFlag
+  pAppId_
+  pBody_
+  pEnvironmentName_
+  pFeatureName_ =
+    PutMetadataFlag'
+      { appId = pAppId_,
+        body = pBody_,
+        environmentName = pEnvironmentName_,
+        featureName = pFeatureName_
+      }
+
+-- | The unique ID for the Amplify app.
+putMetadataFlag_appId :: Lens.Lens' PutMetadataFlag Prelude.Text
+putMetadataFlag_appId = Lens.lens (\PutMetadataFlag' {appId} -> appId) (\s@PutMetadataFlag' {} a -> s {appId = a} :: PutMetadataFlag)
+
+-- | The metadata information to store.
+putMetadataFlag_body :: Lens.Lens' PutMetadataFlag PutMetadataFlagBody
+putMetadataFlag_body = Lens.lens (\PutMetadataFlag' {body} -> body) (\s@PutMetadataFlag' {} a -> s {body = a} :: PutMetadataFlag)
+
+-- | The name of the backend environment that is part of the Amplify app.
+putMetadataFlag_environmentName :: Lens.Lens' PutMetadataFlag Prelude.Text
+putMetadataFlag_environmentName = Lens.lens (\PutMetadataFlag' {environmentName} -> environmentName) (\s@PutMetadataFlag' {} a -> s {environmentName = a} :: PutMetadataFlag)
+
+-- | The name of the feature associated with the metadata.
+putMetadataFlag_featureName :: Lens.Lens' PutMetadataFlag Prelude.Text
+putMetadataFlag_featureName = Lens.lens (\PutMetadataFlag' {featureName} -> featureName) (\s@PutMetadataFlag' {} a -> s {featureName = a} :: PutMetadataFlag)
+
+instance Core.AWSRequest PutMetadataFlag where
+  type
+    AWSResponse PutMetadataFlag =
+      PutMetadataFlagResponse
+  request overrides =
+    Request.putJSON (overrides defaultService)
+  response =
+    Response.receiveNull PutMetadataFlagResponse'
+
+instance Prelude.Hashable PutMetadataFlag where
+  hashWithSalt _salt PutMetadataFlag' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` body
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` featureName
+
+instance Prelude.NFData PutMetadataFlag where
+  rnf PutMetadataFlag' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf body
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf featureName
+
+instance Data.ToHeaders PutMetadataFlag where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutMetadataFlag where
+  toJSON PutMetadataFlag' {..} = Data.toJSON body
+
+instance Data.ToPath PutMetadataFlag where
+  toPath PutMetadataFlag' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/metadata/features/",
+        Data.toBS featureName
+      ]
+
+instance Data.ToQuery PutMetadataFlag where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutMetadataFlagResponse' smart constructor.
+data PutMetadataFlagResponse = PutMetadataFlagResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutMetadataFlagResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutMetadataFlagResponse ::
+  PutMetadataFlagResponse
+newPutMetadataFlagResponse = PutMetadataFlagResponse'
+
+instance Prelude.NFData PutMetadataFlagResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/AmplifyUiBuilder/RefreshToken.hs b/gen/Amazonka/AmplifyUiBuilder/RefreshToken.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/RefreshToken.hs
@@ -0,0 +1,197 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.RefreshToken
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Refreshes a previously issued access token that might have expired.
+module Amazonka.AmplifyUiBuilder.RefreshToken
+  ( -- * Creating a Request
+    RefreshToken (..),
+    newRefreshToken,
+
+    -- * Request Lenses
+    refreshToken_provider,
+    refreshToken_refreshTokenBody,
+
+    -- * Destructuring the Response
+    RefreshTokenResponse (..),
+    newRefreshTokenResponse,
+
+    -- * Response Lenses
+    refreshTokenResponse_httpStatus,
+    refreshTokenResponse_accessToken,
+    refreshTokenResponse_expiresIn,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newRefreshToken' smart constructor.
+data RefreshToken = RefreshToken'
+  { -- | The third-party provider for the token. The only valid value is @figma@.
+    provider :: TokenProviders,
+    -- | Information about the refresh token request.
+    refreshTokenBody :: RefreshTokenRequestBody
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RefreshToken' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'provider', 'refreshToken_provider' - The third-party provider for the token. The only valid value is @figma@.
+--
+-- 'refreshTokenBody', 'refreshToken_refreshTokenBody' - Information about the refresh token request.
+newRefreshToken ::
+  -- | 'provider'
+  TokenProviders ->
+  -- | 'refreshTokenBody'
+  RefreshTokenRequestBody ->
+  RefreshToken
+newRefreshToken pProvider_ pRefreshTokenBody_ =
+  RefreshToken'
+    { provider = pProvider_,
+      refreshTokenBody = pRefreshTokenBody_
+    }
+
+-- | The third-party provider for the token. The only valid value is @figma@.
+refreshToken_provider :: Lens.Lens' RefreshToken TokenProviders
+refreshToken_provider = Lens.lens (\RefreshToken' {provider} -> provider) (\s@RefreshToken' {} a -> s {provider = a} :: RefreshToken)
+
+-- | Information about the refresh token request.
+refreshToken_refreshTokenBody :: Lens.Lens' RefreshToken RefreshTokenRequestBody
+refreshToken_refreshTokenBody = Lens.lens (\RefreshToken' {refreshTokenBody} -> refreshTokenBody) (\s@RefreshToken' {} a -> s {refreshTokenBody = a} :: RefreshToken)
+
+instance Core.AWSRequest RefreshToken where
+  type AWSResponse RefreshToken = RefreshTokenResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          RefreshTokenResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "accessToken")
+            Prelude.<*> (x Data..:> "expiresIn")
+      )
+
+instance Prelude.Hashable RefreshToken where
+  hashWithSalt _salt RefreshToken' {..} =
+    _salt
+      `Prelude.hashWithSalt` provider
+      `Prelude.hashWithSalt` refreshTokenBody
+
+instance Prelude.NFData RefreshToken where
+  rnf RefreshToken' {..} =
+    Prelude.rnf provider
+      `Prelude.seq` Prelude.rnf refreshTokenBody
+
+instance Data.ToHeaders RefreshToken where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON RefreshToken where
+  toJSON RefreshToken' {..} =
+    Data.toJSON refreshTokenBody
+
+instance Data.ToPath RefreshToken where
+  toPath RefreshToken' {..} =
+    Prelude.mconcat
+      ["/tokens/", Data.toBS provider, "/refresh"]
+
+instance Data.ToQuery RefreshToken where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newRefreshTokenResponse' smart constructor.
+data RefreshTokenResponse = RefreshTokenResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The access token.
+    accessToken :: Data.Sensitive Prelude.Text,
+    -- | The date and time when the new access token expires.
+    expiresIn :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RefreshTokenResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'refreshTokenResponse_httpStatus' - The response's http status code.
+--
+-- 'accessToken', 'refreshTokenResponse_accessToken' - The access token.
+--
+-- 'expiresIn', 'refreshTokenResponse_expiresIn' - The date and time when the new access token expires.
+newRefreshTokenResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'accessToken'
+  Prelude.Text ->
+  -- | 'expiresIn'
+  Prelude.Int ->
+  RefreshTokenResponse
+newRefreshTokenResponse
+  pHttpStatus_
+  pAccessToken_
+  pExpiresIn_ =
+    RefreshTokenResponse'
+      { httpStatus = pHttpStatus_,
+        accessToken = Data._Sensitive Lens.# pAccessToken_,
+        expiresIn = pExpiresIn_
+      }
+
+-- | The response's http status code.
+refreshTokenResponse_httpStatus :: Lens.Lens' RefreshTokenResponse Prelude.Int
+refreshTokenResponse_httpStatus = Lens.lens (\RefreshTokenResponse' {httpStatus} -> httpStatus) (\s@RefreshTokenResponse' {} a -> s {httpStatus = a} :: RefreshTokenResponse)
+
+-- | The access token.
+refreshTokenResponse_accessToken :: Lens.Lens' RefreshTokenResponse Prelude.Text
+refreshTokenResponse_accessToken = Lens.lens (\RefreshTokenResponse' {accessToken} -> accessToken) (\s@RefreshTokenResponse' {} a -> s {accessToken = a} :: RefreshTokenResponse) Prelude.. Data._Sensitive
+
+-- | The date and time when the new access token expires.
+refreshTokenResponse_expiresIn :: Lens.Lens' RefreshTokenResponse Prelude.Int
+refreshTokenResponse_expiresIn = Lens.lens (\RefreshTokenResponse' {expiresIn} -> expiresIn) (\s@RefreshTokenResponse' {} a -> s {expiresIn = a} :: RefreshTokenResponse)
+
+instance Prelude.NFData RefreshTokenResponse where
+  rnf RefreshTokenResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf accessToken
+      `Prelude.seq` Prelude.rnf expiresIn
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types.hs b/gen/Amazonka/AmplifyUiBuilder/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types.hs
@@ -0,0 +1,629 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _InternalServerException,
+    _InvalidParameterException,
+    _ResourceConflictException,
+    _ResourceNotFoundException,
+    _ServiceQuotaExceededException,
+    _UnauthorizedException,
+
+    -- * FixedPosition
+    FixedPosition (..),
+
+    -- * FormActionType
+    FormActionType (..),
+
+    -- * FormButtonsPosition
+    FormButtonsPosition (..),
+
+    -- * FormDataSourceType
+    FormDataSourceType (..),
+
+    -- * SortDirection
+    SortDirection (..),
+
+    -- * TokenProviders
+    TokenProviders (..),
+
+    -- * ActionParameters
+    ActionParameters (..),
+    newActionParameters,
+    actionParameters_anchor,
+    actionParameters_fields,
+    actionParameters_global,
+    actionParameters_id,
+    actionParameters_model,
+    actionParameters_state,
+    actionParameters_target,
+    actionParameters_type,
+    actionParameters_url,
+
+    -- * Component
+    Component (..),
+    newComponent,
+    component_children,
+    component_collectionProperties,
+    component_events,
+    component_modifiedAt,
+    component_schemaVersion,
+    component_sourceId,
+    component_tags,
+    component_appId,
+    component_bindingProperties,
+    component_componentType,
+    component_createdAt,
+    component_environmentName,
+    component_id,
+    component_name,
+    component_overrides,
+    component_properties,
+    component_variants,
+
+    -- * ComponentBindingPropertiesValue
+    ComponentBindingPropertiesValue (..),
+    newComponentBindingPropertiesValue,
+    componentBindingPropertiesValue_bindingProperties,
+    componentBindingPropertiesValue_defaultValue,
+    componentBindingPropertiesValue_type,
+
+    -- * ComponentBindingPropertiesValueProperties
+    ComponentBindingPropertiesValueProperties (..),
+    newComponentBindingPropertiesValueProperties,
+    componentBindingPropertiesValueProperties_bucket,
+    componentBindingPropertiesValueProperties_defaultValue,
+    componentBindingPropertiesValueProperties_field,
+    componentBindingPropertiesValueProperties_key,
+    componentBindingPropertiesValueProperties_model,
+    componentBindingPropertiesValueProperties_predicates,
+    componentBindingPropertiesValueProperties_slotName,
+    componentBindingPropertiesValueProperties_userAttribute,
+
+    -- * ComponentChild
+    ComponentChild (..),
+    newComponentChild,
+    componentChild_children,
+    componentChild_events,
+    componentChild_sourceId,
+    componentChild_componentType,
+    componentChild_name,
+    componentChild_properties,
+
+    -- * ComponentConditionProperty
+    ComponentConditionProperty (..),
+    newComponentConditionProperty,
+    componentConditionProperty_else,
+    componentConditionProperty_field,
+    componentConditionProperty_operand,
+    componentConditionProperty_operandType,
+    componentConditionProperty_operator,
+    componentConditionProperty_property,
+    componentConditionProperty_then,
+
+    -- * ComponentDataConfiguration
+    ComponentDataConfiguration (..),
+    newComponentDataConfiguration,
+    componentDataConfiguration_identifiers,
+    componentDataConfiguration_predicate,
+    componentDataConfiguration_sort,
+    componentDataConfiguration_model,
+
+    -- * ComponentEvent
+    ComponentEvent (..),
+    newComponentEvent,
+    componentEvent_action,
+    componentEvent_bindingEvent,
+    componentEvent_parameters,
+
+    -- * ComponentProperty
+    ComponentProperty (..),
+    newComponentProperty,
+    componentProperty_bindingProperties,
+    componentProperty_bindings,
+    componentProperty_collectionBindingProperties,
+    componentProperty_componentName,
+    componentProperty_concat,
+    componentProperty_condition,
+    componentProperty_configured,
+    componentProperty_defaultValue,
+    componentProperty_event,
+    componentProperty_importedValue,
+    componentProperty_model,
+    componentProperty_property,
+    componentProperty_type,
+    componentProperty_userAttribute,
+    componentProperty_value,
+
+    -- * ComponentPropertyBindingProperties
+    ComponentPropertyBindingProperties (..),
+    newComponentPropertyBindingProperties,
+    componentPropertyBindingProperties_field,
+    componentPropertyBindingProperties_property,
+
+    -- * ComponentSummary
+    ComponentSummary (..),
+    newComponentSummary,
+    componentSummary_appId,
+    componentSummary_componentType,
+    componentSummary_environmentName,
+    componentSummary_id,
+    componentSummary_name,
+
+    -- * ComponentVariant
+    ComponentVariant (..),
+    newComponentVariant,
+    componentVariant_overrides,
+    componentVariant_variantValues,
+
+    -- * CreateComponentData
+    CreateComponentData (..),
+    newCreateComponentData,
+    createComponentData_children,
+    createComponentData_collectionProperties,
+    createComponentData_events,
+    createComponentData_schemaVersion,
+    createComponentData_sourceId,
+    createComponentData_tags,
+    createComponentData_bindingProperties,
+    createComponentData_componentType,
+    createComponentData_name,
+    createComponentData_overrides,
+    createComponentData_properties,
+    createComponentData_variants,
+
+    -- * CreateFormData
+    CreateFormData (..),
+    newCreateFormData,
+    createFormData_cta,
+    createFormData_tags,
+    createFormData_dataType,
+    createFormData_fields,
+    createFormData_formActionType,
+    createFormData_name,
+    createFormData_schemaVersion,
+    createFormData_sectionalElements,
+    createFormData_style,
+
+    -- * CreateThemeData
+    CreateThemeData (..),
+    newCreateThemeData,
+    createThemeData_overrides,
+    createThemeData_tags,
+    createThemeData_name,
+    createThemeData_values,
+
+    -- * ExchangeCodeForTokenRequestBody
+    ExchangeCodeForTokenRequestBody (..),
+    newExchangeCodeForTokenRequestBody,
+    exchangeCodeForTokenRequestBody_code,
+    exchangeCodeForTokenRequestBody_redirectUri,
+
+    -- * FieldConfig
+    FieldConfig (..),
+    newFieldConfig,
+    fieldConfig_excluded,
+    fieldConfig_inputType,
+    fieldConfig_label,
+    fieldConfig_position,
+    fieldConfig_validations,
+
+    -- * FieldInputConfig
+    FieldInputConfig (..),
+    newFieldInputConfig,
+    fieldInputConfig_defaultChecked,
+    fieldInputConfig_defaultCountryCode,
+    fieldInputConfig_defaultValue,
+    fieldInputConfig_descriptiveText,
+    fieldInputConfig_isArray,
+    fieldInputConfig_maxValue,
+    fieldInputConfig_minValue,
+    fieldInputConfig_name,
+    fieldInputConfig_placeholder,
+    fieldInputConfig_readOnly,
+    fieldInputConfig_required,
+    fieldInputConfig_step,
+    fieldInputConfig_value,
+    fieldInputConfig_valueMappings,
+    fieldInputConfig_type,
+
+    -- * FieldPosition
+    FieldPosition (..),
+    newFieldPosition,
+    fieldPosition_below,
+    fieldPosition_fixed,
+    fieldPosition_rightOf,
+
+    -- * FieldValidationConfiguration
+    FieldValidationConfiguration (..),
+    newFieldValidationConfiguration,
+    fieldValidationConfiguration_numValues,
+    fieldValidationConfiguration_strValues,
+    fieldValidationConfiguration_validationMessage,
+    fieldValidationConfiguration_type,
+
+    -- * Form
+    Form (..),
+    newForm,
+    form_cta,
+    form_tags,
+    form_appId,
+    form_dataType,
+    form_environmentName,
+    form_fields,
+    form_formActionType,
+    form_id,
+    form_name,
+    form_schemaVersion,
+    form_sectionalElements,
+    form_style,
+
+    -- * FormBindingElement
+    FormBindingElement (..),
+    newFormBindingElement,
+    formBindingElement_element,
+    formBindingElement_property,
+
+    -- * FormButton
+    FormButton (..),
+    newFormButton,
+    formButton_children,
+    formButton_excluded,
+    formButton_position,
+
+    -- * FormCTA
+    FormCTA (..),
+    newFormCTA,
+    formCTA_cancel,
+    formCTA_clear,
+    formCTA_position,
+    formCTA_submit,
+
+    -- * FormDataTypeConfig
+    FormDataTypeConfig (..),
+    newFormDataTypeConfig,
+    formDataTypeConfig_dataSourceType,
+    formDataTypeConfig_dataTypeName,
+
+    -- * FormInputValueProperty
+    FormInputValueProperty (..),
+    newFormInputValueProperty,
+    formInputValueProperty_value,
+
+    -- * FormStyle
+    FormStyle (..),
+    newFormStyle,
+    formStyle_horizontalGap,
+    formStyle_outerPadding,
+    formStyle_verticalGap,
+
+    -- * FormStyleConfig
+    FormStyleConfig (..),
+    newFormStyleConfig,
+    formStyleConfig_tokenReference,
+    formStyleConfig_value,
+
+    -- * FormSummary
+    FormSummary (..),
+    newFormSummary,
+    formSummary_appId,
+    formSummary_dataType,
+    formSummary_environmentName,
+    formSummary_formActionType,
+    formSummary_id,
+    formSummary_name,
+
+    -- * MutationActionSetStateParameter
+    MutationActionSetStateParameter (..),
+    newMutationActionSetStateParameter,
+    mutationActionSetStateParameter_componentName,
+    mutationActionSetStateParameter_property,
+    mutationActionSetStateParameter_set,
+
+    -- * Predicate
+    Predicate (..),
+    newPredicate,
+    predicate_and,
+    predicate_field,
+    predicate_operand,
+    predicate_operator,
+    predicate_or,
+
+    -- * PutMetadataFlagBody
+    PutMetadataFlagBody (..),
+    newPutMetadataFlagBody,
+    putMetadataFlagBody_newValue,
+
+    -- * RefreshTokenRequestBody
+    RefreshTokenRequestBody (..),
+    newRefreshTokenRequestBody,
+    refreshTokenRequestBody_token,
+
+    -- * SectionalElement
+    SectionalElement (..),
+    newSectionalElement,
+    sectionalElement_level,
+    sectionalElement_orientation,
+    sectionalElement_position,
+    sectionalElement_text,
+    sectionalElement_type,
+
+    -- * SortProperty
+    SortProperty (..),
+    newSortProperty,
+    sortProperty_direction,
+    sortProperty_field,
+
+    -- * Theme
+    Theme (..),
+    newTheme,
+    theme_modifiedAt,
+    theme_overrides,
+    theme_tags,
+    theme_appId,
+    theme_createdAt,
+    theme_environmentName,
+    theme_id,
+    theme_name,
+    theme_values,
+
+    -- * ThemeSummary
+    ThemeSummary (..),
+    newThemeSummary,
+    themeSummary_appId,
+    themeSummary_environmentName,
+    themeSummary_id,
+    themeSummary_name,
+
+    -- * ThemeValue
+    ThemeValue (..),
+    newThemeValue,
+    themeValue_children,
+    themeValue_value,
+
+    -- * ThemeValues
+    ThemeValues (..),
+    newThemeValues,
+    themeValues_key,
+    themeValues_value,
+
+    -- * UpdateComponentData
+    UpdateComponentData (..),
+    newUpdateComponentData,
+    updateComponentData_bindingProperties,
+    updateComponentData_children,
+    updateComponentData_collectionProperties,
+    updateComponentData_componentType,
+    updateComponentData_events,
+    updateComponentData_id,
+    updateComponentData_name,
+    updateComponentData_overrides,
+    updateComponentData_properties,
+    updateComponentData_schemaVersion,
+    updateComponentData_sourceId,
+    updateComponentData_variants,
+
+    -- * UpdateFormData
+    UpdateFormData (..),
+    newUpdateFormData,
+    updateFormData_cta,
+    updateFormData_dataType,
+    updateFormData_fields,
+    updateFormData_formActionType,
+    updateFormData_name,
+    updateFormData_schemaVersion,
+    updateFormData_sectionalElements,
+    updateFormData_style,
+
+    -- * UpdateThemeData
+    UpdateThemeData (..),
+    newUpdateThemeData,
+    updateThemeData_id,
+    updateThemeData_name,
+    updateThemeData_overrides,
+    updateThemeData_values,
+
+    -- * ValueMapping
+    ValueMapping (..),
+    newValueMapping,
+    valueMapping_displayValue,
+    valueMapping_value,
+
+    -- * ValueMappings
+    ValueMappings (..),
+    newValueMappings,
+    valueMappings_values,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types.ActionParameters
+import Amazonka.AmplifyUiBuilder.Types.Component
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties
+import Amazonka.AmplifyUiBuilder.Types.ComponentChild
+import Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
+import Amazonka.AmplifyUiBuilder.Types.ComponentSummary
+import Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+import Amazonka.AmplifyUiBuilder.Types.CreateComponentData
+import Amazonka.AmplifyUiBuilder.Types.CreateFormData
+import Amazonka.AmplifyUiBuilder.Types.CreateThemeData
+import Amazonka.AmplifyUiBuilder.Types.ExchangeCodeForTokenRequestBody
+import Amazonka.AmplifyUiBuilder.Types.FieldConfig
+import Amazonka.AmplifyUiBuilder.Types.FieldInputConfig
+import Amazonka.AmplifyUiBuilder.Types.FieldPosition
+import Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration
+import Amazonka.AmplifyUiBuilder.Types.FixedPosition
+import Amazonka.AmplifyUiBuilder.Types.Form
+import Amazonka.AmplifyUiBuilder.Types.FormActionType
+import Amazonka.AmplifyUiBuilder.Types.FormBindingElement
+import Amazonka.AmplifyUiBuilder.Types.FormButton
+import Amazonka.AmplifyUiBuilder.Types.FormButtonsPosition
+import Amazonka.AmplifyUiBuilder.Types.FormCTA
+import Amazonka.AmplifyUiBuilder.Types.FormDataSourceType
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty
+import Amazonka.AmplifyUiBuilder.Types.FormStyle
+import Amazonka.AmplifyUiBuilder.Types.FormStyleConfig
+import Amazonka.AmplifyUiBuilder.Types.FormSummary
+import Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter
+import Amazonka.AmplifyUiBuilder.Types.Predicate
+import Amazonka.AmplifyUiBuilder.Types.PutMetadataFlagBody
+import Amazonka.AmplifyUiBuilder.Types.RefreshTokenRequestBody
+import Amazonka.AmplifyUiBuilder.Types.SectionalElement
+import Amazonka.AmplifyUiBuilder.Types.SortDirection
+import Amazonka.AmplifyUiBuilder.Types.SortProperty
+import Amazonka.AmplifyUiBuilder.Types.Theme
+import Amazonka.AmplifyUiBuilder.Types.ThemeSummary
+import Amazonka.AmplifyUiBuilder.Types.ThemeValue
+import Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import Amazonka.AmplifyUiBuilder.Types.TokenProviders
+import Amazonka.AmplifyUiBuilder.Types.UpdateComponentData
+import Amazonka.AmplifyUiBuilder.Types.UpdateFormData
+import Amazonka.AmplifyUiBuilder.Types.UpdateThemeData
+import Amazonka.AmplifyUiBuilder.Types.ValueMapping
+import Amazonka.AmplifyUiBuilder.Types.ValueMappings
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2021-08-11@ of the Amazon Amplify UI Builder SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AmplifyUiBuilder",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "amplifyuibuilder",
+      Core.signingName = "amplifyuibuilder",
+      Core.version = "2021-08-11",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AmplifyUiBuilder",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | An internal error has occurred. Please retry your request.
+_InternalServerException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerException"
+    Prelude.. Core.hasStatus 500
+
+-- | An invalid or out-of-range value was supplied for the input parameter.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+    Prelude.. Core.hasStatus 400
+
+-- | The resource specified in the request conflicts with an existing
+-- resource.
+_ResourceConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceConflictException"
+    Prelude.. Core.hasStatus 409
+
+-- | The requested resource does not exist, or access was denied.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
+    Prelude.. Core.hasStatus 404
+
+-- | You exceeded your service quota. Service quotas, also referred to as
+-- limits, are the maximum number of service resources or operations for
+-- your Amazon Web Services account.
+_ServiceQuotaExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServiceQuotaExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ServiceQuotaExceededException"
+    Prelude.. Core.hasStatus 402
+
+-- | You don\'t have permission to perform this operation.
+_UnauthorizedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedException"
+    Prelude.. Core.hasStatus 401
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ActionParameters.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ActionParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ActionParameters.hs
@@ -0,0 +1,214 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ActionParameters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ActionParameters where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the event action configuration for an element of a
+-- @Component@ or @ComponentChild@. Use for the workflow feature in Amplify
+-- Studio that allows you to bind events and actions to components.
+-- @ActionParameters@ defines the action that is performed when an event
+-- occurs on the component.
+--
+-- /See:/ 'newActionParameters' smart constructor.
+data ActionParameters = ActionParameters'
+  { -- | The HTML anchor link to the location to open. Specify this value for a
+    -- navigation action.
+    anchor :: Prelude.Maybe ComponentProperty,
+    -- | A dictionary of key-value pairs mapping Amplify Studio properties to
+    -- fields in a data model. Use when the action performs an operation on an
+    -- Amplify DataStore model.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentProperty),
+    -- | Specifies whether the user should be signed out globally. Specify this
+    -- value for an auth sign out action.
+    global :: Prelude.Maybe ComponentProperty,
+    -- | The unique ID of the component that the @ActionParameters@ apply to.
+    id :: Prelude.Maybe ComponentProperty,
+    -- | The name of the data model. Use when the action performs an operation on
+    -- an Amplify DataStore model.
+    model :: Prelude.Maybe Prelude.Text,
+    -- | A key-value pair that specifies the state property name and its initial
+    -- value.
+    state :: Prelude.Maybe MutationActionSetStateParameter,
+    -- | The element within the same component to modify when the action occurs.
+    target :: Prelude.Maybe ComponentProperty,
+    -- | The type of navigation action. Valid values are @url@ and @anchor@. This
+    -- value is required for a navigation action.
+    type' :: Prelude.Maybe ComponentProperty,
+    -- | The URL to the location to open. Specify this value for a navigation
+    -- action.
+    url :: Prelude.Maybe ComponentProperty
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ActionParameters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'anchor', 'actionParameters_anchor' - The HTML anchor link to the location to open. Specify this value for a
+-- navigation action.
+--
+-- 'fields', 'actionParameters_fields' - A dictionary of key-value pairs mapping Amplify Studio properties to
+-- fields in a data model. Use when the action performs an operation on an
+-- Amplify DataStore model.
+--
+-- 'global', 'actionParameters_global' - Specifies whether the user should be signed out globally. Specify this
+-- value for an auth sign out action.
+--
+-- 'id', 'actionParameters_id' - The unique ID of the component that the @ActionParameters@ apply to.
+--
+-- 'model', 'actionParameters_model' - The name of the data model. Use when the action performs an operation on
+-- an Amplify DataStore model.
+--
+-- 'state', 'actionParameters_state' - A key-value pair that specifies the state property name and its initial
+-- value.
+--
+-- 'target', 'actionParameters_target' - The element within the same component to modify when the action occurs.
+--
+-- 'type'', 'actionParameters_type' - The type of navigation action. Valid values are @url@ and @anchor@. This
+-- value is required for a navigation action.
+--
+-- 'url', 'actionParameters_url' - The URL to the location to open. Specify this value for a navigation
+-- action.
+newActionParameters ::
+  ActionParameters
+newActionParameters =
+  ActionParameters'
+    { anchor = Prelude.Nothing,
+      fields = Prelude.Nothing,
+      global = Prelude.Nothing,
+      id = Prelude.Nothing,
+      model = Prelude.Nothing,
+      state = Prelude.Nothing,
+      target = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      url = Prelude.Nothing
+    }
+
+-- | The HTML anchor link to the location to open. Specify this value for a
+-- navigation action.
+actionParameters_anchor :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_anchor = Lens.lens (\ActionParameters' {anchor} -> anchor) (\s@ActionParameters' {} a -> s {anchor = a} :: ActionParameters)
+
+-- | A dictionary of key-value pairs mapping Amplify Studio properties to
+-- fields in a data model. Use when the action performs an operation on an
+-- Amplify DataStore model.
+actionParameters_fields :: Lens.Lens' ActionParameters (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentProperty))
+actionParameters_fields = Lens.lens (\ActionParameters' {fields} -> fields) (\s@ActionParameters' {} a -> s {fields = a} :: ActionParameters) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether the user should be signed out globally. Specify this
+-- value for an auth sign out action.
+actionParameters_global :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_global = Lens.lens (\ActionParameters' {global} -> global) (\s@ActionParameters' {} a -> s {global = a} :: ActionParameters)
+
+-- | The unique ID of the component that the @ActionParameters@ apply to.
+actionParameters_id :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_id = Lens.lens (\ActionParameters' {id} -> id) (\s@ActionParameters' {} a -> s {id = a} :: ActionParameters)
+
+-- | The name of the data model. Use when the action performs an operation on
+-- an Amplify DataStore model.
+actionParameters_model :: Lens.Lens' ActionParameters (Prelude.Maybe Prelude.Text)
+actionParameters_model = Lens.lens (\ActionParameters' {model} -> model) (\s@ActionParameters' {} a -> s {model = a} :: ActionParameters)
+
+-- | A key-value pair that specifies the state property name and its initial
+-- value.
+actionParameters_state :: Lens.Lens' ActionParameters (Prelude.Maybe MutationActionSetStateParameter)
+actionParameters_state = Lens.lens (\ActionParameters' {state} -> state) (\s@ActionParameters' {} a -> s {state = a} :: ActionParameters)
+
+-- | The element within the same component to modify when the action occurs.
+actionParameters_target :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_target = Lens.lens (\ActionParameters' {target} -> target) (\s@ActionParameters' {} a -> s {target = a} :: ActionParameters)
+
+-- | The type of navigation action. Valid values are @url@ and @anchor@. This
+-- value is required for a navigation action.
+actionParameters_type :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_type = Lens.lens (\ActionParameters' {type'} -> type') (\s@ActionParameters' {} a -> s {type' = a} :: ActionParameters)
+
+-- | The URL to the location to open. Specify this value for a navigation
+-- action.
+actionParameters_url :: Lens.Lens' ActionParameters (Prelude.Maybe ComponentProperty)
+actionParameters_url = Lens.lens (\ActionParameters' {url} -> url) (\s@ActionParameters' {} a -> s {url = a} :: ActionParameters)
+
+instance Data.FromJSON ActionParameters where
+  parseJSON =
+    Data.withObject
+      "ActionParameters"
+      ( \x ->
+          ActionParameters'
+            Prelude.<$> (x Data..:? "anchor")
+            Prelude.<*> (x Data..:? "fields" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "global")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "model")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "target")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "url")
+      )
+
+instance Prelude.Hashable ActionParameters where
+  hashWithSalt _salt ActionParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` anchor
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` global
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` model
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` target
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` url
+
+instance Prelude.NFData ActionParameters where
+  rnf ActionParameters' {..} =
+    Prelude.rnf anchor
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf global
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf model
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf target
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf url
+
+instance Data.ToJSON ActionParameters where
+  toJSON ActionParameters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("anchor" Data..=) Prelude.<$> anchor,
+            ("fields" Data..=) Prelude.<$> fields,
+            ("global" Data..=) Prelude.<$> global,
+            ("id" Data..=) Prelude.<$> id,
+            ("model" Data..=) Prelude.<$> model,
+            ("state" Data..=) Prelude.<$> state,
+            ("target" Data..=) Prelude.<$> target,
+            ("type" Data..=) Prelude.<$> type',
+            ("url" Data..=) Prelude.<$> url
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/Component.hs b/gen/Amazonka/AmplifyUiBuilder/Types/Component.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/Component.hs
@@ -0,0 +1,331 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.Component
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.Component where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+import Amazonka.AmplifyUiBuilder.Types.ComponentChild
+import Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the configuration settings for a user interface (UI) element
+-- for an Amplify app. A component is configured as a primary, stand-alone
+-- UI element. Use @ComponentChild@ to configure an instance of a
+-- @Component@. A @ComponentChild@ instance inherits the configuration of
+-- the main @Component@.
+--
+-- /See:/ 'newComponent' smart constructor.
+data Component = Component'
+  { -- | A list of the component\'s @ComponentChild@ instances.
+    children :: Prelude.Maybe [ComponentChild],
+    -- | The data binding configuration for the component\'s properties. Use this
+    -- for a collection component. You can\'t specify @tags@ as a valid
+    -- property for @collectionProperties@.
+    collectionProperties :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration),
+    -- | Describes the events that can be raised on the component. Use for the
+    -- workflow feature in Amplify Studio that allows you to bind events and
+    -- actions to components.
+    events :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent),
+    -- | The time that the component was modified.
+    modifiedAt :: Prelude.Maybe Data.ISO8601,
+    -- | The schema version of the component when it was imported.
+    schemaVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the component in its original source system, such as
+    -- Figma.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | One or more key-value pairs to use when tagging the component.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique ID of the Amplify app associated with the component.
+    appId :: Prelude.Text,
+    -- | The information to connect a component\'s properties to data at runtime.
+    -- You can\'t specify @tags@ as a valid property for @bindingProperties@.
+    bindingProperties :: Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue,
+    -- | The type of the component. This can be an Amplify custom UI component or
+    -- another custom component.
+    componentType :: Prelude.Text,
+    -- | The time that the component was created.
+    createdAt :: Data.ISO8601,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the component.
+    id :: Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Text,
+    -- | Describes the component\'s properties that can be overriden in a
+    -- customized instance of the component. You can\'t specify @tags@ as a
+    -- valid property for @overrides@.
+    overrides :: Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Describes the component\'s properties. You can\'t specify @tags@ as a
+    -- valid property for @properties@.
+    properties :: Prelude.HashMap Prelude.Text ComponentProperty,
+    -- | A list of the component\'s variants. A variant is a unique style
+    -- configuration of a main component.
+    variants :: [ComponentVariant]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Component' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'children', 'component_children' - A list of the component\'s @ComponentChild@ instances.
+--
+-- 'collectionProperties', 'component_collectionProperties' - The data binding configuration for the component\'s properties. Use this
+-- for a collection component. You can\'t specify @tags@ as a valid
+-- property for @collectionProperties@.
+--
+-- 'events', 'component_events' - Describes the events that can be raised on the component. Use for the
+-- workflow feature in Amplify Studio that allows you to bind events and
+-- actions to components.
+--
+-- 'modifiedAt', 'component_modifiedAt' - The time that the component was modified.
+--
+-- 'schemaVersion', 'component_schemaVersion' - The schema version of the component when it was imported.
+--
+-- 'sourceId', 'component_sourceId' - The unique ID of the component in its original source system, such as
+-- Figma.
+--
+-- 'tags', 'component_tags' - One or more key-value pairs to use when tagging the component.
+--
+-- 'appId', 'component_appId' - The unique ID of the Amplify app associated with the component.
+--
+-- 'bindingProperties', 'component_bindingProperties' - The information to connect a component\'s properties to data at runtime.
+-- You can\'t specify @tags@ as a valid property for @bindingProperties@.
+--
+-- 'componentType', 'component_componentType' - The type of the component. This can be an Amplify custom UI component or
+-- another custom component.
+--
+-- 'createdAt', 'component_createdAt' - The time that the component was created.
+--
+-- 'environmentName', 'component_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'component_id' - The unique ID of the component.
+--
+-- 'name', 'component_name' - The name of the component.
+--
+-- 'overrides', 'component_overrides' - Describes the component\'s properties that can be overriden in a
+-- customized instance of the component. You can\'t specify @tags@ as a
+-- valid property for @overrides@.
+--
+-- 'properties', 'component_properties' - Describes the component\'s properties. You can\'t specify @tags@ as a
+-- valid property for @properties@.
+--
+-- 'variants', 'component_variants' - A list of the component\'s variants. A variant is a unique style
+-- configuration of a main component.
+newComponent ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'componentType'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  Component
+newComponent
+  pAppId_
+  pComponentType_
+  pCreatedAt_
+  pEnvironmentName_
+  pId_
+  pName_ =
+    Component'
+      { children = Prelude.Nothing,
+        collectionProperties = Prelude.Nothing,
+        events = Prelude.Nothing,
+        modifiedAt = Prelude.Nothing,
+        schemaVersion = Prelude.Nothing,
+        sourceId = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appId = pAppId_,
+        bindingProperties = Prelude.mempty,
+        componentType = pComponentType_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        name = pName_,
+        overrides = Prelude.mempty,
+        properties = Prelude.mempty,
+        variants = Prelude.mempty
+      }
+
+-- | A list of the component\'s @ComponentChild@ instances.
+component_children :: Lens.Lens' Component (Prelude.Maybe [ComponentChild])
+component_children = Lens.lens (\Component' {children} -> children) (\s@Component' {} a -> s {children = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The data binding configuration for the component\'s properties. Use this
+-- for a collection component. You can\'t specify @tags@ as a valid
+-- property for @collectionProperties@.
+component_collectionProperties :: Lens.Lens' Component (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration))
+component_collectionProperties = Lens.lens (\Component' {collectionProperties} -> collectionProperties) (\s@Component' {} a -> s {collectionProperties = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the events that can be raised on the component. Use for the
+-- workflow feature in Amplify Studio that allows you to bind events and
+-- actions to components.
+component_events :: Lens.Lens' Component (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent))
+component_events = Lens.lens (\Component' {events} -> events) (\s@Component' {} a -> s {events = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The time that the component was modified.
+component_modifiedAt :: Lens.Lens' Component (Prelude.Maybe Prelude.UTCTime)
+component_modifiedAt = Lens.lens (\Component' {modifiedAt} -> modifiedAt) (\s@Component' {} a -> s {modifiedAt = a} :: Component) Prelude.. Lens.mapping Data._Time
+
+-- | The schema version of the component when it was imported.
+component_schemaVersion :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_schemaVersion = Lens.lens (\Component' {schemaVersion} -> schemaVersion) (\s@Component' {} a -> s {schemaVersion = a} :: Component)
+
+-- | The unique ID of the component in its original source system, such as
+-- Figma.
+component_sourceId :: Lens.Lens' Component (Prelude.Maybe Prelude.Text)
+component_sourceId = Lens.lens (\Component' {sourceId} -> sourceId) (\s@Component' {} a -> s {sourceId = a} :: Component)
+
+-- | One or more key-value pairs to use when tagging the component.
+component_tags :: Lens.Lens' Component (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+component_tags = Lens.lens (\Component' {tags} -> tags) (\s@Component' {} a -> s {tags = a} :: Component) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the Amplify app associated with the component.
+component_appId :: Lens.Lens' Component Prelude.Text
+component_appId = Lens.lens (\Component' {appId} -> appId) (\s@Component' {} a -> s {appId = a} :: Component)
+
+-- | The information to connect a component\'s properties to data at runtime.
+-- You can\'t specify @tags@ as a valid property for @bindingProperties@.
+component_bindingProperties :: Lens.Lens' Component (Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue)
+component_bindingProperties = Lens.lens (\Component' {bindingProperties} -> bindingProperties) (\s@Component' {} a -> s {bindingProperties = a} :: Component) Prelude.. Lens.coerced
+
+-- | The type of the component. This can be an Amplify custom UI component or
+-- another custom component.
+component_componentType :: Lens.Lens' Component Prelude.Text
+component_componentType = Lens.lens (\Component' {componentType} -> componentType) (\s@Component' {} a -> s {componentType = a} :: Component)
+
+-- | The time that the component was created.
+component_createdAt :: Lens.Lens' Component Prelude.UTCTime
+component_createdAt = Lens.lens (\Component' {createdAt} -> createdAt) (\s@Component' {} a -> s {createdAt = a} :: Component) Prelude.. Data._Time
+
+-- | The name of the backend environment that is a part of the Amplify app.
+component_environmentName :: Lens.Lens' Component Prelude.Text
+component_environmentName = Lens.lens (\Component' {environmentName} -> environmentName) (\s@Component' {} a -> s {environmentName = a} :: Component)
+
+-- | The unique ID of the component.
+component_id :: Lens.Lens' Component Prelude.Text
+component_id = Lens.lens (\Component' {id} -> id) (\s@Component' {} a -> s {id = a} :: Component)
+
+-- | The name of the component.
+component_name :: Lens.Lens' Component Prelude.Text
+component_name = Lens.lens (\Component' {name} -> name) (\s@Component' {} a -> s {name = a} :: Component)
+
+-- | Describes the component\'s properties that can be overriden in a
+-- customized instance of the component. You can\'t specify @tags@ as a
+-- valid property for @overrides@.
+component_overrides :: Lens.Lens' Component (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text))
+component_overrides = Lens.lens (\Component' {overrides} -> overrides) (\s@Component' {} a -> s {overrides = a} :: Component) Prelude.. Lens.coerced
+
+-- | Describes the component\'s properties. You can\'t specify @tags@ as a
+-- valid property for @properties@.
+component_properties :: Lens.Lens' Component (Prelude.HashMap Prelude.Text ComponentProperty)
+component_properties = Lens.lens (\Component' {properties} -> properties) (\s@Component' {} a -> s {properties = a} :: Component) Prelude.. Lens.coerced
+
+-- | A list of the component\'s variants. A variant is a unique style
+-- configuration of a main component.
+component_variants :: Lens.Lens' Component [ComponentVariant]
+component_variants = Lens.lens (\Component' {variants} -> variants) (\s@Component' {} a -> s {variants = a} :: Component) Prelude.. Lens.coerced
+
+instance Data.FromJSON Component where
+  parseJSON =
+    Data.withObject
+      "Component"
+      ( \x ->
+          Component'
+            Prelude.<$> (x Data..:? "children" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "collectionProperties"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "modifiedAt")
+            Prelude.<*> (x Data..:? "schemaVersion")
+            Prelude.<*> (x Data..:? "sourceId")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "appId")
+            Prelude.<*> ( x
+                            Data..:? "bindingProperties"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "componentType")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..:? "overrides" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "properties" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "variants" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Component where
+  hashWithSalt _salt Component' {..} =
+    _salt
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` collectionProperties
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` modifiedAt
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` bindingProperties
+      `Prelude.hashWithSalt` componentType
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` properties
+      `Prelude.hashWithSalt` variants
+
+instance Prelude.NFData Component where
+  rnf Component' {..} =
+    Prelude.rnf children
+      `Prelude.seq` Prelude.rnf collectionProperties
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf modifiedAt
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf bindingProperties
+      `Prelude.seq` Prelude.rnf componentType
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf properties
+      `Prelude.seq` Prelude.rnf variants
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValue.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValue.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the data binding configuration for a component at runtime.
+-- You can use @ComponentBindingPropertiesValue@ to add exposed properties
+-- to a component to allow different values to be entered when a component
+-- is reused in different places in an app.
+--
+-- /See:/ 'newComponentBindingPropertiesValue' smart constructor.
+data ComponentBindingPropertiesValue = ComponentBindingPropertiesValue'
+  { -- | Describes the properties to customize with data at runtime.
+    bindingProperties :: Prelude.Maybe ComponentBindingPropertiesValueProperties,
+    -- | The default value of the property.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The property type.
+    type' :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentBindingPropertiesValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bindingProperties', 'componentBindingPropertiesValue_bindingProperties' - Describes the properties to customize with data at runtime.
+--
+-- 'defaultValue', 'componentBindingPropertiesValue_defaultValue' - The default value of the property.
+--
+-- 'type'', 'componentBindingPropertiesValue_type' - The property type.
+newComponentBindingPropertiesValue ::
+  ComponentBindingPropertiesValue
+newComponentBindingPropertiesValue =
+  ComponentBindingPropertiesValue'
+    { bindingProperties =
+        Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | Describes the properties to customize with data at runtime.
+componentBindingPropertiesValue_bindingProperties :: Lens.Lens' ComponentBindingPropertiesValue (Prelude.Maybe ComponentBindingPropertiesValueProperties)
+componentBindingPropertiesValue_bindingProperties = Lens.lens (\ComponentBindingPropertiesValue' {bindingProperties} -> bindingProperties) (\s@ComponentBindingPropertiesValue' {} a -> s {bindingProperties = a} :: ComponentBindingPropertiesValue)
+
+-- | The default value of the property.
+componentBindingPropertiesValue_defaultValue :: Lens.Lens' ComponentBindingPropertiesValue (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValue_defaultValue = Lens.lens (\ComponentBindingPropertiesValue' {defaultValue} -> defaultValue) (\s@ComponentBindingPropertiesValue' {} a -> s {defaultValue = a} :: ComponentBindingPropertiesValue)
+
+-- | The property type.
+componentBindingPropertiesValue_type :: Lens.Lens' ComponentBindingPropertiesValue (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValue_type = Lens.lens (\ComponentBindingPropertiesValue' {type'} -> type') (\s@ComponentBindingPropertiesValue' {} a -> s {type' = a} :: ComponentBindingPropertiesValue)
+
+instance
+  Data.FromJSON
+    ComponentBindingPropertiesValue
+  where
+  parseJSON =
+    Data.withObject
+      "ComponentBindingPropertiesValue"
+      ( \x ->
+          ComponentBindingPropertiesValue'
+            Prelude.<$> (x Data..:? "bindingProperties")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance
+  Prelude.Hashable
+    ComponentBindingPropertiesValue
+  where
+  hashWithSalt
+    _salt
+    ComponentBindingPropertiesValue' {..} =
+      _salt
+        `Prelude.hashWithSalt` bindingProperties
+        `Prelude.hashWithSalt` defaultValue
+        `Prelude.hashWithSalt` type'
+
+instance
+  Prelude.NFData
+    ComponentBindingPropertiesValue
+  where
+  rnf ComponentBindingPropertiesValue' {..} =
+    Prelude.rnf bindingProperties
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON ComponentBindingPropertiesValue where
+  toJSON ComponentBindingPropertiesValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bindingProperties" Data..=)
+              Prelude.<$> bindingProperties,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("type" Data..=) Prelude.<$> type'
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValueProperties.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValueProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentBindingPropertiesValueProperties.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValueProperties where
+
+import Amazonka.AmplifyUiBuilder.Types.Predicate
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the data binding configuration for a specific property using
+-- data stored in Amazon Web Services. For Amazon Web Services connected
+-- properties, you can bind a property to data stored in an Amazon S3
+-- bucket, an Amplify DataStore model or an authenticated user attribute.
+--
+-- /See:/ 'newComponentBindingPropertiesValueProperties' smart constructor.
+data ComponentBindingPropertiesValueProperties = ComponentBindingPropertiesValueProperties'
+  { -- | An Amazon S3 bucket.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The default value to assign to the property.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The field to bind the data to.
+    field :: Prelude.Maybe Prelude.Text,
+    -- | The storage key for an Amazon S3 bucket.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | An Amplify DataStore model.
+    model :: Prelude.Maybe Prelude.Text,
+    -- | A list of predicates for binding a component\'s properties to data.
+    predicates :: Prelude.Maybe [Predicate],
+    -- | The name of a component slot.
+    slotName :: Prelude.Maybe Prelude.Text,
+    -- | An authenticated user attribute.
+    userAttribute :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentBindingPropertiesValueProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 'componentBindingPropertiesValueProperties_bucket' - An Amazon S3 bucket.
+--
+-- 'defaultValue', 'componentBindingPropertiesValueProperties_defaultValue' - The default value to assign to the property.
+--
+-- 'field', 'componentBindingPropertiesValueProperties_field' - The field to bind the data to.
+--
+-- 'key', 'componentBindingPropertiesValueProperties_key' - The storage key for an Amazon S3 bucket.
+--
+-- 'model', 'componentBindingPropertiesValueProperties_model' - An Amplify DataStore model.
+--
+-- 'predicates', 'componentBindingPropertiesValueProperties_predicates' - A list of predicates for binding a component\'s properties to data.
+--
+-- 'slotName', 'componentBindingPropertiesValueProperties_slotName' - The name of a component slot.
+--
+-- 'userAttribute', 'componentBindingPropertiesValueProperties_userAttribute' - An authenticated user attribute.
+newComponentBindingPropertiesValueProperties ::
+  ComponentBindingPropertiesValueProperties
+newComponentBindingPropertiesValueProperties =
+  ComponentBindingPropertiesValueProperties'
+    { bucket =
+        Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      field = Prelude.Nothing,
+      key = Prelude.Nothing,
+      model = Prelude.Nothing,
+      predicates = Prelude.Nothing,
+      slotName = Prelude.Nothing,
+      userAttribute = Prelude.Nothing
+    }
+
+-- | An Amazon S3 bucket.
+componentBindingPropertiesValueProperties_bucket :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_bucket = Lens.lens (\ComponentBindingPropertiesValueProperties' {bucket} -> bucket) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {bucket = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | The default value to assign to the property.
+componentBindingPropertiesValueProperties_defaultValue :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_defaultValue = Lens.lens (\ComponentBindingPropertiesValueProperties' {defaultValue} -> defaultValue) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {defaultValue = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | The field to bind the data to.
+componentBindingPropertiesValueProperties_field :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_field = Lens.lens (\ComponentBindingPropertiesValueProperties' {field} -> field) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {field = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | The storage key for an Amazon S3 bucket.
+componentBindingPropertiesValueProperties_key :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_key = Lens.lens (\ComponentBindingPropertiesValueProperties' {key} -> key) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {key = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | An Amplify DataStore model.
+componentBindingPropertiesValueProperties_model :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_model = Lens.lens (\ComponentBindingPropertiesValueProperties' {model} -> model) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {model = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | A list of predicates for binding a component\'s properties to data.
+componentBindingPropertiesValueProperties_predicates :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe [Predicate])
+componentBindingPropertiesValueProperties_predicates = Lens.lens (\ComponentBindingPropertiesValueProperties' {predicates} -> predicates) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {predicates = a} :: ComponentBindingPropertiesValueProperties) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of a component slot.
+componentBindingPropertiesValueProperties_slotName :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_slotName = Lens.lens (\ComponentBindingPropertiesValueProperties' {slotName} -> slotName) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {slotName = a} :: ComponentBindingPropertiesValueProperties)
+
+-- | An authenticated user attribute.
+componentBindingPropertiesValueProperties_userAttribute :: Lens.Lens' ComponentBindingPropertiesValueProperties (Prelude.Maybe Prelude.Text)
+componentBindingPropertiesValueProperties_userAttribute = Lens.lens (\ComponentBindingPropertiesValueProperties' {userAttribute} -> userAttribute) (\s@ComponentBindingPropertiesValueProperties' {} a -> s {userAttribute = a} :: ComponentBindingPropertiesValueProperties)
+
+instance
+  Data.FromJSON
+    ComponentBindingPropertiesValueProperties
+  where
+  parseJSON =
+    Data.withObject
+      "ComponentBindingPropertiesValueProperties"
+      ( \x ->
+          ComponentBindingPropertiesValueProperties'
+            Prelude.<$> (x Data..:? "bucket")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "field")
+            Prelude.<*> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "model")
+            Prelude.<*> (x Data..:? "predicates" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "slotName")
+            Prelude.<*> (x Data..:? "userAttribute")
+      )
+
+instance
+  Prelude.Hashable
+    ComponentBindingPropertiesValueProperties
+  where
+  hashWithSalt
+    _salt
+    ComponentBindingPropertiesValueProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` bucket
+        `Prelude.hashWithSalt` defaultValue
+        `Prelude.hashWithSalt` field
+        `Prelude.hashWithSalt` key
+        `Prelude.hashWithSalt` model
+        `Prelude.hashWithSalt` predicates
+        `Prelude.hashWithSalt` slotName
+        `Prelude.hashWithSalt` userAttribute
+
+instance
+  Prelude.NFData
+    ComponentBindingPropertiesValueProperties
+  where
+  rnf ComponentBindingPropertiesValueProperties' {..} =
+    Prelude.rnf bucket
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf field
+      `Prelude.seq` Prelude.rnf key
+      `Prelude.seq` Prelude.rnf model
+      `Prelude.seq` Prelude.rnf predicates
+      `Prelude.seq` Prelude.rnf slotName
+      `Prelude.seq` Prelude.rnf userAttribute
+
+instance
+  Data.ToJSON
+    ComponentBindingPropertiesValueProperties
+  where
+  toJSON ComponentBindingPropertiesValueProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucket" Data..=) Prelude.<$> bucket,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("field" Data..=) Prelude.<$> field,
+            ("key" Data..=) Prelude.<$> key,
+            ("model" Data..=) Prelude.<$> model,
+            ("predicates" Data..=) Prelude.<$> predicates,
+            ("slotName" Data..=) Prelude.<$> slotName,
+            ("userAttribute" Data..=) Prelude.<$> userAttribute
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentChild.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentChild.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentChild.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentChild
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentChild where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A nested UI configuration within a parent @Component@.
+--
+-- /See:/ 'newComponentChild' smart constructor.
+data ComponentChild = ComponentChild'
+  { -- | The list of @ComponentChild@ instances for this component.
+    children :: Prelude.Maybe [ComponentChild],
+    -- | Describes the events that can be raised on the child component. Use for
+    -- the workflow feature in Amplify Studio that allows you to bind events
+    -- and actions to components.
+    events :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent),
+    -- | The unique ID of the child component in its original source system, such
+    -- as Figma.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of the child component.
+    componentType :: Prelude.Text,
+    -- | The name of the child component.
+    name :: Prelude.Text,
+    -- | Describes the properties of the child component. You can\'t specify
+    -- @tags@ as a valid property for @properties@.
+    properties :: Prelude.HashMap Prelude.Text ComponentProperty
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentChild' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'children', 'componentChild_children' - The list of @ComponentChild@ instances for this component.
+--
+-- 'events', 'componentChild_events' - Describes the events that can be raised on the child component. Use for
+-- the workflow feature in Amplify Studio that allows you to bind events
+-- and actions to components.
+--
+-- 'sourceId', 'componentChild_sourceId' - The unique ID of the child component in its original source system, such
+-- as Figma.
+--
+-- 'componentType', 'componentChild_componentType' - The type of the child component.
+--
+-- 'name', 'componentChild_name' - The name of the child component.
+--
+-- 'properties', 'componentChild_properties' - Describes the properties of the child component. You can\'t specify
+-- @tags@ as a valid property for @properties@.
+newComponentChild ::
+  -- | 'componentType'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  ComponentChild
+newComponentChild pComponentType_ pName_ =
+  ComponentChild'
+    { children = Prelude.Nothing,
+      events = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      componentType = pComponentType_,
+      name = pName_,
+      properties = Prelude.mempty
+    }
+
+-- | The list of @ComponentChild@ instances for this component.
+componentChild_children :: Lens.Lens' ComponentChild (Prelude.Maybe [ComponentChild])
+componentChild_children = Lens.lens (\ComponentChild' {children} -> children) (\s@ComponentChild' {} a -> s {children = a} :: ComponentChild) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the events that can be raised on the child component. Use for
+-- the workflow feature in Amplify Studio that allows you to bind events
+-- and actions to components.
+componentChild_events :: Lens.Lens' ComponentChild (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent))
+componentChild_events = Lens.lens (\ComponentChild' {events} -> events) (\s@ComponentChild' {} a -> s {events = a} :: ComponentChild) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the child component in its original source system, such
+-- as Figma.
+componentChild_sourceId :: Lens.Lens' ComponentChild (Prelude.Maybe Prelude.Text)
+componentChild_sourceId = Lens.lens (\ComponentChild' {sourceId} -> sourceId) (\s@ComponentChild' {} a -> s {sourceId = a} :: ComponentChild)
+
+-- | The type of the child component.
+componentChild_componentType :: Lens.Lens' ComponentChild Prelude.Text
+componentChild_componentType = Lens.lens (\ComponentChild' {componentType} -> componentType) (\s@ComponentChild' {} a -> s {componentType = a} :: ComponentChild)
+
+-- | The name of the child component.
+componentChild_name :: Lens.Lens' ComponentChild Prelude.Text
+componentChild_name = Lens.lens (\ComponentChild' {name} -> name) (\s@ComponentChild' {} a -> s {name = a} :: ComponentChild)
+
+-- | Describes the properties of the child component. You can\'t specify
+-- @tags@ as a valid property for @properties@.
+componentChild_properties :: Lens.Lens' ComponentChild (Prelude.HashMap Prelude.Text ComponentProperty)
+componentChild_properties = Lens.lens (\ComponentChild' {properties} -> properties) (\s@ComponentChild' {} a -> s {properties = a} :: ComponentChild) Prelude.. Lens.coerced
+
+instance Data.FromJSON ComponentChild where
+  parseJSON =
+    Data.withObject
+      "ComponentChild"
+      ( \x ->
+          ComponentChild'
+            Prelude.<$> (x Data..:? "children" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "events" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "sourceId")
+            Prelude.<*> (x Data..: "componentType")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..:? "properties" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ComponentChild where
+  hashWithSalt _salt ComponentChild' {..} =
+    _salt
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` componentType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` properties
+
+instance Prelude.NFData ComponentChild where
+  rnf ComponentChild' {..} =
+    Prelude.rnf children
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf componentType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf properties
+
+instance Data.ToJSON ComponentChild where
+  toJSON ComponentChild' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("children" Data..=) Prelude.<$> children,
+            ("events" Data..=) Prelude.<$> events,
+            ("sourceId" Data..=) Prelude.<$> sourceId,
+            Prelude.Just ("componentType" Data..= componentType),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("properties" Data..= properties)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty where
+
+import {-# SOURCE #-} Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a conditional expression to set a component property. Use
+-- @ComponentConditionProperty@ to set a property to different values
+-- conditionally, based on the value of another property.
+--
+-- /See:/ 'newComponentConditionProperty' smart constructor.
+data ComponentConditionProperty = ComponentConditionProperty'
+  { -- | The value to assign to the property if the condition is not met.
+    else' :: Prelude.Maybe ComponentProperty,
+    -- | The name of a field. Specify this when the property is a data model.
+    field :: Prelude.Maybe Prelude.Text,
+    -- | The value of the property to evaluate.
+    operand :: Prelude.Maybe Prelude.Text,
+    -- | The type of the property to evaluate.
+    operandType :: Prelude.Maybe Prelude.Text,
+    -- | The operator to use to perform the evaluation, such as @eq@ to represent
+    -- equals.
+    operator :: Prelude.Maybe Prelude.Text,
+    -- | The name of the conditional property.
+    property :: Prelude.Maybe Prelude.Text,
+    -- | The value to assign to the property if the condition is met.
+    then' :: Prelude.Maybe ComponentProperty
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentConditionProperty' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'else'', 'componentConditionProperty_else' - The value to assign to the property if the condition is not met.
+--
+-- 'field', 'componentConditionProperty_field' - The name of a field. Specify this when the property is a data model.
+--
+-- 'operand', 'componentConditionProperty_operand' - The value of the property to evaluate.
+--
+-- 'operandType', 'componentConditionProperty_operandType' - The type of the property to evaluate.
+--
+-- 'operator', 'componentConditionProperty_operator' - The operator to use to perform the evaluation, such as @eq@ to represent
+-- equals.
+--
+-- 'property', 'componentConditionProperty_property' - The name of the conditional property.
+--
+-- 'then'', 'componentConditionProperty_then' - The value to assign to the property if the condition is met.
+newComponentConditionProperty ::
+  ComponentConditionProperty
+newComponentConditionProperty =
+  ComponentConditionProperty'
+    { else' =
+        Prelude.Nothing,
+      field = Prelude.Nothing,
+      operand = Prelude.Nothing,
+      operandType = Prelude.Nothing,
+      operator = Prelude.Nothing,
+      property = Prelude.Nothing,
+      then' = Prelude.Nothing
+    }
+
+-- | The value to assign to the property if the condition is not met.
+componentConditionProperty_else :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe ComponentProperty)
+componentConditionProperty_else = Lens.lens (\ComponentConditionProperty' {else'} -> else') (\s@ComponentConditionProperty' {} a -> s {else' = a} :: ComponentConditionProperty)
+
+-- | The name of a field. Specify this when the property is a data model.
+componentConditionProperty_field :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe Prelude.Text)
+componentConditionProperty_field = Lens.lens (\ComponentConditionProperty' {field} -> field) (\s@ComponentConditionProperty' {} a -> s {field = a} :: ComponentConditionProperty)
+
+-- | The value of the property to evaluate.
+componentConditionProperty_operand :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe Prelude.Text)
+componentConditionProperty_operand = Lens.lens (\ComponentConditionProperty' {operand} -> operand) (\s@ComponentConditionProperty' {} a -> s {operand = a} :: ComponentConditionProperty)
+
+-- | The type of the property to evaluate.
+componentConditionProperty_operandType :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe Prelude.Text)
+componentConditionProperty_operandType = Lens.lens (\ComponentConditionProperty' {operandType} -> operandType) (\s@ComponentConditionProperty' {} a -> s {operandType = a} :: ComponentConditionProperty)
+
+-- | The operator to use to perform the evaluation, such as @eq@ to represent
+-- equals.
+componentConditionProperty_operator :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe Prelude.Text)
+componentConditionProperty_operator = Lens.lens (\ComponentConditionProperty' {operator} -> operator) (\s@ComponentConditionProperty' {} a -> s {operator = a} :: ComponentConditionProperty)
+
+-- | The name of the conditional property.
+componentConditionProperty_property :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe Prelude.Text)
+componentConditionProperty_property = Lens.lens (\ComponentConditionProperty' {property} -> property) (\s@ComponentConditionProperty' {} a -> s {property = a} :: ComponentConditionProperty)
+
+-- | The value to assign to the property if the condition is met.
+componentConditionProperty_then :: Lens.Lens' ComponentConditionProperty (Prelude.Maybe ComponentProperty)
+componentConditionProperty_then = Lens.lens (\ComponentConditionProperty' {then'} -> then') (\s@ComponentConditionProperty' {} a -> s {then' = a} :: ComponentConditionProperty)
+
+instance Data.FromJSON ComponentConditionProperty where
+  parseJSON =
+    Data.withObject
+      "ComponentConditionProperty"
+      ( \x ->
+          ComponentConditionProperty'
+            Prelude.<$> (x Data..:? "else")
+            Prelude.<*> (x Data..:? "field")
+            Prelude.<*> (x Data..:? "operand")
+            Prelude.<*> (x Data..:? "operandType")
+            Prelude.<*> (x Data..:? "operator")
+            Prelude.<*> (x Data..:? "property")
+            Prelude.<*> (x Data..:? "then")
+      )
+
+instance Prelude.Hashable ComponentConditionProperty where
+  hashWithSalt _salt ComponentConditionProperty' {..} =
+    _salt
+      `Prelude.hashWithSalt` else'
+      `Prelude.hashWithSalt` field
+      `Prelude.hashWithSalt` operand
+      `Prelude.hashWithSalt` operandType
+      `Prelude.hashWithSalt` operator
+      `Prelude.hashWithSalt` property
+      `Prelude.hashWithSalt` then'
+
+instance Prelude.NFData ComponentConditionProperty where
+  rnf ComponentConditionProperty' {..} =
+    Prelude.rnf else'
+      `Prelude.seq` Prelude.rnf field
+      `Prelude.seq` Prelude.rnf operand
+      `Prelude.seq` Prelude.rnf operandType
+      `Prelude.seq` Prelude.rnf operator
+      `Prelude.seq` Prelude.rnf property
+      `Prelude.seq` Prelude.rnf then'
+
+instance Data.ToJSON ComponentConditionProperty where
+  toJSON ComponentConditionProperty' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("else" Data..=) Prelude.<$> else',
+            ("field" Data..=) Prelude.<$> field,
+            ("operand" Data..=) Prelude.<$> operand,
+            ("operandType" Data..=) Prelude.<$> operandType,
+            ("operator" Data..=) Prelude.<$> operator,
+            ("property" Data..=) Prelude.<$> property,
+            ("then" Data..=) Prelude.<$> then'
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs-boot b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentConditionProperty.hs-boot
@@ -0,0 +1,33 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data ComponentConditionProperty
+
+instance Prelude.Eq ComponentConditionProperty
+
+instance Prelude.Read ComponentConditionProperty
+
+instance Prelude.Show ComponentConditionProperty
+
+instance Prelude.Generic ComponentConditionProperty
+
+instance Data.ToJSON ComponentConditionProperty
+
+instance Data.FromJSON ComponentConditionProperty
+
+instance Prelude.NFData ComponentConditionProperty
+
+instance Prelude.Hashable ComponentConditionProperty
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentDataConfiguration.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentDataConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentDataConfiguration.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration where
+
+import Amazonka.AmplifyUiBuilder.Types.Predicate
+import Amazonka.AmplifyUiBuilder.Types.SortProperty
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for binding a component\'s properties to
+-- data.
+--
+-- /See:/ 'newComponentDataConfiguration' smart constructor.
+data ComponentDataConfiguration = ComponentDataConfiguration'
+  { -- | A list of IDs to use to bind data to a component. Use this property to
+    -- bind specifically chosen data, rather than data retrieved from a query.
+    identifiers :: Prelude.Maybe [Prelude.Text],
+    -- | Represents the conditional logic to use when binding data to a
+    -- component. Use this property to retrieve only a subset of the data in a
+    -- collection.
+    predicate :: Prelude.Maybe Predicate,
+    -- | Describes how to sort the component\'s properties.
+    sort :: Prelude.Maybe [SortProperty],
+    -- | The name of the data model to use to bind data to a component.
+    model :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentDataConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'identifiers', 'componentDataConfiguration_identifiers' - A list of IDs to use to bind data to a component. Use this property to
+-- bind specifically chosen data, rather than data retrieved from a query.
+--
+-- 'predicate', 'componentDataConfiguration_predicate' - Represents the conditional logic to use when binding data to a
+-- component. Use this property to retrieve only a subset of the data in a
+-- collection.
+--
+-- 'sort', 'componentDataConfiguration_sort' - Describes how to sort the component\'s properties.
+--
+-- 'model', 'componentDataConfiguration_model' - The name of the data model to use to bind data to a component.
+newComponentDataConfiguration ::
+  -- | 'model'
+  Prelude.Text ->
+  ComponentDataConfiguration
+newComponentDataConfiguration pModel_ =
+  ComponentDataConfiguration'
+    { identifiers =
+        Prelude.Nothing,
+      predicate = Prelude.Nothing,
+      sort = Prelude.Nothing,
+      model = pModel_
+    }
+
+-- | A list of IDs to use to bind data to a component. Use this property to
+-- bind specifically chosen data, rather than data retrieved from a query.
+componentDataConfiguration_identifiers :: Lens.Lens' ComponentDataConfiguration (Prelude.Maybe [Prelude.Text])
+componentDataConfiguration_identifiers = Lens.lens (\ComponentDataConfiguration' {identifiers} -> identifiers) (\s@ComponentDataConfiguration' {} a -> s {identifiers = a} :: ComponentDataConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | Represents the conditional logic to use when binding data to a
+-- component. Use this property to retrieve only a subset of the data in a
+-- collection.
+componentDataConfiguration_predicate :: Lens.Lens' ComponentDataConfiguration (Prelude.Maybe Predicate)
+componentDataConfiguration_predicate = Lens.lens (\ComponentDataConfiguration' {predicate} -> predicate) (\s@ComponentDataConfiguration' {} a -> s {predicate = a} :: ComponentDataConfiguration)
+
+-- | Describes how to sort the component\'s properties.
+componentDataConfiguration_sort :: Lens.Lens' ComponentDataConfiguration (Prelude.Maybe [SortProperty])
+componentDataConfiguration_sort = Lens.lens (\ComponentDataConfiguration' {sort} -> sort) (\s@ComponentDataConfiguration' {} a -> s {sort = a} :: ComponentDataConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the data model to use to bind data to a component.
+componentDataConfiguration_model :: Lens.Lens' ComponentDataConfiguration Prelude.Text
+componentDataConfiguration_model = Lens.lens (\ComponentDataConfiguration' {model} -> model) (\s@ComponentDataConfiguration' {} a -> s {model = a} :: ComponentDataConfiguration)
+
+instance Data.FromJSON ComponentDataConfiguration where
+  parseJSON =
+    Data.withObject
+      "ComponentDataConfiguration"
+      ( \x ->
+          ComponentDataConfiguration'
+            Prelude.<$> (x Data..:? "identifiers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "predicate")
+            Prelude.<*> (x Data..:? "sort" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "model")
+      )
+
+instance Prelude.Hashable ComponentDataConfiguration where
+  hashWithSalt _salt ComponentDataConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` identifiers
+      `Prelude.hashWithSalt` predicate
+      `Prelude.hashWithSalt` sort
+      `Prelude.hashWithSalt` model
+
+instance Prelude.NFData ComponentDataConfiguration where
+  rnf ComponentDataConfiguration' {..} =
+    Prelude.rnf identifiers
+      `Prelude.seq` Prelude.rnf predicate
+      `Prelude.seq` Prelude.rnf sort
+      `Prelude.seq` Prelude.rnf model
+
+instance Data.ToJSON ComponentDataConfiguration where
+  toJSON ComponentDataConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("identifiers" Data..=) Prelude.<$> identifiers,
+            ("predicate" Data..=) Prelude.<$> predicate,
+            ("sort" Data..=) Prelude.<$> sort,
+            Prelude.Just ("model" Data..= model)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentEvent.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentEvent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentEvent.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentEvent where
+
+import Amazonka.AmplifyUiBuilder.Types.ActionParameters
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of an event. You can bind an event and a
+-- corresponding action to a @Component@ or a @ComponentChild@. A button
+-- click is an example of an event.
+--
+-- /See:/ 'newComponentEvent' smart constructor.
+data ComponentEvent = ComponentEvent'
+  { -- | The action to perform when a specific event is raised.
+    action :: Prelude.Maybe Prelude.Text,
+    -- | Binds an event to an action on a component. When you specify a
+    -- @bindingEvent@, the event is called when the action is performed.
+    bindingEvent :: Prelude.Maybe Prelude.Text,
+    -- | Describes information about the action.
+    parameters :: Prelude.Maybe ActionParameters
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentEvent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'componentEvent_action' - The action to perform when a specific event is raised.
+--
+-- 'bindingEvent', 'componentEvent_bindingEvent' - Binds an event to an action on a component. When you specify a
+-- @bindingEvent@, the event is called when the action is performed.
+--
+-- 'parameters', 'componentEvent_parameters' - Describes information about the action.
+newComponentEvent ::
+  ComponentEvent
+newComponentEvent =
+  ComponentEvent'
+    { action = Prelude.Nothing,
+      bindingEvent = Prelude.Nothing,
+      parameters = Prelude.Nothing
+    }
+
+-- | The action to perform when a specific event is raised.
+componentEvent_action :: Lens.Lens' ComponentEvent (Prelude.Maybe Prelude.Text)
+componentEvent_action = Lens.lens (\ComponentEvent' {action} -> action) (\s@ComponentEvent' {} a -> s {action = a} :: ComponentEvent)
+
+-- | Binds an event to an action on a component. When you specify a
+-- @bindingEvent@, the event is called when the action is performed.
+componentEvent_bindingEvent :: Lens.Lens' ComponentEvent (Prelude.Maybe Prelude.Text)
+componentEvent_bindingEvent = Lens.lens (\ComponentEvent' {bindingEvent} -> bindingEvent) (\s@ComponentEvent' {} a -> s {bindingEvent = a} :: ComponentEvent)
+
+-- | Describes information about the action.
+componentEvent_parameters :: Lens.Lens' ComponentEvent (Prelude.Maybe ActionParameters)
+componentEvent_parameters = Lens.lens (\ComponentEvent' {parameters} -> parameters) (\s@ComponentEvent' {} a -> s {parameters = a} :: ComponentEvent)
+
+instance Data.FromJSON ComponentEvent where
+  parseJSON =
+    Data.withObject
+      "ComponentEvent"
+      ( \x ->
+          ComponentEvent'
+            Prelude.<$> (x Data..:? "action")
+            Prelude.<*> (x Data..:? "bindingEvent")
+            Prelude.<*> (x Data..:? "parameters")
+      )
+
+instance Prelude.Hashable ComponentEvent where
+  hashWithSalt _salt ComponentEvent' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` bindingEvent
+      `Prelude.hashWithSalt` parameters
+
+instance Prelude.NFData ComponentEvent where
+  rnf ComponentEvent' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf bindingEvent
+      `Prelude.seq` Prelude.rnf parameters
+
+instance Data.ToJSON ComponentEvent where
+  toJSON ComponentEvent' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("action" Data..=) Prelude.<$> action,
+            ("bindingEvent" Data..=) Prelude.<$> bindingEvent,
+            ("parameters" Data..=) Prelude.<$> parameters
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs
@@ -0,0 +1,287 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentProperty where
+
+import {-# SOURCE #-} Amazonka.AmplifyUiBuilder.Types.ComponentConditionProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
+import Amazonka.AmplifyUiBuilder.Types.FormBindingElement
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for all of a component\'s properties. Use
+-- @ComponentProperty@ to specify the values to render or bind by default.
+--
+-- /See:/ 'newComponentProperty' smart constructor.
+data ComponentProperty = ComponentProperty'
+  { -- | The information to bind the component property to data at runtime.
+    bindingProperties :: Prelude.Maybe ComponentPropertyBindingProperties,
+    -- | The information to bind the component property to form data.
+    bindings :: Prelude.Maybe (Prelude.HashMap Prelude.Text FormBindingElement),
+    -- | The information to bind the component property to data at runtime. Use
+    -- this for collection components.
+    collectionBindingProperties :: Prelude.Maybe ComponentPropertyBindingProperties,
+    -- | The name of the component that is affected by an event.
+    componentName :: Prelude.Maybe Prelude.Text,
+    -- | A list of component properties to concatenate to create the value to
+    -- assign to this component property.
+    concat :: Prelude.Maybe [ComponentProperty],
+    -- | The conditional expression to use to assign a value to the component
+    -- property.
+    condition :: Prelude.Maybe ComponentConditionProperty,
+    -- | Specifies whether the user configured the property in Amplify Studio
+    -- after importing it.
+    configured :: Prelude.Maybe Prelude.Bool,
+    -- | The default value to assign to the component property.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | An event that occurs in your app. Use this for workflow data binding.
+    event :: Prelude.Maybe Prelude.Text,
+    -- | The default value assigned to the property when the component is
+    -- imported into an app.
+    importedValue :: Prelude.Maybe Prelude.Text,
+    -- | The data model to use to assign a value to the component property.
+    model :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component\'s property that is affected by an event.
+    property :: Prelude.Maybe Prelude.Text,
+    -- | The component type.
+    type' :: Prelude.Maybe Prelude.Text,
+    -- | An authenticated user attribute to use to assign a value to the
+    -- component property.
+    userAttribute :: Prelude.Maybe Prelude.Text,
+    -- | The value to assign to the component property.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentProperty' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bindingProperties', 'componentProperty_bindingProperties' - The information to bind the component property to data at runtime.
+--
+-- 'bindings', 'componentProperty_bindings' - The information to bind the component property to form data.
+--
+-- 'collectionBindingProperties', 'componentProperty_collectionBindingProperties' - The information to bind the component property to data at runtime. Use
+-- this for collection components.
+--
+-- 'componentName', 'componentProperty_componentName' - The name of the component that is affected by an event.
+--
+-- 'concat', 'componentProperty_concat' - A list of component properties to concatenate to create the value to
+-- assign to this component property.
+--
+-- 'condition', 'componentProperty_condition' - The conditional expression to use to assign a value to the component
+-- property.
+--
+-- 'configured', 'componentProperty_configured' - Specifies whether the user configured the property in Amplify Studio
+-- after importing it.
+--
+-- 'defaultValue', 'componentProperty_defaultValue' - The default value to assign to the component property.
+--
+-- 'event', 'componentProperty_event' - An event that occurs in your app. Use this for workflow data binding.
+--
+-- 'importedValue', 'componentProperty_importedValue' - The default value assigned to the property when the component is
+-- imported into an app.
+--
+-- 'model', 'componentProperty_model' - The data model to use to assign a value to the component property.
+--
+-- 'property', 'componentProperty_property' - The name of the component\'s property that is affected by an event.
+--
+-- 'type'', 'componentProperty_type' - The component type.
+--
+-- 'userAttribute', 'componentProperty_userAttribute' - An authenticated user attribute to use to assign a value to the
+-- component property.
+--
+-- 'value', 'componentProperty_value' - The value to assign to the component property.
+newComponentProperty ::
+  ComponentProperty
+newComponentProperty =
+  ComponentProperty'
+    { bindingProperties =
+        Prelude.Nothing,
+      bindings = Prelude.Nothing,
+      collectionBindingProperties = Prelude.Nothing,
+      componentName = Prelude.Nothing,
+      concat = Prelude.Nothing,
+      condition = Prelude.Nothing,
+      configured = Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      event = Prelude.Nothing,
+      importedValue = Prelude.Nothing,
+      model = Prelude.Nothing,
+      property = Prelude.Nothing,
+      type' = Prelude.Nothing,
+      userAttribute = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The information to bind the component property to data at runtime.
+componentProperty_bindingProperties :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentPropertyBindingProperties)
+componentProperty_bindingProperties = Lens.lens (\ComponentProperty' {bindingProperties} -> bindingProperties) (\s@ComponentProperty' {} a -> s {bindingProperties = a} :: ComponentProperty)
+
+-- | The information to bind the component property to form data.
+componentProperty_bindings :: Lens.Lens' ComponentProperty (Prelude.Maybe (Prelude.HashMap Prelude.Text FormBindingElement))
+componentProperty_bindings = Lens.lens (\ComponentProperty' {bindings} -> bindings) (\s@ComponentProperty' {} a -> s {bindings = a} :: ComponentProperty) Prelude.. Lens.mapping Lens.coerced
+
+-- | The information to bind the component property to data at runtime. Use
+-- this for collection components.
+componentProperty_collectionBindingProperties :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentPropertyBindingProperties)
+componentProperty_collectionBindingProperties = Lens.lens (\ComponentProperty' {collectionBindingProperties} -> collectionBindingProperties) (\s@ComponentProperty' {} a -> s {collectionBindingProperties = a} :: ComponentProperty)
+
+-- | The name of the component that is affected by an event.
+componentProperty_componentName :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_componentName = Lens.lens (\ComponentProperty' {componentName} -> componentName) (\s@ComponentProperty' {} a -> s {componentName = a} :: ComponentProperty)
+
+-- | A list of component properties to concatenate to create the value to
+-- assign to this component property.
+componentProperty_concat :: Lens.Lens' ComponentProperty (Prelude.Maybe [ComponentProperty])
+componentProperty_concat = Lens.lens (\ComponentProperty' {concat} -> concat) (\s@ComponentProperty' {} a -> s {concat = a} :: ComponentProperty) Prelude.. Lens.mapping Lens.coerced
+
+-- | The conditional expression to use to assign a value to the component
+-- property.
+componentProperty_condition :: Lens.Lens' ComponentProperty (Prelude.Maybe ComponentConditionProperty)
+componentProperty_condition = Lens.lens (\ComponentProperty' {condition} -> condition) (\s@ComponentProperty' {} a -> s {condition = a} :: ComponentProperty)
+
+-- | Specifies whether the user configured the property in Amplify Studio
+-- after importing it.
+componentProperty_configured :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Bool)
+componentProperty_configured = Lens.lens (\ComponentProperty' {configured} -> configured) (\s@ComponentProperty' {} a -> s {configured = a} :: ComponentProperty)
+
+-- | The default value to assign to the component property.
+componentProperty_defaultValue :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_defaultValue = Lens.lens (\ComponentProperty' {defaultValue} -> defaultValue) (\s@ComponentProperty' {} a -> s {defaultValue = a} :: ComponentProperty)
+
+-- | An event that occurs in your app. Use this for workflow data binding.
+componentProperty_event :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_event = Lens.lens (\ComponentProperty' {event} -> event) (\s@ComponentProperty' {} a -> s {event = a} :: ComponentProperty)
+
+-- | The default value assigned to the property when the component is
+-- imported into an app.
+componentProperty_importedValue :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_importedValue = Lens.lens (\ComponentProperty' {importedValue} -> importedValue) (\s@ComponentProperty' {} a -> s {importedValue = a} :: ComponentProperty)
+
+-- | The data model to use to assign a value to the component property.
+componentProperty_model :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_model = Lens.lens (\ComponentProperty' {model} -> model) (\s@ComponentProperty' {} a -> s {model = a} :: ComponentProperty)
+
+-- | The name of the component\'s property that is affected by an event.
+componentProperty_property :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_property = Lens.lens (\ComponentProperty' {property} -> property) (\s@ComponentProperty' {} a -> s {property = a} :: ComponentProperty)
+
+-- | The component type.
+componentProperty_type :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_type = Lens.lens (\ComponentProperty' {type'} -> type') (\s@ComponentProperty' {} a -> s {type' = a} :: ComponentProperty)
+
+-- | An authenticated user attribute to use to assign a value to the
+-- component property.
+componentProperty_userAttribute :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_userAttribute = Lens.lens (\ComponentProperty' {userAttribute} -> userAttribute) (\s@ComponentProperty' {} a -> s {userAttribute = a} :: ComponentProperty)
+
+-- | The value to assign to the component property.
+componentProperty_value :: Lens.Lens' ComponentProperty (Prelude.Maybe Prelude.Text)
+componentProperty_value = Lens.lens (\ComponentProperty' {value} -> value) (\s@ComponentProperty' {} a -> s {value = a} :: ComponentProperty)
+
+instance Data.FromJSON ComponentProperty where
+  parseJSON =
+    Data.withObject
+      "ComponentProperty"
+      ( \x ->
+          ComponentProperty'
+            Prelude.<$> (x Data..:? "bindingProperties")
+            Prelude.<*> (x Data..:? "bindings" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "collectionBindingProperties")
+            Prelude.<*> (x Data..:? "componentName")
+            Prelude.<*> (x Data..:? "concat" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "condition")
+            Prelude.<*> (x Data..:? "configured")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "event")
+            Prelude.<*> (x Data..:? "importedValue")
+            Prelude.<*> (x Data..:? "model")
+            Prelude.<*> (x Data..:? "property")
+            Prelude.<*> (x Data..:? "type")
+            Prelude.<*> (x Data..:? "userAttribute")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ComponentProperty where
+  hashWithSalt _salt ComponentProperty' {..} =
+    _salt
+      `Prelude.hashWithSalt` bindingProperties
+      `Prelude.hashWithSalt` bindings
+      `Prelude.hashWithSalt` collectionBindingProperties
+      `Prelude.hashWithSalt` componentName
+      `Prelude.hashWithSalt` concat
+      `Prelude.hashWithSalt` condition
+      `Prelude.hashWithSalt` configured
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` event
+      `Prelude.hashWithSalt` importedValue
+      `Prelude.hashWithSalt` model
+      `Prelude.hashWithSalt` property
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` userAttribute
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ComponentProperty where
+  rnf ComponentProperty' {..} =
+    Prelude.rnf bindingProperties
+      `Prelude.seq` Prelude.rnf bindings
+      `Prelude.seq` Prelude.rnf collectionBindingProperties
+      `Prelude.seq` Prelude.rnf componentName
+      `Prelude.seq` Prelude.rnf concat
+      `Prelude.seq` Prelude.rnf condition
+      `Prelude.seq` Prelude.rnf configured
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf event
+      `Prelude.seq` Prelude.rnf importedValue
+      `Prelude.seq` Prelude.rnf model
+      `Prelude.seq` Prelude.rnf property
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf userAttribute
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ComponentProperty where
+  toJSON ComponentProperty' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bindingProperties" Data..=)
+              Prelude.<$> bindingProperties,
+            ("bindings" Data..=) Prelude.<$> bindings,
+            ("collectionBindingProperties" Data..=)
+              Prelude.<$> collectionBindingProperties,
+            ("componentName" Data..=) Prelude.<$> componentName,
+            ("concat" Data..=) Prelude.<$> concat,
+            ("condition" Data..=) Prelude.<$> condition,
+            ("configured" Data..=) Prelude.<$> configured,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("event" Data..=) Prelude.<$> event,
+            ("importedValue" Data..=) Prelude.<$> importedValue,
+            ("model" Data..=) Prelude.<$> model,
+            ("property" Data..=) Prelude.<$> property,
+            ("type" Data..=) Prelude.<$> type',
+            ("userAttribute" Data..=) Prelude.<$> userAttribute,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs-boot b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentProperty.hs-boot
@@ -0,0 +1,33 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentProperty where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data ComponentProperty
+
+instance Prelude.Eq ComponentProperty
+
+instance Prelude.Read ComponentProperty
+
+instance Prelude.Show ComponentProperty
+
+instance Prelude.Generic ComponentProperty
+
+instance Data.ToJSON ComponentProperty
+
+instance Data.FromJSON ComponentProperty
+
+instance Prelude.NFData ComponentProperty
+
+instance Prelude.Hashable ComponentProperty
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentPropertyBindingProperties.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentPropertyBindingProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentPropertyBindingProperties.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentPropertyBindingProperties where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Associates a component property to a binding property. This enables
+-- exposed properties on the top level component to propagate data to the
+-- component\'s property values.
+--
+-- /See:/ 'newComponentPropertyBindingProperties' smart constructor.
+data ComponentPropertyBindingProperties = ComponentPropertyBindingProperties'
+  { -- | The data field to bind the property to.
+    field :: Prelude.Maybe Prelude.Text,
+    -- | The component property to bind to the data field.
+    property :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentPropertyBindingProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'field', 'componentPropertyBindingProperties_field' - The data field to bind the property to.
+--
+-- 'property', 'componentPropertyBindingProperties_property' - The component property to bind to the data field.
+newComponentPropertyBindingProperties ::
+  -- | 'property'
+  Prelude.Text ->
+  ComponentPropertyBindingProperties
+newComponentPropertyBindingProperties pProperty_ =
+  ComponentPropertyBindingProperties'
+    { field =
+        Prelude.Nothing,
+      property = pProperty_
+    }
+
+-- | The data field to bind the property to.
+componentPropertyBindingProperties_field :: Lens.Lens' ComponentPropertyBindingProperties (Prelude.Maybe Prelude.Text)
+componentPropertyBindingProperties_field = Lens.lens (\ComponentPropertyBindingProperties' {field} -> field) (\s@ComponentPropertyBindingProperties' {} a -> s {field = a} :: ComponentPropertyBindingProperties)
+
+-- | The component property to bind to the data field.
+componentPropertyBindingProperties_property :: Lens.Lens' ComponentPropertyBindingProperties Prelude.Text
+componentPropertyBindingProperties_property = Lens.lens (\ComponentPropertyBindingProperties' {property} -> property) (\s@ComponentPropertyBindingProperties' {} a -> s {property = a} :: ComponentPropertyBindingProperties)
+
+instance
+  Data.FromJSON
+    ComponentPropertyBindingProperties
+  where
+  parseJSON =
+    Data.withObject
+      "ComponentPropertyBindingProperties"
+      ( \x ->
+          ComponentPropertyBindingProperties'
+            Prelude.<$> (x Data..:? "field")
+            Prelude.<*> (x Data..: "property")
+      )
+
+instance
+  Prelude.Hashable
+    ComponentPropertyBindingProperties
+  where
+  hashWithSalt
+    _salt
+    ComponentPropertyBindingProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` field
+        `Prelude.hashWithSalt` property
+
+instance
+  Prelude.NFData
+    ComponentPropertyBindingProperties
+  where
+  rnf ComponentPropertyBindingProperties' {..} =
+    Prelude.rnf field
+      `Prelude.seq` Prelude.rnf property
+
+instance
+  Data.ToJSON
+    ComponentPropertyBindingProperties
+  where
+  toJSON ComponentPropertyBindingProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("field" Data..=) Prelude.<$> field,
+            Prelude.Just ("property" Data..= property)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentSummary.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentSummary.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains a summary of a component. This is a read-only data type that is
+-- returned by @ListComponents@.
+--
+-- /See:/ 'newComponentSummary' smart constructor.
+data ComponentSummary = ComponentSummary'
+  { -- | The unique ID of the Amplify app associated with the component.
+    appId :: Prelude.Text,
+    -- | The component type.
+    componentType :: Prelude.Text,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID of the component.
+    id :: Prelude.Text,
+    -- | The name of the component.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'componentSummary_appId' - The unique ID of the Amplify app associated with the component.
+--
+-- 'componentType', 'componentSummary_componentType' - The component type.
+--
+-- 'environmentName', 'componentSummary_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'componentSummary_id' - The unique ID of the component.
+--
+-- 'name', 'componentSummary_name' - The name of the component.
+newComponentSummary ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'componentType'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  ComponentSummary
+newComponentSummary
+  pAppId_
+  pComponentType_
+  pEnvironmentName_
+  pId_
+  pName_ =
+    ComponentSummary'
+      { appId = pAppId_,
+        componentType = pComponentType_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        name = pName_
+      }
+
+-- | The unique ID of the Amplify app associated with the component.
+componentSummary_appId :: Lens.Lens' ComponentSummary Prelude.Text
+componentSummary_appId = Lens.lens (\ComponentSummary' {appId} -> appId) (\s@ComponentSummary' {} a -> s {appId = a} :: ComponentSummary)
+
+-- | The component type.
+componentSummary_componentType :: Lens.Lens' ComponentSummary Prelude.Text
+componentSummary_componentType = Lens.lens (\ComponentSummary' {componentType} -> componentType) (\s@ComponentSummary' {} a -> s {componentType = a} :: ComponentSummary)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+componentSummary_environmentName :: Lens.Lens' ComponentSummary Prelude.Text
+componentSummary_environmentName = Lens.lens (\ComponentSummary' {environmentName} -> environmentName) (\s@ComponentSummary' {} a -> s {environmentName = a} :: ComponentSummary)
+
+-- | The unique ID of the component.
+componentSummary_id :: Lens.Lens' ComponentSummary Prelude.Text
+componentSummary_id = Lens.lens (\ComponentSummary' {id} -> id) (\s@ComponentSummary' {} a -> s {id = a} :: ComponentSummary)
+
+-- | The name of the component.
+componentSummary_name :: Lens.Lens' ComponentSummary Prelude.Text
+componentSummary_name = Lens.lens (\ComponentSummary' {name} -> name) (\s@ComponentSummary' {} a -> s {name = a} :: ComponentSummary)
+
+instance Data.FromJSON ComponentSummary where
+  parseJSON =
+    Data.withObject
+      "ComponentSummary"
+      ( \x ->
+          ComponentSummary'
+            Prelude.<$> (x Data..: "appId")
+            Prelude.<*> (x Data..: "componentType")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable ComponentSummary where
+  hashWithSalt _salt ComponentSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` componentType
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ComponentSummary where
+  rnf ComponentSummary' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf componentType
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ComponentVariant.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentVariant.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ComponentVariant.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ComponentVariant where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the style configuration of a unique variation of a main
+-- component.
+--
+-- /See:/ 'newComponentVariant' smart constructor.
+data ComponentVariant = ComponentVariant'
+  { -- | The properties of the component variant that can be overriden when
+    -- customizing an instance of the component. You can\'t specify @tags@ as a
+    -- valid property for @overrides@.
+    overrides :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | The combination of variants that comprise this variant. You can\'t
+    -- specify @tags@ as a valid property for @variantValues@.
+    variantValues :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComponentVariant' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'overrides', 'componentVariant_overrides' - The properties of the component variant that can be overriden when
+-- customizing an instance of the component. You can\'t specify @tags@ as a
+-- valid property for @overrides@.
+--
+-- 'variantValues', 'componentVariant_variantValues' - The combination of variants that comprise this variant. You can\'t
+-- specify @tags@ as a valid property for @variantValues@.
+newComponentVariant ::
+  ComponentVariant
+newComponentVariant =
+  ComponentVariant'
+    { overrides = Prelude.Nothing,
+      variantValues = Prelude.Nothing
+    }
+
+-- | The properties of the component variant that can be overriden when
+-- customizing an instance of the component. You can\'t specify @tags@ as a
+-- valid property for @overrides@.
+componentVariant_overrides :: Lens.Lens' ComponentVariant (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+componentVariant_overrides = Lens.lens (\ComponentVariant' {overrides} -> overrides) (\s@ComponentVariant' {} a -> s {overrides = a} :: ComponentVariant) Prelude.. Lens.mapping Lens.coerced
+
+-- | The combination of variants that comprise this variant. You can\'t
+-- specify @tags@ as a valid property for @variantValues@.
+componentVariant_variantValues :: Lens.Lens' ComponentVariant (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+componentVariant_variantValues = Lens.lens (\ComponentVariant' {variantValues} -> variantValues) (\s@ComponentVariant' {} a -> s {variantValues = a} :: ComponentVariant) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ComponentVariant where
+  parseJSON =
+    Data.withObject
+      "ComponentVariant"
+      ( \x ->
+          ComponentVariant'
+            Prelude.<$> (x Data..:? "overrides" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "variantValues" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ComponentVariant where
+  hashWithSalt _salt ComponentVariant' {..} =
+    _salt
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` variantValues
+
+instance Prelude.NFData ComponentVariant where
+  rnf ComponentVariant' {..} =
+    Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf variantValues
+
+instance Data.ToJSON ComponentVariant where
+  toJSON ComponentVariant' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("overrides" Data..=) Prelude.<$> overrides,
+            ("variantValues" Data..=) Prelude.<$> variantValues
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/CreateComponentData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/CreateComponentData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/CreateComponentData.hs
@@ -0,0 +1,234 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.CreateComponentData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.CreateComponentData where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+import Amazonka.AmplifyUiBuilder.Types.ComponentChild
+import Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents all of the information that is required to create a
+-- component.
+--
+-- /See:/ 'newCreateComponentData' smart constructor.
+data CreateComponentData = CreateComponentData'
+  { -- | A list of child components that are instances of the main component.
+    children :: Prelude.Maybe [ComponentChild],
+    -- | The data binding configuration for customizing a component\'s
+    -- properties. Use this for a collection component.
+    collectionProperties :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration),
+    -- | The event configuration for the component. Use for the workflow feature
+    -- in Amplify Studio that allows you to bind events and actions to
+    -- components.
+    events :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent),
+    -- | The schema version of the component when it was imported.
+    schemaVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the component in its original source system, such as
+    -- Figma.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | One or more key-value pairs to use when tagging the component data.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The data binding information for the component\'s properties.
+    bindingProperties :: Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue,
+    -- | The component type. This can be an Amplify custom UI component or
+    -- another custom component.
+    componentType :: Prelude.Text,
+    -- | The name of the component
+    name :: Prelude.Text,
+    -- | Describes the component properties that can be overriden to customize an
+    -- instance of the component.
+    overrides :: Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | Describes the component\'s properties.
+    properties :: Prelude.HashMap Prelude.Text ComponentProperty,
+    -- | A list of the unique variants of this component.
+    variants :: [ComponentVariant]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateComponentData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'children', 'createComponentData_children' - A list of child components that are instances of the main component.
+--
+-- 'collectionProperties', 'createComponentData_collectionProperties' - The data binding configuration for customizing a component\'s
+-- properties. Use this for a collection component.
+--
+-- 'events', 'createComponentData_events' - The event configuration for the component. Use for the workflow feature
+-- in Amplify Studio that allows you to bind events and actions to
+-- components.
+--
+-- 'schemaVersion', 'createComponentData_schemaVersion' - The schema version of the component when it was imported.
+--
+-- 'sourceId', 'createComponentData_sourceId' - The unique ID of the component in its original source system, such as
+-- Figma.
+--
+-- 'tags', 'createComponentData_tags' - One or more key-value pairs to use when tagging the component data.
+--
+-- 'bindingProperties', 'createComponentData_bindingProperties' - The data binding information for the component\'s properties.
+--
+-- 'componentType', 'createComponentData_componentType' - The component type. This can be an Amplify custom UI component or
+-- another custom component.
+--
+-- 'name', 'createComponentData_name' - The name of the component
+--
+-- 'overrides', 'createComponentData_overrides' - Describes the component properties that can be overriden to customize an
+-- instance of the component.
+--
+-- 'properties', 'createComponentData_properties' - Describes the component\'s properties.
+--
+-- 'variants', 'createComponentData_variants' - A list of the unique variants of this component.
+newCreateComponentData ::
+  -- | 'componentType'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  CreateComponentData
+newCreateComponentData pComponentType_ pName_ =
+  CreateComponentData'
+    { children = Prelude.Nothing,
+      collectionProperties = Prelude.Nothing,
+      events = Prelude.Nothing,
+      schemaVersion = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      bindingProperties = Prelude.mempty,
+      componentType = pComponentType_,
+      name = pName_,
+      overrides = Prelude.mempty,
+      properties = Prelude.mempty,
+      variants = Prelude.mempty
+    }
+
+-- | A list of child components that are instances of the main component.
+createComponentData_children :: Lens.Lens' CreateComponentData (Prelude.Maybe [ComponentChild])
+createComponentData_children = Lens.lens (\CreateComponentData' {children} -> children) (\s@CreateComponentData' {} a -> s {children = a} :: CreateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The data binding configuration for customizing a component\'s
+-- properties. Use this for a collection component.
+createComponentData_collectionProperties :: Lens.Lens' CreateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration))
+createComponentData_collectionProperties = Lens.lens (\CreateComponentData' {collectionProperties} -> collectionProperties) (\s@CreateComponentData' {} a -> s {collectionProperties = a} :: CreateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The event configuration for the component. Use for the workflow feature
+-- in Amplify Studio that allows you to bind events and actions to
+-- components.
+createComponentData_events :: Lens.Lens' CreateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent))
+createComponentData_events = Lens.lens (\CreateComponentData' {events} -> events) (\s@CreateComponentData' {} a -> s {events = a} :: CreateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The schema version of the component when it was imported.
+createComponentData_schemaVersion :: Lens.Lens' CreateComponentData (Prelude.Maybe Prelude.Text)
+createComponentData_schemaVersion = Lens.lens (\CreateComponentData' {schemaVersion} -> schemaVersion) (\s@CreateComponentData' {} a -> s {schemaVersion = a} :: CreateComponentData)
+
+-- | The unique ID of the component in its original source system, such as
+-- Figma.
+createComponentData_sourceId :: Lens.Lens' CreateComponentData (Prelude.Maybe Prelude.Text)
+createComponentData_sourceId = Lens.lens (\CreateComponentData' {sourceId} -> sourceId) (\s@CreateComponentData' {} a -> s {sourceId = a} :: CreateComponentData)
+
+-- | One or more key-value pairs to use when tagging the component data.
+createComponentData_tags :: Lens.Lens' CreateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createComponentData_tags = Lens.lens (\CreateComponentData' {tags} -> tags) (\s@CreateComponentData' {} a -> s {tags = a} :: CreateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The data binding information for the component\'s properties.
+createComponentData_bindingProperties :: Lens.Lens' CreateComponentData (Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue)
+createComponentData_bindingProperties = Lens.lens (\CreateComponentData' {bindingProperties} -> bindingProperties) (\s@CreateComponentData' {} a -> s {bindingProperties = a} :: CreateComponentData) Prelude.. Lens.coerced
+
+-- | The component type. This can be an Amplify custom UI component or
+-- another custom component.
+createComponentData_componentType :: Lens.Lens' CreateComponentData Prelude.Text
+createComponentData_componentType = Lens.lens (\CreateComponentData' {componentType} -> componentType) (\s@CreateComponentData' {} a -> s {componentType = a} :: CreateComponentData)
+
+-- | The name of the component
+createComponentData_name :: Lens.Lens' CreateComponentData Prelude.Text
+createComponentData_name = Lens.lens (\CreateComponentData' {name} -> name) (\s@CreateComponentData' {} a -> s {name = a} :: CreateComponentData)
+
+-- | Describes the component properties that can be overriden to customize an
+-- instance of the component.
+createComponentData_overrides :: Lens.Lens' CreateComponentData (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text))
+createComponentData_overrides = Lens.lens (\CreateComponentData' {overrides} -> overrides) (\s@CreateComponentData' {} a -> s {overrides = a} :: CreateComponentData) Prelude.. Lens.coerced
+
+-- | Describes the component\'s properties.
+createComponentData_properties :: Lens.Lens' CreateComponentData (Prelude.HashMap Prelude.Text ComponentProperty)
+createComponentData_properties = Lens.lens (\CreateComponentData' {properties} -> properties) (\s@CreateComponentData' {} a -> s {properties = a} :: CreateComponentData) Prelude.. Lens.coerced
+
+-- | A list of the unique variants of this component.
+createComponentData_variants :: Lens.Lens' CreateComponentData [ComponentVariant]
+createComponentData_variants = Lens.lens (\CreateComponentData' {variants} -> variants) (\s@CreateComponentData' {} a -> s {variants = a} :: CreateComponentData) Prelude.. Lens.coerced
+
+instance Prelude.Hashable CreateComponentData where
+  hashWithSalt _salt CreateComponentData' {..} =
+    _salt
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` collectionProperties
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` bindingProperties
+      `Prelude.hashWithSalt` componentType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` properties
+      `Prelude.hashWithSalt` variants
+
+instance Prelude.NFData CreateComponentData where
+  rnf CreateComponentData' {..} =
+    Prelude.rnf children
+      `Prelude.seq` Prelude.rnf collectionProperties
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf bindingProperties
+      `Prelude.seq` Prelude.rnf componentType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf properties
+      `Prelude.seq` Prelude.rnf variants
+
+instance Data.ToJSON CreateComponentData where
+  toJSON CreateComponentData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("children" Data..=) Prelude.<$> children,
+            ("collectionProperties" Data..=)
+              Prelude.<$> collectionProperties,
+            ("events" Data..=) Prelude.<$> events,
+            ("schemaVersion" Data..=) Prelude.<$> schemaVersion,
+            ("sourceId" Data..=) Prelude.<$> sourceId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just
+              ("bindingProperties" Data..= bindingProperties),
+            Prelude.Just ("componentType" Data..= componentType),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("overrides" Data..= overrides),
+            Prelude.Just ("properties" Data..= properties),
+            Prelude.Just ("variants" Data..= variants)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/CreateFormData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/CreateFormData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/CreateFormData.hs
@@ -0,0 +1,196 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.CreateFormData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.CreateFormData where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldConfig
+import Amazonka.AmplifyUiBuilder.Types.FormActionType
+import Amazonka.AmplifyUiBuilder.Types.FormCTA
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import Amazonka.AmplifyUiBuilder.Types.FormStyle
+import Amazonka.AmplifyUiBuilder.Types.SectionalElement
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents all of the information that is required to create a form.
+--
+-- /See:/ 'newCreateFormData' smart constructor.
+data CreateFormData = CreateFormData'
+  { -- | The @FormCTA@ object that stores the call to action configuration for
+    -- the form.
+    cta :: Prelude.Maybe FormCTA,
+    -- | One or more key-value pairs to use when tagging the form data.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The type of data source to use to create the form.
+    dataType :: FormDataTypeConfig,
+    -- | The configuration information for the form\'s fields.
+    fields :: Prelude.HashMap Prelude.Text FieldConfig,
+    -- | Specifies whether to perform a create or update action on the form.
+    formActionType :: FormActionType,
+    -- | The name of the form.
+    name :: Prelude.Text,
+    -- | The schema version of the form.
+    schemaVersion :: Prelude.Text,
+    -- | The configuration information for the visual helper elements for the
+    -- form. These elements are not associated with any data.
+    sectionalElements :: Prelude.HashMap Prelude.Text SectionalElement,
+    -- | The configuration for the form\'s style.
+    style :: FormStyle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFormData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cta', 'createFormData_cta' - The @FormCTA@ object that stores the call to action configuration for
+-- the form.
+--
+-- 'tags', 'createFormData_tags' - One or more key-value pairs to use when tagging the form data.
+--
+-- 'dataType', 'createFormData_dataType' - The type of data source to use to create the form.
+--
+-- 'fields', 'createFormData_fields' - The configuration information for the form\'s fields.
+--
+-- 'formActionType', 'createFormData_formActionType' - Specifies whether to perform a create or update action on the form.
+--
+-- 'name', 'createFormData_name' - The name of the form.
+--
+-- 'schemaVersion', 'createFormData_schemaVersion' - The schema version of the form.
+--
+-- 'sectionalElements', 'createFormData_sectionalElements' - The configuration information for the visual helper elements for the
+-- form. These elements are not associated with any data.
+--
+-- 'style', 'createFormData_style' - The configuration for the form\'s style.
+newCreateFormData ::
+  -- | 'dataType'
+  FormDataTypeConfig ->
+  -- | 'formActionType'
+  FormActionType ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'schemaVersion'
+  Prelude.Text ->
+  -- | 'style'
+  FormStyle ->
+  CreateFormData
+newCreateFormData
+  pDataType_
+  pFormActionType_
+  pName_
+  pSchemaVersion_
+  pStyle_ =
+    CreateFormData'
+      { cta = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        dataType = pDataType_,
+        fields = Prelude.mempty,
+        formActionType = pFormActionType_,
+        name = pName_,
+        schemaVersion = pSchemaVersion_,
+        sectionalElements = Prelude.mempty,
+        style = pStyle_
+      }
+
+-- | The @FormCTA@ object that stores the call to action configuration for
+-- the form.
+createFormData_cta :: Lens.Lens' CreateFormData (Prelude.Maybe FormCTA)
+createFormData_cta = Lens.lens (\CreateFormData' {cta} -> cta) (\s@CreateFormData' {} a -> s {cta = a} :: CreateFormData)
+
+-- | One or more key-value pairs to use when tagging the form data.
+createFormData_tags :: Lens.Lens' CreateFormData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createFormData_tags = Lens.lens (\CreateFormData' {tags} -> tags) (\s@CreateFormData' {} a -> s {tags = a} :: CreateFormData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of data source to use to create the form.
+createFormData_dataType :: Lens.Lens' CreateFormData FormDataTypeConfig
+createFormData_dataType = Lens.lens (\CreateFormData' {dataType} -> dataType) (\s@CreateFormData' {} a -> s {dataType = a} :: CreateFormData)
+
+-- | The configuration information for the form\'s fields.
+createFormData_fields :: Lens.Lens' CreateFormData (Prelude.HashMap Prelude.Text FieldConfig)
+createFormData_fields = Lens.lens (\CreateFormData' {fields} -> fields) (\s@CreateFormData' {} a -> s {fields = a} :: CreateFormData) Prelude.. Lens.coerced
+
+-- | Specifies whether to perform a create or update action on the form.
+createFormData_formActionType :: Lens.Lens' CreateFormData FormActionType
+createFormData_formActionType = Lens.lens (\CreateFormData' {formActionType} -> formActionType) (\s@CreateFormData' {} a -> s {formActionType = a} :: CreateFormData)
+
+-- | The name of the form.
+createFormData_name :: Lens.Lens' CreateFormData Prelude.Text
+createFormData_name = Lens.lens (\CreateFormData' {name} -> name) (\s@CreateFormData' {} a -> s {name = a} :: CreateFormData)
+
+-- | The schema version of the form.
+createFormData_schemaVersion :: Lens.Lens' CreateFormData Prelude.Text
+createFormData_schemaVersion = Lens.lens (\CreateFormData' {schemaVersion} -> schemaVersion) (\s@CreateFormData' {} a -> s {schemaVersion = a} :: CreateFormData)
+
+-- | The configuration information for the visual helper elements for the
+-- form. These elements are not associated with any data.
+createFormData_sectionalElements :: Lens.Lens' CreateFormData (Prelude.HashMap Prelude.Text SectionalElement)
+createFormData_sectionalElements = Lens.lens (\CreateFormData' {sectionalElements} -> sectionalElements) (\s@CreateFormData' {} a -> s {sectionalElements = a} :: CreateFormData) Prelude.. Lens.coerced
+
+-- | The configuration for the form\'s style.
+createFormData_style :: Lens.Lens' CreateFormData FormStyle
+createFormData_style = Lens.lens (\CreateFormData' {style} -> style) (\s@CreateFormData' {} a -> s {style = a} :: CreateFormData)
+
+instance Prelude.Hashable CreateFormData where
+  hashWithSalt _salt CreateFormData' {..} =
+    _salt
+      `Prelude.hashWithSalt` cta
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` formActionType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sectionalElements
+      `Prelude.hashWithSalt` style
+
+instance Prelude.NFData CreateFormData where
+  rnf CreateFormData' {..} =
+    Prelude.rnf cta
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf formActionType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sectionalElements
+      `Prelude.seq` Prelude.rnf style
+
+instance Data.ToJSON CreateFormData where
+  toJSON CreateFormData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cta" Data..=) Prelude.<$> cta,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("dataType" Data..= dataType),
+            Prelude.Just ("fields" Data..= fields),
+            Prelude.Just
+              ("formActionType" Data..= formActionType),
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("schemaVersion" Data..= schemaVersion),
+            Prelude.Just
+              ("sectionalElements" Data..= sectionalElements),
+            Prelude.Just ("style" Data..= style)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/CreateThemeData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/CreateThemeData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/CreateThemeData.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.CreateThemeData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.CreateThemeData where
+
+import Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents all of the information that is required to create a theme.
+--
+-- /See:/ 'newCreateThemeData' smart constructor.
+data CreateThemeData = CreateThemeData'
+  { -- | Describes the properties that can be overriden to customize an instance
+    -- of the theme.
+    overrides :: Prelude.Maybe [ThemeValues],
+    -- | One or more key-value pairs to use when tagging the theme data.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the theme.
+    name :: Prelude.Text,
+    -- | A list of key-value pairs that deﬁnes the properties of the theme.
+    values :: [ThemeValues]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateThemeData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'overrides', 'createThemeData_overrides' - Describes the properties that can be overriden to customize an instance
+-- of the theme.
+--
+-- 'tags', 'createThemeData_tags' - One or more key-value pairs to use when tagging the theme data.
+--
+-- 'name', 'createThemeData_name' - The name of the theme.
+--
+-- 'values', 'createThemeData_values' - A list of key-value pairs that deﬁnes the properties of the theme.
+newCreateThemeData ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateThemeData
+newCreateThemeData pName_ =
+  CreateThemeData'
+    { overrides = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      values = Prelude.mempty
+    }
+
+-- | Describes the properties that can be overriden to customize an instance
+-- of the theme.
+createThemeData_overrides :: Lens.Lens' CreateThemeData (Prelude.Maybe [ThemeValues])
+createThemeData_overrides = Lens.lens (\CreateThemeData' {overrides} -> overrides) (\s@CreateThemeData' {} a -> s {overrides = a} :: CreateThemeData) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more key-value pairs to use when tagging the theme data.
+createThemeData_tags :: Lens.Lens' CreateThemeData (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createThemeData_tags = Lens.lens (\CreateThemeData' {tags} -> tags) (\s@CreateThemeData' {} a -> s {tags = a} :: CreateThemeData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the theme.
+createThemeData_name :: Lens.Lens' CreateThemeData Prelude.Text
+createThemeData_name = Lens.lens (\CreateThemeData' {name} -> name) (\s@CreateThemeData' {} a -> s {name = a} :: CreateThemeData)
+
+-- | A list of key-value pairs that deﬁnes the properties of the theme.
+createThemeData_values :: Lens.Lens' CreateThemeData [ThemeValues]
+createThemeData_values = Lens.lens (\CreateThemeData' {values} -> values) (\s@CreateThemeData' {} a -> s {values = a} :: CreateThemeData) Prelude.. Lens.coerced
+
+instance Prelude.Hashable CreateThemeData where
+  hashWithSalt _salt CreateThemeData' {..} =
+    _salt
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData CreateThemeData where
+  rnf CreateThemeData' {..} =
+    Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON CreateThemeData where
+  toJSON CreateThemeData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("overrides" Data..=) Prelude.<$> overrides,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ExchangeCodeForTokenRequestBody.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ExchangeCodeForTokenRequestBody.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ExchangeCodeForTokenRequestBody.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ExchangeCodeForTokenRequestBody
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ExchangeCodeForTokenRequestBody where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of a request to exchange an access code for
+-- a token.
+--
+-- /See:/ 'newExchangeCodeForTokenRequestBody' smart constructor.
+data ExchangeCodeForTokenRequestBody = ExchangeCodeForTokenRequestBody'
+  { -- | The access code to send in the request.
+    code :: Data.Sensitive Prelude.Text,
+    -- | The location of the application that will receive the access code.
+    redirectUri :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExchangeCodeForTokenRequestBody' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'exchangeCodeForTokenRequestBody_code' - The access code to send in the request.
+--
+-- 'redirectUri', 'exchangeCodeForTokenRequestBody_redirectUri' - The location of the application that will receive the access code.
+newExchangeCodeForTokenRequestBody ::
+  -- | 'code'
+  Prelude.Text ->
+  -- | 'redirectUri'
+  Prelude.Text ->
+  ExchangeCodeForTokenRequestBody
+newExchangeCodeForTokenRequestBody
+  pCode_
+  pRedirectUri_ =
+    ExchangeCodeForTokenRequestBody'
+      { code =
+          Data._Sensitive Lens.# pCode_,
+        redirectUri = pRedirectUri_
+      }
+
+-- | The access code to send in the request.
+exchangeCodeForTokenRequestBody_code :: Lens.Lens' ExchangeCodeForTokenRequestBody Prelude.Text
+exchangeCodeForTokenRequestBody_code = Lens.lens (\ExchangeCodeForTokenRequestBody' {code} -> code) (\s@ExchangeCodeForTokenRequestBody' {} a -> s {code = a} :: ExchangeCodeForTokenRequestBody) Prelude.. Data._Sensitive
+
+-- | The location of the application that will receive the access code.
+exchangeCodeForTokenRequestBody_redirectUri :: Lens.Lens' ExchangeCodeForTokenRequestBody Prelude.Text
+exchangeCodeForTokenRequestBody_redirectUri = Lens.lens (\ExchangeCodeForTokenRequestBody' {redirectUri} -> redirectUri) (\s@ExchangeCodeForTokenRequestBody' {} a -> s {redirectUri = a} :: ExchangeCodeForTokenRequestBody)
+
+instance
+  Prelude.Hashable
+    ExchangeCodeForTokenRequestBody
+  where
+  hashWithSalt
+    _salt
+    ExchangeCodeForTokenRequestBody' {..} =
+      _salt
+        `Prelude.hashWithSalt` code
+        `Prelude.hashWithSalt` redirectUri
+
+instance
+  Prelude.NFData
+    ExchangeCodeForTokenRequestBody
+  where
+  rnf ExchangeCodeForTokenRequestBody' {..} =
+    Prelude.rnf code
+      `Prelude.seq` Prelude.rnf redirectUri
+
+instance Data.ToJSON ExchangeCodeForTokenRequestBody where
+  toJSON ExchangeCodeForTokenRequestBody' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("code" Data..= code),
+            Prelude.Just ("redirectUri" Data..= redirectUri)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FieldConfig.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FieldConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FieldConfig.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FieldConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FieldConfig where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldInputConfig
+import Amazonka.AmplifyUiBuilder.Types.FieldPosition
+import Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration information for a field in a table.
+--
+-- /See:/ 'newFieldConfig' smart constructor.
+data FieldConfig = FieldConfig'
+  { -- | Specifies whether to hide a field.
+    excluded :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the configuration for the default input value to display for a
+    -- field.
+    inputType :: Prelude.Maybe FieldInputConfig,
+    -- | The label for the field.
+    label :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the field position.
+    position :: Prelude.Maybe FieldPosition,
+    -- | The validations to perform on the value in the field.
+    validations :: Prelude.Maybe [FieldValidationConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'excluded', 'fieldConfig_excluded' - Specifies whether to hide a field.
+--
+-- 'inputType', 'fieldConfig_inputType' - Describes the configuration for the default input value to display for a
+-- field.
+--
+-- 'label', 'fieldConfig_label' - The label for the field.
+--
+-- 'position', 'fieldConfig_position' - Specifies the field position.
+--
+-- 'validations', 'fieldConfig_validations' - The validations to perform on the value in the field.
+newFieldConfig ::
+  FieldConfig
+newFieldConfig =
+  FieldConfig'
+    { excluded = Prelude.Nothing,
+      inputType = Prelude.Nothing,
+      label = Prelude.Nothing,
+      position = Prelude.Nothing,
+      validations = Prelude.Nothing
+    }
+
+-- | Specifies whether to hide a field.
+fieldConfig_excluded :: Lens.Lens' FieldConfig (Prelude.Maybe Prelude.Bool)
+fieldConfig_excluded = Lens.lens (\FieldConfig' {excluded} -> excluded) (\s@FieldConfig' {} a -> s {excluded = a} :: FieldConfig)
+
+-- | Describes the configuration for the default input value to display for a
+-- field.
+fieldConfig_inputType :: Lens.Lens' FieldConfig (Prelude.Maybe FieldInputConfig)
+fieldConfig_inputType = Lens.lens (\FieldConfig' {inputType} -> inputType) (\s@FieldConfig' {} a -> s {inputType = a} :: FieldConfig)
+
+-- | The label for the field.
+fieldConfig_label :: Lens.Lens' FieldConfig (Prelude.Maybe Prelude.Text)
+fieldConfig_label = Lens.lens (\FieldConfig' {label} -> label) (\s@FieldConfig' {} a -> s {label = a} :: FieldConfig)
+
+-- | Specifies the field position.
+fieldConfig_position :: Lens.Lens' FieldConfig (Prelude.Maybe FieldPosition)
+fieldConfig_position = Lens.lens (\FieldConfig' {position} -> position) (\s@FieldConfig' {} a -> s {position = a} :: FieldConfig)
+
+-- | The validations to perform on the value in the field.
+fieldConfig_validations :: Lens.Lens' FieldConfig (Prelude.Maybe [FieldValidationConfiguration])
+fieldConfig_validations = Lens.lens (\FieldConfig' {validations} -> validations) (\s@FieldConfig' {} a -> s {validations = a} :: FieldConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON FieldConfig where
+  parseJSON =
+    Data.withObject
+      "FieldConfig"
+      ( \x ->
+          FieldConfig'
+            Prelude.<$> (x Data..:? "excluded")
+            Prelude.<*> (x Data..:? "inputType")
+            Prelude.<*> (x Data..:? "label")
+            Prelude.<*> (x Data..:? "position")
+            Prelude.<*> (x Data..:? "validations" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable FieldConfig where
+  hashWithSalt _salt FieldConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` excluded
+      `Prelude.hashWithSalt` inputType
+      `Prelude.hashWithSalt` label
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` validations
+
+instance Prelude.NFData FieldConfig where
+  rnf FieldConfig' {..} =
+    Prelude.rnf excluded
+      `Prelude.seq` Prelude.rnf inputType
+      `Prelude.seq` Prelude.rnf label
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf validations
+
+instance Data.ToJSON FieldConfig where
+  toJSON FieldConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("excluded" Data..=) Prelude.<$> excluded,
+            ("inputType" Data..=) Prelude.<$> inputType,
+            ("label" Data..=) Prelude.<$> label,
+            ("position" Data..=) Prelude.<$> position,
+            ("validations" Data..=) Prelude.<$> validations
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FieldInputConfig.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FieldInputConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FieldInputConfig.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FieldInputConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FieldInputConfig where
+
+import Amazonka.AmplifyUiBuilder.Types.ValueMappings
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for the default input values to display for
+-- a field.
+--
+-- /See:/ 'newFieldInputConfig' smart constructor.
+data FieldInputConfig = FieldInputConfig'
+  { -- | Specifies whether a field has a default value.
+    defaultChecked :: Prelude.Maybe Prelude.Bool,
+    -- | The default country code for a phone number.
+    defaultCountryCode :: Prelude.Maybe Prelude.Text,
+    -- | The default value for the field.
+    defaultValue :: Prelude.Maybe Prelude.Text,
+    -- | The text to display to describe the field.
+    descriptiveText :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether to render the field as an array. This property is
+    -- ignored if the @dataSourceType@ for the form is a Data Store.
+    isArray :: Prelude.Maybe Prelude.Bool,
+    -- | The maximum value to display for the field.
+    maxValue :: Prelude.Maybe Prelude.Double,
+    -- | The minimum value to display for the field.
+    minValue :: Prelude.Maybe Prelude.Double,
+    -- | The name of the field.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The text to display as a placeholder for the field.
+    placeholder :: Prelude.Maybe Prelude.Text,
+    -- | Specifies a read only field.
+    readOnly :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies a field that requires input.
+    required :: Prelude.Maybe Prelude.Bool,
+    -- | The stepping increment for a numeric value in a field.
+    step :: Prelude.Maybe Prelude.Double,
+    -- | The value for the field.
+    value :: Prelude.Maybe Prelude.Text,
+    -- | The information to use to customize the input fields with data at
+    -- runtime.
+    valueMappings :: Prelude.Maybe ValueMappings,
+    -- | The input type for the field.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldInputConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'defaultChecked', 'fieldInputConfig_defaultChecked' - Specifies whether a field has a default value.
+--
+-- 'defaultCountryCode', 'fieldInputConfig_defaultCountryCode' - The default country code for a phone number.
+--
+-- 'defaultValue', 'fieldInputConfig_defaultValue' - The default value for the field.
+--
+-- 'descriptiveText', 'fieldInputConfig_descriptiveText' - The text to display to describe the field.
+--
+-- 'isArray', 'fieldInputConfig_isArray' - Specifies whether to render the field as an array. This property is
+-- ignored if the @dataSourceType@ for the form is a Data Store.
+--
+-- 'maxValue', 'fieldInputConfig_maxValue' - The maximum value to display for the field.
+--
+-- 'minValue', 'fieldInputConfig_minValue' - The minimum value to display for the field.
+--
+-- 'name', 'fieldInputConfig_name' - The name of the field.
+--
+-- 'placeholder', 'fieldInputConfig_placeholder' - The text to display as a placeholder for the field.
+--
+-- 'readOnly', 'fieldInputConfig_readOnly' - Specifies a read only field.
+--
+-- 'required', 'fieldInputConfig_required' - Specifies a field that requires input.
+--
+-- 'step', 'fieldInputConfig_step' - The stepping increment for a numeric value in a field.
+--
+-- 'value', 'fieldInputConfig_value' - The value for the field.
+--
+-- 'valueMappings', 'fieldInputConfig_valueMappings' - The information to use to customize the input fields with data at
+-- runtime.
+--
+-- 'type'', 'fieldInputConfig_type' - The input type for the field.
+newFieldInputConfig ::
+  -- | 'type''
+  Prelude.Text ->
+  FieldInputConfig
+newFieldInputConfig pType_ =
+  FieldInputConfig'
+    { defaultChecked = Prelude.Nothing,
+      defaultCountryCode = Prelude.Nothing,
+      defaultValue = Prelude.Nothing,
+      descriptiveText = Prelude.Nothing,
+      isArray = Prelude.Nothing,
+      maxValue = Prelude.Nothing,
+      minValue = Prelude.Nothing,
+      name = Prelude.Nothing,
+      placeholder = Prelude.Nothing,
+      readOnly = Prelude.Nothing,
+      required = Prelude.Nothing,
+      step = Prelude.Nothing,
+      value = Prelude.Nothing,
+      valueMappings = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | Specifies whether a field has a default value.
+fieldInputConfig_defaultChecked :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Bool)
+fieldInputConfig_defaultChecked = Lens.lens (\FieldInputConfig' {defaultChecked} -> defaultChecked) (\s@FieldInputConfig' {} a -> s {defaultChecked = a} :: FieldInputConfig)
+
+-- | The default country code for a phone number.
+fieldInputConfig_defaultCountryCode :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_defaultCountryCode = Lens.lens (\FieldInputConfig' {defaultCountryCode} -> defaultCountryCode) (\s@FieldInputConfig' {} a -> s {defaultCountryCode = a} :: FieldInputConfig)
+
+-- | The default value for the field.
+fieldInputConfig_defaultValue :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_defaultValue = Lens.lens (\FieldInputConfig' {defaultValue} -> defaultValue) (\s@FieldInputConfig' {} a -> s {defaultValue = a} :: FieldInputConfig)
+
+-- | The text to display to describe the field.
+fieldInputConfig_descriptiveText :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_descriptiveText = Lens.lens (\FieldInputConfig' {descriptiveText} -> descriptiveText) (\s@FieldInputConfig' {} a -> s {descriptiveText = a} :: FieldInputConfig)
+
+-- | Specifies whether to render the field as an array. This property is
+-- ignored if the @dataSourceType@ for the form is a Data Store.
+fieldInputConfig_isArray :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Bool)
+fieldInputConfig_isArray = Lens.lens (\FieldInputConfig' {isArray} -> isArray) (\s@FieldInputConfig' {} a -> s {isArray = a} :: FieldInputConfig)
+
+-- | The maximum value to display for the field.
+fieldInputConfig_maxValue :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Double)
+fieldInputConfig_maxValue = Lens.lens (\FieldInputConfig' {maxValue} -> maxValue) (\s@FieldInputConfig' {} a -> s {maxValue = a} :: FieldInputConfig)
+
+-- | The minimum value to display for the field.
+fieldInputConfig_minValue :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Double)
+fieldInputConfig_minValue = Lens.lens (\FieldInputConfig' {minValue} -> minValue) (\s@FieldInputConfig' {} a -> s {minValue = a} :: FieldInputConfig)
+
+-- | The name of the field.
+fieldInputConfig_name :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_name = Lens.lens (\FieldInputConfig' {name} -> name) (\s@FieldInputConfig' {} a -> s {name = a} :: FieldInputConfig)
+
+-- | The text to display as a placeholder for the field.
+fieldInputConfig_placeholder :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_placeholder = Lens.lens (\FieldInputConfig' {placeholder} -> placeholder) (\s@FieldInputConfig' {} a -> s {placeholder = a} :: FieldInputConfig)
+
+-- | Specifies a read only field.
+fieldInputConfig_readOnly :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Bool)
+fieldInputConfig_readOnly = Lens.lens (\FieldInputConfig' {readOnly} -> readOnly) (\s@FieldInputConfig' {} a -> s {readOnly = a} :: FieldInputConfig)
+
+-- | Specifies a field that requires input.
+fieldInputConfig_required :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Bool)
+fieldInputConfig_required = Lens.lens (\FieldInputConfig' {required} -> required) (\s@FieldInputConfig' {} a -> s {required = a} :: FieldInputConfig)
+
+-- | The stepping increment for a numeric value in a field.
+fieldInputConfig_step :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Double)
+fieldInputConfig_step = Lens.lens (\FieldInputConfig' {step} -> step) (\s@FieldInputConfig' {} a -> s {step = a} :: FieldInputConfig)
+
+-- | The value for the field.
+fieldInputConfig_value :: Lens.Lens' FieldInputConfig (Prelude.Maybe Prelude.Text)
+fieldInputConfig_value = Lens.lens (\FieldInputConfig' {value} -> value) (\s@FieldInputConfig' {} a -> s {value = a} :: FieldInputConfig)
+
+-- | The information to use to customize the input fields with data at
+-- runtime.
+fieldInputConfig_valueMappings :: Lens.Lens' FieldInputConfig (Prelude.Maybe ValueMappings)
+fieldInputConfig_valueMappings = Lens.lens (\FieldInputConfig' {valueMappings} -> valueMappings) (\s@FieldInputConfig' {} a -> s {valueMappings = a} :: FieldInputConfig)
+
+-- | The input type for the field.
+fieldInputConfig_type :: Lens.Lens' FieldInputConfig Prelude.Text
+fieldInputConfig_type = Lens.lens (\FieldInputConfig' {type'} -> type') (\s@FieldInputConfig' {} a -> s {type' = a} :: FieldInputConfig)
+
+instance Data.FromJSON FieldInputConfig where
+  parseJSON =
+    Data.withObject
+      "FieldInputConfig"
+      ( \x ->
+          FieldInputConfig'
+            Prelude.<$> (x Data..:? "defaultChecked")
+            Prelude.<*> (x Data..:? "defaultCountryCode")
+            Prelude.<*> (x Data..:? "defaultValue")
+            Prelude.<*> (x Data..:? "descriptiveText")
+            Prelude.<*> (x Data..:? "isArray")
+            Prelude.<*> (x Data..:? "maxValue")
+            Prelude.<*> (x Data..:? "minValue")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "placeholder")
+            Prelude.<*> (x Data..:? "readOnly")
+            Prelude.<*> (x Data..:? "required")
+            Prelude.<*> (x Data..:? "step")
+            Prelude.<*> (x Data..:? "value")
+            Prelude.<*> (x Data..:? "valueMappings")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable FieldInputConfig where
+  hashWithSalt _salt FieldInputConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` defaultChecked
+      `Prelude.hashWithSalt` defaultCountryCode
+      `Prelude.hashWithSalt` defaultValue
+      `Prelude.hashWithSalt` descriptiveText
+      `Prelude.hashWithSalt` isArray
+      `Prelude.hashWithSalt` maxValue
+      `Prelude.hashWithSalt` minValue
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` placeholder
+      `Prelude.hashWithSalt` readOnly
+      `Prelude.hashWithSalt` required
+      `Prelude.hashWithSalt` step
+      `Prelude.hashWithSalt` value
+      `Prelude.hashWithSalt` valueMappings
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData FieldInputConfig where
+  rnf FieldInputConfig' {..} =
+    Prelude.rnf defaultChecked
+      `Prelude.seq` Prelude.rnf defaultCountryCode
+      `Prelude.seq` Prelude.rnf defaultValue
+      `Prelude.seq` Prelude.rnf descriptiveText
+      `Prelude.seq` Prelude.rnf isArray
+      `Prelude.seq` Prelude.rnf maxValue
+      `Prelude.seq` Prelude.rnf minValue
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf placeholder
+      `Prelude.seq` Prelude.rnf readOnly
+      `Prelude.seq` Prelude.rnf required
+      `Prelude.seq` Prelude.rnf step
+      `Prelude.seq` Prelude.rnf value
+      `Prelude.seq` Prelude.rnf valueMappings
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON FieldInputConfig where
+  toJSON FieldInputConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("defaultChecked" Data..=)
+              Prelude.<$> defaultChecked,
+            ("defaultCountryCode" Data..=)
+              Prelude.<$> defaultCountryCode,
+            ("defaultValue" Data..=) Prelude.<$> defaultValue,
+            ("descriptiveText" Data..=)
+              Prelude.<$> descriptiveText,
+            ("isArray" Data..=) Prelude.<$> isArray,
+            ("maxValue" Data..=) Prelude.<$> maxValue,
+            ("minValue" Data..=) Prelude.<$> minValue,
+            ("name" Data..=) Prelude.<$> name,
+            ("placeholder" Data..=) Prelude.<$> placeholder,
+            ("readOnly" Data..=) Prelude.<$> readOnly,
+            ("required" Data..=) Prelude.<$> required,
+            ("step" Data..=) Prelude.<$> step,
+            ("value" Data..=) Prelude.<$> value,
+            ("valueMappings" Data..=) Prelude.<$> valueMappings,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FieldPosition.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FieldPosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FieldPosition.hs
@@ -0,0 +1,110 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FieldPosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FieldPosition where
+
+import Amazonka.AmplifyUiBuilder.Types.FixedPosition
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the field position.
+--
+-- /See:/ 'newFieldPosition' smart constructor.
+data FieldPosition = FieldPosition'
+  { -- | The field position is below the field specified by the string.
+    below :: Prelude.Maybe Prelude.Text,
+    -- | The field position is fixed and doesn\'t change in relation to other
+    -- fields.
+    fixed :: Prelude.Maybe FixedPosition,
+    -- | The field position is to the right of the field specified by the string.
+    rightOf :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldPosition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'below', 'fieldPosition_below' - The field position is below the field specified by the string.
+--
+-- 'fixed', 'fieldPosition_fixed' - The field position is fixed and doesn\'t change in relation to other
+-- fields.
+--
+-- 'rightOf', 'fieldPosition_rightOf' - The field position is to the right of the field specified by the string.
+newFieldPosition ::
+  FieldPosition
+newFieldPosition =
+  FieldPosition'
+    { below = Prelude.Nothing,
+      fixed = Prelude.Nothing,
+      rightOf = Prelude.Nothing
+    }
+
+-- | The field position is below the field specified by the string.
+fieldPosition_below :: Lens.Lens' FieldPosition (Prelude.Maybe Prelude.Text)
+fieldPosition_below = Lens.lens (\FieldPosition' {below} -> below) (\s@FieldPosition' {} a -> s {below = a} :: FieldPosition)
+
+-- | The field position is fixed and doesn\'t change in relation to other
+-- fields.
+fieldPosition_fixed :: Lens.Lens' FieldPosition (Prelude.Maybe FixedPosition)
+fieldPosition_fixed = Lens.lens (\FieldPosition' {fixed} -> fixed) (\s@FieldPosition' {} a -> s {fixed = a} :: FieldPosition)
+
+-- | The field position is to the right of the field specified by the string.
+fieldPosition_rightOf :: Lens.Lens' FieldPosition (Prelude.Maybe Prelude.Text)
+fieldPosition_rightOf = Lens.lens (\FieldPosition' {rightOf} -> rightOf) (\s@FieldPosition' {} a -> s {rightOf = a} :: FieldPosition)
+
+instance Data.FromJSON FieldPosition where
+  parseJSON =
+    Data.withObject
+      "FieldPosition"
+      ( \x ->
+          FieldPosition'
+            Prelude.<$> (x Data..:? "below")
+            Prelude.<*> (x Data..:? "fixed")
+            Prelude.<*> (x Data..:? "rightOf")
+      )
+
+instance Prelude.Hashable FieldPosition where
+  hashWithSalt _salt FieldPosition' {..} =
+    _salt
+      `Prelude.hashWithSalt` below
+      `Prelude.hashWithSalt` fixed
+      `Prelude.hashWithSalt` rightOf
+
+instance Prelude.NFData FieldPosition where
+  rnf FieldPosition' {..} =
+    Prelude.rnf below
+      `Prelude.seq` Prelude.rnf fixed
+      `Prelude.seq` Prelude.rnf rightOf
+
+instance Data.ToJSON FieldPosition where
+  toJSON FieldPosition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("below" Data..=) Prelude.<$> below,
+            ("fixed" Data..=) Prelude.<$> fixed,
+            ("rightOf" Data..=) Prelude.<$> rightOf
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FieldValidationConfiguration.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FieldValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FieldValidationConfiguration.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FieldValidationConfiguration where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the validation configuration for a field.
+--
+-- /See:/ 'newFieldValidationConfiguration' smart constructor.
+data FieldValidationConfiguration = FieldValidationConfiguration'
+  { -- | The validation to perform on a number value.
+    numValues :: Prelude.Maybe [Prelude.Int],
+    -- | The validation to perform on a string value.
+    strValues :: Prelude.Maybe [Prelude.Text],
+    -- | The validation message to display.
+    validationMessage :: Prelude.Maybe Prelude.Text,
+    -- | The validation to perform on an object type.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FieldValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'numValues', 'fieldValidationConfiguration_numValues' - The validation to perform on a number value.
+--
+-- 'strValues', 'fieldValidationConfiguration_strValues' - The validation to perform on a string value.
+--
+-- 'validationMessage', 'fieldValidationConfiguration_validationMessage' - The validation message to display.
+--
+-- 'type'', 'fieldValidationConfiguration_type' - The validation to perform on an object type.
+newFieldValidationConfiguration ::
+  -- | 'type''
+  Prelude.Text ->
+  FieldValidationConfiguration
+newFieldValidationConfiguration pType_ =
+  FieldValidationConfiguration'
+    { numValues =
+        Prelude.Nothing,
+      strValues = Prelude.Nothing,
+      validationMessage = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | The validation to perform on a number value.
+fieldValidationConfiguration_numValues :: Lens.Lens' FieldValidationConfiguration (Prelude.Maybe [Prelude.Int])
+fieldValidationConfiguration_numValues = Lens.lens (\FieldValidationConfiguration' {numValues} -> numValues) (\s@FieldValidationConfiguration' {} a -> s {numValues = a} :: FieldValidationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation to perform on a string value.
+fieldValidationConfiguration_strValues :: Lens.Lens' FieldValidationConfiguration (Prelude.Maybe [Prelude.Text])
+fieldValidationConfiguration_strValues = Lens.lens (\FieldValidationConfiguration' {strValues} -> strValues) (\s@FieldValidationConfiguration' {} a -> s {strValues = a} :: FieldValidationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The validation message to display.
+fieldValidationConfiguration_validationMessage :: Lens.Lens' FieldValidationConfiguration (Prelude.Maybe Prelude.Text)
+fieldValidationConfiguration_validationMessage = Lens.lens (\FieldValidationConfiguration' {validationMessage} -> validationMessage) (\s@FieldValidationConfiguration' {} a -> s {validationMessage = a} :: FieldValidationConfiguration)
+
+-- | The validation to perform on an object type.
+fieldValidationConfiguration_type :: Lens.Lens' FieldValidationConfiguration Prelude.Text
+fieldValidationConfiguration_type = Lens.lens (\FieldValidationConfiguration' {type'} -> type') (\s@FieldValidationConfiguration' {} a -> s {type' = a} :: FieldValidationConfiguration)
+
+instance Data.FromJSON FieldValidationConfiguration where
+  parseJSON =
+    Data.withObject
+      "FieldValidationConfiguration"
+      ( \x ->
+          FieldValidationConfiguration'
+            Prelude.<$> (x Data..:? "numValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "strValues" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "validationMessage")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance
+  Prelude.Hashable
+    FieldValidationConfiguration
+  where
+  hashWithSalt _salt FieldValidationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` numValues
+      `Prelude.hashWithSalt` strValues
+      `Prelude.hashWithSalt` validationMessage
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData FieldValidationConfiguration where
+  rnf FieldValidationConfiguration' {..} =
+    Prelude.rnf numValues
+      `Prelude.seq` Prelude.rnf strValues
+      `Prelude.seq` Prelude.rnf validationMessage
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON FieldValidationConfiguration where
+  toJSON FieldValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("numValues" Data..=) Prelude.<$> numValues,
+            ("strValues" Data..=) Prelude.<$> strValues,
+            ("validationMessage" Data..=)
+              Prelude.<$> validationMessage,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FixedPosition.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FixedPosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FixedPosition.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FixedPosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FixedPosition
+  ( FixedPosition
+      ( ..,
+        FixedPosition_First
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FixedPosition = FixedPosition'
+  { fromFixedPosition ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FixedPosition_First :: FixedPosition
+pattern FixedPosition_First = FixedPosition' "first"
+
+{-# COMPLETE
+  FixedPosition_First,
+  FixedPosition'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/Form.hs b/gen/Amazonka/AmplifyUiBuilder/Types/Form.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/Form.hs
@@ -0,0 +1,243 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.Form
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.Form where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldConfig
+import Amazonka.AmplifyUiBuilder.Types.FormActionType
+import Amazonka.AmplifyUiBuilder.Types.FormCTA
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import Amazonka.AmplifyUiBuilder.Types.FormStyle
+import Amazonka.AmplifyUiBuilder.Types.SectionalElement
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Contains the configuration settings for a @Form@ user interface (UI)
+-- element for an Amplify app. A form is a component you can add to your
+-- project by specifying a data source as the default configuration for the
+-- form.
+--
+-- /See:/ 'newForm' smart constructor.
+data Form = Form'
+  { -- | Stores the call to action configuration for the form.
+    cta :: Prelude.Maybe FormCTA,
+    -- | One or more key-value pairs to use when tagging the form.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique ID of the Amplify app associated with the form.
+    appId :: Prelude.Text,
+    -- | The type of data source to use to create the form.
+    dataType :: FormDataTypeConfig,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | Stores the information about the form\'s fields.
+    fields :: Prelude.HashMap Prelude.Text FieldConfig,
+    -- | The operation to perform on the specified form.
+    formActionType :: FormActionType,
+    -- | The unique ID of the form.
+    id :: Prelude.Text,
+    -- | The name of the form.
+    name :: Prelude.Text,
+    -- | The schema version of the form when it was imported.
+    schemaVersion :: Prelude.Text,
+    -- | Stores the visual helper elements for the form that are not associated
+    -- with any data.
+    sectionalElements :: Prelude.HashMap Prelude.Text SectionalElement,
+    -- | Stores the configuration for the form\'s style.
+    style :: FormStyle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Form' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cta', 'form_cta' - Stores the call to action configuration for the form.
+--
+-- 'tags', 'form_tags' - One or more key-value pairs to use when tagging the form.
+--
+-- 'appId', 'form_appId' - The unique ID of the Amplify app associated with the form.
+--
+-- 'dataType', 'form_dataType' - The type of data source to use to create the form.
+--
+-- 'environmentName', 'form_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'fields', 'form_fields' - Stores the information about the form\'s fields.
+--
+-- 'formActionType', 'form_formActionType' - The operation to perform on the specified form.
+--
+-- 'id', 'form_id' - The unique ID of the form.
+--
+-- 'name', 'form_name' - The name of the form.
+--
+-- 'schemaVersion', 'form_schemaVersion' - The schema version of the form when it was imported.
+--
+-- 'sectionalElements', 'form_sectionalElements' - Stores the visual helper elements for the form that are not associated
+-- with any data.
+--
+-- 'style', 'form_style' - Stores the configuration for the form\'s style.
+newForm ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'dataType'
+  FormDataTypeConfig ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'formActionType'
+  FormActionType ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'schemaVersion'
+  Prelude.Text ->
+  -- | 'style'
+  FormStyle ->
+  Form
+newForm
+  pAppId_
+  pDataType_
+  pEnvironmentName_
+  pFormActionType_
+  pId_
+  pName_
+  pSchemaVersion_
+  pStyle_ =
+    Form'
+      { cta = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appId = pAppId_,
+        dataType = pDataType_,
+        environmentName = pEnvironmentName_,
+        fields = Prelude.mempty,
+        formActionType = pFormActionType_,
+        id = pId_,
+        name = pName_,
+        schemaVersion = pSchemaVersion_,
+        sectionalElements = Prelude.mempty,
+        style = pStyle_
+      }
+
+-- | Stores the call to action configuration for the form.
+form_cta :: Lens.Lens' Form (Prelude.Maybe FormCTA)
+form_cta = Lens.lens (\Form' {cta} -> cta) (\s@Form' {} a -> s {cta = a} :: Form)
+
+-- | One or more key-value pairs to use when tagging the form.
+form_tags :: Lens.Lens' Form (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+form_tags = Lens.lens (\Form' {tags} -> tags) (\s@Form' {} a -> s {tags = a} :: Form) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the Amplify app associated with the form.
+form_appId :: Lens.Lens' Form Prelude.Text
+form_appId = Lens.lens (\Form' {appId} -> appId) (\s@Form' {} a -> s {appId = a} :: Form)
+
+-- | The type of data source to use to create the form.
+form_dataType :: Lens.Lens' Form FormDataTypeConfig
+form_dataType = Lens.lens (\Form' {dataType} -> dataType) (\s@Form' {} a -> s {dataType = a} :: Form)
+
+-- | The name of the backend environment that is a part of the Amplify app.
+form_environmentName :: Lens.Lens' Form Prelude.Text
+form_environmentName = Lens.lens (\Form' {environmentName} -> environmentName) (\s@Form' {} a -> s {environmentName = a} :: Form)
+
+-- | Stores the information about the form\'s fields.
+form_fields :: Lens.Lens' Form (Prelude.HashMap Prelude.Text FieldConfig)
+form_fields = Lens.lens (\Form' {fields} -> fields) (\s@Form' {} a -> s {fields = a} :: Form) Prelude.. Lens.coerced
+
+-- | The operation to perform on the specified form.
+form_formActionType :: Lens.Lens' Form FormActionType
+form_formActionType = Lens.lens (\Form' {formActionType} -> formActionType) (\s@Form' {} a -> s {formActionType = a} :: Form)
+
+-- | The unique ID of the form.
+form_id :: Lens.Lens' Form Prelude.Text
+form_id = Lens.lens (\Form' {id} -> id) (\s@Form' {} a -> s {id = a} :: Form)
+
+-- | The name of the form.
+form_name :: Lens.Lens' Form Prelude.Text
+form_name = Lens.lens (\Form' {name} -> name) (\s@Form' {} a -> s {name = a} :: Form)
+
+-- | The schema version of the form when it was imported.
+form_schemaVersion :: Lens.Lens' Form Prelude.Text
+form_schemaVersion = Lens.lens (\Form' {schemaVersion} -> schemaVersion) (\s@Form' {} a -> s {schemaVersion = a} :: Form)
+
+-- | Stores the visual helper elements for the form that are not associated
+-- with any data.
+form_sectionalElements :: Lens.Lens' Form (Prelude.HashMap Prelude.Text SectionalElement)
+form_sectionalElements = Lens.lens (\Form' {sectionalElements} -> sectionalElements) (\s@Form' {} a -> s {sectionalElements = a} :: Form) Prelude.. Lens.coerced
+
+-- | Stores the configuration for the form\'s style.
+form_style :: Lens.Lens' Form FormStyle
+form_style = Lens.lens (\Form' {style} -> style) (\s@Form' {} a -> s {style = a} :: Form)
+
+instance Data.FromJSON Form where
+  parseJSON =
+    Data.withObject
+      "Form"
+      ( \x ->
+          Form'
+            Prelude.<$> (x Data..:? "cta")
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "appId")
+            Prelude.<*> (x Data..: "dataType")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..:? "fields" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "formActionType")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..: "schemaVersion")
+            Prelude.<*> ( x
+                            Data..:? "sectionalElements"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..: "style")
+      )
+
+instance Prelude.Hashable Form where
+  hashWithSalt _salt Form' {..} =
+    _salt
+      `Prelude.hashWithSalt` cta
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` formActionType
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sectionalElements
+      `Prelude.hashWithSalt` style
+
+instance Prelude.NFData Form where
+  rnf Form' {..} =
+    Prelude.rnf cta
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf formActionType
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sectionalElements
+      `Prelude.seq` Prelude.rnf style
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormActionType.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormActionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormActionType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormActionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormActionType
+  ( FormActionType
+      ( ..,
+        FormActionType_Create,
+        FormActionType_Update
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FormActionType = FormActionType'
+  { fromFormActionType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FormActionType_Create :: FormActionType
+pattern FormActionType_Create = FormActionType' "create"
+
+pattern FormActionType_Update :: FormActionType
+pattern FormActionType_Update = FormActionType' "update"
+
+{-# COMPLETE
+  FormActionType_Create,
+  FormActionType_Update,
+  FormActionType'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormBindingElement.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormBindingElement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormBindingElement.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormBindingElement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormBindingElement where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes how to bind a component property to form data.
+--
+-- /See:/ 'newFormBindingElement' smart constructor.
+data FormBindingElement = FormBindingElement'
+  { -- | The name of the component to retrieve a value from.
+    element :: Prelude.Text,
+    -- | The property to retrieve a value from.
+    property :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormBindingElement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'element', 'formBindingElement_element' - The name of the component to retrieve a value from.
+--
+-- 'property', 'formBindingElement_property' - The property to retrieve a value from.
+newFormBindingElement ::
+  -- | 'element'
+  Prelude.Text ->
+  -- | 'property'
+  Prelude.Text ->
+  FormBindingElement
+newFormBindingElement pElement_ pProperty_ =
+  FormBindingElement'
+    { element = pElement_,
+      property = pProperty_
+    }
+
+-- | The name of the component to retrieve a value from.
+formBindingElement_element :: Lens.Lens' FormBindingElement Prelude.Text
+formBindingElement_element = Lens.lens (\FormBindingElement' {element} -> element) (\s@FormBindingElement' {} a -> s {element = a} :: FormBindingElement)
+
+-- | The property to retrieve a value from.
+formBindingElement_property :: Lens.Lens' FormBindingElement Prelude.Text
+formBindingElement_property = Lens.lens (\FormBindingElement' {property} -> property) (\s@FormBindingElement' {} a -> s {property = a} :: FormBindingElement)
+
+instance Data.FromJSON FormBindingElement where
+  parseJSON =
+    Data.withObject
+      "FormBindingElement"
+      ( \x ->
+          FormBindingElement'
+            Prelude.<$> (x Data..: "element")
+            Prelude.<*> (x Data..: "property")
+      )
+
+instance Prelude.Hashable FormBindingElement where
+  hashWithSalt _salt FormBindingElement' {..} =
+    _salt
+      `Prelude.hashWithSalt` element
+      `Prelude.hashWithSalt` property
+
+instance Prelude.NFData FormBindingElement where
+  rnf FormBindingElement' {..} =
+    Prelude.rnf element
+      `Prelude.seq` Prelude.rnf property
+
+instance Data.ToJSON FormBindingElement where
+  toJSON FormBindingElement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("element" Data..= element),
+            Prelude.Just ("property" Data..= property)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormButton.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormButton.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormButton.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormButton
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormButton where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldPosition
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for a button UI element that is a part of a
+-- form.
+--
+-- /See:/ 'newFormButton' smart constructor.
+data FormButton = FormButton'
+  { -- | Describes the button\'s properties.
+    children :: Prelude.Maybe Prelude.Text,
+    -- | Specifies whether the button is visible on the form.
+    excluded :: Prelude.Maybe Prelude.Bool,
+    -- | The position of the button.
+    position :: Prelude.Maybe FieldPosition
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormButton' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'children', 'formButton_children' - Describes the button\'s properties.
+--
+-- 'excluded', 'formButton_excluded' - Specifies whether the button is visible on the form.
+--
+-- 'position', 'formButton_position' - The position of the button.
+newFormButton ::
+  FormButton
+newFormButton =
+  FormButton'
+    { children = Prelude.Nothing,
+      excluded = Prelude.Nothing,
+      position = Prelude.Nothing
+    }
+
+-- | Describes the button\'s properties.
+formButton_children :: Lens.Lens' FormButton (Prelude.Maybe Prelude.Text)
+formButton_children = Lens.lens (\FormButton' {children} -> children) (\s@FormButton' {} a -> s {children = a} :: FormButton)
+
+-- | Specifies whether the button is visible on the form.
+formButton_excluded :: Lens.Lens' FormButton (Prelude.Maybe Prelude.Bool)
+formButton_excluded = Lens.lens (\FormButton' {excluded} -> excluded) (\s@FormButton' {} a -> s {excluded = a} :: FormButton)
+
+-- | The position of the button.
+formButton_position :: Lens.Lens' FormButton (Prelude.Maybe FieldPosition)
+formButton_position = Lens.lens (\FormButton' {position} -> position) (\s@FormButton' {} a -> s {position = a} :: FormButton)
+
+instance Data.FromJSON FormButton where
+  parseJSON =
+    Data.withObject
+      "FormButton"
+      ( \x ->
+          FormButton'
+            Prelude.<$> (x Data..:? "children")
+            Prelude.<*> (x Data..:? "excluded")
+            Prelude.<*> (x Data..:? "position")
+      )
+
+instance Prelude.Hashable FormButton where
+  hashWithSalt _salt FormButton' {..} =
+    _salt
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` excluded
+      `Prelude.hashWithSalt` position
+
+instance Prelude.NFData FormButton where
+  rnf FormButton' {..} =
+    Prelude.rnf children
+      `Prelude.seq` Prelude.rnf excluded
+      `Prelude.seq` Prelude.rnf position
+
+instance Data.ToJSON FormButton where
+  toJSON FormButton' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("children" Data..=) Prelude.<$> children,
+            ("excluded" Data..=) Prelude.<$> excluded,
+            ("position" Data..=) Prelude.<$> position
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormButtonsPosition.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormButtonsPosition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormButtonsPosition.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormButtonsPosition
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormButtonsPosition
+  ( FormButtonsPosition
+      ( ..,
+        FormButtonsPosition_Bottom,
+        FormButtonsPosition_Top,
+        FormButtonsPosition_Top_and_bottom
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FormButtonsPosition = FormButtonsPosition'
+  { fromFormButtonsPosition ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FormButtonsPosition_Bottom :: FormButtonsPosition
+pattern FormButtonsPosition_Bottom = FormButtonsPosition' "bottom"
+
+pattern FormButtonsPosition_Top :: FormButtonsPosition
+pattern FormButtonsPosition_Top = FormButtonsPosition' "top"
+
+pattern FormButtonsPosition_Top_and_bottom :: FormButtonsPosition
+pattern FormButtonsPosition_Top_and_bottom = FormButtonsPosition' "top_and_bottom"
+
+{-# COMPLETE
+  FormButtonsPosition_Bottom,
+  FormButtonsPosition_Top,
+  FormButtonsPosition_Top_and_bottom,
+  FormButtonsPosition'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormCTA.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormCTA.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormCTA.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormCTA
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormCTA where
+
+import Amazonka.AmplifyUiBuilder.Types.FormButton
+import Amazonka.AmplifyUiBuilder.Types.FormButtonsPosition
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the call to action button configuration for the form.
+--
+-- /See:/ 'newFormCTA' smart constructor.
+data FormCTA = FormCTA'
+  { -- | Displays a cancel button.
+    cancel :: Prelude.Maybe FormButton,
+    -- | Displays a clear button.
+    clear :: Prelude.Maybe FormButton,
+    -- | The position of the button.
+    position :: Prelude.Maybe FormButtonsPosition,
+    -- | Displays a submit button.
+    submit :: Prelude.Maybe FormButton
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormCTA' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cancel', 'formCTA_cancel' - Displays a cancel button.
+--
+-- 'clear', 'formCTA_clear' - Displays a clear button.
+--
+-- 'position', 'formCTA_position' - The position of the button.
+--
+-- 'submit', 'formCTA_submit' - Displays a submit button.
+newFormCTA ::
+  FormCTA
+newFormCTA =
+  FormCTA'
+    { cancel = Prelude.Nothing,
+      clear = Prelude.Nothing,
+      position = Prelude.Nothing,
+      submit = Prelude.Nothing
+    }
+
+-- | Displays a cancel button.
+formCTA_cancel :: Lens.Lens' FormCTA (Prelude.Maybe FormButton)
+formCTA_cancel = Lens.lens (\FormCTA' {cancel} -> cancel) (\s@FormCTA' {} a -> s {cancel = a} :: FormCTA)
+
+-- | Displays a clear button.
+formCTA_clear :: Lens.Lens' FormCTA (Prelude.Maybe FormButton)
+formCTA_clear = Lens.lens (\FormCTA' {clear} -> clear) (\s@FormCTA' {} a -> s {clear = a} :: FormCTA)
+
+-- | The position of the button.
+formCTA_position :: Lens.Lens' FormCTA (Prelude.Maybe FormButtonsPosition)
+formCTA_position = Lens.lens (\FormCTA' {position} -> position) (\s@FormCTA' {} a -> s {position = a} :: FormCTA)
+
+-- | Displays a submit button.
+formCTA_submit :: Lens.Lens' FormCTA (Prelude.Maybe FormButton)
+formCTA_submit = Lens.lens (\FormCTA' {submit} -> submit) (\s@FormCTA' {} a -> s {submit = a} :: FormCTA)
+
+instance Data.FromJSON FormCTA where
+  parseJSON =
+    Data.withObject
+      "FormCTA"
+      ( \x ->
+          FormCTA'
+            Prelude.<$> (x Data..:? "cancel")
+            Prelude.<*> (x Data..:? "clear")
+            Prelude.<*> (x Data..:? "position")
+            Prelude.<*> (x Data..:? "submit")
+      )
+
+instance Prelude.Hashable FormCTA where
+  hashWithSalt _salt FormCTA' {..} =
+    _salt
+      `Prelude.hashWithSalt` cancel
+      `Prelude.hashWithSalt` clear
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` submit
+
+instance Prelude.NFData FormCTA where
+  rnf FormCTA' {..} =
+    Prelude.rnf cancel
+      `Prelude.seq` Prelude.rnf clear
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf submit
+
+instance Data.ToJSON FormCTA where
+  toJSON FormCTA' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cancel" Data..=) Prelude.<$> cancel,
+            ("clear" Data..=) Prelude.<$> clear,
+            ("position" Data..=) Prelude.<$> position,
+            ("submit" Data..=) Prelude.<$> submit
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormDataSourceType.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormDataSourceType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormDataSourceType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormDataSourceType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormDataSourceType
+  ( FormDataSourceType
+      ( ..,
+        FormDataSourceType_Custom,
+        FormDataSourceType_DataStore
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FormDataSourceType = FormDataSourceType'
+  { fromFormDataSourceType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern FormDataSourceType_Custom :: FormDataSourceType
+pattern FormDataSourceType_Custom = FormDataSourceType' "Custom"
+
+pattern FormDataSourceType_DataStore :: FormDataSourceType
+pattern FormDataSourceType_DataStore = FormDataSourceType' "DataStore"
+
+{-# COMPLETE
+  FormDataSourceType_Custom,
+  FormDataSourceType_DataStore,
+  FormDataSourceType'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormDataTypeConfig.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormDataTypeConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormDataTypeConfig.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig where
+
+import Amazonka.AmplifyUiBuilder.Types.FormDataSourceType
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the data type configuration for the data source associated
+-- with a form.
+--
+-- /See:/ 'newFormDataTypeConfig' smart constructor.
+data FormDataTypeConfig = FormDataTypeConfig'
+  { -- | The data source type, either an Amplify DataStore model or a custom data
+    -- type.
+    dataSourceType :: FormDataSourceType,
+    -- | The unique name of the data type you are using as the data source for
+    -- the form.
+    dataTypeName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormDataTypeConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dataSourceType', 'formDataTypeConfig_dataSourceType' - The data source type, either an Amplify DataStore model or a custom data
+-- type.
+--
+-- 'dataTypeName', 'formDataTypeConfig_dataTypeName' - The unique name of the data type you are using as the data source for
+-- the form.
+newFormDataTypeConfig ::
+  -- | 'dataSourceType'
+  FormDataSourceType ->
+  -- | 'dataTypeName'
+  Prelude.Text ->
+  FormDataTypeConfig
+newFormDataTypeConfig pDataSourceType_ pDataTypeName_ =
+  FormDataTypeConfig'
+    { dataSourceType =
+        pDataSourceType_,
+      dataTypeName = pDataTypeName_
+    }
+
+-- | The data source type, either an Amplify DataStore model or a custom data
+-- type.
+formDataTypeConfig_dataSourceType :: Lens.Lens' FormDataTypeConfig FormDataSourceType
+formDataTypeConfig_dataSourceType = Lens.lens (\FormDataTypeConfig' {dataSourceType} -> dataSourceType) (\s@FormDataTypeConfig' {} a -> s {dataSourceType = a} :: FormDataTypeConfig)
+
+-- | The unique name of the data type you are using as the data source for
+-- the form.
+formDataTypeConfig_dataTypeName :: Lens.Lens' FormDataTypeConfig Prelude.Text
+formDataTypeConfig_dataTypeName = Lens.lens (\FormDataTypeConfig' {dataTypeName} -> dataTypeName) (\s@FormDataTypeConfig' {} a -> s {dataTypeName = a} :: FormDataTypeConfig)
+
+instance Data.FromJSON FormDataTypeConfig where
+  parseJSON =
+    Data.withObject
+      "FormDataTypeConfig"
+      ( \x ->
+          FormDataTypeConfig'
+            Prelude.<$> (x Data..: "dataSourceType")
+            Prelude.<*> (x Data..: "dataTypeName")
+      )
+
+instance Prelude.Hashable FormDataTypeConfig where
+  hashWithSalt _salt FormDataTypeConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` dataSourceType
+      `Prelude.hashWithSalt` dataTypeName
+
+instance Prelude.NFData FormDataTypeConfig where
+  rnf FormDataTypeConfig' {..} =
+    Prelude.rnf dataSourceType
+      `Prelude.seq` Prelude.rnf dataTypeName
+
+instance Data.ToJSON FormDataTypeConfig where
+  toJSON FormDataTypeConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("dataSourceType" Data..= dataSourceType),
+            Prelude.Just ("dataTypeName" Data..= dataTypeName)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormInputValueProperty.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormInputValueProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormInputValueProperty.hs
@@ -0,0 +1,77 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for an input field on a form. Use
+-- @FormInputValueProperty@ to specify the values to render or bind by
+-- default.
+--
+-- /See:/ 'newFormInputValueProperty' smart constructor.
+data FormInputValueProperty = FormInputValueProperty'
+  { -- | The value to assign to the input field.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormInputValueProperty' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'value', 'formInputValueProperty_value' - The value to assign to the input field.
+newFormInputValueProperty ::
+  FormInputValueProperty
+newFormInputValueProperty =
+  FormInputValueProperty' {value = Prelude.Nothing}
+
+-- | The value to assign to the input field.
+formInputValueProperty_value :: Lens.Lens' FormInputValueProperty (Prelude.Maybe Prelude.Text)
+formInputValueProperty_value = Lens.lens (\FormInputValueProperty' {value} -> value) (\s@FormInputValueProperty' {} a -> s {value = a} :: FormInputValueProperty)
+
+instance Data.FromJSON FormInputValueProperty where
+  parseJSON =
+    Data.withObject
+      "FormInputValueProperty"
+      ( \x ->
+          FormInputValueProperty'
+            Prelude.<$> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable FormInputValueProperty where
+  hashWithSalt _salt FormInputValueProperty' {..} =
+    _salt `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FormInputValueProperty where
+  rnf FormInputValueProperty' {..} = Prelude.rnf value
+
+instance Data.ToJSON FormInputValueProperty where
+  toJSON FormInputValueProperty' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("value" Data..=) Prelude.<$> value]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormStyle.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormStyle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormStyle.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormStyle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormStyle where
+
+import Amazonka.AmplifyUiBuilder.Types.FormStyleConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration for the form\'s style.
+--
+-- /See:/ 'newFormStyle' smart constructor.
+data FormStyle = FormStyle'
+  { -- | The spacing for the horizontal gap.
+    horizontalGap :: Prelude.Maybe FormStyleConfig,
+    -- | The size of the outer padding for the form.
+    outerPadding :: Prelude.Maybe FormStyleConfig,
+    -- | The spacing for the vertical gap.
+    verticalGap :: Prelude.Maybe FormStyleConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormStyle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'horizontalGap', 'formStyle_horizontalGap' - The spacing for the horizontal gap.
+--
+-- 'outerPadding', 'formStyle_outerPadding' - The size of the outer padding for the form.
+--
+-- 'verticalGap', 'formStyle_verticalGap' - The spacing for the vertical gap.
+newFormStyle ::
+  FormStyle
+newFormStyle =
+  FormStyle'
+    { horizontalGap = Prelude.Nothing,
+      outerPadding = Prelude.Nothing,
+      verticalGap = Prelude.Nothing
+    }
+
+-- | The spacing for the horizontal gap.
+formStyle_horizontalGap :: Lens.Lens' FormStyle (Prelude.Maybe FormStyleConfig)
+formStyle_horizontalGap = Lens.lens (\FormStyle' {horizontalGap} -> horizontalGap) (\s@FormStyle' {} a -> s {horizontalGap = a} :: FormStyle)
+
+-- | The size of the outer padding for the form.
+formStyle_outerPadding :: Lens.Lens' FormStyle (Prelude.Maybe FormStyleConfig)
+formStyle_outerPadding = Lens.lens (\FormStyle' {outerPadding} -> outerPadding) (\s@FormStyle' {} a -> s {outerPadding = a} :: FormStyle)
+
+-- | The spacing for the vertical gap.
+formStyle_verticalGap :: Lens.Lens' FormStyle (Prelude.Maybe FormStyleConfig)
+formStyle_verticalGap = Lens.lens (\FormStyle' {verticalGap} -> verticalGap) (\s@FormStyle' {} a -> s {verticalGap = a} :: FormStyle)
+
+instance Data.FromJSON FormStyle where
+  parseJSON =
+    Data.withObject
+      "FormStyle"
+      ( \x ->
+          FormStyle'
+            Prelude.<$> (x Data..:? "horizontalGap")
+            Prelude.<*> (x Data..:? "outerPadding")
+            Prelude.<*> (x Data..:? "verticalGap")
+      )
+
+instance Prelude.Hashable FormStyle where
+  hashWithSalt _salt FormStyle' {..} =
+    _salt
+      `Prelude.hashWithSalt` horizontalGap
+      `Prelude.hashWithSalt` outerPadding
+      `Prelude.hashWithSalt` verticalGap
+
+instance Prelude.NFData FormStyle where
+  rnf FormStyle' {..} =
+    Prelude.rnf horizontalGap
+      `Prelude.seq` Prelude.rnf outerPadding
+      `Prelude.seq` Prelude.rnf verticalGap
+
+instance Data.ToJSON FormStyle where
+  toJSON FormStyle' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("horizontalGap" Data..=) Prelude.<$> horizontalGap,
+            ("outerPadding" Data..=) Prelude.<$> outerPadding,
+            ("verticalGap" Data..=) Prelude.<$> verticalGap
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormStyleConfig.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormStyleConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormStyleConfig.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormStyleConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormStyleConfig where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration settings for the form\'s style properties.
+--
+-- /See:/ 'newFormStyleConfig' smart constructor.
+data FormStyleConfig = FormStyleConfig'
+  { -- | A reference to a design token to use to bind the form\'s style
+    -- properties to an existing theme.
+    tokenReference :: Prelude.Maybe Prelude.Text,
+    -- | The value of the style setting.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormStyleConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tokenReference', 'formStyleConfig_tokenReference' - A reference to a design token to use to bind the form\'s style
+-- properties to an existing theme.
+--
+-- 'value', 'formStyleConfig_value' - The value of the style setting.
+newFormStyleConfig ::
+  FormStyleConfig
+newFormStyleConfig =
+  FormStyleConfig'
+    { tokenReference = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | A reference to a design token to use to bind the form\'s style
+-- properties to an existing theme.
+formStyleConfig_tokenReference :: Lens.Lens' FormStyleConfig (Prelude.Maybe Prelude.Text)
+formStyleConfig_tokenReference = Lens.lens (\FormStyleConfig' {tokenReference} -> tokenReference) (\s@FormStyleConfig' {} a -> s {tokenReference = a} :: FormStyleConfig)
+
+-- | The value of the style setting.
+formStyleConfig_value :: Lens.Lens' FormStyleConfig (Prelude.Maybe Prelude.Text)
+formStyleConfig_value = Lens.lens (\FormStyleConfig' {value} -> value) (\s@FormStyleConfig' {} a -> s {value = a} :: FormStyleConfig)
+
+instance Data.FromJSON FormStyleConfig where
+  parseJSON =
+    Data.withObject
+      "FormStyleConfig"
+      ( \x ->
+          FormStyleConfig'
+            Prelude.<$> (x Data..:? "tokenReference")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable FormStyleConfig where
+  hashWithSalt _salt FormStyleConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` tokenReference
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData FormStyleConfig where
+  rnf FormStyleConfig' {..} =
+    Prelude.rnf tokenReference
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON FormStyleConfig where
+  toJSON FormStyleConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("tokenReference" Data..=)
+              Prelude.<$> tokenReference,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/FormSummary.hs b/gen/Amazonka/AmplifyUiBuilder/Types/FormSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/FormSummary.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.FormSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.FormSummary where
+
+import Amazonka.AmplifyUiBuilder.Types.FormActionType
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the basic information about a form.
+--
+-- /See:/ 'newFormSummary' smart constructor.
+data FormSummary = FormSummary'
+  { -- | The unique ID for the app associated with the form summary.
+    appId :: Prelude.Text,
+    -- | The form\'s data source type.
+    dataType :: FormDataTypeConfig,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The type of operation to perform on the form.
+    formActionType :: FormActionType,
+    -- | The ID of the form.
+    id :: Prelude.Text,
+    -- | The name of the form.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FormSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'formSummary_appId' - The unique ID for the app associated with the form summary.
+--
+-- 'dataType', 'formSummary_dataType' - The form\'s data source type.
+--
+-- 'environmentName', 'formSummary_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'formActionType', 'formSummary_formActionType' - The type of operation to perform on the form.
+--
+-- 'id', 'formSummary_id' - The ID of the form.
+--
+-- 'name', 'formSummary_name' - The name of the form.
+newFormSummary ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'dataType'
+  FormDataTypeConfig ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'formActionType'
+  FormActionType ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  FormSummary
+newFormSummary
+  pAppId_
+  pDataType_
+  pEnvironmentName_
+  pFormActionType_
+  pId_
+  pName_ =
+    FormSummary'
+      { appId = pAppId_,
+        dataType = pDataType_,
+        environmentName = pEnvironmentName_,
+        formActionType = pFormActionType_,
+        id = pId_,
+        name = pName_
+      }
+
+-- | The unique ID for the app associated with the form summary.
+formSummary_appId :: Lens.Lens' FormSummary Prelude.Text
+formSummary_appId = Lens.lens (\FormSummary' {appId} -> appId) (\s@FormSummary' {} a -> s {appId = a} :: FormSummary)
+
+-- | The form\'s data source type.
+formSummary_dataType :: Lens.Lens' FormSummary FormDataTypeConfig
+formSummary_dataType = Lens.lens (\FormSummary' {dataType} -> dataType) (\s@FormSummary' {} a -> s {dataType = a} :: FormSummary)
+
+-- | The name of the backend environment that is part of the Amplify app.
+formSummary_environmentName :: Lens.Lens' FormSummary Prelude.Text
+formSummary_environmentName = Lens.lens (\FormSummary' {environmentName} -> environmentName) (\s@FormSummary' {} a -> s {environmentName = a} :: FormSummary)
+
+-- | The type of operation to perform on the form.
+formSummary_formActionType :: Lens.Lens' FormSummary FormActionType
+formSummary_formActionType = Lens.lens (\FormSummary' {formActionType} -> formActionType) (\s@FormSummary' {} a -> s {formActionType = a} :: FormSummary)
+
+-- | The ID of the form.
+formSummary_id :: Lens.Lens' FormSummary Prelude.Text
+formSummary_id = Lens.lens (\FormSummary' {id} -> id) (\s@FormSummary' {} a -> s {id = a} :: FormSummary)
+
+-- | The name of the form.
+formSummary_name :: Lens.Lens' FormSummary Prelude.Text
+formSummary_name = Lens.lens (\FormSummary' {name} -> name) (\s@FormSummary' {} a -> s {name = a} :: FormSummary)
+
+instance Data.FromJSON FormSummary where
+  parseJSON =
+    Data.withObject
+      "FormSummary"
+      ( \x ->
+          FormSummary'
+            Prelude.<$> (x Data..: "appId")
+            Prelude.<*> (x Data..: "dataType")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "formActionType")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable FormSummary where
+  hashWithSalt _salt FormSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` formActionType
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData FormSummary where
+  rnf FormSummary' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf formActionType
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/MutationActionSetStateParameter.hs b/gen/Amazonka/AmplifyUiBuilder/Types/MutationActionSetStateParameter.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/MutationActionSetStateParameter.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.MutationActionSetStateParameter where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the state configuration when an action modifies a property of
+-- another element within the same component.
+--
+-- /See:/ 'newMutationActionSetStateParameter' smart constructor.
+data MutationActionSetStateParameter = MutationActionSetStateParameter'
+  { -- | The name of the component that is being modified.
+    componentName :: Prelude.Text,
+    -- | The name of the component property to apply the state configuration to.
+    property :: Prelude.Text,
+    -- | The state configuration to assign to the property.
+    set :: ComponentProperty
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'MutationActionSetStateParameter' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'componentName', 'mutationActionSetStateParameter_componentName' - The name of the component that is being modified.
+--
+-- 'property', 'mutationActionSetStateParameter_property' - The name of the component property to apply the state configuration to.
+--
+-- 'set', 'mutationActionSetStateParameter_set' - The state configuration to assign to the property.
+newMutationActionSetStateParameter ::
+  -- | 'componentName'
+  Prelude.Text ->
+  -- | 'property'
+  Prelude.Text ->
+  -- | 'set'
+  ComponentProperty ->
+  MutationActionSetStateParameter
+newMutationActionSetStateParameter
+  pComponentName_
+  pProperty_
+  pSet_ =
+    MutationActionSetStateParameter'
+      { componentName =
+          pComponentName_,
+        property = pProperty_,
+        set = pSet_
+      }
+
+-- | The name of the component that is being modified.
+mutationActionSetStateParameter_componentName :: Lens.Lens' MutationActionSetStateParameter Prelude.Text
+mutationActionSetStateParameter_componentName = Lens.lens (\MutationActionSetStateParameter' {componentName} -> componentName) (\s@MutationActionSetStateParameter' {} a -> s {componentName = a} :: MutationActionSetStateParameter)
+
+-- | The name of the component property to apply the state configuration to.
+mutationActionSetStateParameter_property :: Lens.Lens' MutationActionSetStateParameter Prelude.Text
+mutationActionSetStateParameter_property = Lens.lens (\MutationActionSetStateParameter' {property} -> property) (\s@MutationActionSetStateParameter' {} a -> s {property = a} :: MutationActionSetStateParameter)
+
+-- | The state configuration to assign to the property.
+mutationActionSetStateParameter_set :: Lens.Lens' MutationActionSetStateParameter ComponentProperty
+mutationActionSetStateParameter_set = Lens.lens (\MutationActionSetStateParameter' {set} -> set) (\s@MutationActionSetStateParameter' {} a -> s {set = a} :: MutationActionSetStateParameter)
+
+instance
+  Data.FromJSON
+    MutationActionSetStateParameter
+  where
+  parseJSON =
+    Data.withObject
+      "MutationActionSetStateParameter"
+      ( \x ->
+          MutationActionSetStateParameter'
+            Prelude.<$> (x Data..: "componentName")
+            Prelude.<*> (x Data..: "property")
+            Prelude.<*> (x Data..: "set")
+      )
+
+instance
+  Prelude.Hashable
+    MutationActionSetStateParameter
+  where
+  hashWithSalt
+    _salt
+    MutationActionSetStateParameter' {..} =
+      _salt
+        `Prelude.hashWithSalt` componentName
+        `Prelude.hashWithSalt` property
+        `Prelude.hashWithSalt` set
+
+instance
+  Prelude.NFData
+    MutationActionSetStateParameter
+  where
+  rnf MutationActionSetStateParameter' {..} =
+    Prelude.rnf componentName
+      `Prelude.seq` Prelude.rnf property
+      `Prelude.seq` Prelude.rnf set
+
+instance Data.ToJSON MutationActionSetStateParameter where
+  toJSON MutationActionSetStateParameter' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("componentName" Data..= componentName),
+            Prelude.Just ("property" Data..= property),
+            Prelude.Just ("set" Data..= set)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/Predicate.hs b/gen/Amazonka/AmplifyUiBuilder/Types/Predicate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/Predicate.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.Predicate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.Predicate where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Stores information for generating Amplify DataStore queries. Use a
+-- @Predicate@ to retrieve a subset of the data in a collection.
+--
+-- /See:/ 'newPredicate' smart constructor.
+data Predicate = Predicate'
+  { -- | A list of predicates to combine logically.
+    and :: Prelude.Maybe [Predicate],
+    -- | The field to query.
+    field :: Prelude.Maybe Prelude.Text,
+    -- | The value to use when performing the evaluation.
+    operand :: Prelude.Maybe Prelude.Text,
+    -- | The operator to use to perform the evaluation.
+    operator :: Prelude.Maybe Prelude.Text,
+    -- | A list of predicates to combine logically.
+    or :: Prelude.Maybe [Predicate]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Predicate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'and', 'predicate_and' - A list of predicates to combine logically.
+--
+-- 'field', 'predicate_field' - The field to query.
+--
+-- 'operand', 'predicate_operand' - The value to use when performing the evaluation.
+--
+-- 'operator', 'predicate_operator' - The operator to use to perform the evaluation.
+--
+-- 'or', 'predicate_or' - A list of predicates to combine logically.
+newPredicate ::
+  Predicate
+newPredicate =
+  Predicate'
+    { and = Prelude.Nothing,
+      field = Prelude.Nothing,
+      operand = Prelude.Nothing,
+      operator = Prelude.Nothing,
+      or = Prelude.Nothing
+    }
+
+-- | A list of predicates to combine logically.
+predicate_and :: Lens.Lens' Predicate (Prelude.Maybe [Predicate])
+predicate_and = Lens.lens (\Predicate' {and} -> and) (\s@Predicate' {} a -> s {and = a} :: Predicate) Prelude.. Lens.mapping Lens.coerced
+
+-- | The field to query.
+predicate_field :: Lens.Lens' Predicate (Prelude.Maybe Prelude.Text)
+predicate_field = Lens.lens (\Predicate' {field} -> field) (\s@Predicate' {} a -> s {field = a} :: Predicate)
+
+-- | The value to use when performing the evaluation.
+predicate_operand :: Lens.Lens' Predicate (Prelude.Maybe Prelude.Text)
+predicate_operand = Lens.lens (\Predicate' {operand} -> operand) (\s@Predicate' {} a -> s {operand = a} :: Predicate)
+
+-- | The operator to use to perform the evaluation.
+predicate_operator :: Lens.Lens' Predicate (Prelude.Maybe Prelude.Text)
+predicate_operator = Lens.lens (\Predicate' {operator} -> operator) (\s@Predicate' {} a -> s {operator = a} :: Predicate)
+
+-- | A list of predicates to combine logically.
+predicate_or :: Lens.Lens' Predicate (Prelude.Maybe [Predicate])
+predicate_or = Lens.lens (\Predicate' {or} -> or) (\s@Predicate' {} a -> s {or = a} :: Predicate) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON Predicate where
+  parseJSON =
+    Data.withObject
+      "Predicate"
+      ( \x ->
+          Predicate'
+            Prelude.<$> (x Data..:? "and" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "field")
+            Prelude.<*> (x Data..:? "operand")
+            Prelude.<*> (x Data..:? "operator")
+            Prelude.<*> (x Data..:? "or" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Predicate where
+  hashWithSalt _salt Predicate' {..} =
+    _salt
+      `Prelude.hashWithSalt` and
+      `Prelude.hashWithSalt` field
+      `Prelude.hashWithSalt` operand
+      `Prelude.hashWithSalt` operator
+      `Prelude.hashWithSalt` or
+
+instance Prelude.NFData Predicate where
+  rnf Predicate' {..} =
+    Prelude.rnf and
+      `Prelude.seq` Prelude.rnf field
+      `Prelude.seq` Prelude.rnf operand
+      `Prelude.seq` Prelude.rnf operator
+      `Prelude.seq` Prelude.rnf or
+
+instance Data.ToJSON Predicate where
+  toJSON Predicate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("and" Data..=) Prelude.<$> and,
+            ("field" Data..=) Prelude.<$> field,
+            ("operand" Data..=) Prelude.<$> operand,
+            ("operator" Data..=) Prelude.<$> operator,
+            ("or" Data..=) Prelude.<$> or
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/PutMetadataFlagBody.hs b/gen/Amazonka/AmplifyUiBuilder/Types/PutMetadataFlagBody.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/PutMetadataFlagBody.hs
@@ -0,0 +1,68 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.PutMetadataFlagBody
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.PutMetadataFlagBody where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Stores the metadata information about a feature on a form or view.
+--
+-- /See:/ 'newPutMetadataFlagBody' smart constructor.
+data PutMetadataFlagBody = PutMetadataFlagBody'
+  { -- | The new information to store.
+    newValue' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutMetadataFlagBody' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'newValue'', 'putMetadataFlagBody_newValue' - The new information to store.
+newPutMetadataFlagBody ::
+  -- | 'newValue''
+  Prelude.Text ->
+  PutMetadataFlagBody
+newPutMetadataFlagBody pNewValue_ =
+  PutMetadataFlagBody' {newValue' = pNewValue_}
+
+-- | The new information to store.
+putMetadataFlagBody_newValue :: Lens.Lens' PutMetadataFlagBody Prelude.Text
+putMetadataFlagBody_newValue = Lens.lens (\PutMetadataFlagBody' {newValue'} -> newValue') (\s@PutMetadataFlagBody' {} a -> s {newValue' = a} :: PutMetadataFlagBody)
+
+instance Prelude.Hashable PutMetadataFlagBody where
+  hashWithSalt _salt PutMetadataFlagBody' {..} =
+    _salt `Prelude.hashWithSalt` newValue'
+
+instance Prelude.NFData PutMetadataFlagBody where
+  rnf PutMetadataFlagBody' {..} = Prelude.rnf newValue'
+
+instance Data.ToJSON PutMetadataFlagBody where
+  toJSON PutMetadataFlagBody' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("newValue" Data..= newValue')]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/RefreshTokenRequestBody.hs b/gen/Amazonka/AmplifyUiBuilder/Types/RefreshTokenRequestBody.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/RefreshTokenRequestBody.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.RefreshTokenRequestBody
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.RefreshTokenRequestBody where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes a refresh token.
+--
+-- /See:/ 'newRefreshTokenRequestBody' smart constructor.
+data RefreshTokenRequestBody = RefreshTokenRequestBody'
+  { -- | The token to use to refresh a previously issued access token that might
+    -- have expired.
+    token :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'RefreshTokenRequestBody' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'token', 'refreshTokenRequestBody_token' - The token to use to refresh a previously issued access token that might
+-- have expired.
+newRefreshTokenRequestBody ::
+  -- | 'token'
+  Prelude.Text ->
+  RefreshTokenRequestBody
+newRefreshTokenRequestBody pToken_ =
+  RefreshTokenRequestBody'
+    { token =
+        Data._Sensitive Lens.# pToken_
+    }
+
+-- | The token to use to refresh a previously issued access token that might
+-- have expired.
+refreshTokenRequestBody_token :: Lens.Lens' RefreshTokenRequestBody Prelude.Text
+refreshTokenRequestBody_token = Lens.lens (\RefreshTokenRequestBody' {token} -> token) (\s@RefreshTokenRequestBody' {} a -> s {token = a} :: RefreshTokenRequestBody) Prelude.. Data._Sensitive
+
+instance Prelude.Hashable RefreshTokenRequestBody where
+  hashWithSalt _salt RefreshTokenRequestBody' {..} =
+    _salt `Prelude.hashWithSalt` token
+
+instance Prelude.NFData RefreshTokenRequestBody where
+  rnf RefreshTokenRequestBody' {..} = Prelude.rnf token
+
+instance Data.ToJSON RefreshTokenRequestBody where
+  toJSON RefreshTokenRequestBody' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("token" Data..= token)]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/SectionalElement.hs b/gen/Amazonka/AmplifyUiBuilder/Types/SectionalElement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/SectionalElement.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.SectionalElement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.SectionalElement where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldPosition
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Stores the configuration information for a visual helper element for a
+-- form. A sectional element can be a header, a text block, or a divider.
+-- These elements are static and not associated with any data.
+--
+-- /See:/ 'newSectionalElement' smart constructor.
+data SectionalElement = SectionalElement'
+  { -- | Specifies the size of the font for a @Heading@ sectional element. Valid
+    -- values are @1 | 2 | 3 | 4 | 5 | 6@.
+    level :: Prelude.Maybe Prelude.Int,
+    -- | Specifies the orientation for a @Divider@ sectional element. Valid
+    -- values are @horizontal@ or @vertical@.
+    orientation :: Prelude.Maybe Prelude.Text,
+    -- | Specifies the position of the text in a field for a @Text@ sectional
+    -- element.
+    position :: Prelude.Maybe FieldPosition,
+    -- | The text for a @Text@ sectional element.
+    text :: Prelude.Maybe Prelude.Text,
+    -- | The type of sectional element. Valid values are @Heading@, @Text@, and
+    -- @Divider@.
+    type' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SectionalElement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'level', 'sectionalElement_level' - Specifies the size of the font for a @Heading@ sectional element. Valid
+-- values are @1 | 2 | 3 | 4 | 5 | 6@.
+--
+-- 'orientation', 'sectionalElement_orientation' - Specifies the orientation for a @Divider@ sectional element. Valid
+-- values are @horizontal@ or @vertical@.
+--
+-- 'position', 'sectionalElement_position' - Specifies the position of the text in a field for a @Text@ sectional
+-- element.
+--
+-- 'text', 'sectionalElement_text' - The text for a @Text@ sectional element.
+--
+-- 'type'', 'sectionalElement_type' - The type of sectional element. Valid values are @Heading@, @Text@, and
+-- @Divider@.
+newSectionalElement ::
+  -- | 'type''
+  Prelude.Text ->
+  SectionalElement
+newSectionalElement pType_ =
+  SectionalElement'
+    { level = Prelude.Nothing,
+      orientation = Prelude.Nothing,
+      position = Prelude.Nothing,
+      text = Prelude.Nothing,
+      type' = pType_
+    }
+
+-- | Specifies the size of the font for a @Heading@ sectional element. Valid
+-- values are @1 | 2 | 3 | 4 | 5 | 6@.
+sectionalElement_level :: Lens.Lens' SectionalElement (Prelude.Maybe Prelude.Int)
+sectionalElement_level = Lens.lens (\SectionalElement' {level} -> level) (\s@SectionalElement' {} a -> s {level = a} :: SectionalElement)
+
+-- | Specifies the orientation for a @Divider@ sectional element. Valid
+-- values are @horizontal@ or @vertical@.
+sectionalElement_orientation :: Lens.Lens' SectionalElement (Prelude.Maybe Prelude.Text)
+sectionalElement_orientation = Lens.lens (\SectionalElement' {orientation} -> orientation) (\s@SectionalElement' {} a -> s {orientation = a} :: SectionalElement)
+
+-- | Specifies the position of the text in a field for a @Text@ sectional
+-- element.
+sectionalElement_position :: Lens.Lens' SectionalElement (Prelude.Maybe FieldPosition)
+sectionalElement_position = Lens.lens (\SectionalElement' {position} -> position) (\s@SectionalElement' {} a -> s {position = a} :: SectionalElement)
+
+-- | The text for a @Text@ sectional element.
+sectionalElement_text :: Lens.Lens' SectionalElement (Prelude.Maybe Prelude.Text)
+sectionalElement_text = Lens.lens (\SectionalElement' {text} -> text) (\s@SectionalElement' {} a -> s {text = a} :: SectionalElement)
+
+-- | The type of sectional element. Valid values are @Heading@, @Text@, and
+-- @Divider@.
+sectionalElement_type :: Lens.Lens' SectionalElement Prelude.Text
+sectionalElement_type = Lens.lens (\SectionalElement' {type'} -> type') (\s@SectionalElement' {} a -> s {type' = a} :: SectionalElement)
+
+instance Data.FromJSON SectionalElement where
+  parseJSON =
+    Data.withObject
+      "SectionalElement"
+      ( \x ->
+          SectionalElement'
+            Prelude.<$> (x Data..:? "level")
+            Prelude.<*> (x Data..:? "orientation")
+            Prelude.<*> (x Data..:? "position")
+            Prelude.<*> (x Data..:? "text")
+            Prelude.<*> (x Data..: "type")
+      )
+
+instance Prelude.Hashable SectionalElement where
+  hashWithSalt _salt SectionalElement' {..} =
+    _salt
+      `Prelude.hashWithSalt` level
+      `Prelude.hashWithSalt` orientation
+      `Prelude.hashWithSalt` position
+      `Prelude.hashWithSalt` text
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData SectionalElement where
+  rnf SectionalElement' {..} =
+    Prelude.rnf level
+      `Prelude.seq` Prelude.rnf orientation
+      `Prelude.seq` Prelude.rnf position
+      `Prelude.seq` Prelude.rnf text
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToJSON SectionalElement where
+  toJSON SectionalElement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("level" Data..=) Prelude.<$> level,
+            ("orientation" Data..=) Prelude.<$> orientation,
+            ("position" Data..=) Prelude.<$> position,
+            ("text" Data..=) Prelude.<$> text,
+            Prelude.Just ("type" Data..= type')
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/SortDirection.hs b/gen/Amazonka/AmplifyUiBuilder/Types/SortDirection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/SortDirection.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.SortDirection
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.SortDirection
+  ( SortDirection
+      ( ..,
+        SortDirection_ASC,
+        SortDirection_DESC
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SortDirection = SortDirection'
+  { fromSortDirection ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SortDirection_ASC :: SortDirection
+pattern SortDirection_ASC = SortDirection' "ASC"
+
+pattern SortDirection_DESC :: SortDirection
+pattern SortDirection_DESC = SortDirection' "DESC"
+
+{-# COMPLETE
+  SortDirection_ASC,
+  SortDirection_DESC,
+  SortDirection'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/SortProperty.hs b/gen/Amazonka/AmplifyUiBuilder/Types/SortProperty.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/SortProperty.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.SortProperty
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.SortProperty where
+
+import Amazonka.AmplifyUiBuilder.Types.SortDirection
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes how to sort the data that you bind to a component.
+--
+-- /See:/ 'newSortProperty' smart constructor.
+data SortProperty = SortProperty'
+  { -- | The direction of the sort, either ascending or descending.
+    direction :: SortDirection,
+    -- | The field to perform the sort on.
+    field :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SortProperty' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'direction', 'sortProperty_direction' - The direction of the sort, either ascending or descending.
+--
+-- 'field', 'sortProperty_field' - The field to perform the sort on.
+newSortProperty ::
+  -- | 'direction'
+  SortDirection ->
+  -- | 'field'
+  Prelude.Text ->
+  SortProperty
+newSortProperty pDirection_ pField_ =
+  SortProperty'
+    { direction = pDirection_,
+      field = pField_
+    }
+
+-- | The direction of the sort, either ascending or descending.
+sortProperty_direction :: Lens.Lens' SortProperty SortDirection
+sortProperty_direction = Lens.lens (\SortProperty' {direction} -> direction) (\s@SortProperty' {} a -> s {direction = a} :: SortProperty)
+
+-- | The field to perform the sort on.
+sortProperty_field :: Lens.Lens' SortProperty Prelude.Text
+sortProperty_field = Lens.lens (\SortProperty' {field} -> field) (\s@SortProperty' {} a -> s {field = a} :: SortProperty)
+
+instance Data.FromJSON SortProperty where
+  parseJSON =
+    Data.withObject
+      "SortProperty"
+      ( \x ->
+          SortProperty'
+            Prelude.<$> (x Data..: "direction")
+            Prelude.<*> (x Data..: "field")
+      )
+
+instance Prelude.Hashable SortProperty where
+  hashWithSalt _salt SortProperty' {..} =
+    _salt
+      `Prelude.hashWithSalt` direction
+      `Prelude.hashWithSalt` field
+
+instance Prelude.NFData SortProperty where
+  rnf SortProperty' {..} =
+    Prelude.rnf direction
+      `Prelude.seq` Prelude.rnf field
+
+instance Data.ToJSON SortProperty where
+  toJSON SortProperty' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("direction" Data..= direction),
+            Prelude.Just ("field" Data..= field)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/Theme.hs b/gen/Amazonka/AmplifyUiBuilder/Types/Theme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/Theme.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.Theme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.Theme where
+
+import Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A theme is a collection of style settings that apply globally to the
+-- components associated with an Amplify application.
+--
+-- /See:/ 'newTheme' smart constructor.
+data Theme = Theme'
+  { -- | The time that the theme was modified.
+    modifiedAt :: Prelude.Maybe Data.ISO8601,
+    -- | Describes the properties that can be overriden to customize a theme.
+    overrides :: Prelude.Maybe [ThemeValues],
+    -- | One or more key-value pairs to use when tagging the theme.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The unique ID for the Amplify app associated with the theme.
+    appId :: Prelude.Text,
+    -- | The time that the theme was created.
+    createdAt :: Data.ISO8601,
+    -- | The name of the backend environment that is a part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The ID for the theme.
+    id :: Prelude.Text,
+    -- | The name of the theme.
+    name :: Prelude.Text,
+    -- | A list of key-value pairs that defines the properties of the theme.
+    values :: [ThemeValues]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Theme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'modifiedAt', 'theme_modifiedAt' - The time that the theme was modified.
+--
+-- 'overrides', 'theme_overrides' - Describes the properties that can be overriden to customize a theme.
+--
+-- 'tags', 'theme_tags' - One or more key-value pairs to use when tagging the theme.
+--
+-- 'appId', 'theme_appId' - The unique ID for the Amplify app associated with the theme.
+--
+-- 'createdAt', 'theme_createdAt' - The time that the theme was created.
+--
+-- 'environmentName', 'theme_environmentName' - The name of the backend environment that is a part of the Amplify app.
+--
+-- 'id', 'theme_id' - The ID for the theme.
+--
+-- 'name', 'theme_name' - The name of the theme.
+--
+-- 'values', 'theme_values' - A list of key-value pairs that defines the properties of the theme.
+newTheme ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'createdAt'
+  Prelude.UTCTime ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  Theme
+newTheme
+  pAppId_
+  pCreatedAt_
+  pEnvironmentName_
+  pId_
+  pName_ =
+    Theme'
+      { modifiedAt = Prelude.Nothing,
+        overrides = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        appId = pAppId_,
+        createdAt = Data._Time Lens.# pCreatedAt_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        name = pName_,
+        values = Prelude.mempty
+      }
+
+-- | The time that the theme was modified.
+theme_modifiedAt :: Lens.Lens' Theme (Prelude.Maybe Prelude.UTCTime)
+theme_modifiedAt = Lens.lens (\Theme' {modifiedAt} -> modifiedAt) (\s@Theme' {} a -> s {modifiedAt = a} :: Theme) Prelude.. Lens.mapping Data._Time
+
+-- | Describes the properties that can be overriden to customize a theme.
+theme_overrides :: Lens.Lens' Theme (Prelude.Maybe [ThemeValues])
+theme_overrides = Lens.lens (\Theme' {overrides} -> overrides) (\s@Theme' {} a -> s {overrides = a} :: Theme) Prelude.. Lens.mapping Lens.coerced
+
+-- | One or more key-value pairs to use when tagging the theme.
+theme_tags :: Lens.Lens' Theme (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+theme_tags = Lens.lens (\Theme' {tags} -> tags) (\s@Theme' {} a -> s {tags = a} :: Theme) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID for the Amplify app associated with the theme.
+theme_appId :: Lens.Lens' Theme Prelude.Text
+theme_appId = Lens.lens (\Theme' {appId} -> appId) (\s@Theme' {} a -> s {appId = a} :: Theme)
+
+-- | The time that the theme was created.
+theme_createdAt :: Lens.Lens' Theme Prelude.UTCTime
+theme_createdAt = Lens.lens (\Theme' {createdAt} -> createdAt) (\s@Theme' {} a -> s {createdAt = a} :: Theme) Prelude.. Data._Time
+
+-- | The name of the backend environment that is a part of the Amplify app.
+theme_environmentName :: Lens.Lens' Theme Prelude.Text
+theme_environmentName = Lens.lens (\Theme' {environmentName} -> environmentName) (\s@Theme' {} a -> s {environmentName = a} :: Theme)
+
+-- | The ID for the theme.
+theme_id :: Lens.Lens' Theme Prelude.Text
+theme_id = Lens.lens (\Theme' {id} -> id) (\s@Theme' {} a -> s {id = a} :: Theme)
+
+-- | The name of the theme.
+theme_name :: Lens.Lens' Theme Prelude.Text
+theme_name = Lens.lens (\Theme' {name} -> name) (\s@Theme' {} a -> s {name = a} :: Theme)
+
+-- | A list of key-value pairs that defines the properties of the theme.
+theme_values :: Lens.Lens' Theme [ThemeValues]
+theme_values = Lens.lens (\Theme' {values} -> values) (\s@Theme' {} a -> s {values = a} :: Theme) Prelude.. Lens.coerced
+
+instance Data.FromJSON Theme where
+  parseJSON =
+    Data.withObject
+      "Theme"
+      ( \x ->
+          Theme'
+            Prelude.<$> (x Data..:? "modifiedAt")
+            Prelude.<*> (x Data..:? "overrides" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "tags" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..: "appId")
+            Prelude.<*> (x Data..: "createdAt")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+            Prelude.<*> (x Data..:? "values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable Theme where
+  hashWithSalt _salt Theme' {..} =
+    _salt
+      `Prelude.hashWithSalt` modifiedAt
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` createdAt
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData Theme where
+  rnf Theme' {..} =
+    Prelude.rnf modifiedAt
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf createdAt
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf values
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ThemeSummary.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeSummary.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ThemeSummary
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ThemeSummary where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the basic information about a theme.
+--
+-- /See:/ 'newThemeSummary' smart constructor.
+data ThemeSummary = ThemeSummary'
+  { -- | The unique ID for the app associated with the theme summary.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The ID of the theme.
+    id :: Prelude.Text,
+    -- | The name of the theme.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThemeSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'themeSummary_appId' - The unique ID for the app associated with the theme summary.
+--
+-- 'environmentName', 'themeSummary_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'themeSummary_id' - The ID of the theme.
+--
+-- 'name', 'themeSummary_name' - The name of the theme.
+newThemeSummary ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  ThemeSummary
+newThemeSummary pAppId_ pEnvironmentName_ pId_ pName_ =
+  ThemeSummary'
+    { appId = pAppId_,
+      environmentName = pEnvironmentName_,
+      id = pId_,
+      name = pName_
+    }
+
+-- | The unique ID for the app associated with the theme summary.
+themeSummary_appId :: Lens.Lens' ThemeSummary Prelude.Text
+themeSummary_appId = Lens.lens (\ThemeSummary' {appId} -> appId) (\s@ThemeSummary' {} a -> s {appId = a} :: ThemeSummary)
+
+-- | The name of the backend environment that is part of the Amplify app.
+themeSummary_environmentName :: Lens.Lens' ThemeSummary Prelude.Text
+themeSummary_environmentName = Lens.lens (\ThemeSummary' {environmentName} -> environmentName) (\s@ThemeSummary' {} a -> s {environmentName = a} :: ThemeSummary)
+
+-- | The ID of the theme.
+themeSummary_id :: Lens.Lens' ThemeSummary Prelude.Text
+themeSummary_id = Lens.lens (\ThemeSummary' {id} -> id) (\s@ThemeSummary' {} a -> s {id = a} :: ThemeSummary)
+
+-- | The name of the theme.
+themeSummary_name :: Lens.Lens' ThemeSummary Prelude.Text
+themeSummary_name = Lens.lens (\ThemeSummary' {name} -> name) (\s@ThemeSummary' {} a -> s {name = a} :: ThemeSummary)
+
+instance Data.FromJSON ThemeSummary where
+  parseJSON =
+    Data.withObject
+      "ThemeSummary"
+      ( \x ->
+          ThemeSummary'
+            Prelude.<$> (x Data..: "appId")
+            Prelude.<*> (x Data..: "environmentName")
+            Prelude.<*> (x Data..: "id")
+            Prelude.<*> (x Data..: "name")
+      )
+
+instance Prelude.Hashable ThemeSummary where
+  hashWithSalt _salt ThemeSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ThemeSummary where
+  rnf ThemeSummary' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs
@@ -0,0 +1,94 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ThemeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ThemeValue where
+
+import {-# SOURCE #-} Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Describes the configuration of a theme\'s properties.
+--
+-- /See:/ 'newThemeValue' smart constructor.
+data ThemeValue = ThemeValue'
+  { -- | A list of key-value pairs that define the theme\'s properties.
+    children :: Prelude.Maybe [ThemeValues],
+    -- | The value of a theme property.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThemeValue' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'children', 'themeValue_children' - A list of key-value pairs that define the theme\'s properties.
+--
+-- 'value', 'themeValue_value' - The value of a theme property.
+newThemeValue ::
+  ThemeValue
+newThemeValue =
+  ThemeValue'
+    { children = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | A list of key-value pairs that define the theme\'s properties.
+themeValue_children :: Lens.Lens' ThemeValue (Prelude.Maybe [ThemeValues])
+themeValue_children = Lens.lens (\ThemeValue' {children} -> children) (\s@ThemeValue' {} a -> s {children = a} :: ThemeValue) Prelude.. Lens.mapping Lens.coerced
+
+-- | The value of a theme property.
+themeValue_value :: Lens.Lens' ThemeValue (Prelude.Maybe Prelude.Text)
+themeValue_value = Lens.lens (\ThemeValue' {value} -> value) (\s@ThemeValue' {} a -> s {value = a} :: ThemeValue)
+
+instance Data.FromJSON ThemeValue where
+  parseJSON =
+    Data.withObject
+      "ThemeValue"
+      ( \x ->
+          ThemeValue'
+            Prelude.<$> (x Data..:? "children" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ThemeValue where
+  hashWithSalt _salt ThemeValue' {..} =
+    _salt
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ThemeValue where
+  rnf ThemeValue' {..} =
+    Prelude.rnf children
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ThemeValue where
+  toJSON ThemeValue' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("children" Data..=) Prelude.<$> children,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs-boot b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValue.hs-boot
@@ -0,0 +1,33 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ThemeValue
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ThemeValue where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data ThemeValue
+
+instance Prelude.Eq ThemeValue
+
+instance Prelude.Read ThemeValue
+
+instance Prelude.Show ThemeValue
+
+instance Prelude.Generic ThemeValue
+
+instance Data.ToJSON ThemeValue
+
+instance Data.FromJSON ThemeValue
+
+instance Prelude.NFData ThemeValue
+
+instance Prelude.Hashable ThemeValue
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ThemeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ThemeValues where
+
+import {-# SOURCE #-} Amazonka.AmplifyUiBuilder.Types.ThemeValue
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A key-value pair that defines a property of a theme.
+--
+-- /See:/ 'newThemeValues' smart constructor.
+data ThemeValues = ThemeValues'
+  { -- | The name of the property.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The value of the property.
+    value :: Prelude.Maybe ThemeValue
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ThemeValues' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'themeValues_key' - The name of the property.
+--
+-- 'value', 'themeValues_value' - The value of the property.
+newThemeValues ::
+  ThemeValues
+newThemeValues =
+  ThemeValues'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The name of the property.
+themeValues_key :: Lens.Lens' ThemeValues (Prelude.Maybe Prelude.Text)
+themeValues_key = Lens.lens (\ThemeValues' {key} -> key) (\s@ThemeValues' {} a -> s {key = a} :: ThemeValues)
+
+-- | The value of the property.
+themeValues_value :: Lens.Lens' ThemeValues (Prelude.Maybe ThemeValue)
+themeValues_value = Lens.lens (\ThemeValues' {value} -> value) (\s@ThemeValues' {} a -> s {value = a} :: ThemeValues)
+
+instance Data.FromJSON ThemeValues where
+  parseJSON =
+    Data.withObject
+      "ThemeValues"
+      ( \x ->
+          ThemeValues'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable ThemeValues where
+  hashWithSalt _salt ThemeValues' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ThemeValues where
+  rnf ThemeValues' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ThemeValues where
+  toJSON ThemeValues' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs-boot b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs-boot
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ThemeValues.hs-boot
@@ -0,0 +1,33 @@
+{-# OPTIONS_GHC -Wno-missing-methods #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ThemeValues
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ThemeValues where
+
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+data ThemeValues
+
+instance Prelude.Eq ThemeValues
+
+instance Prelude.Read ThemeValues
+
+instance Prelude.Show ThemeValues
+
+instance Prelude.Generic ThemeValues
+
+instance Data.ToJSON ThemeValues
+
+instance Data.FromJSON ThemeValues
+
+instance Prelude.NFData ThemeValues
+
+instance Prelude.Hashable ThemeValues
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/TokenProviders.hs b/gen/Amazonka/AmplifyUiBuilder/Types/TokenProviders.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/TokenProviders.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.TokenProviders
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.TokenProviders
+  ( TokenProviders
+      ( ..,
+        TokenProviders_Figma
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TokenProviders = TokenProviders'
+  { fromTokenProviders ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TokenProviders_Figma :: TokenProviders
+pattern TokenProviders_Figma = TokenProviders' "figma"
+
+{-# COMPLETE
+  TokenProviders_Figma,
+  TokenProviders'
+  #-}
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/UpdateComponentData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateComponentData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateComponentData.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.UpdateComponentData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.UpdateComponentData where
+
+import Amazonka.AmplifyUiBuilder.Types.ComponentBindingPropertiesValue
+import Amazonka.AmplifyUiBuilder.Types.ComponentChild
+import Amazonka.AmplifyUiBuilder.Types.ComponentDataConfiguration
+import Amazonka.AmplifyUiBuilder.Types.ComponentEvent
+import Amazonka.AmplifyUiBuilder.Types.ComponentProperty
+import Amazonka.AmplifyUiBuilder.Types.ComponentVariant
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates and saves all of the information about a component, based on
+-- component ID.
+--
+-- /See:/ 'newUpdateComponentData' smart constructor.
+data UpdateComponentData = UpdateComponentData'
+  { -- | The data binding information for the component\'s properties.
+    bindingProperties :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue),
+    -- | The components that are instances of the main component.
+    children :: Prelude.Maybe [ComponentChild],
+    -- | The configuration for binding a component\'s properties to a data model.
+    -- Use this for a collection component.
+    collectionProperties :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration),
+    -- | The type of the component. This can be an Amplify custom UI component or
+    -- another custom component.
+    componentType :: Prelude.Maybe Prelude.Text,
+    -- | The event configuration for the component. Use for the workflow feature
+    -- in Amplify Studio that allows you to bind events and actions to
+    -- components.
+    events :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent),
+    -- | The unique ID of the component to update.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the component to update.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Describes the properties that can be overriden to customize the
+    -- component.
+    overrides :: Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)),
+    -- | Describes the component\'s properties.
+    properties :: Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentProperty),
+    -- | The schema version of the component when it was imported.
+    schemaVersion :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID of the component in its original source system, such as
+    -- Figma.
+    sourceId :: Prelude.Maybe Prelude.Text,
+    -- | A list of the unique variants of the main component being updated.
+    variants :: Prelude.Maybe [ComponentVariant]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateComponentData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bindingProperties', 'updateComponentData_bindingProperties' - The data binding information for the component\'s properties.
+--
+-- 'children', 'updateComponentData_children' - The components that are instances of the main component.
+--
+-- 'collectionProperties', 'updateComponentData_collectionProperties' - The configuration for binding a component\'s properties to a data model.
+-- Use this for a collection component.
+--
+-- 'componentType', 'updateComponentData_componentType' - The type of the component. This can be an Amplify custom UI component or
+-- another custom component.
+--
+-- 'events', 'updateComponentData_events' - The event configuration for the component. Use for the workflow feature
+-- in Amplify Studio that allows you to bind events and actions to
+-- components.
+--
+-- 'id', 'updateComponentData_id' - The unique ID of the component to update.
+--
+-- 'name', 'updateComponentData_name' - The name of the component to update.
+--
+-- 'overrides', 'updateComponentData_overrides' - Describes the properties that can be overriden to customize the
+-- component.
+--
+-- 'properties', 'updateComponentData_properties' - Describes the component\'s properties.
+--
+-- 'schemaVersion', 'updateComponentData_schemaVersion' - The schema version of the component when it was imported.
+--
+-- 'sourceId', 'updateComponentData_sourceId' - The unique ID of the component in its original source system, such as
+-- Figma.
+--
+-- 'variants', 'updateComponentData_variants' - A list of the unique variants of the main component being updated.
+newUpdateComponentData ::
+  UpdateComponentData
+newUpdateComponentData =
+  UpdateComponentData'
+    { bindingProperties =
+        Prelude.Nothing,
+      children = Prelude.Nothing,
+      collectionProperties = Prelude.Nothing,
+      componentType = Prelude.Nothing,
+      events = Prelude.Nothing,
+      id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      overrides = Prelude.Nothing,
+      properties = Prelude.Nothing,
+      schemaVersion = Prelude.Nothing,
+      sourceId = Prelude.Nothing,
+      variants = Prelude.Nothing
+    }
+
+-- | The data binding information for the component\'s properties.
+updateComponentData_bindingProperties :: Lens.Lens' UpdateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentBindingPropertiesValue))
+updateComponentData_bindingProperties = Lens.lens (\UpdateComponentData' {bindingProperties} -> bindingProperties) (\s@UpdateComponentData' {} a -> s {bindingProperties = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The components that are instances of the main component.
+updateComponentData_children :: Lens.Lens' UpdateComponentData (Prelude.Maybe [ComponentChild])
+updateComponentData_children = Lens.lens (\UpdateComponentData' {children} -> children) (\s@UpdateComponentData' {} a -> s {children = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for binding a component\'s properties to a data model.
+-- Use this for a collection component.
+updateComponentData_collectionProperties :: Lens.Lens' UpdateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentDataConfiguration))
+updateComponentData_collectionProperties = Lens.lens (\UpdateComponentData' {collectionProperties} -> collectionProperties) (\s@UpdateComponentData' {} a -> s {collectionProperties = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The type of the component. This can be an Amplify custom UI component or
+-- another custom component.
+updateComponentData_componentType :: Lens.Lens' UpdateComponentData (Prelude.Maybe Prelude.Text)
+updateComponentData_componentType = Lens.lens (\UpdateComponentData' {componentType} -> componentType) (\s@UpdateComponentData' {} a -> s {componentType = a} :: UpdateComponentData)
+
+-- | The event configuration for the component. Use for the workflow feature
+-- in Amplify Studio that allows you to bind events and actions to
+-- components.
+updateComponentData_events :: Lens.Lens' UpdateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentEvent))
+updateComponentData_events = Lens.lens (\UpdateComponentData' {events} -> events) (\s@UpdateComponentData' {} a -> s {events = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The unique ID of the component to update.
+updateComponentData_id :: Lens.Lens' UpdateComponentData (Prelude.Maybe Prelude.Text)
+updateComponentData_id = Lens.lens (\UpdateComponentData' {id} -> id) (\s@UpdateComponentData' {} a -> s {id = a} :: UpdateComponentData)
+
+-- | The name of the component to update.
+updateComponentData_name :: Lens.Lens' UpdateComponentData (Prelude.Maybe Prelude.Text)
+updateComponentData_name = Lens.lens (\UpdateComponentData' {name} -> name) (\s@UpdateComponentData' {} a -> s {name = a} :: UpdateComponentData)
+
+-- | Describes the properties that can be overriden to customize the
+-- component.
+updateComponentData_overrides :: Lens.Lens' UpdateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text (Prelude.HashMap Prelude.Text Prelude.Text)))
+updateComponentData_overrides = Lens.lens (\UpdateComponentData' {overrides} -> overrides) (\s@UpdateComponentData' {} a -> s {overrides = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Describes the component\'s properties.
+updateComponentData_properties :: Lens.Lens' UpdateComponentData (Prelude.Maybe (Prelude.HashMap Prelude.Text ComponentProperty))
+updateComponentData_properties = Lens.lens (\UpdateComponentData' {properties} -> properties) (\s@UpdateComponentData' {} a -> s {properties = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The schema version of the component when it was imported.
+updateComponentData_schemaVersion :: Lens.Lens' UpdateComponentData (Prelude.Maybe Prelude.Text)
+updateComponentData_schemaVersion = Lens.lens (\UpdateComponentData' {schemaVersion} -> schemaVersion) (\s@UpdateComponentData' {} a -> s {schemaVersion = a} :: UpdateComponentData)
+
+-- | The unique ID of the component in its original source system, such as
+-- Figma.
+updateComponentData_sourceId :: Lens.Lens' UpdateComponentData (Prelude.Maybe Prelude.Text)
+updateComponentData_sourceId = Lens.lens (\UpdateComponentData' {sourceId} -> sourceId) (\s@UpdateComponentData' {} a -> s {sourceId = a} :: UpdateComponentData)
+
+-- | A list of the unique variants of the main component being updated.
+updateComponentData_variants :: Lens.Lens' UpdateComponentData (Prelude.Maybe [ComponentVariant])
+updateComponentData_variants = Lens.lens (\UpdateComponentData' {variants} -> variants) (\s@UpdateComponentData' {} a -> s {variants = a} :: UpdateComponentData) Prelude.. Lens.mapping Lens.coerced
+
+instance Prelude.Hashable UpdateComponentData where
+  hashWithSalt _salt UpdateComponentData' {..} =
+    _salt
+      `Prelude.hashWithSalt` bindingProperties
+      `Prelude.hashWithSalt` children
+      `Prelude.hashWithSalt` collectionProperties
+      `Prelude.hashWithSalt` componentType
+      `Prelude.hashWithSalt` events
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` properties
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sourceId
+      `Prelude.hashWithSalt` variants
+
+instance Prelude.NFData UpdateComponentData where
+  rnf UpdateComponentData' {..} =
+    Prelude.rnf bindingProperties
+      `Prelude.seq` Prelude.rnf children
+      `Prelude.seq` Prelude.rnf collectionProperties
+      `Prelude.seq` Prelude.rnf componentType
+      `Prelude.seq` Prelude.rnf events
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf properties
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sourceId
+      `Prelude.seq` Prelude.rnf variants
+
+instance Data.ToJSON UpdateComponentData where
+  toJSON UpdateComponentData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bindingProperties" Data..=)
+              Prelude.<$> bindingProperties,
+            ("children" Data..=) Prelude.<$> children,
+            ("collectionProperties" Data..=)
+              Prelude.<$> collectionProperties,
+            ("componentType" Data..=) Prelude.<$> componentType,
+            ("events" Data..=) Prelude.<$> events,
+            ("id" Data..=) Prelude.<$> id,
+            ("name" Data..=) Prelude.<$> name,
+            ("overrides" Data..=) Prelude.<$> overrides,
+            ("properties" Data..=) Prelude.<$> properties,
+            ("schemaVersion" Data..=) Prelude.<$> schemaVersion,
+            ("sourceId" Data..=) Prelude.<$> sourceId,
+            ("variants" Data..=) Prelude.<$> variants
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/UpdateFormData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateFormData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateFormData.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.UpdateFormData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.UpdateFormData where
+
+import Amazonka.AmplifyUiBuilder.Types.FieldConfig
+import Amazonka.AmplifyUiBuilder.Types.FormActionType
+import Amazonka.AmplifyUiBuilder.Types.FormCTA
+import Amazonka.AmplifyUiBuilder.Types.FormDataTypeConfig
+import Amazonka.AmplifyUiBuilder.Types.FormStyle
+import Amazonka.AmplifyUiBuilder.Types.SectionalElement
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Updates and saves all of the information about a form, based on form ID.
+--
+-- /See:/ 'newUpdateFormData' smart constructor.
+data UpdateFormData = UpdateFormData'
+  { -- | The @FormCTA@ object that stores the call to action configuration for
+    -- the form.
+    cta :: Prelude.Maybe FormCTA,
+    -- | The type of data source to use to create the form.
+    dataType :: Prelude.Maybe FormDataTypeConfig,
+    -- | The configuration information for the form\'s fields.
+    fields :: Prelude.Maybe (Prelude.HashMap Prelude.Text FieldConfig),
+    -- | Specifies whether to perform a create or update action on the form.
+    formActionType :: Prelude.Maybe FormActionType,
+    -- | The name of the form.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The schema version of the form.
+    schemaVersion :: Prelude.Maybe Prelude.Text,
+    -- | The configuration information for the visual helper elements for the
+    -- form. These elements are not associated with any data.
+    sectionalElements :: Prelude.Maybe (Prelude.HashMap Prelude.Text SectionalElement),
+    -- | The configuration for the form\'s style.
+    style :: Prelude.Maybe FormStyle
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFormData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'cta', 'updateFormData_cta' - The @FormCTA@ object that stores the call to action configuration for
+-- the form.
+--
+-- 'dataType', 'updateFormData_dataType' - The type of data source to use to create the form.
+--
+-- 'fields', 'updateFormData_fields' - The configuration information for the form\'s fields.
+--
+-- 'formActionType', 'updateFormData_formActionType' - Specifies whether to perform a create or update action on the form.
+--
+-- 'name', 'updateFormData_name' - The name of the form.
+--
+-- 'schemaVersion', 'updateFormData_schemaVersion' - The schema version of the form.
+--
+-- 'sectionalElements', 'updateFormData_sectionalElements' - The configuration information for the visual helper elements for the
+-- form. These elements are not associated with any data.
+--
+-- 'style', 'updateFormData_style' - The configuration for the form\'s style.
+newUpdateFormData ::
+  UpdateFormData
+newUpdateFormData =
+  UpdateFormData'
+    { cta = Prelude.Nothing,
+      dataType = Prelude.Nothing,
+      fields = Prelude.Nothing,
+      formActionType = Prelude.Nothing,
+      name = Prelude.Nothing,
+      schemaVersion = Prelude.Nothing,
+      sectionalElements = Prelude.Nothing,
+      style = Prelude.Nothing
+    }
+
+-- | The @FormCTA@ object that stores the call to action configuration for
+-- the form.
+updateFormData_cta :: Lens.Lens' UpdateFormData (Prelude.Maybe FormCTA)
+updateFormData_cta = Lens.lens (\UpdateFormData' {cta} -> cta) (\s@UpdateFormData' {} a -> s {cta = a} :: UpdateFormData)
+
+-- | The type of data source to use to create the form.
+updateFormData_dataType :: Lens.Lens' UpdateFormData (Prelude.Maybe FormDataTypeConfig)
+updateFormData_dataType = Lens.lens (\UpdateFormData' {dataType} -> dataType) (\s@UpdateFormData' {} a -> s {dataType = a} :: UpdateFormData)
+
+-- | The configuration information for the form\'s fields.
+updateFormData_fields :: Lens.Lens' UpdateFormData (Prelude.Maybe (Prelude.HashMap Prelude.Text FieldConfig))
+updateFormData_fields = Lens.lens (\UpdateFormData' {fields} -> fields) (\s@UpdateFormData' {} a -> s {fields = a} :: UpdateFormData) Prelude.. Lens.mapping Lens.coerced
+
+-- | Specifies whether to perform a create or update action on the form.
+updateFormData_formActionType :: Lens.Lens' UpdateFormData (Prelude.Maybe FormActionType)
+updateFormData_formActionType = Lens.lens (\UpdateFormData' {formActionType} -> formActionType) (\s@UpdateFormData' {} a -> s {formActionType = a} :: UpdateFormData)
+
+-- | The name of the form.
+updateFormData_name :: Lens.Lens' UpdateFormData (Prelude.Maybe Prelude.Text)
+updateFormData_name = Lens.lens (\UpdateFormData' {name} -> name) (\s@UpdateFormData' {} a -> s {name = a} :: UpdateFormData)
+
+-- | The schema version of the form.
+updateFormData_schemaVersion :: Lens.Lens' UpdateFormData (Prelude.Maybe Prelude.Text)
+updateFormData_schemaVersion = Lens.lens (\UpdateFormData' {schemaVersion} -> schemaVersion) (\s@UpdateFormData' {} a -> s {schemaVersion = a} :: UpdateFormData)
+
+-- | The configuration information for the visual helper elements for the
+-- form. These elements are not associated with any data.
+updateFormData_sectionalElements :: Lens.Lens' UpdateFormData (Prelude.Maybe (Prelude.HashMap Prelude.Text SectionalElement))
+updateFormData_sectionalElements = Lens.lens (\UpdateFormData' {sectionalElements} -> sectionalElements) (\s@UpdateFormData' {} a -> s {sectionalElements = a} :: UpdateFormData) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for the form\'s style.
+updateFormData_style :: Lens.Lens' UpdateFormData (Prelude.Maybe FormStyle)
+updateFormData_style = Lens.lens (\UpdateFormData' {style} -> style) (\s@UpdateFormData' {} a -> s {style = a} :: UpdateFormData)
+
+instance Prelude.Hashable UpdateFormData where
+  hashWithSalt _salt UpdateFormData' {..} =
+    _salt
+      `Prelude.hashWithSalt` cta
+      `Prelude.hashWithSalt` dataType
+      `Prelude.hashWithSalt` fields
+      `Prelude.hashWithSalt` formActionType
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` schemaVersion
+      `Prelude.hashWithSalt` sectionalElements
+      `Prelude.hashWithSalt` style
+
+instance Prelude.NFData UpdateFormData where
+  rnf UpdateFormData' {..} =
+    Prelude.rnf cta
+      `Prelude.seq` Prelude.rnf dataType
+      `Prelude.seq` Prelude.rnf fields
+      `Prelude.seq` Prelude.rnf formActionType
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf schemaVersion
+      `Prelude.seq` Prelude.rnf sectionalElements
+      `Prelude.seq` Prelude.rnf style
+
+instance Data.ToJSON UpdateFormData where
+  toJSON UpdateFormData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("cta" Data..=) Prelude.<$> cta,
+            ("dataType" Data..=) Prelude.<$> dataType,
+            ("fields" Data..=) Prelude.<$> fields,
+            ("formActionType" Data..=)
+              Prelude.<$> formActionType,
+            ("name" Data..=) Prelude.<$> name,
+            ("schemaVersion" Data..=) Prelude.<$> schemaVersion,
+            ("sectionalElements" Data..=)
+              Prelude.<$> sectionalElements,
+            ("style" Data..=) Prelude.<$> style
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/UpdateThemeData.hs b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateThemeData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/UpdateThemeData.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.UpdateThemeData
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.UpdateThemeData where
+
+import Amazonka.AmplifyUiBuilder.Types.ThemeValues
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Saves the data binding information for a theme.
+--
+-- /See:/ 'newUpdateThemeData' smart constructor.
+data UpdateThemeData = UpdateThemeData'
+  { -- | The unique ID of the theme to update.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The name of the theme to update.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Describes the properties that can be overriden to customize the theme.
+    overrides :: Prelude.Maybe [ThemeValues],
+    -- | A list of key-value pairs that define the theme\'s properties.
+    values :: [ThemeValues]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateThemeData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'id', 'updateThemeData_id' - The unique ID of the theme to update.
+--
+-- 'name', 'updateThemeData_name' - The name of the theme to update.
+--
+-- 'overrides', 'updateThemeData_overrides' - Describes the properties that can be overriden to customize the theme.
+--
+-- 'values', 'updateThemeData_values' - A list of key-value pairs that define the theme\'s properties.
+newUpdateThemeData ::
+  UpdateThemeData
+newUpdateThemeData =
+  UpdateThemeData'
+    { id = Prelude.Nothing,
+      name = Prelude.Nothing,
+      overrides = Prelude.Nothing,
+      values = Prelude.mempty
+    }
+
+-- | The unique ID of the theme to update.
+updateThemeData_id :: Lens.Lens' UpdateThemeData (Prelude.Maybe Prelude.Text)
+updateThemeData_id = Lens.lens (\UpdateThemeData' {id} -> id) (\s@UpdateThemeData' {} a -> s {id = a} :: UpdateThemeData)
+
+-- | The name of the theme to update.
+updateThemeData_name :: Lens.Lens' UpdateThemeData (Prelude.Maybe Prelude.Text)
+updateThemeData_name = Lens.lens (\UpdateThemeData' {name} -> name) (\s@UpdateThemeData' {} a -> s {name = a} :: UpdateThemeData)
+
+-- | Describes the properties that can be overriden to customize the theme.
+updateThemeData_overrides :: Lens.Lens' UpdateThemeData (Prelude.Maybe [ThemeValues])
+updateThemeData_overrides = Lens.lens (\UpdateThemeData' {overrides} -> overrides) (\s@UpdateThemeData' {} a -> s {overrides = a} :: UpdateThemeData) Prelude.. Lens.mapping Lens.coerced
+
+-- | A list of key-value pairs that define the theme\'s properties.
+updateThemeData_values :: Lens.Lens' UpdateThemeData [ThemeValues]
+updateThemeData_values = Lens.lens (\UpdateThemeData' {values} -> values) (\s@UpdateThemeData' {} a -> s {values = a} :: UpdateThemeData) Prelude.. Lens.coerced
+
+instance Prelude.Hashable UpdateThemeData where
+  hashWithSalt _salt UpdateThemeData' {..} =
+    _salt
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` overrides
+      `Prelude.hashWithSalt` values
+
+instance Prelude.NFData UpdateThemeData where
+  rnf UpdateThemeData' {..} =
+    Prelude.rnf id
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf overrides
+      `Prelude.seq` Prelude.rnf values
+
+instance Data.ToJSON UpdateThemeData where
+  toJSON UpdateThemeData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("id" Data..=) Prelude.<$> id,
+            ("name" Data..=) Prelude.<$> name,
+            ("overrides" Data..=) Prelude.<$> overrides,
+            Prelude.Just ("values" Data..= values)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ValueMapping.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ValueMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ValueMapping.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ValueMapping
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ValueMapping where
+
+import Amazonka.AmplifyUiBuilder.Types.FormInputValueProperty
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Associates a complex object with a display value. Use @ValueMapping@ to
+-- store how to represent complex objects when they are displayed.
+--
+-- /See:/ 'newValueMapping' smart constructor.
+data ValueMapping = ValueMapping'
+  { -- | The value to display for the complex object.
+    displayValue :: Prelude.Maybe FormInputValueProperty,
+    -- | The complex object.
+    value :: FormInputValueProperty
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValueMapping' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'displayValue', 'valueMapping_displayValue' - The value to display for the complex object.
+--
+-- 'value', 'valueMapping_value' - The complex object.
+newValueMapping ::
+  -- | 'value'
+  FormInputValueProperty ->
+  ValueMapping
+newValueMapping pValue_ =
+  ValueMapping'
+    { displayValue = Prelude.Nothing,
+      value = pValue_
+    }
+
+-- | The value to display for the complex object.
+valueMapping_displayValue :: Lens.Lens' ValueMapping (Prelude.Maybe FormInputValueProperty)
+valueMapping_displayValue = Lens.lens (\ValueMapping' {displayValue} -> displayValue) (\s@ValueMapping' {} a -> s {displayValue = a} :: ValueMapping)
+
+-- | The complex object.
+valueMapping_value :: Lens.Lens' ValueMapping FormInputValueProperty
+valueMapping_value = Lens.lens (\ValueMapping' {value} -> value) (\s@ValueMapping' {} a -> s {value = a} :: ValueMapping)
+
+instance Data.FromJSON ValueMapping where
+  parseJSON =
+    Data.withObject
+      "ValueMapping"
+      ( \x ->
+          ValueMapping'
+            Prelude.<$> (x Data..:? "displayValue")
+            Prelude.<*> (x Data..: "value")
+      )
+
+instance Prelude.Hashable ValueMapping where
+  hashWithSalt _salt ValueMapping' {..} =
+    _salt
+      `Prelude.hashWithSalt` displayValue
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ValueMapping where
+  rnf ValueMapping' {..} =
+    Prelude.rnf displayValue
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON ValueMapping where
+  toJSON ValueMapping' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("displayValue" Data..=) Prelude.<$> displayValue,
+            Prelude.Just ("value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/Types/ValueMappings.hs b/gen/Amazonka/AmplifyUiBuilder/Types/ValueMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Types/ValueMappings.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Types.ValueMappings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Types.ValueMappings where
+
+import Amazonka.AmplifyUiBuilder.Types.ValueMapping
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents the data binding configuration for a value map.
+--
+-- /See:/ 'newValueMappings' smart constructor.
+data ValueMappings = ValueMappings'
+  { -- | The value and display value pairs.
+    values :: [ValueMapping]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValueMappings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'values', 'valueMappings_values' - The value and display value pairs.
+newValueMappings ::
+  ValueMappings
+newValueMappings =
+  ValueMappings' {values = Prelude.mempty}
+
+-- | The value and display value pairs.
+valueMappings_values :: Lens.Lens' ValueMappings [ValueMapping]
+valueMappings_values = Lens.lens (\ValueMappings' {values} -> values) (\s@ValueMappings' {} a -> s {values = a} :: ValueMappings) Prelude.. Lens.coerced
+
+instance Data.FromJSON ValueMappings where
+  parseJSON =
+    Data.withObject
+      "ValueMappings"
+      ( \x ->
+          ValueMappings'
+            Prelude.<$> (x Data..:? "values" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ValueMappings where
+  hashWithSalt _salt ValueMappings' {..} =
+    _salt `Prelude.hashWithSalt` values
+
+instance Prelude.NFData ValueMappings where
+  rnf ValueMappings' {..} = Prelude.rnf values
+
+instance Data.ToJSON ValueMappings where
+  toJSON ValueMappings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("values" Data..= values)]
+      )
diff --git a/gen/Amazonka/AmplifyUiBuilder/UpdateComponent.hs b/gen/Amazonka/AmplifyUiBuilder/UpdateComponent.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/UpdateComponent.hs
@@ -0,0 +1,231 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.UpdateComponent
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing component.
+module Amazonka.AmplifyUiBuilder.UpdateComponent
+  ( -- * Creating a Request
+    UpdateComponent (..),
+    newUpdateComponent,
+
+    -- * Request Lenses
+    updateComponent_clientToken,
+    updateComponent_appId,
+    updateComponent_environmentName,
+    updateComponent_id,
+    updateComponent_updatedComponent,
+
+    -- * Destructuring the Response
+    UpdateComponentResponse (..),
+    newUpdateComponentResponse,
+
+    -- * Response Lenses
+    updateComponentResponse_entity,
+    updateComponentResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateComponent' smart constructor.
+data UpdateComponent = UpdateComponent'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID for the component.
+    id :: Prelude.Text,
+    -- | The configuration of the updated component.
+    updatedComponent :: UpdateComponentData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateComponent' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateComponent_clientToken' - The unique client token.
+--
+-- 'appId', 'updateComponent_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'updateComponent_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'updateComponent_id' - The unique ID for the component.
+--
+-- 'updatedComponent', 'updateComponent_updatedComponent' - The configuration of the updated component.
+newUpdateComponent ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'updatedComponent'
+  UpdateComponentData ->
+  UpdateComponent
+newUpdateComponent
+  pAppId_
+  pEnvironmentName_
+  pId_
+  pUpdatedComponent_ =
+    UpdateComponent'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        updatedComponent = pUpdatedComponent_
+      }
+
+-- | The unique client token.
+updateComponent_clientToken :: Lens.Lens' UpdateComponent (Prelude.Maybe Prelude.Text)
+updateComponent_clientToken = Lens.lens (\UpdateComponent' {clientToken} -> clientToken) (\s@UpdateComponent' {} a -> s {clientToken = a} :: UpdateComponent)
+
+-- | The unique ID for the Amplify app.
+updateComponent_appId :: Lens.Lens' UpdateComponent Prelude.Text
+updateComponent_appId = Lens.lens (\UpdateComponent' {appId} -> appId) (\s@UpdateComponent' {} a -> s {appId = a} :: UpdateComponent)
+
+-- | The name of the backend environment that is part of the Amplify app.
+updateComponent_environmentName :: Lens.Lens' UpdateComponent Prelude.Text
+updateComponent_environmentName = Lens.lens (\UpdateComponent' {environmentName} -> environmentName) (\s@UpdateComponent' {} a -> s {environmentName = a} :: UpdateComponent)
+
+-- | The unique ID for the component.
+updateComponent_id :: Lens.Lens' UpdateComponent Prelude.Text
+updateComponent_id = Lens.lens (\UpdateComponent' {id} -> id) (\s@UpdateComponent' {} a -> s {id = a} :: UpdateComponent)
+
+-- | The configuration of the updated component.
+updateComponent_updatedComponent :: Lens.Lens' UpdateComponent UpdateComponentData
+updateComponent_updatedComponent = Lens.lens (\UpdateComponent' {updatedComponent} -> updatedComponent) (\s@UpdateComponent' {} a -> s {updatedComponent = a} :: UpdateComponent)
+
+instance Core.AWSRequest UpdateComponent where
+  type
+    AWSResponse UpdateComponent =
+      UpdateComponentResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateComponentResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateComponent where
+  hashWithSalt _salt UpdateComponent' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` updatedComponent
+
+instance Prelude.NFData UpdateComponent where
+  rnf UpdateComponent' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedComponent
+
+instance Data.ToHeaders UpdateComponent where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateComponent where
+  toJSON UpdateComponent' {..} =
+    Data.toJSON updatedComponent
+
+instance Data.ToPath UpdateComponent where
+  toPath UpdateComponent' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/components/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery UpdateComponent where
+  toQuery UpdateComponent' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newUpdateComponentResponse' smart constructor.
+data UpdateComponentResponse = UpdateComponentResponse'
+  { -- | Describes the configuration of the updated component.
+    entity :: Prelude.Maybe Component,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateComponentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'updateComponentResponse_entity' - Describes the configuration of the updated component.
+--
+-- 'httpStatus', 'updateComponentResponse_httpStatus' - The response's http status code.
+newUpdateComponentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateComponentResponse
+newUpdateComponentResponse pHttpStatus_ =
+  UpdateComponentResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the updated component.
+updateComponentResponse_entity :: Lens.Lens' UpdateComponentResponse (Prelude.Maybe Component)
+updateComponentResponse_entity = Lens.lens (\UpdateComponentResponse' {entity} -> entity) (\s@UpdateComponentResponse' {} a -> s {entity = a} :: UpdateComponentResponse)
+
+-- | The response's http status code.
+updateComponentResponse_httpStatus :: Lens.Lens' UpdateComponentResponse Prelude.Int
+updateComponentResponse_httpStatus = Lens.lens (\UpdateComponentResponse' {httpStatus} -> httpStatus) (\s@UpdateComponentResponse' {} a -> s {httpStatus = a} :: UpdateComponentResponse)
+
+instance Prelude.NFData UpdateComponentResponse where
+  rnf UpdateComponentResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/UpdateForm.hs b/gen/Amazonka/AmplifyUiBuilder/UpdateForm.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/UpdateForm.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.UpdateForm
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing form.
+module Amazonka.AmplifyUiBuilder.UpdateForm
+  ( -- * Creating a Request
+    UpdateForm (..),
+    newUpdateForm,
+
+    -- * Request Lenses
+    updateForm_clientToken,
+    updateForm_appId,
+    updateForm_environmentName,
+    updateForm_id,
+    updateForm_updatedForm,
+
+    -- * Destructuring the Response
+    UpdateFormResponse (..),
+    newUpdateFormResponse,
+
+    -- * Response Lenses
+    updateFormResponse_entity,
+    updateFormResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateForm' smart constructor.
+data UpdateForm = UpdateForm'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID for the form.
+    id :: Prelude.Text,
+    -- | The request accepts the following data in JSON format.
+    updatedForm :: UpdateFormData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateForm' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateForm_clientToken' - The unique client token.
+--
+-- 'appId', 'updateForm_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'updateForm_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'updateForm_id' - The unique ID for the form.
+--
+-- 'updatedForm', 'updateForm_updatedForm' - The request accepts the following data in JSON format.
+newUpdateForm ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'updatedForm'
+  UpdateFormData ->
+  UpdateForm
+newUpdateForm
+  pAppId_
+  pEnvironmentName_
+  pId_
+  pUpdatedForm_ =
+    UpdateForm'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        updatedForm = pUpdatedForm_
+      }
+
+-- | The unique client token.
+updateForm_clientToken :: Lens.Lens' UpdateForm (Prelude.Maybe Prelude.Text)
+updateForm_clientToken = Lens.lens (\UpdateForm' {clientToken} -> clientToken) (\s@UpdateForm' {} a -> s {clientToken = a} :: UpdateForm)
+
+-- | The unique ID for the Amplify app.
+updateForm_appId :: Lens.Lens' UpdateForm Prelude.Text
+updateForm_appId = Lens.lens (\UpdateForm' {appId} -> appId) (\s@UpdateForm' {} a -> s {appId = a} :: UpdateForm)
+
+-- | The name of the backend environment that is part of the Amplify app.
+updateForm_environmentName :: Lens.Lens' UpdateForm Prelude.Text
+updateForm_environmentName = Lens.lens (\UpdateForm' {environmentName} -> environmentName) (\s@UpdateForm' {} a -> s {environmentName = a} :: UpdateForm)
+
+-- | The unique ID for the form.
+updateForm_id :: Lens.Lens' UpdateForm Prelude.Text
+updateForm_id = Lens.lens (\UpdateForm' {id} -> id) (\s@UpdateForm' {} a -> s {id = a} :: UpdateForm)
+
+-- | The request accepts the following data in JSON format.
+updateForm_updatedForm :: Lens.Lens' UpdateForm UpdateFormData
+updateForm_updatedForm = Lens.lens (\UpdateForm' {updatedForm} -> updatedForm) (\s@UpdateForm' {} a -> s {updatedForm = a} :: UpdateForm)
+
+instance Core.AWSRequest UpdateForm where
+  type AWSResponse UpdateForm = UpdateFormResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFormResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateForm where
+  hashWithSalt _salt UpdateForm' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` updatedForm
+
+instance Prelude.NFData UpdateForm where
+  rnf UpdateForm' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedForm
+
+instance Data.ToHeaders UpdateForm where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateForm where
+  toJSON UpdateForm' {..} = Data.toJSON updatedForm
+
+instance Data.ToPath UpdateForm where
+  toPath UpdateForm' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/forms/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery UpdateForm where
+  toQuery UpdateForm' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newUpdateFormResponse' smart constructor.
+data UpdateFormResponse = UpdateFormResponse'
+  { -- | Describes the configuration of the updated form.
+    entity :: Prelude.Maybe Form,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFormResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'updateFormResponse_entity' - Describes the configuration of the updated form.
+--
+-- 'httpStatus', 'updateFormResponse_httpStatus' - The response's http status code.
+newUpdateFormResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFormResponse
+newUpdateFormResponse pHttpStatus_ =
+  UpdateFormResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the updated form.
+updateFormResponse_entity :: Lens.Lens' UpdateFormResponse (Prelude.Maybe Form)
+updateFormResponse_entity = Lens.lens (\UpdateFormResponse' {entity} -> entity) (\s@UpdateFormResponse' {} a -> s {entity = a} :: UpdateFormResponse)
+
+-- | The response's http status code.
+updateFormResponse_httpStatus :: Lens.Lens' UpdateFormResponse Prelude.Int
+updateFormResponse_httpStatus = Lens.lens (\UpdateFormResponse' {httpStatus} -> httpStatus) (\s@UpdateFormResponse' {} a -> s {httpStatus = a} :: UpdateFormResponse)
+
+instance Prelude.NFData UpdateFormResponse where
+  rnf UpdateFormResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/UpdateTheme.hs b/gen/Amazonka/AmplifyUiBuilder/UpdateTheme.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/UpdateTheme.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.UpdateTheme
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing theme.
+module Amazonka.AmplifyUiBuilder.UpdateTheme
+  ( -- * Creating a Request
+    UpdateTheme (..),
+    newUpdateTheme,
+
+    -- * Request Lenses
+    updateTheme_clientToken,
+    updateTheme_appId,
+    updateTheme_environmentName,
+    updateTheme_id,
+    updateTheme_updatedTheme,
+
+    -- * Destructuring the Response
+    UpdateThemeResponse (..),
+    newUpdateThemeResponse,
+
+    -- * Response Lenses
+    updateThemeResponse_entity,
+    updateThemeResponse_httpStatus,
+  )
+where
+
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateTheme' smart constructor.
+data UpdateTheme = UpdateTheme'
+  { -- | The unique client token.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The unique ID for the Amplify app.
+    appId :: Prelude.Text,
+    -- | The name of the backend environment that is part of the Amplify app.
+    environmentName :: Prelude.Text,
+    -- | The unique ID for the theme.
+    id :: Prelude.Text,
+    -- | The configuration of the updated theme.
+    updatedTheme :: UpdateThemeData
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateTheme' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'updateTheme_clientToken' - The unique client token.
+--
+-- 'appId', 'updateTheme_appId' - The unique ID for the Amplify app.
+--
+-- 'environmentName', 'updateTheme_environmentName' - The name of the backend environment that is part of the Amplify app.
+--
+-- 'id', 'updateTheme_id' - The unique ID for the theme.
+--
+-- 'updatedTheme', 'updateTheme_updatedTheme' - The configuration of the updated theme.
+newUpdateTheme ::
+  -- | 'appId'
+  Prelude.Text ->
+  -- | 'environmentName'
+  Prelude.Text ->
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'updatedTheme'
+  UpdateThemeData ->
+  UpdateTheme
+newUpdateTheme
+  pAppId_
+  pEnvironmentName_
+  pId_
+  pUpdatedTheme_ =
+    UpdateTheme'
+      { clientToken = Prelude.Nothing,
+        appId = pAppId_,
+        environmentName = pEnvironmentName_,
+        id = pId_,
+        updatedTheme = pUpdatedTheme_
+      }
+
+-- | The unique client token.
+updateTheme_clientToken :: Lens.Lens' UpdateTheme (Prelude.Maybe Prelude.Text)
+updateTheme_clientToken = Lens.lens (\UpdateTheme' {clientToken} -> clientToken) (\s@UpdateTheme' {} a -> s {clientToken = a} :: UpdateTheme)
+
+-- | The unique ID for the Amplify app.
+updateTheme_appId :: Lens.Lens' UpdateTheme Prelude.Text
+updateTheme_appId = Lens.lens (\UpdateTheme' {appId} -> appId) (\s@UpdateTheme' {} a -> s {appId = a} :: UpdateTheme)
+
+-- | The name of the backend environment that is part of the Amplify app.
+updateTheme_environmentName :: Lens.Lens' UpdateTheme Prelude.Text
+updateTheme_environmentName = Lens.lens (\UpdateTheme' {environmentName} -> environmentName) (\s@UpdateTheme' {} a -> s {environmentName = a} :: UpdateTheme)
+
+-- | The unique ID for the theme.
+updateTheme_id :: Lens.Lens' UpdateTheme Prelude.Text
+updateTheme_id = Lens.lens (\UpdateTheme' {id} -> id) (\s@UpdateTheme' {} a -> s {id = a} :: UpdateTheme)
+
+-- | The configuration of the updated theme.
+updateTheme_updatedTheme :: Lens.Lens' UpdateTheme UpdateThemeData
+updateTheme_updatedTheme = Lens.lens (\UpdateTheme' {updatedTheme} -> updatedTheme) (\s@UpdateTheme' {} a -> s {updatedTheme = a} :: UpdateTheme)
+
+instance Core.AWSRequest UpdateTheme where
+  type AWSResponse UpdateTheme = UpdateThemeResponse
+  request overrides =
+    Request.patchJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateThemeResponse'
+            Prelude.<$> (Data.eitherParseJSON x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateTheme where
+  hashWithSalt _salt UpdateTheme' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` environmentName
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` updatedTheme
+
+instance Prelude.NFData UpdateTheme where
+  rnf UpdateTheme' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf environmentName
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf updatedTheme
+
+instance Data.ToHeaders UpdateTheme where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateTheme where
+  toJSON UpdateTheme' {..} = Data.toJSON updatedTheme
+
+instance Data.ToPath UpdateTheme where
+  toPath UpdateTheme' {..} =
+    Prelude.mconcat
+      [ "/app/",
+        Data.toBS appId,
+        "/environment/",
+        Data.toBS environmentName,
+        "/themes/",
+        Data.toBS id
+      ]
+
+instance Data.ToQuery UpdateTheme where
+  toQuery UpdateTheme' {..} =
+    Prelude.mconcat ["clientToken" Data.=: clientToken]
+
+-- | /See:/ 'newUpdateThemeResponse' smart constructor.
+data UpdateThemeResponse = UpdateThemeResponse'
+  { -- | Describes the configuration of the updated theme.
+    entity :: Prelude.Maybe Theme,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateThemeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entity', 'updateThemeResponse_entity' - Describes the configuration of the updated theme.
+--
+-- 'httpStatus', 'updateThemeResponse_httpStatus' - The response's http status code.
+newUpdateThemeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateThemeResponse
+newUpdateThemeResponse pHttpStatus_ =
+  UpdateThemeResponse'
+    { entity = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Describes the configuration of the updated theme.
+updateThemeResponse_entity :: Lens.Lens' UpdateThemeResponse (Prelude.Maybe Theme)
+updateThemeResponse_entity = Lens.lens (\UpdateThemeResponse' {entity} -> entity) (\s@UpdateThemeResponse' {} a -> s {entity = a} :: UpdateThemeResponse)
+
+-- | The response's http status code.
+updateThemeResponse_httpStatus :: Lens.Lens' UpdateThemeResponse Prelude.Int
+updateThemeResponse_httpStatus = Lens.lens (\UpdateThemeResponse' {httpStatus} -> httpStatus) (\s@UpdateThemeResponse' {} a -> s {httpStatus = a} :: UpdateThemeResponse)
+
+instance Prelude.NFData UpdateThemeResponse where
+  rnf UpdateThemeResponse' {..} =
+    Prelude.rnf entity
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AmplifyUiBuilder/Waiters.hs b/gen/Amazonka/AmplifyUiBuilder/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AmplifyUiBuilder/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AmplifyUiBuilder.Waiters
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AmplifyUiBuilder.Waiters where
+
+import Amazonka.AmplifyUiBuilder.Lens
+import Amazonka.AmplifyUiBuilder.Types
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,23 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Main (main) where
+
+import Test.Amazonka.AmplifyUiBuilder
+import Test.Amazonka.AmplifyUiBuilder.Internal
+import Test.Tasty
+
+main :: IO ()
+main =
+  defaultMain $
+    testGroup
+      "AmplifyUiBuilder"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/Amazonka/AmplifyUiBuilder.hs b/test/Test/Amazonka/AmplifyUiBuilder.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AmplifyUiBuilder.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AmplifyUiBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.AmplifyUiBuilder
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AmplifyUiBuilder/Internal.hs b/test/Test/Amazonka/AmplifyUiBuilder/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AmplifyUiBuilder/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AmplifyUiBuilder.Internal
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.AmplifyUiBuilder.Internal where
diff --git a/test/Test/Amazonka/Gen/AmplifyUiBuilder.hs b/test/Test/Amazonka/Gen/AmplifyUiBuilder.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AmplifyUiBuilder.hs
@@ -0,0 +1,478 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.Amazonka.Gen.AmplifyUiBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Test.Amazonka.Gen.AmplifyUiBuilder where
+
+import Amazonka.AmplifyUiBuilder
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AmplifyUiBuilder.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestCreateComponent $
+--             newCreateComponent
+--
+--         , requestCreateForm $
+--             newCreateForm
+--
+--         , requestCreateTheme $
+--             newCreateTheme
+--
+--         , requestDeleteComponent $
+--             newDeleteComponent
+--
+--         , requestDeleteForm $
+--             newDeleteForm
+--
+--         , requestDeleteTheme $
+--             newDeleteTheme
+--
+--         , requestExchangeCodeForToken $
+--             newExchangeCodeForToken
+--
+--         , requestExportComponents $
+--             newExportComponents
+--
+--         , requestExportForms $
+--             newExportForms
+--
+--         , requestExportThemes $
+--             newExportThemes
+--
+--         , requestGetComponent $
+--             newGetComponent
+--
+--         , requestGetForm $
+--             newGetForm
+--
+--         , requestGetMetadata $
+--             newGetMetadata
+--
+--         , requestGetTheme $
+--             newGetTheme
+--
+--         , requestListComponents $
+--             newListComponents
+--
+--         , requestListForms $
+--             newListForms
+--
+--         , requestListThemes $
+--             newListThemes
+--
+--         , requestPutMetadataFlag $
+--             newPutMetadataFlag
+--
+--         , requestRefreshToken $
+--             newRefreshToken
+--
+--         , requestUpdateComponent $
+--             newUpdateComponent
+--
+--         , requestUpdateForm $
+--             newUpdateForm
+--
+--         , requestUpdateTheme $
+--             newUpdateTheme
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateComponent $
+--             newCreateComponentResponse
+--
+--         , responseCreateForm $
+--             newCreateFormResponse
+--
+--         , responseCreateTheme $
+--             newCreateThemeResponse
+--
+--         , responseDeleteComponent $
+--             newDeleteComponentResponse
+--
+--         , responseDeleteForm $
+--             newDeleteFormResponse
+--
+--         , responseDeleteTheme $
+--             newDeleteThemeResponse
+--
+--         , responseExchangeCodeForToken $
+--             newExchangeCodeForTokenResponse
+--
+--         , responseExportComponents $
+--             newExportComponentsResponse
+--
+--         , responseExportForms $
+--             newExportFormsResponse
+--
+--         , responseExportThemes $
+--             newExportThemesResponse
+--
+--         , responseGetComponent $
+--             newGetComponentResponse
+--
+--         , responseGetForm $
+--             newGetFormResponse
+--
+--         , responseGetMetadata $
+--             newGetMetadataResponse
+--
+--         , responseGetTheme $
+--             newGetThemeResponse
+--
+--         , responseListComponents $
+--             newListComponentsResponse
+--
+--         , responseListForms $
+--             newListFormsResponse
+--
+--         , responseListThemes $
+--             newListThemesResponse
+--
+--         , responsePutMetadataFlag $
+--             newPutMetadataFlagResponse
+--
+--         , responseRefreshToken $
+--             newRefreshTokenResponse
+--
+--         , responseUpdateComponent $
+--             newUpdateComponentResponse
+--
+--         , responseUpdateForm $
+--             newUpdateFormResponse
+--
+--         , responseUpdateTheme $
+--             newUpdateThemeResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateComponent :: CreateComponent -> TestTree
+requestCreateComponent =
+  req
+    "CreateComponent"
+    "fixture/CreateComponent.yaml"
+
+requestCreateForm :: CreateForm -> TestTree
+requestCreateForm =
+  req
+    "CreateForm"
+    "fixture/CreateForm.yaml"
+
+requestCreateTheme :: CreateTheme -> TestTree
+requestCreateTheme =
+  req
+    "CreateTheme"
+    "fixture/CreateTheme.yaml"
+
+requestDeleteComponent :: DeleteComponent -> TestTree
+requestDeleteComponent =
+  req
+    "DeleteComponent"
+    "fixture/DeleteComponent.yaml"
+
+requestDeleteForm :: DeleteForm -> TestTree
+requestDeleteForm =
+  req
+    "DeleteForm"
+    "fixture/DeleteForm.yaml"
+
+requestDeleteTheme :: DeleteTheme -> TestTree
+requestDeleteTheme =
+  req
+    "DeleteTheme"
+    "fixture/DeleteTheme.yaml"
+
+requestExchangeCodeForToken :: ExchangeCodeForToken -> TestTree
+requestExchangeCodeForToken =
+  req
+    "ExchangeCodeForToken"
+    "fixture/ExchangeCodeForToken.yaml"
+
+requestExportComponents :: ExportComponents -> TestTree
+requestExportComponents =
+  req
+    "ExportComponents"
+    "fixture/ExportComponents.yaml"
+
+requestExportForms :: ExportForms -> TestTree
+requestExportForms =
+  req
+    "ExportForms"
+    "fixture/ExportForms.yaml"
+
+requestExportThemes :: ExportThemes -> TestTree
+requestExportThemes =
+  req
+    "ExportThemes"
+    "fixture/ExportThemes.yaml"
+
+requestGetComponent :: GetComponent -> TestTree
+requestGetComponent =
+  req
+    "GetComponent"
+    "fixture/GetComponent.yaml"
+
+requestGetForm :: GetForm -> TestTree
+requestGetForm =
+  req
+    "GetForm"
+    "fixture/GetForm.yaml"
+
+requestGetMetadata :: GetMetadata -> TestTree
+requestGetMetadata =
+  req
+    "GetMetadata"
+    "fixture/GetMetadata.yaml"
+
+requestGetTheme :: GetTheme -> TestTree
+requestGetTheme =
+  req
+    "GetTheme"
+    "fixture/GetTheme.yaml"
+
+requestListComponents :: ListComponents -> TestTree
+requestListComponents =
+  req
+    "ListComponents"
+    "fixture/ListComponents.yaml"
+
+requestListForms :: ListForms -> TestTree
+requestListForms =
+  req
+    "ListForms"
+    "fixture/ListForms.yaml"
+
+requestListThemes :: ListThemes -> TestTree
+requestListThemes =
+  req
+    "ListThemes"
+    "fixture/ListThemes.yaml"
+
+requestPutMetadataFlag :: PutMetadataFlag -> TestTree
+requestPutMetadataFlag =
+  req
+    "PutMetadataFlag"
+    "fixture/PutMetadataFlag.yaml"
+
+requestRefreshToken :: RefreshToken -> TestTree
+requestRefreshToken =
+  req
+    "RefreshToken"
+    "fixture/RefreshToken.yaml"
+
+requestUpdateComponent :: UpdateComponent -> TestTree
+requestUpdateComponent =
+  req
+    "UpdateComponent"
+    "fixture/UpdateComponent.yaml"
+
+requestUpdateForm :: UpdateForm -> TestTree
+requestUpdateForm =
+  req
+    "UpdateForm"
+    "fixture/UpdateForm.yaml"
+
+requestUpdateTheme :: UpdateTheme -> TestTree
+requestUpdateTheme =
+  req
+    "UpdateTheme"
+    "fixture/UpdateTheme.yaml"
+
+-- Responses
+
+responseCreateComponent :: CreateComponentResponse -> TestTree
+responseCreateComponent =
+  res
+    "CreateComponentResponse"
+    "fixture/CreateComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateComponent)
+
+responseCreateForm :: CreateFormResponse -> TestTree
+responseCreateForm =
+  res
+    "CreateFormResponse"
+    "fixture/CreateFormResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateForm)
+
+responseCreateTheme :: CreateThemeResponse -> TestTree
+responseCreateTheme =
+  res
+    "CreateThemeResponse"
+    "fixture/CreateThemeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateTheme)
+
+responseDeleteComponent :: DeleteComponentResponse -> TestTree
+responseDeleteComponent =
+  res
+    "DeleteComponentResponse"
+    "fixture/DeleteComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteComponent)
+
+responseDeleteForm :: DeleteFormResponse -> TestTree
+responseDeleteForm =
+  res
+    "DeleteFormResponse"
+    "fixture/DeleteFormResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteForm)
+
+responseDeleteTheme :: DeleteThemeResponse -> TestTree
+responseDeleteTheme =
+  res
+    "DeleteThemeResponse"
+    "fixture/DeleteThemeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteTheme)
+
+responseExchangeCodeForToken :: ExchangeCodeForTokenResponse -> TestTree
+responseExchangeCodeForToken =
+  res
+    "ExchangeCodeForTokenResponse"
+    "fixture/ExchangeCodeForTokenResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExchangeCodeForToken)
+
+responseExportComponents :: ExportComponentsResponse -> TestTree
+responseExportComponents =
+  res
+    "ExportComponentsResponse"
+    "fixture/ExportComponentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportComponents)
+
+responseExportForms :: ExportFormsResponse -> TestTree
+responseExportForms =
+  res
+    "ExportFormsResponse"
+    "fixture/ExportFormsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportForms)
+
+responseExportThemes :: ExportThemesResponse -> TestTree
+responseExportThemes =
+  res
+    "ExportThemesResponse"
+    "fixture/ExportThemesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExportThemes)
+
+responseGetComponent :: GetComponentResponse -> TestTree
+responseGetComponent =
+  res
+    "GetComponentResponse"
+    "fixture/GetComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetComponent)
+
+responseGetForm :: GetFormResponse -> TestTree
+responseGetForm =
+  res
+    "GetFormResponse"
+    "fixture/GetFormResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetForm)
+
+responseGetMetadata :: GetMetadataResponse -> TestTree
+responseGetMetadata =
+  res
+    "GetMetadataResponse"
+    "fixture/GetMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetMetadata)
+
+responseGetTheme :: GetThemeResponse -> TestTree
+responseGetTheme =
+  res
+    "GetThemeResponse"
+    "fixture/GetThemeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetTheme)
+
+responseListComponents :: ListComponentsResponse -> TestTree
+responseListComponents =
+  res
+    "ListComponentsResponse"
+    "fixture/ListComponentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListComponents)
+
+responseListForms :: ListFormsResponse -> TestTree
+responseListForms =
+  res
+    "ListFormsResponse"
+    "fixture/ListFormsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListForms)
+
+responseListThemes :: ListThemesResponse -> TestTree
+responseListThemes =
+  res
+    "ListThemesResponse"
+    "fixture/ListThemesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListThemes)
+
+responsePutMetadataFlag :: PutMetadataFlagResponse -> TestTree
+responsePutMetadataFlag =
+  res
+    "PutMetadataFlagResponse"
+    "fixture/PutMetadataFlagResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutMetadataFlag)
+
+responseRefreshToken :: RefreshTokenResponse -> TestTree
+responseRefreshToken =
+  res
+    "RefreshTokenResponse"
+    "fixture/RefreshTokenResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy RefreshToken)
+
+responseUpdateComponent :: UpdateComponentResponse -> TestTree
+responseUpdateComponent =
+  res
+    "UpdateComponentResponse"
+    "fixture/UpdateComponentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateComponent)
+
+responseUpdateForm :: UpdateFormResponse -> TestTree
+responseUpdateForm =
+  res
+    "UpdateFormResponse"
+    "fixture/UpdateFormResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateForm)
+
+responseUpdateTheme :: UpdateThemeResponse -> TestTree
+responseUpdateTheme =
+  res
+    "UpdateThemeResponse"
+    "fixture/UpdateThemeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateTheme)
