# v.0.11

{% hint style="danger" %}
This version has been deprecated. If used with the current API version it can produce unexpected behaviour or errors.
{% endhint %}

{% hint style="danger" %}
The package shimoku-api-python is no longer maintained
{% endhint %}

{% hint style="info" %}
To get the new version 🎨🖌️
{% endhint %}

```
pip install --upgrade shimoku-api-python
```

This new version comes full of improvements! Some quality of life upgrades and some important features.

### Improvements <a href="#fixes" id="fixes"></a>

* Now the classes that handle the "app metadata" and "input output" have the "business\_id" as an attribute so it doesn't need to be provided for each call.
* A new input form component is available! The smart search menu, to use it just define the field "inputType" as "multiSelect", like the following example:

  <pre><code>{
    'mapping': 'objectives',
    'fieldName': 'Objetivos',
  <strong>  'inputType': 'multiSelect',
  </strong>  'options': ['sleep', 'close eyes', 'awake']
  }
  </code></pre>

  And use the same function used to create the input form, to get:

  <figure><img src="/files/xcbjz0hkYRPweoRDiNVs" alt=""><figcaption></figcaption></figure>

We have new navigation components to make the use of the dashboard as fluid as possible:

* Breadcrumbs have been added! They will tell you your current path above in the page. To use them you just have to call the activation function:&#x20;

  <pre class="language-python"><code class="lang-python"><strong>s.app.show_breadcrumbs(app_id: Optional[str], app_name: Optional[str])
  </strong></code></pre>

  You can pass the app\_id or the app\_name and it will activate the breadcrumbs for that app. It also exists the opposite function, in case they have to be deactivated:&#x20;

  <pre class="language-python"><code class="lang-python"><strong>s.app.hide_breadcrumbs(app_id: Optional[str], app_name: Optional[str])
  </strong></code></pre>

<figure><img src="/files/r67Oj2DEULBIga7TjRTh" alt=""><figcaption></figcaption></figure>

* History navigation has been added too! This activates two arrows that let you go to previously visited pages. It's activated and deactivated the same way as the breadcrumbs, just changing the function name:&#x20;

  <pre class="language-python"><code class="lang-python"><strong>s.app.show_history_navigation(app_id: Optional[str], app_name: Optional[str])
  </strong><strong>s.app.hide_history_navigation(app_id: Optional[str], app_name: Optional[str])
  </strong></code></pre>

<figure><img src="/files/xXyqggW7CyMxolSAncKs" alt=""><figcaption></figcaption></figure>

* Apps can be hidden from the left menu and linked by a dashboard element to give infinite navigation possibilities! To activate it you can use the same type of functions as before, just changing the name:&#x20;

  <pre class="language-python"><code class="lang-python"><strong>s.app.show_path(app_id: Optional[str], app_name: Optional[str])
  </strong><strong>s.app.hide_path(app_id: Optional[str], app_name: Optional[str])
  </strong></code></pre>

  If we create a hidden path app and link it with a button:

<figure><img src="/files/oMLPYxR17G40fRZksttV" alt=""><figcaption></figcaption></figure>

&#x20;     we get the following result after clicking on it:

<figure><img src="/files/EoZY1EdMl4BZQvaf64xj" alt=""><figcaption></figcaption></figure>

* Tabs give the option to separate elements further by grouping them, and only showing a handfull each time. Tabs reset the order so they can be thinked of as subpaths but work as reports so they are very versatile! In the following images we can see that groups of reports  with complex behaviour (bentobox and grid behaviour) are being rendered correctly:

<div><figure><img src="/files/4nDnGjNna0mLOPzKGF3y" alt=""><figcaption></figcaption></figure> <figure><img src="/files/ZoyyTwr8XxVDez3hv3jo" alt=""><figcaption></figcaption></figure> <figure><img src="/files/uAGdmLySltEkjWvxJ91e" alt=""><figcaption></figcaption></figure></div>

* To use it you just have to define the location of the chart the same way you define the menu, it needs a tabs group name and the name of the tab where it will be inserted:

  <pre class="language-python"><code class="lang-python">s.plt.plotting_function(
      data=data,
      ...
      menu_path=menu_path,
  <strong>    tabs_index=(tabs_group_name, tab_name)
  </strong>    ...
  )
  </code></pre>

  The parameter is called "tabs\_index" and it is expecting a tuple with the group\_name and the tab\_name. After executing the following code:

  <pre class="language-python"><code class="lang-python">data = [{'date': dt.date(2021, 1, 1), 'x': 5, 'y': 5},
          {'date': dt.date(2021, 1, 2), 'x': 6, 'y': 5},
          {'date': dt.date(2021, 1, 3), 'x': 4, 'y': 5},
          {'date': dt.date(2021, 1, 4), 'x': 7, 'y': 5},
          {'date': dt.date(2021, 1, 5), 'x': 3, 'y': 5}]

  menu_path = "tabs_test"
  s.plt.indicator(data={
      "description": "",
      "title": "",
      "value": "Indicator",
      "color": "warning"
      },
      menu_path=menu_path,
      order=0,
      value='value',
      header='title',
      footer='description',
      color='color',
  <strong>    tabs_index=("Charts", "Indicator tab")
  </strong>)
  s.plt.bar(
      data=data,
      x='date', y=['x', 'y'],
      menu_path=menu_path,
      x_axis_name='Date',
      y_axis_name=['Revenue'],
      # row=1, column=1,
      order=0, rows_size=2,
      cols_size=12,
  <strong>    tabs_index=("Charts", "Bar tab")
  </strong>)
  </code></pre>

  The result is:

  <div><figure><img src="/files/uQRZmlnKkjodJHA7JzDi" alt=""><figcaption></figcaption></figure> <figure><img src="/files/J5cvSsjOkuDsJH5o2HTJ" alt=""><figcaption></figcaption></figure></div>

  The order and cols\_size attributes can be modified using the following method:

  ```python
  s.plt.update_tabs_group_metadata(
      group_name: str,
      menu_path: str, 
      order: Optional[int] = None,
      cols_size: Optional[int] = None
  )
  ```

  Because this component is treated as a report we are able to include tabs inside of tabs! This means that we can have as much indexing of data as we need! To link a tab to another, it has to be used the following method:

  ```python
  s.plt.insert_tabs_group_in_tab(
      menu_path: str, 
      parent_tab_index: Tuple[str, str], 
      child_tabs_group: str, 
      last_in_order: Optional[bool]
  )
  ```

  It has the option to put the tabs group last in order by default, as it will be the most common way to use this.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.shimoku.com/dev/releases/2022/v.0.11.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
