# Generated by Django 4.0.10 on 2024-01-16 18:49

import django.core.validators
import django.db.models.deletion
from django.contrib.contenttypes.models import ContentType
from django.db import migrations, models, transaction

import baserow.contrib.builder.domains.models
import baserow.contrib.builder.elements.models
import baserow.contrib.builder.pages.validators
import baserow.core.fields
import baserow.core.formula.field
import baserow.core.mixins
from baserow.contrib.builder.domains.models import CustomDomain, Domain


# baserow.contrib.builder.migrations.0006_delete_all_pages
def delete_all_pages_0006_forward(apps, schema_editor):
    """
    We have to delete all existing pages because we set `/` as the default path for
    every existing page. The path needs to be unique, so if we have more than 1
    existing page in a builder this migration will fail.
    """

    Page = apps.get_model("builder", "Page")
    Page.objects.all().delete()


# baserow.contrib.builder.migrations.0008_change_page_params
def change_page_params_0008_forward(apps, schema_editor):
    Page = apps.get_model("builder", "Page")
    for page in Page.objects.all():
        old_path_params = page.path_params

        if isinstance(old_path_params, dict):
            page.path_params = [
                {"name": key, "type": value["param_type"]}
                for key, value in old_path_params.items()
            ]
            page.save()


# baserow.contrib.builder.migrations.0019_sub_domains
def sub_domains_0019():
    return baserow.contrib.builder.domains.models.get_default_domain_content_type().id


def get_default_domain_content_type():
    return ContentType.objects.get_for_model(CustomDomain)


# baserow.contrib.builder.migrations.0020_migrate_existing_domains
def migrate_existing_domains_0020_forward(apps, schema_editor):
    """
    This migration introduces polymorphism, so we need to decide which type of
    domain all the existing domains now become. In this case we are turning
    all the existing domains into custom domains.
    """

    with transaction.atomic():
        domains = Domain.objects.all()

        for domain in domains:
            domain.delete()
            CustomDomain.objects.create(
                domain_name=domain.domain_name,
                order=domain.order,
                builder=domain.builder,
            )


