-
Notifications
You must be signed in to change notification settings - Fork 1
Add gui spec #29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Add gui spec #29
Changes from all commits
Commits
Show all changes
3 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,234 @@ | ||
| # GUI Configuration (`gui`) | ||
|
|
||
| ## Introduction | ||
|
|
||
| The `gui` section within the YAML configuration provides metadata specifically tailored for building user interfaces related to Rainlang strategies. It acts as a bridge between the core technical definition of deployments, tokens, orders, etc., and their presentation to an end-user in a graphical application. | ||
|
|
||
| This section dictates how strategy deployments are named, described, and how their configurable parameters (bindings, deposits, token selections) should be rendered as interactive UI elements. It allows for user-friendly labels, descriptions, default values, and predefined options (presets) to simplify the user experience. | ||
|
|
||
| **Note**: While the underlying YAML parser treats all scalar values initially as strings, the application expects these strings to conform to the specified semantic types (e.g., `true` or `false` for Boolean fields) for successful processing. The types listed below refer to these expected semantic types. | ||
|
|
||
| ## Top-Level `gui` Object | ||
|
|
||
| The root of the GUI configuration is the `gui:` key. It contains general information about the strategy or set of deployments described in the file. | ||
|
|
||
| ```yaml | ||
| gui: | ||
| name: Fixed limit | ||
| description: Fixed limit order strategy | ||
| short-description: Buy WETH with USDC on Base. | ||
| deployments: | ||
| # ... deployment configurations ... | ||
| ``` | ||
hardyjosh marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| ### Fields | ||
|
|
||
| * `name` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The primary, human-readable name for the overall strategy or configuration presented in the GUI. | ||
| * `description` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: A more detailed description of the strategy or configuration, intended for display in the GUI. | ||
| * `short-description` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional, concise description, potentially used in contexts where space is limited (e.g., list views, tooltips). | ||
| * `deployments` | ||
| * **Type**: Map | ||
| * **Required**: Yes | ||
| * **Description**: Contains the specific UI configurations for one or more named deployments. See the [Deployments Map](#deployments-map-deployments) section for details. | ||
|
|
||
| ## Deployments Map (`deployments`) | ||
|
|
||
| The `deployments` field under `gui` holds a map where each key is the name of a deployment (which must correspond to a deployment defined elsewhere in the configuration, e.g., under the top-level `deployments:` key) and the value is an object defining the GUI configuration specific to that deployment. | ||
|
|
||
| ```yaml | ||
| gui: | ||
| # ... name, description ... | ||
| deployments: | ||
| <deployment-key-1>: | ||
| # ... configuration for deployment 1 ... | ||
| <deployment-key-2>: | ||
| # ... configuration for deployment 2 ... | ||
| # ... etc ... | ||
| ``` | ||
|
|
||
| ## Deployment Configuration (`<deployment-key>`) | ||
|
|
||
| Each entry within the `deployments` map defines the specific UI elements and text for a single deployment. | ||
|
|
||
| ```yaml | ||
| gui: | ||
| # ... | ||
| deployments: | ||
| some-deployment: # This key must match a defined deployment | ||
| name: Buy WETH with USDC on Base. | ||
| description: Buy WETH with USDC for fixed price on Base network. | ||
| short-description: Buy WETH with USDC on Base. | ||
| deposits: | ||
| # ... deposit items ... | ||
| fields: | ||
| # ... field items ... | ||
| select-tokens: | ||
| # ... select token items ... | ||
| ``` | ||
|
|
||
| ### Fields | ||
|
|
||
| * `name` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The name of this specific deployment variation as it should appear in the GUI. | ||
| * `description` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: A detailed description for this specific deployment variation. | ||
| * `short-description` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional, concise description for this deployment variation. | ||
| * `deposits` | ||
| * **Type**: List of [Deposit Items](#deposit-item) | ||
| * **Required**: Yes | ||
| * **Description**: Defines the tokens users can deposit into the strategy and provides UI hints like presets. | ||
| * `fields` | ||
| * **Type**: List of [Field Items](#field-item) | ||
| * **Required**: Yes | ||
| * **Description**: Defines the user-configurable parameters (bindings) for the strategy, including labels, descriptions, presets, and defaults. | ||
| * `select-tokens` | ||
| * **Type**: List of [Select Token Items](#select-token-item) | ||
| * **Required**: No | ||
| * **Description**: Defines specific tokens that might be selectable in other parts of the UI for this deployment (e.g., choosing an output token if the strategy supports it). | ||
|
|
||
| ## Deposit Item | ||
|
|
||
| Each item in the `deposits` list defines a token that can be deposited and optional preset amounts for the UI. | ||
|
|
||
| ```yaml | ||
| # Example within a deployment's deposits list: | ||
| deposits: | ||
| - token: token1 # Must match a defined token key | ||
| presets: | ||
| - "0" | ||
| - "10" | ||
| - "100" | ||
| - "1000" | ||
| - "10000" | ||
| - token: token2 | ||
| # No presets defined for this token | ||
| ``` | ||
|
|
||
| ### Fields | ||
|
|
||
| * `token` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The key referencing a token defined in the top-level `tokens` section. This specifies which token the deposit configuration applies to. | ||
| * `presets` | ||
| * **Type**: List of Strings | ||
| * **Required**: No | ||
| * **Description**: An optional list of suggested deposit amounts (as strings) to display as quick options in the UI. The UI will typically show these alongside the primary deposit input field. | ||
|
|
||
| ## Field Item | ||
|
|
||
| Each item in the `fields` list defines a user-configurable input field, mapping it to an underlying Rainlang binding. | ||
|
|
||
| ```yaml | ||
| # Example within a deployment's fields list: | ||
| fields: | ||
| - binding: binding-1 # The corresponding binding in the Rainlang source | ||
| name: Field 1 name | ||
| description: Field 1 description | ||
| presets: | ||
| # ... preset items for this field ... | ||
| default: some-default-value | ||
| - binding: binding-2 | ||
| name: Field 2 name | ||
| description: Field 2 description | ||
| # No presets for this field | ||
| show-custom-field: true # Explicitly allow custom input | ||
| ``` | ||
|
|
||
| ### Fields | ||
|
|
||
| * `binding` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The name of the binding in the associated Rainlang source code that this field provides the value for. | ||
| * `name` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The human-readable label displayed for this input field in the GUI. | ||
| * `description` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional, longer description or help text displayed for this field, potentially as a tooltip or helper text. | ||
| * `presets` | ||
| * **Type**: List of [Preset Items](#preset-item) | ||
| * **Required**: No | ||
| * **Description**: An optional list of predefined values the user can select for this field. | ||
| * `default` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional default value (as a string) to pre-populate the input field with. | ||
| * `show-custom-field` | ||
| * **Type**: Boolean | ||
| * **Required**: No | ||
| * **Description**: Controls whether the user is presented with a free-form input field in addition to any defined presets. If `false`, the user might only be able to select from the presets. If `true` or omitted, a custom input field is typically shown. | ||
|
|
||
| ## Preset Item | ||
|
|
||
| Each item in a field's `presets` list defines a single predefined option for that field. | ||
|
|
||
| ```yaml | ||
| # Example within a field's presets list: | ||
| presets: | ||
| - name: Preset 1 Name # Optional name for the preset | ||
| value: "0x1234567890abcdef1234567890abcdef12345678" | ||
| - value: "false" # Preset without an explicit name | ||
| - name: Preset 3 Name | ||
| value: "some-string" | ||
| ``` | ||
|
|
||
| ### Fields | ||
|
|
||
| * `name` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional label for the preset option shown in the UI (e.g., in a dropdown or radio button list). If omitted, the `value` itself might be displayed. | ||
| * `value` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The actual value (as a string) that will be used for the binding if this preset is selected. | ||
|
|
||
| ## Select Token Item | ||
|
|
||
| Each item in the optional `select-tokens` list defines a token that might be presented for selection elsewhere in the UI for this deployment. | ||
|
|
||
| ```yaml | ||
| # Example within a deployment's select-tokens list: | ||
| select-tokens: | ||
| - key: token1 # Must match a defined token key | ||
| name: Optional Display Name for Token 1 | ||
| description: Optional description for selection context | ||
| - key: token2 | ||
| # Uses default token name/symbol from token definition | ||
| ``` | ||
|
|
||
| ### Fields | ||
|
|
||
| * `key` | ||
| * **Type**: String | ||
| * **Required**: Yes | ||
| * **Description**: The key referencing a token defined in the top-level `tokens` section. | ||
| * `name` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional override for the token's display name specifically within this selection context. If omitted, the GUI would likely use the `label` or `symbol` from the main token definition. | ||
| * `description` | ||
| * **Type**: String | ||
| * **Required**: No | ||
| * **Description**: An optional description providing context for why this token is selectable here. | ||
|
|
||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.