UNPKG

@gip-recia/esco-content-menu-lit

Version:

Web component to display into eyebrow menu a user information menu with profile picture and more.

645 lines (489 loc) 28.4 kB
# 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; } ```