class Migration(migrations.Migration):
    replaces = [
        ("builder", "0001_initial"),
        ("builder", "0002_page"),
        ("builder", "0003_duplicatepagejob"),
        ("builder", "0004_element_headingelement_paragraphelement"),
        ("builder", "0005_domain"),
        ("builder", "0006_delete_all_pages"),
        ("builder", "0007_add_path_to_page"),
        ("builder", "0008_change_page_params"),
        ("builder", "0009_add_domain_publish"),
        ("builder", "0010_linkelement"),
        ("builder", "0011_synced_datetime_field"),
        ("builder", "0012_imageelement"),
        ("builder", "0013_datasource"),
        ("builder", "0014_initial_styling"),
        ("builder", "0015_inputtextelement"),
        ("builder", "0016_column_element"),
        ("builder", "0017_mainthemeconfigblock"),
        ("builder", "0018_buttonelement"),
        ("builder", "0019_sub_domains"),
        ("builder", "0020_migrate_existing_domains"),
        ("builder", "0021_alter_domain_content_type"),
        ("builder", "0022_collectionelementfield_tableelement"),
        ("builder", "0023_headingelement_font_color"),
        (
            "builder",
            "0024_builderworkflowaction_notificationworkflowaction_openpageworkflowaction",
        ),
        ("builder", "0025_tableelement_items_per_page"),
        ("builder", "0026_element_styling_properties"),
        ("builder", "0027_collectionelementfield_type"),
        ("builder", "0028_add_collection_field_config"),
        ("builder", "0029_inputtextelement_label"),
        ("builder", "0030_builderworkflowaction_order"),
        ("builder", "0031_formcontainerelement"),
        (
            "builder",
            "0032_localbaserowcreaterowworkflowaction_localbaserowupdaterowworkflowaction",
        ),
        ("builder", "0033_auto_20231215_1041"),
        ("builder", "0034_dropdownelement_dropdownelementoption"),
        ("builder", "0035_add_more_styles"),
        ("builder", "0036_checkboxelement"),
        ("builder", "0037_auto_20240111_1001"),
        ("builder", "0038_iframeelement"),
    ]

    initial = True

    dependencies = [
        ("contenttypes", "0002_remove_content_type_name"),
        ("core", "0042_add_ip_address_to_jobs"),
        ("core", "0070_integration_service"),
        ("core", "0067_alter_settings_track_workspace_usage"),
        ("core", "0077_blacklistedtoken"),
        ("core", "0068_add_user_profile_level_limits"),
    ]

    operations = [
        migrations.CreateModel(
            name="Builder",
            fields=[
                (
                    "application_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="core.application",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("core.application",),
        ),
        migrations.CreateModel(
            name="Page",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("created_on", models.DateTimeField(auto_now_add=True)),
                ("updated_on", models.DateTimeField(auto_now=True)),
                ("trashed", models.BooleanField(db_index=True, default=False)),
                ("order", models.PositiveIntegerField()),
                ("name", models.CharField(max_length=255)),
                (
                    "builder",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="builder.builder",
                    ),
                ),
            ],
            options={
                "ordering": ("order",),
                "unique_together": {("builder", "name")},
            },
            bases=(baserow.core.mixins.OrderableMixin, models.Model),
        ),
        migrations.CreateModel(
            name="DuplicatePageJob",
            fields=[
                (
                    "job_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="core.job",
                    ),
                ),
                (
                    "user_ip_address",
                    models.GenericIPAddressField(
                        help_text="The user IP address.", null=True
                    ),
                ),
                (
                    "user_websocket_id",
                    models.CharField(
                        help_text="The user websocket uuid needed to manage signals sent correctly.",
                        max_length=36,
                        null=True,
                    ),
                ),
                (
                    "user_session_id",
                    models.CharField(
                        help_text="The user session uuid needed for undo/redo functionality.",
                        max_length=36,
                        null=True,
                    ),
                ),
                (
                    "user_action_group_id",
                    models.CharField(
                        help_text="The user session uuid needed for undo/redo action group functionality.",
                        max_length=36,
                        null=True,
                    ),
                ),
                (
                    "duplicated_page",
                    models.OneToOneField(
                        help_text="The duplicated Baserow page.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="duplicated_from_jobs",
                        to="builder.page",
                    ),
                ),
                (
                    "original_page",
                    models.ForeignKey(
                        help_text="The baserow page to duplicate.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="duplicated_by_jobs",
                        to="builder.page",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("core.job", models.Model),
        ),
        migrations.CreateModel(
            name="Element",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("created_on", models.DateTimeField(auto_now_add=True)),
                ("updated_on", models.DateTimeField(auto_now=True)),
                ("trashed", models.BooleanField(db_index=True, default=False)),
                (
                    "order",
                    models.DecimalField(
                        decimal_places=20,
                        default=1,
                        editable=False,
                        help_text="Lowest first.",
                        max_digits=40,
                    ),
                ),
                (
                    "content_type",
                    models.ForeignKey(
                        on_delete=models.SET(
                            baserow.contrib.builder.elements.models.get_default_element_content_type
                        ),
                        related_name="page_elements",
                        to="contenttypes.contenttype",
                        verbose_name="content type",
                    ),
                ),
                (
                    "page",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, to="builder.page"
                    ),
                ),
            ],
            options={
                "ordering": ("order", "id"),
            },
            bases=(
                baserow.core.mixins.FractionOrderableMixin,
                baserow.core.mixins.PolymorphicContentTypeMixin,
                models.Model,
            ),
        ),
        migrations.CreateModel(
            name="HeadingElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                ("value", baserow.core.formula.field.FormulaField(default="")),
                (
                    "level",
                    models.IntegerField(
                        choices=[(1, "H1"), (2, "H2"), (3, "H3"), (4, "H4"), (5, "H5")],
                        default=1,
                        help_text="The level of the heading",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="ParagraphElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                ("value", baserow.core.formula.field.FormulaField(default="")),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="Domain",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("trashed", models.BooleanField(db_index=True, default=False)),
                ("order", models.PositiveIntegerField()),
                (
                    "domain_name",
                    models.CharField(
                        max_length=255,
                        unique=True,
                        validators=[
                            baserow.contrib.builder.domains.models.validate_domain
                        ],
                    ),
                ),
                (
                    "builder",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="builder.builder",
                    ),
                ),
            ],
            options={
                "ordering": ("order",),
            },
            bases=(baserow.core.mixins.OrderableMixin, models.Model),
        ),
        migrations.RunPython(
            code=delete_all_pages_0006_forward,
            reverse_code=django.db.migrations.operations.special.RunPython.noop,
        ),
        migrations.AddField(
            model_name="page",
            name="path",
            field=models.CharField(
                default="/",
                max_length=255,
                validators=[baserow.contrib.builder.pages.validators.path_validation],
            ),
            preserve_default=False,
        ),
        migrations.AddField(
            model_name="page",
            name="path_params",
            field=models.JSONField(default=dict),
        ),
        migrations.AlterUniqueTogether(
            name="page",
            unique_together={("builder", "path"), ("builder", "name")},
        ),
        migrations.RunPython(
            code=change_page_params_0008_forward,
            reverse_code=django.db.migrations.operations.special.RunPython.noop,
        ),
        migrations.AddField(
            model_name="domain",
            name="last_published",
            field=models.DateTimeField(
                default=None,
                help_text="Last publication date of this domain",
                null=True,
            ),
        ),
        migrations.AddField(
            model_name="domain",
            name="published_to",
            field=models.OneToOneField(
                help_text="The published builder.",
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="published_from",
                to="builder.builder",
            ),
        ),
        migrations.AlterField(
            model_name="domain",
            name="builder",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="domains",
                to="builder.builder",
            ),
        ),
        migrations.CreateModel(
            name="PublishDomainJob",
            fields=[
                (
                    "job_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="core.job",
                    ),
                ),
                (
                    "user_ip_address",
                    models.GenericIPAddressField(
                        help_text="The user IP address.", null=True
                    ),
                ),
                (
                    "domain",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="builder.domain",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("core.job", models.Model),
        ),
        migrations.CreateModel(
            name="LinkElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                ("value", baserow.core.formula.field.FormulaField(default="")),
                (
                    "navigation_type",
                    models.CharField(
                        choices=[("page", "Page"), ("custom", "Custom")],
                        default="page",
                        help_text="The navigation type.",
                        max_length=10,
                    ),
                ),
                (
                    "navigate_to_url",
                    baserow.core.formula.field.FormulaField(
                        default="",
                        help_text="If no page is selected, this indicate the destination of the link.",
                    ),
                ),
                (
                    "page_parameters",
                    models.JSONField(
                        default=list,
                        help_text="The parameters for each parameters of the selected page if any.",
                    ),
                ),
                (
                    "variant",
                    models.CharField(
                        choices=[("link", "Link"), ("button", "Button")],
                        default="link",
                        help_text="The variant of the link.",
                        max_length=10,
                    ),
                ),
                (
                    "target",
                    models.CharField(
                        choices=[("self", "Self"), ("blank", "Blank")],
                        default="self",
                        help_text="The target of the link when we click on it.",
                        max_length=10,
                    ),
                ),
                (
                    "width",
                    models.CharField(
                        choices=[("auto", "Auto"), ("full", "Full")],
                        default="auto",
                        max_length=10,
                    ),
                ),
                (
                    "alignment",
                    models.CharField(
                        choices=[
                            ("left", "Left"),
                            ("center", "Center"),
                            ("right", "Right"),
                        ],
                        default="left",
                        max_length=10,
                    ),
                ),
                (
                    "navigate_to_page",
                    models.ForeignKey(
                        help_text=(
                            "Destination page id for this link. If null then we use the navigate_to_url property instead.",
                        ),
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="builder.page",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.AlterField(
            model_name="element",
            name="updated_on",
            field=baserow.core.fields.SyncedDateTimeField(auto_now=True),
        ),
        migrations.AlterField(
            model_name="page",
            name="updated_on",
            field=baserow.core.fields.SyncedDateTimeField(auto_now=True),
        ),
        migrations.CreateModel(
            name="ImageElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "image_source_type",
                    models.CharField(
                        choices=[("upload", "Upload"), ("url", "Url")],
                        default="upload",
                        max_length=32,
                    ),
                ),
                (
                    "image_url",
                    models.URLField(
                        blank=True,
                        default="",
                        help_text="A link to the image file",
                        max_length=1000,
                    ),
                ),
                (
                    "alt_text",
                    models.TextField(
                        blank=True,
                        default="",
                        help_text="Text that is displayed when the image can't load",
                    ),
                ),
                (
                    "alignment",
                    models.CharField(
                        choices=[
                            ("left", "Left"),
                            ("center", "Center"),
                            ("right", "Right"),
                        ],
                        default="left",
                        max_length=10,
                    ),
                ),
                (
                    "image_file",
                    models.ForeignKey(
                        help_text="An image file uploaded by the user to be used by the element",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="image_element_image_file",
                        to="core.userfile",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="DataSource",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("trashed", models.BooleanField(db_index=True, default=False)),
                (
                    "name",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Human name for this data source.",
                        max_length=255,
                    ),
                ),
                (
                    "order",
                    models.DecimalField(
                        decimal_places=20,
                        default=1,
                        editable=False,
                        help_text="Lowest first.",
                        max_digits=40,
                    ),
                ),
                (
                    "page",
                    models.ForeignKey(
                        help_text="Page this data source is linked to.",
                        on_delete=django.db.models.deletion.CASCADE,
                        to="builder.page",
                    ),
                ),
                (
                    "service",
                    models.OneToOneField(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="data_source",
                        to="core.service",
                    ),
                ),
            ],
            options={
                "ordering": ("order", "id"),
                "unique_together": {("page", "name")},
            },
            bases=(baserow.core.mixins.FractionOrderableMixin, models.Model),
        ),
        migrations.AddField(
            model_name="element",
            name="style_padding_bottom",
            field=models.PositiveIntegerField(default=10),
        ),
        migrations.AddField(
            model_name="element",
            name="style_padding_top",
            field=models.PositiveIntegerField(default=10),
        ),
        migrations.CreateModel(
            name="InputTextElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "default_value",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="This text input's default value."
                    ),
                ),
                (
                    "required",
                    models.BooleanField(
                        default=False,
                        help_text="Whether this text input is a required field.",
                    ),
                ),
                (
                    "placeholder",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="The placeholder text which should be applied to the element.",
                        max_length=225,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="ColumnElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "column_amount",
                    models.IntegerField(
                        default=3,
                        help_text="The amount of columns inside this column element.",
                        validators=[
                            django.core.validators.MinValueValidator(
                                1, message="Value cannot be less than 0."
                            ),
                            django.core.validators.MaxValueValidator(
                                6, message="Value cannot be greater than 6."
                            ),
                        ],
                    ),
                ),
                (
                    "column_gap",
                    models.IntegerField(
                        default=30,
                        help_text="The amount of space between the columns.",
                        validators=[
                            django.core.validators.MinValueValidator(
                                0, message="Value cannot be less than 0."
                            ),
                            django.core.validators.MaxValueValidator(
                                2000, message="Value cannot be greater than 2000."
                            ),
                        ],
                    ),
                ),
                (
                    "alignment",
                    models.CharField(
                        choices=[
                            ("top", "Top"),
                            ("center", "Center"),
                            ("bottom", "Bottom"),
                        ],
                        default="top",
                        max_length=10,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.AddField(
            model_name="element",
            name="parent_element",
            field=models.ForeignKey(
                default=None,
                help_text="The parent element, if inside a container.",
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="children",
                to="builder.element",
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="place_in_container",
            field=models.CharField(
                blank=True,
                default=None,
                help_text="The place in the container.",
                max_length=255,
                null=True,
            ),
        ),
        migrations.CreateModel(
            name="MainThemeConfigBlock",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("primary_color", models.CharField(default="#5190efff", max_length=9)),
                (
                    "secondary_color",
                    models.CharField(default="#0eaa42ff", max_length=9),
                ),
                ("heading_1_font_size", models.SmallIntegerField(default=24)),
                (
                    "heading_1_color",
                    models.CharField(default="#070810ff", max_length=9),
                ),
                ("heading_2_font_size", models.SmallIntegerField(default=20)),
                (
                    "heading_2_color",
                    models.CharField(default="#070810ff", max_length=9),
                ),
                ("heading_3_font_size", models.SmallIntegerField(default=16)),
                (
                    "heading_3_color",
                    models.CharField(default="#070810ff", max_length=9),
                ),
                (
                    "builder",
                    baserow.core.fields.AutoOneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="%(class)s",
                        to="builder.builder",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
        ),
        migrations.CreateModel(
            name="ButtonElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "value",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="The caption of the button."
                    ),
                ),
                (
                    "width",
                    models.CharField(
                        choices=[("auto", "Auto"), ("full", "Full")],
                        default="auto",
                        max_length=10,
                    ),
                ),
                (
                    "alignment",
                    models.CharField(
                        choices=[
                            ("left", "Left"),
                            ("center", "Center"),
                            ("right", "Right"),
                        ],
                        default="left",
                        max_length=10,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="CustomDomain",
            fields=[
                (
                    "domain_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.domain",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.domain",),
        ),
        migrations.CreateModel(
            name="SubDomain",
            fields=[
                (
                    "domain_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.domain",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.domain",),
        ),
        migrations.AddField(
            model_name="domain",
            name="content_type",
            field=models.ForeignKey(
                default=sub_domains_0019,
                on_delete=models.SET(get_default_domain_content_type),
                related_name="builder_domains",
                to="contenttypes.contenttype",
                verbose_name="content type",
            ),
        ),
        migrations.RunPython(
            code=migrate_existing_domains_0020_forward,
            reverse_code=django.db.migrations.operations.special.RunPython.noop,
        ),
        migrations.AlterField(
            model_name="domain",
            name="content_type",
            field=models.ForeignKey(
                on_delete=models.SET(
                    baserow.contrib.builder.domains.models.get_default_domain_content_type
                ),
                related_name="builder_domains",
                to="contenttypes.contenttype",
                verbose_name="content type",
            ),
        ),
        migrations.AddField(
            model_name="headingelement",
            name="font_color",
            field=models.CharField(
                blank=True,
                default="default",
                help_text="The font color of the heading",
                max_length=20,
            ),
        ),
        migrations.CreateModel(
            name="BuilderWorkflowAction",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("created_on", models.DateTimeField(auto_now_add=True)),
                ("updated_on", baserow.core.fields.SyncedDateTimeField(auto_now=True)),
                (
                    "event",
                    models.CharField(
                        choices=[("click", "Click"), ("submit", "Submit")],
                        help_text="The event that triggers the execution",
                        max_length=30,
                    ),
                ),
                (
                    "content_type",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="builder_workflow_actions",
                        to="contenttypes.contenttype",
                        verbose_name="content type",
                    ),
                ),
                (
                    "element",
                    models.ForeignKey(
                        default=None,
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        to="builder.element",
                    ),
                ),
                (
                    "page",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE, to="builder.page"
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=(
                baserow.core.mixins.PolymorphicContentTypeMixin,
                baserow.core.mixins.OrderableMixin,
                models.Model,
                baserow.core.mixins.WithRegistry,
            ),
        ),
        migrations.AddField(
            model_name="builderworkflowaction",
            name="order",
            field=models.PositiveIntegerField(default=0),
            preserve_default=False,
        ),
        migrations.CreateModel(
            name="NotificationWorkflowAction",
            fields=[
                (
                    "builderworkflowaction_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.builderworkflowaction",
                    ),
                ),
                ("title", baserow.core.formula.field.FormulaField(default="")),
                ("description", baserow.core.formula.field.FormulaField(default="")),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.builderworkflowaction",),
        ),
        migrations.CreateModel(
            name="OpenPageWorkflowAction",
            fields=[
                (
                    "builderworkflowaction_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.builderworkflowaction",
                    ),
                ),
                ("url", baserow.core.formula.field.FormulaField(default="")),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.builderworkflowaction",),
        ),
        migrations.AddField(
            model_name="element",
            name="style_background",
            field=models.CharField(
                choices=[("none", "None"), ("color", "Color")],
                default="none",
                help_text="What type of background the element should have.",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_background_color",
            field=models.CharField(
                blank=True,
                default="#ffffffff",
                help_text="The background color if `style_background` is color.",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_bottom_color",
            field=models.CharField(
                blank=True,
                default="border",
                help_text="Bottom border color",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_bottom_size",
            field=models.PositiveIntegerField(
                default=0, help_text="Pixel height of the bottom border."
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_top_color",
            field=models.CharField(
                blank=True,
                default="border",
                help_text="Top border color.",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_top_size",
            field=models.PositiveIntegerField(
                default=0, help_text="Pixel height of the top border."
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_width",
            field=models.CharField(
                choices=[
                    ("full", "Full"),
                    ("normal", "Normal"),
                    ("medium", "Medium"),
                    ("small", "Small"),
                ],
                default="normal",
                help_text="Indicates the width of the element.",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="mainthemeconfigblock",
            name="border_color",
            field=models.CharField(default="#d7d8d9ff", max_length=9),
        ),
        migrations.AlterField(
            model_name="element",
            name="style_padding_bottom",
            field=models.PositiveIntegerField(
                default=10, help_text="Padding height of the bottom border."
            ),
        ),
        migrations.AlterField(
            model_name="element",
            name="style_padding_top",
            field=models.PositiveIntegerField(
                default=10, help_text="Padding height of the top border."
            ),
        ),
        migrations.CreateModel(
            name="CollectionField",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("order", models.PositiveIntegerField()),
                (
                    "name",
                    models.CharField(
                        help_text="The name of the field.", max_length=225
                    ),
                ),
                (
                    "type",
                    models.CharField(
                        help_text="The type of the field.", max_length=225
                    ),
                ),
                (
                    "config",
                    models.JSONField(
                        default=dict, help_text="The configuration of the field."
                    ),
                ),
            ],
            options={
                "ordering": ("order", "id"),
            },
        ),
        migrations.AddField(
            model_name="inputtextelement",
            name="label",
            field=baserow.core.formula.field.FormulaField(
                default="", help_text="The text label for this input"
            ),
        ),
        migrations.CreateModel(
            name="LocalBaserowUpdateRowWorkflowAction",
            fields=[
                (
                    "builderworkflowaction_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.builderworkflowaction",
                    ),
                ),
                (
                    "service",
                    models.ForeignKey(
                        help_text="The service which this action is associated with.",
                        on_delete=django.db.models.deletion.CASCADE,
                        to="core.service",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.builderworkflowaction",),
        ),
        migrations.CreateModel(
            name="LocalBaserowCreateRowWorkflowAction",
            fields=[
                (
                    "builderworkflowaction_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.builderworkflowaction",
                    ),
                ),
                (
                    "service",
                    models.ForeignKey(
                        help_text="The service which this action is associated with.",
                        on_delete=django.db.models.deletion.CASCADE,
                        to="core.service",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.builderworkflowaction",),
        ),
        migrations.AlterField(
            model_name="imageelement",
            name="alt_text",
            field=baserow.core.formula.field.FormulaField(
                blank=True,
                default="",
                help_text="Text that is displayed when the image can't load",
            ),
        ),
        migrations.AlterField(
            model_name="imageelement",
            name="image_url",
            field=baserow.core.formula.field.FormulaField(
                blank=True,
                default="",
                help_text="A link to the image file",
                max_length=1000,
            ),
        ),
        migrations.CreateModel(
            name="DropdownElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "label",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="The text label for this dropdown"
                    ),
                ),
                (
                    "default_value",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="This dropdowns input's default value."
                    ),
                ),
                (
                    "required",
                    models.BooleanField(
                        default=False,
                        help_text="Whether this drodpown is a required field.",
                    ),
                ),
                (
                    "placeholder",
                    baserow.core.formula.field.FormulaField(
                        default="",
                        help_text="The placeholder text which should be applied to the element.",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.CreateModel(
            name="DropdownElementOption",
            fields=[
                (
                    "id",
                    models.AutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "value",
                    models.TextField(
                        blank=True, default="", help_text="The value of the option"
                    ),
                ),
                (
                    "name",
                    models.TextField(
                        blank=True,
                        default="",
                        help_text="The display name of the option",
                    ),
                ),
                (
                    "dropdown",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="builder.dropdownelement",
                    ),
                ),
            ],
        ),
        migrations.AddField(
            model_name="buttonelement",
            name="button_color",
            field=models.CharField(
                blank=True,
                default="primary",
                help_text="The color of the button",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_left_color",
            field=models.CharField(
                blank=True,
                default="border",
                help_text="Left border color",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_left_size",
            field=models.PositiveIntegerField(
                default=0, help_text="Pixel height of the left border."
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_right_color",
            field=models.CharField(
                blank=True,
                default="border",
                help_text="Right border color",
                max_length=20,
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_border_right_size",
            field=models.PositiveIntegerField(
                default=0, help_text="Pixel height of the right border."
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_padding_left",
            field=models.PositiveIntegerField(
                default=20, help_text="Padding size of the left border."
            ),
        ),
        migrations.AddField(
            model_name="element",
            name="style_padding_right",
            field=models.PositiveIntegerField(
                default=20, help_text="Padding size of the right border."
            ),
        ),
        migrations.CreateModel(
            name="FormContainerElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "submit_button_label",
                    baserow.core.formula.field.FormulaField(default=""),
                ),
                (
                    "button_color",
                    models.CharField(
                        blank=True,
                        default="primary",
                        help_text="The color of the button",
                        max_length=20,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.AddField(
            model_name="linkelement",
            name="button_color",
            field=models.CharField(
                blank=True,
                default="primary",
                help_text="The color of the button",
                max_length=20,
            ),
        ),
        migrations.CreateModel(
            name="TableElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "data_source",
                    models.ForeignKey(
                        help_text="The data source we want to show in the element for. Only data_sources that return list are allowed.",
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to="builder.datasource",
                    ),
                ),
                ("fields", models.ManyToManyField(to="builder.collectionfield")),
                (
                    "items_per_page",
                    models.PositiveIntegerField(
                        default=20,
                        help_text="The amount item loaded with each page.",
                        validators=[
                            django.core.validators.MinValueValidator(
                                1, message="Value cannot be less than 1."
                            ),
                            django.core.validators.MaxValueValidator(
                                100, message="Value cannot be greater than 100."
                            ),
                        ],
                    ),
                ),
                (
                    "button_color",
                    models.CharField(
                        blank=True,
                        default="primary",
                        help_text="The color of the button",
                        max_length=20,
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.AlterField(
            model_name="columnelement",
            name="column_gap",
            field=models.IntegerField(
                default=20,
                help_text="The amount of space between the columns.",
                validators=[
                    django.core.validators.MinValueValidator(
                        0, message="Value cannot be less than 0."
                    ),
                    django.core.validators.MaxValueValidator(
                        2000, message="Value cannot be greater than 2000."
                    ),
                ],
            ),
        ),
        migrations.AlterField(
            model_name="element",
            name="style_padding_bottom",
            field=models.PositiveIntegerField(
                default=10, help_text="Padding size of the bottom border."
            ),
        ),
        migrations.AlterField(
            model_name="element",
            name="style_padding_top",
            field=models.PositiveIntegerField(
                default=10, help_text="Padding size of the top border."
            ),
        ),
        migrations.CreateModel(
            name="CheckboxElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "label",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="The text label for this input"
                    ),
                ),
                (
                    "default_value",
                    baserow.core.formula.field.FormulaField(
                        default="", help_text="The input's default value."
                    ),
                ),
                (
                    "required",
                    models.BooleanField(
                        default=False,
                        help_text="Whether this input is a required field.",
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
        migrations.AddField(
            model_name="inputtextelement",
            name="is_multiline",
            field=models.BooleanField(
                default=False, help_text="Whether this text input is multiline."
            ),
        ),
        migrations.AddField(
            model_name="inputtextelement",
            name="rows",
            field=models.PositiveIntegerField(
                default=3,
                help_text="Number of rows displayed by the rendered input element",
            ),
        ),
        migrations.AlterField(
            model_name="inputtextelement",
            name="placeholder",
            field=baserow.core.formula.field.FormulaField(
                default="",
                help_text="The placeholder text which should be applied to the element.",
            ),
        ),
        migrations.CreateModel(
            name="IFrameElement",
            fields=[
                (
                    "element_ptr",
                    models.OneToOneField(
                        auto_created=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        parent_link=True,
                        primary_key=True,
                        serialize=False,
                        to="builder.element",
                    ),
                ),
                (
                    "source_type",
                    models.CharField(
                        choices=[("url", "Url"), ("embed", "Embed")],
                        default="url",
                        max_length=32,
                    ),
                ),
                (
                    "url",
                    baserow.core.formula.field.FormulaField(
                        blank=True, default="", help_text="A link to the page to embed"
                    ),
                ),
                (
                    "embed",
                    baserow.core.formula.field.FormulaField(
                        blank=True, default="", help_text="Inline HTML to embed"
                    ),
                ),
                (
                    "height",
                    models.PositiveIntegerField(
                        default=300, help_text="Height in pixels of the iframe"
                    ),
                ),
            ],
            options={
                "abstract": False,
            },
            bases=("builder.element",),
        ),
    ]
