npm package: @gip-recia/esco-content-menu-lit
Description: Web component to display into eyebrow menu a user information menu with profile picture and more.
Author: Julien Gribonvald
Latest version: 0.4.1

# ESCO Content Menu (Lit version)

## Installation

```bash
# install with npm
npm install @uportal/esco-content-menu-lit

# install with yarn
yarn add @uportal/esco-content-menu-lit
```

_install with maven_

```xml
<dependency>
    <groupId>org.webjars.npm</groupId>
    <artifactId>uportal__esco-content-menu-lit</artifactId>
    <version>{version number goes here}</version>
</dependency>
```

_install with gradle_

```gradle
compile 'org.webjars.npm:uportal__esco-content-menu-lit:{version number goes here}'
```

## Usage as Web Component

### internationalization

The `hamburger-menu`, `content-grid`, and `content-menu` components support an internationalization mixin. This adds the additional prop `messages` which can be applied to override the default text messages in the various components. This property will trickle down to the PortletCard and ActionFavorites components, as well.

For example:

```html
<esco-hamburger-menu
  messages='[{"locales": ["en", "en-US"], "messages": { "message": {"favorites": { "add": "Add me to your favorites!" } }}}]'
>
</esco-hamburger-menu>
```

The available messages to override are as follows:

```json
{
  "message": {
    "services": {
      "title": "All services",
      "filter": "Find a service..."
    },
    "favorites": {
      "add": "Add to favorites",
      "remove": "Remove from favorites",
      "title": "My Favorites",
      "empty": "No favorite defined"
    },
    "filter": {
      "selectOption": "All categories"
    },
    "userInfoPortletUrl": {
      "title": "See my account informations"
    },
    "userChangeEtabUrl": {
      "title": "Select an other organization"
    },
    "buttons": {
      "logout": "Sign out",
      "menuClose": "Close menu"
    }
  }
}
```

### The hamburger menu

This is the main component that show a hamburger menu and that open an entire page with `content-menu` component.

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/js/esco-content-menu.min.js"
  defer
></script>

<esco-hamburger-menu
  default-org-logo="..."
  api-url-org-info="..."
  portlet-api-url="..."
  layout-api-url="..."
  organization-api-url="..."
  user-info-api-url="..."
  context-api-url="/uPortal"
  sign-out-url="/uPortal/Logout"
  default-org-logo="https://www.toureiffel.paris/sites/default/files/styles/1440x810/public/2017-10/monument-landing-header-bg_0.jpg?itok=_dSLLBlZ"
  user-info-portlet-url="/uPortal/user-details"
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
</esco-hamburger-menu>
```

For some integration you could need a bit more, like into uPortal you will need to add a parent div and to apply on his closest parent `section` a style `float: left`.

#### Properties

- `messages`: type: `Array of Objects`, see [internationalization](#internationalization)
- `context-api-url`: type: `String`, default: `/uPortal`, useful to provide a different uPortal context on which to do request
- `favorite-api-url`: type: `String`, default: `/uPortal/api/layout`, the uri/url of the favorites api
- `layout-api-url`: type: `String`, default: `/uPortal/api/v4-3/dlm/layout.json`, the uri/url of the layout api to request the favorite list in the oser defined order (only needed to get favorite's order defined by the user)
- `portlet-api-url`: type: `String`, default: `/uPortal/api/v4-3/dlm/portletRegistry.json`, the uri/url of the portletRegistry api to obtains user authorized portlet list
- `userInfo-api-url`: type: `String`, default: `/uPortal/api/v5-1/userinfo`, url/uri on which the api request is done to obtain user information and the jwt token
- `organization-api-url`: type: `String`, optional, an uri/url of an api to retrieve organization informations, any json format is accepted, but configure `user-org-id-attribute-name`, `user-all-orgs-id-attribute-name`, `org-logo-url-attribute-name` to work with.
- `sign-out-url`: type: `String`, default: `/uPortal/Logout`, an uri/url to call when user logout (for a logout button),
- `default-org-logo`: type: `String`, required: true, an url/uri to provide an institutional picture when none is found from an optional api (not provided into uPortal),
- `user-info-portlet-url`: type: `String`, default: `''`, an url/uri to the user information application,
- `switch-org-portlet-url`: type: `String`, default: `''`, an optional url/url of a rest api to obtain institutional organization information
- `switch-org-event`: type: `Boolean`, default: `false`, open change etab modal. `switch-org-portlet-url` need to be change etab api url.
- `favorites-portlet-card-size`: type: possible value `auto|large|medium|small|smaller`, default: `small`, define the size of portlet-cards component into `favorite-content` component part
- `grid-portlet-card-size`: type: possible value `auto|large|medium|small|smaller`, default: `medium`, define the size of `portlet-cards` component into `grid-content` component part,
- `hide-action-mode: type`: possible value `auto|always|never`, default: `auto`, define if we should show the actions, `auto` don't show on `small` breakpoint,
- `user-org-id-attribute-name`: type: `String`, default: `'ESCOSIRENCourant[0]'`, the attribute object path to obtain the id of the organization to retrieve from the organization's api
- `user-all-orgs-id-attribute-name`: type: `String`, default: `'ESCOSIREN`, the attribute object path to obtain all ids of the organizations linked to the user and to retrieve from the organization's api
- `org-logo-url-attribute-name`: type: `String`, default: `'otherAttributes.ESCOStructureLogo[0]'`, the attribute object path to obtain the organization Picture from organization details obtained from the organization's api
- `force-org-logo`: type: `String`, optional, an url/uri to provide an institutional picture overriding the default-org-logo and the institutional one obtained by an api (used to have an overview before updating change to every users from the api),
- `show-favorites-in-slider`: type: `Boolean`, default: `false`, tell component to show favorites list in a slider.
- `debug`: type: `Boolean`, default: `false`, for the demo/debug mode to be able to run in a standalone way (disable api call).

