Prevent fields from being empty, when it's known that Flamenco Manager
will not start up if they are.
The icons for the variable add/delete are enhanced with colors and
icons +/- or with a trashcan SVG.
Error/warning messages appear under inputs when values are invalid on
blur.
`FormInputDropdownSelect` is also created here, decoupling the
validation from Dropdown Select. `DropdownSelect`'s props now have
type definitions.
CSS selectors are more specified, and renamed to be more fitting.
### What 'required' means for each input
- For text, `required` means the field cannot be empty.
- For numbers, `required` means the field cannot be empty, and having
a `min` and/or `max` means the number must be equal to or
above/below the min/max.
- For dropdowns, `required` means the selection cannot be empty, and
`strict` means that an option not included in the list passed to the
`options` prop cannot be selected.
- For the new variable input, empty strings, duplicate variable names,
and variable names that contain `{` or `}` are invalid.
### Required Settings
To keep the application running and remaining on the same page, these
fields **must** be non-empty strings:
- `database` and `shared_storage_path` (both which can be invalid so
long as they are non-empty)
- `listen` (which MUST be a valid value AND non-empty) When
`shared_storage_path` is empty, the application will automatically
jump to the Setup Assistant which after completing will create a new
`flamenco-manager.yaml` and restart the application. If `database`
is empty and `listen` is not a proper port, the application will
fail to start, leading the user to a dead end and forcing them to
manually configure `flamenco-manager.yaml` to get it running again.
To prevent the backend from throwing a `Bad Request` error, numerical
and time duration inputs **must not** be null or empty:
- `database_check_period`, `task_timeout`, `worker_timeout`,
`blocklist_threshold`, `task_fail_after_softfail_count`
Pull Request: https://projects.blender.org/studio/flamenco/pulls/104409