{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "#/components/schemas/ConfigurablePropBase",
  "title": "ConfigurablePropBase",
  "type": "object",
  "description": "A configuration or input field for a component.",
  "required": [
    "name",
    "type"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "When building `configuredProps`, make sure to use this field as the key when setting the prop value"
    },
    "type": {
      "type": "string",
      "enum": [
        "$.airtable.baseId",
        "$.airtable.fieldId",
        "$.airtable.tableId",
        "$.airtable.viewId",
        "$.discord.channel",
        "$.discord.channel[]",
        "$.interface.apphook",
        "$.interface.http",
        "$.interface.timer",
        "$.service.db",
        "alert",
        "any",
        "app",
        "boolean",
        "data_store",
        "dir",
        "http_request",
        "integer",
        "integer[]",
        "object",
        "sql",
        "string",
        "string[]"
      ],
      "x-fern-enum": {
        "$.discord.channel[]": {
          "name": "DiscordChannelArray"
        },
        "integer[]": {
          "name": "IntegerArray"
        },
        "string[]": {
          "name": "StringArray"
        }
      }
    },
    "label": {
      "type": "string",
      "description": "Value to use as an input label. In cases where `type` is \"app\", should load the app via `getApp`, etc. and show `app.name` instead.",
      "nullable": true
    },
    "description": {
      "type": "string",
      "description": "A description of the prop, shown to the user when configuring the component.",
      "nullable": true
    },
    "optional": {
      "type": "boolean",
      "description": "If true, this prop does not need to be specified.",
      "nullable": true
    },
    "disabled": {
      "type": "boolean",
      "description": "If true, this prop will be ignored.",
      "nullable": true
    },
    "readOnly": {
      "type": "boolean",
      "description": "If true, this prop is read-only \u2014 its value is either fixed by the component author (`static`) or the prop is purely informational (e.g. `alert`, `dir`). Connect clients should render it without treating it as a configurable input.",
      "nullable": true
    },
    "hidden": {
      "type": "boolean",
      "description": "If true, should not expose this prop to the user",
      "nullable": true
    },
    "remoteOptions": {
      "type": "boolean",
      "description": "If true, call `configureComponent` for this prop to load remote options. It is safe, and preferred, given a returned list of { label: string; value: any } objects to set the prop value to { __lv: { label: string; value: any } }. This way, on load, you can access label for the value without necessarily reloading these options",
      "nullable": true
    },
    "useQuery": {
      "type": "boolean",
      "description": "If true, calls to `configureComponent` for this prop support receiving a `query` parameter to filter remote options",
      "nullable": true
    },
    "reloadProps": {
      "type": "boolean",
      "description": "If true, after setting a value for this prop, a call to `reloadComponentProps` is required as the component has dynamic configurable props dependent on this one",
      "nullable": true
    },
    "withLabel": {
      "type": "boolean",
      "description": "If true, you must save the configured prop value as a \"label-value\" object which should look like: { __lv: { label: string; value: any } } because the execution needs to access the label",
      "nullable": true
    }
  }
}