#### Events

##### Emitted

- `toggle`: target: `component`, details: `fname,chanId,isFavorite`, Emit when menu is open or close.

#### Slots

The HTML content of the component can also be modified using [slots](https://lit.dev/docs/components/shadow-dom/#slots).

##### Menu Icon

The `menu-icon` slot permit to apply a custom icon replacing the default Hamburger one. As example:

```html
<esco-hamburger-menu
  default-org-logo="..."
  api-url-org-info="..."
  portlet-api-url="..."
  layout-api-url="..."
  organization-api-url="..."
  user-info-api-url="..."
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
  <div
    slot="menu-icon"
    style="background-image:url('https://mdbootstrap.com/img/svg/hamburger3.svg?color=FFF');height:20px;width:20px;"
  ></div>
</esco-hamburger-menu>
```

##### Menu Content

The `menu-content` slot permit to apply an other content than the esco-content-menu sub-component.

```html
<esco-hamburger-menu
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
  <div slot="menu-content">whatever...</div>
</esco-hamburger-menu>
```

### The content menu

This component is a main one as it will load into one page all main elements (the user + organization information, the favorites and the list of services )

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js"
  defer
></script>

<esco-content-menu
  sign-out-url="/uPortal/Logout"
  default-org-logo="https://www.toureiffel.paris/sites/default/files/styles/1440x810/public/2017-10/monument-landing-header-bg_0.jpg?itok=_dSLLBlZ"
  user-info-portlet-url="/uPortal/user-details"
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
</esco-content-menu>
```

#### Properties

This use the same properties from the `hamburger-menu` ([see on hamburger-menu details](#the-hamburger-menu)):

- `messages`
- `context-api-url`
- `favorite-api-url`
- `layout-api-url`
- `organization-api-url`
- `user-info-api-url`
- `portlet-api-url`
- `sign-out-url`
- `default-org-logo`
- `user-info-portlet-url`
- `switch-org-portlet-url`
- `favorites-portlet-card-size`
- `grid-portlet-card-size`
- `hide-action-mode`
- `user-org-id-attribute-name`
- `user-all-orgs-id-attribute-name`
- `org-logo-url-attribute-name`
- `force-org-logo`
- `debug`

and with additional properties to work with the `hamburger-menu`:

- ~~`call-on-close`: type: `Function`, default: `{}`, provide to this property a callback function to call after clicking on the header-button close of the `header-buttons` component.~~ Deprecated, use close event instead.
- `show-favorites-in-slider`: type: `Boolean`, default: `false`, if present (true), show favorites in a slider.
- `is-hidden`: type: `Boolean`, default: `false`, used by the `hamburger-menu` to indicate the state of the page.
- ~~`id`: type: `String`, default: `null`, provide an id to be able to select the dom element, as example if you want to manage manualy an `hamburger-menu`~~ Deprecated.

#### Events

##### Emitted

- `close`: target: `component`, Emited when close button is clicked. Replace `call-on-close` attribute.

#### Slots

The HTML content of the component can also be modified using [slots](https://lit.dev/docs/components/shadow-dom/#slots).

##### Content User

The `content-user` slot permit to apply a custom component at this place, or to remove it. As example:

```html
<esco-content-menu
  sign-out-url="/uPortal/Logout"
  default-org-logo="https://www.toureiffel.paris/sites/default/files/styles/1440x810/public/2017-10/monument-landing-header-bg_0.jpg?itok=_dSLLBlZ"
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
  <div slot="content-user"></div>
</esco-content-menu>
```

##### Header Buttons

The `header-buttons` slot permit to apply a custom component at this place, or to remove it. As example:

```html
<esco-content-menu
  sign-out-url="/uPortal/Logout"
  default-org-logo="https://www.toureiffel.paris/sites/default/files/styles/1440x810/public/2017-10/monument-landing-header-bg_0.jpg?itok=_dSLLBlZ"
  favorites-portlet-card-size="small"
  grid-portlet-card-size="auto"
  hide-action-mode="never"
>
  <div slot="header-buttons"></div>
</esco-content-menu>
```

### The content grid

This component provide a flexbox way to show a list of `portlet-card`, depending on uPortal rest-api.

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js"
  defer
></script>

<esco-content-grid
  portlet-card-size="gridPortletCardSize"
  hide-action="hideAction"
>
</esco-content-grid>
```

#### Properties

Standalone properties:

- `messages`: type: `Array of Objects`, see [internationalization](#internationalization)
- `background-color`: type: `String`, default: `rgba(0, 0, 0, 0)`, to apply a different background-color
- ~~`call-after-action`: type: `Function`, default: `undefined`, a callback function to call into `portlet-card` embeding `action-favorite` after adding portlet to favorites,~~ Deprecate, use event `toggle-favorite` instead.
- `context-api-url`: type: `String`, default: `/uPortal`, usefull to provide a different uPortal context on which to do request,
- `favorite-api-url`: type: `String`, default: `/uPortal/api/layout`, the uri/url of the favorites api
- `layout-api-url`: type: `String`, default: `/uPortal/api/v4-3/dlm/layout.json`, the uri/url of the layout api to request the favorite list in the other defined order (only needed to get favorite's order defined by the user)
- `portlet-api-url`: type: `String`, default: `/uPortal/api/v4-3/dlm/portletRegistry.json`, the uri/url of the portletRegistry api to obtains user authorized portlet list
- `user-info-api-url`: type: `String`, default: `/uPortal/api/v5-1/userinfo`, url/uri on which the api request is done to obtain user information and the jwt token
- `portlet-card-size`: type: possible value `auto|large|medium|small|smaller|custom`, default: `auto`, define the size of `portlet-cards` component.
- `hide-action`: type: `Boolean`, default: `false`, define to hide or not the `action-favorite` button defined into `portlet-card`
- `show-footer-categories`: `Boolean`, default: `false`, define to display category dropdown filter near bottom of grid
- `hide-title`: `Boolean`, default: `false`, define to remove the title area from the grid, useful when a basic grid is desired
- `portlet-background-is-dark`: `Boolean`, default: `false`, indicate to the component that the parent background is dark and permit to the portlet-card component to show buttons like favorites in a more suitable color.
- `debug`: type: `Boolean`, default: `false`, for the demo/debug mode to be able to run in a standalone way (disable api call)
- `card-hover-src`: type: possible value `none|title|desc|description`, default: `none`, set the hover text for the grid cards to one of the portlet definition values `title` or `description`

and additional properties to work with the parent component `content-menu`:

- `parent-screen-size`: type: possible value `large|medium|small|smaller|custom`, default: `medium`, permit to indicate the breakpoint view of the parent.
- `portlets`: type: `Array`, default: `[]`, used if the list of portlets is loaded and provided from a parent component,
- `favorites`: type: `Array`, default: `[]`, used if the list of favorites portlets loaded and provided from a parent component,
- `all-categories`: type: `Array`, default: `[]`, set or get the list of categories,

#### Events

##### Emited

- `gridFavoritesUpdated`, target : `window`, details: `fname,chanId,isFavorite`, emitted when a portlet is added to favorites.
- `esco-cm-grid-filter`, target : `window`, details: `category,value`, emited when portlets are filteredor when `esco-cm-request-grid-filter` event is received.
- `esco-cm-categories`, target : `window`, details: `categories`, emited when categories list is calculated or when `esco-cm-request-categories` event is received.
- `toggle-favorite`, target : `component`, details: `fname,chanId,isFavorite`, emited when a portlet is added to favorites.

##### Listened

- `esco-cm-grid-filter`, details: `category,value`, when received, use `detail` to filter portlets list.
- `esco-cm-request-grid-filter`, when received, emit `esco-cm-grid-filter` event with the filter parameters in `detail`.
- `esco-cm-request-categories`, when received, emit `esco-cm-categories` event with the categories list in `detail`.
- `gridFavoritesUpdated`, when received, reload portlets.

#### Slots

The HTML content of the component can also be modified using [slots](https://lit.dev/docs/components/shadow-dom/#slots).

##### Header Left

The `header-left` slot permit to apply a custom title replacing the default "All services" one. As example:

```html
<esco-content-grid
  background-color="grey"
  portlet-card-size="medium"
  portlet-api-url="/uPortal/api/v4-3/dlm/portletRegistry.json?category=administration"
  layout-api-url="..."
>
  <h1 slot="header-left">Administration</h1>
</esco-content-grid>
```

##### Header Right

The `header-right` slot permit to apply a custom title replacing the default filter on right. As example:

```html
<esco-content-grid
  background-color="grey"
  portlet-card-size="medium"
  portlet-api-url="/uPortal/api/v4-3/dlm/portletRegistry.json?category=administration"
  layout-api-url="..."
>
  <div slot="header-rigth"></div>
</esco-content-grid>
```

##### Preamble

The `preamble` slot permit to add descriptive text between the headers and grid. As example:

```html
<esco-content-grid
  background-color="grey"
  portlet-card-size="medium"
  portlet-api-url="/uPortal/api/v4-3/dlm/portletRegistry.json?category=administration"
  layout-api-url="..."
>
  <div slot="preamble">This is explanatory text for the grid.</div>
</esco-content-grid>
```

##### Footer

The `footer` slot permit to apply a custom title replacing the default filter on footer. As example:

```html
<esco-content-grid
  background-color="grey"
  portlet-card-size="medium"
  portlet-api-url="/uPortal/api/v4-3/dlm/portletRegistry.json"
  layout-api-url="..."
>
  <div slot="footer"></div>
</esco-content-grid>
```

#### Theming

This component supports [CSS Variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables) for overriding some default values. So defining the following variables will override default values.

```css
:root {
  --content-grid-flex-grid-justify: center; // How to justify all flex grid elements, default value is center
  --content-grid-flex-grid-item-margin: 20px auto; // To set a margin on all flex items, default is `20px auto`
}
```

### The action favorite

The component `action-favorite` is really simple, it show a start button that permit to add or remove from favorites a portlet.

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js"
  defer
></script>

<esco-action-favorite portlet-card-size="small" hide-action="false">
</esco-action-favorite>
```

#### Properties

- `messages`: type: `Array of Objects`, see [internationalization](#internationalization)
- ~~`call-on-toggle-fav`: type: `Function`, default: `{}`, a callback function called after the click event on the button,~~ Deprecated, use `toggle` event instead.
- `chan-id`: type: `String`, required: `true`, the portlet id to add or remove from user favorites,
- ~~`favorite-api-url`: type: `String`, default: `/uPortal/api/layout`, the uri/url of the favorites api,~~ Deprecated.
- ~~`user-info-api-url`: type: `String`, default: `/uPortal/api/v5-1/userinfo`, url/uri on which the api request is done to obtain user information and the jwt token,~~ Deprecated.
- `fname`: type: `String`, required: `true`, the portlet fname that permit to identify the portlet into favorite's list, usefull for the callback function and apply a css class,
- `is-favorite`: type: `Boolean`, default: `false`, provide the favorite state,
- `back-ground-is-dark`: type: `Boolean`, default: `false`, permit to apply a style depending on background color, as the component is used as embedded,
- ~~`debug`: type: `Boolean`, default: `false`, for the demo/debug mode to be able to run in a standalone way (disable favorites api call)~~ Deprecated

#### Events

##### Emitted

- `toggle`, target : `component`, details: `fname,chanId,isFavorite`, emited when button is clicked.

#### Theming

This component supports [CSS Variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables) for overriding some default values. So defining the following variables will override default values.

```css
:root {
  --action-favorites-dark-background-icon-color: #010101; // To set a different color of the favorite svg icon when background is dark.
  --action-favorites-normal-icon-color: red; // To set a different color of the favorite svg icon when background is normal.
}
```

### The content favorites

The component is functional only into the `content-menu`, it needs that a portlet list and favorite list is passed

Somme work would be needed to move on the `content-carousel`.

### The content user

This component permit to show user information with their organization information.
Few work would be need to be able to use it as a standalone component: like having a fetch service like for portlets or favorite. But some parts are institutional developpments to be able to obtain organization informations, so we are waiting new usecase before to do something.

#### Html

Need some work for a standalone use.

#### Properties

- `messages`: type: `Array of Objects`, see [internationalization](#internationalization).
- `org-display-name`: type: `String`, default: `''`, organization name to display.
- `org-img-url`: type: `String`, default: `''`, url of the organization image to display.
- `user-display-name`: type: `String`, default: `''`, user name to display.
- `user-avatar-url`: type: `String`, default: `''`, url of the user avatar image to display.
- `switch-org-portlet-url`: type: `String`, default: `''`, an url/uri where the user can switch of organization when having several (tenant use part). Let empty to not show the button.
- `user-info-portlet-url`: type: `String`, default: `''`, an url/uri to the user information application,
- ~~`org-info`: type: `Object`, default: `{}`, the current user organization detail object,~~ Deprecated.
- ~~`other-orgs`: type: `Array`, default: `[]`, all other organizations details object when the user have several,~~ Deprecated.
- ~~`user-info`: type: `Object`, required: `true`, the user information object,~~ Deprecated.
- ~~`default-org-logo`: type: `String`, required: `true`, an url/uri to provide an institutional picture when none is found from an optional api (not provided into uPortal),~~ Deprecated.
- ~~`org-logo-url-attribute-name`: type: `String`, default: `'otherAttributes.ESCOStructureLogo[0]'`, the attribute object path to obtain the organization Picture from organization details obtained from the organization's api.~~
- ~~`force-org-logo`: type: `String`, optional, an url/uri to provide an institutional picture overriding the default-org-logo and the institutional one obtained by an api (used to have an overview before updating change to every users from the api),~~

and additional properties to work with the parent component `content-menu`:

- `parent-screen-size`: type: possible value `large|medium|small|smaller`, default: `medium`, permit to indicate the breakpoint view of the parent.

### The portlet card

This component render informations about a portlet as a card.

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js"
  defer
></script>

<esco-portlet-card portlet-desc="portlet" size="small" hide-action="true">
</esco-portlet-card>
```

#### Properties

- `messages`: type: `Array of Objects`, see [internationalization](#internationalization).
- `portlet-desc`: type: `Object`, required: `true`, the portlet description object
- `size`: type: possible value `large|medium|small|smaller|custom`, default: `medium`, the fixed size of card to apply
- `css-class`: type: `string`, default: `portlet-card`, class name give to the main div of the component
- `card-hover-src`: type: possible value `none|title|desc|description`, default: `none`, set the hover text for the grid cards to one of the portlet definition values `title` or `description`
- `hide-action: type`: `Boolean`, default: `false`, define to hide or not the `action-favorite` button
- `back-ground-is-dark`: type: `Boolean`, default: `false`, permit to apply a style depending on background color, as the component is used as embeded,
- `is-favorite`: type: `Boolean`, default: `false`, provide the favorite state (passed to the `action-favorite` component),
- ~~`call-after-action`: type: `Function`, default: `{}`, callback function to call after click on `action-favorite` button (passed to the `action-favorite` component),~~ deprecated, use `toggle-favorite` event instead
- `icon-background-color`: type: `String`, default: `Transparent`, could be used to apply a background-color behind a portlet icon - usecase if there isn't background on icon.
- ~~`favorite-api-url`: type: `String`, default: `/uPortal/api/layout`, the uri/url of the favorites api (passed to the `action-favorite` component),~~ deprecated
- ~~`user-info-api-url`: type: `String`, default: `/uPortal/api/v5-1/userinfo`, url/uri on which the api request is done to obtain user information and the jwt token, (passed to the `action-favorite` component),~~ deprecated
- `debug`: type: `Boolean`, default: `false`, for the demo/debug mode to be able to run in a standalone way (disable api call).

#### Events

##### Emitted

- `toggle-favorite`, target : `component`, details: `fname,chanId,isFavorite`, emited when `toggle` event of embed `action-favorite` is emitted.

### The content grid category filter

This component is an external version of the filter built into Content Grid that allows for arbitrary placement on the page.

#### Html

```html
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js"
  defer
></script>

<esco-content-grid
  portlet-card-size="gridPortletCardSize"
  hide-action="hideAction"
>
</esco-content-grid>

<esco-content-grid-filter></esco-content-grid-filter>
```

#### Properties

- `categories`,type: `array`,default: `[]`, list of the categories, can be used to preset them
- `filter-Category`,type: `string`,default: `''`, current selected category, can be used to preset it

#### Events

##### Emited

- `esco-cm-grid-filter`, target : `window`, details: `category`, emited when category is choosen or when `esco-cm-request-grid-filter` event is received.
- `esco-cm-request-categories`, target : `window`, details: `categories`, emited when categories list is calculated or when `esco-cm-request-categories` event is received.

##### Listened

- `esco-cm-grid-filter`, details: `category,value`, when received, use `detail` to update the selected category.
- `esco-cm-request-grid-filter`, when received, emit `esco-cm-grid-filter` event with the filter parameters in `detail`.
- `esco-cm-request-categories`, when received, emit `esco-cm-categories` event with the categories list in `detail`.
- `esco-cm-categories`, when received, update categories list
-

### The ellipsis

This component permit to apply an auto-fit/trunc or a line-clamping to a text when the div size should be limited. It avoids to apply an overflow: hidden and permit to manage an ellipsis on several line.

#### Html

```html
<script src="/resource-server/webjars/uportal__esco-content-menu/dist/esco-content-menu.min.js" defer></script>

<esco-ellipsis
  message="text">
</esco-elipsis>
```

#### Properties

- `message`: type: `String`, default: `''`, the text to "ellipsise",
- `line-clamp`: type: `Number`, default: `0`, when we want a number of line, else will apply an auto-fit on the available size (the parent should have a defined height),
- `line-height`: type: `String`, default: `'22px'`, the line heigth of the text is required for the auto-fit,
- `end-char`: type: `String`, default: `'...'`, a text to apply when a trunc appear,
- `end-html`: type: `String`, default: `''`, a text to apply at end of the html.

### The header buttons

This component render a header part with some main buttons, like closing the page menu or to sign out.

#### Html

```html
<script src="/resource-server/webjars/vue/dist/vue.min.js"></script>
<script
  src="/resource-server/webjars/uportal__esco-content-menu/dist/esco.min.js"
  defer
></script>

<esco-header-button call-on-close="function"> </esco-header-button>
```

#### Properties

- `call-on-close`: type: `Function`, default: `{}`, callback function on click on the close button,
- `sign-out-url`: type: `String`, default: `/uPortal/Logout`, an uri/url to call when user logout (for a logout button),

## FAQ

- Q: What does "ESCO" mean?
- A: "ESCO" is an abbreviation of "e-scolaire", French for Online School.

### Theming

Currently this component supports [CSS Variables](https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables) for overriding button colors. Defining the following variables will change the colors for the component accordingly. They will fall back to the colors described below.

**_NOTE:_** This is only supported when the size attribute is set to `custom`.

You should define this in your custom stylesheet.

```css
:root {
  --content-gridcard-padding: 5px;
  --content-gridcard-border: none;
  --content-gridcard-bg-color: white;
  --content-gridcard-border-radius: 5px;
  --content-gridcard-shadow: none;
  --content-gridcard-shadow-hover: none;
  --content-gridcard-size-w: 180px;
  --content-gridcard-size-h: 180px;
  --content-gridcard-icon-size: 75px;
  --content-gridcard-icon-size: 75px;
  --content-gridcard-title-fontsize: 16px;
  --content-gridcard-description-fontsize: 16px;

  --content-griditem-margin: 20px auto;
}
```