- -
- -
-
- -
- - {{ content }} - -
-
+ + React-admin - {{ page.title }} + + + + + + + + + + + + + + + + + + + + + + + + + +
+ {% include nav.html %} +
    + +
  • {% include versions.html %}
  • + {% include_relative navigation.html %} +
+
+ +
+
+
+
+
+ {{ content }}
+
+
+
-
- + + + + + + + {% if page.dir contains "doc" %} {% assign version = page.dir | split: + '/' | last %} {% else %} {% assign version = "latest" %} {% endif %} + - ga('create', 'UA-46201426-1', 'auto'); - ga('send', 'pageview'); + + + + + - - - + {% include banner_script.html %} + diff --git a/docs/addRefreshAuthToAuthProvider.md b/docs/addRefreshAuthToAuthProvider.md new file mode 100644 index 00000000000..b91b59c012b --- /dev/null +++ b/docs/addRefreshAuthToAuthProvider.md @@ -0,0 +1,85 @@ +--- +layout: default +title: "addRefreshAuthToAuthProvider" +--- + +# `addRefreshAuthToAuthProvider` + +This helper function wraps an existing [`authProvider`](./Authentication.md) to support authentication token refreshing mechanisms. + +## Usage + +Use `addRefreshAuthToAuthProvider` to decorate an existing auth provider. In addition to the base provider, this function takes a function responsible for refreshing the authentication token if needed. + +Here is a simple example that refreshes an expired JWT token when needed: + +```jsx +// in src/refreshAuth.js +import { getAuthTokensFromLocalStorage } from './getAuthTokensFromLocalStorage'; +import { refreshAuthTokens } from './refreshAuthTokens'; + +export const refreshAuth = () => { + const { accessToken, refreshToken } = getAuthTokensFromLocalStorage(); + if (accessToken.exp < Date.now().getTime() / 1000) { + // This function will fetch the new tokens from the authentication service and update them in localStorage + return refreshAuthTokens(refreshToken); + } + return Promise.resolve(); +} + +// in src/authProvider.js +import { addRefreshAuthToAuthProvider } from 'react-admin'; +import { refreshAuth } from 'refreshAuth'; + +const myAuthProvider = { + // ...Usual AuthProvider methods +}; + +export const authProvider = addRefreshAuthToAuthProvider(myAuthProvider, refreshAuth); +``` + +Then, pass the decorated provider to the `` component + +```jsx +// in src/App.js +import { Admin } from 'react-admin'; +import { dataProvider } from './dataProvider'; +import { authProvider } from './authProvider'; + +export const App = () => ( + + {/* ... */} + +) +``` + +**Tip:** We usually wrap the data provider's methods in the same way. You can use the [`addRefreshAuthToDataProvider`](./addRefreshAuthToDataProvider.md) helper function to do so. + +## `provider` + +The first argument must be a valid `authProvider` object - for instance, [any third-party auth provider](./AuthProviderList.md). + +```jsx +// in src/authProvider.js +import { addRefreshAuthToAuthProvider } from 'react-admin'; + +const myAuthProvider = { + // ...Usual AuthProvider methods +}; + +export const authProvider = addRefreshAuthToAuthProvider(myAuthProvider, [ /* refreshAuth function */ ]); +``` + +## `refreshAuth` + +The second argument is a function responsible for refreshing the authentication tokens if needed. It must return a promise. + +```jsx +import { refreshAuth } from "./refreshAuth"; + +export const authProvider = addRefreshAuthToAuthProvider(myAuthProvider, refreshAuth); +``` + +## See Also + +- [`addRefreshAuthToDataProvider`](./addRefreshAuthToDataProvider.md) diff --git a/docs/addRefreshAuthToDataProvider.md b/docs/addRefreshAuthToDataProvider.md new file mode 100644 index 00000000000..604c1cec5c9 --- /dev/null +++ b/docs/addRefreshAuthToDataProvider.md @@ -0,0 +1,83 @@ +--- +layout: default +title: "addRefreshAuthToDataProvider" +--- + +# `addRefreshAuthToDataProvider` + +This helper function wraps an existing [`dataProvider`](./DataProviders.md) to support authentication token refreshing mechanisms. + +## Usage + +Use `addRefreshAuthToDataProvider` to decorate an existing data provider. In addition to the base provider, this function takes a function responsible for refreshing the authentication token if needed. + +Here is a simple example that refreshes an expired JWT token when needed: + +```jsx +// in src/refreshAuth.js +import { getAuthTokensFromLocalStorage } from './getAuthTokensFromLocalStorage'; +import { refreshAuthTokens } from './refreshAuthTokens'; + +export const refreshAuth = () => { + const { accessToken, refreshToken } = getAuthTokensFromLocalStorage(); + if (accessToken.exp < Date.now().getTime() / 1000) { + // This function will fetch the new tokens from the authentication service and update them in localStorage + return refreshAuthTokens(refreshToken); + } + return Promise.resolve(); +} + +// in src/dataProvider.js +import { addRefreshAuthToDataProvider } from 'react-admin'; +import simpleRestProvider from 'ra-data-simple-rest'; +import { refreshAuth } from 'refreshAuth'; + +const baseDataProvider = simpleRestProvider('http://path.to.my.api/'); + +export const dataProvider = addRefreshAuthToDataProvider(baseDataProvider, refreshAuth); +``` + +Then, pass the decorated provider to the `` component + +```jsx +// in src/App.js +import { Admin } from 'react-admin'; +import { dataProvider } from './dataProvider'; + +export const App = () => ( + + {/* ... */} + +) +``` + +**Tip:** We usually wrap the auth provider's methods in the same way. You can use the [`addRefreshAuthToAuthProvider`](./addRefreshAuthToAuthProvider.md) helper function to do so. + +## `provider` + +The first argument must be a valid `dataProvider` object - for instance, [any third-party data provider](./DataProviderList.md). + +```jsx +// in src/dataProvider.js +import { addRefreshAuthToDataProvider } from 'react-admin'; +import simpleRestProvider from 'ra-data-simple-rest'; + +const baseDataProvider = simpleRestProvider('http://path.to.my.api/'); + +export const dataProvider = addRefreshAuthToDataProvider(baseDataProvider, [ /* refreshAuth function */ ]); +``` + +## `refreshAuth` + +The second argument is a function responsible for refreshing the authentication tokens if needed. It must return a promise. + +```jsx +import jsonServerProvider from "ra-data-json-server"; +import { refreshAuth } from "./refreshAuth"; + +export const dataProvider = addRefreshAuthToDataProvider(baseDataProvider, refreshAuth); +``` + +## See Also + +- [`addRefreshAuthToAuthProvider`](./addRefreshAuthToAuthProvider.md) diff --git a/docs/assets/features.md_ignore b/docs/assets/features.md_ignore new file mode 100644 index 00000000000..20db01391b8 --- /dev/null +++ b/docs/assets/features.md_ignore @@ -0,0 +1,356 @@ +If you don't use `` in a list, you'll need a control to let users choose the sort order. The `` component does just that. #list https://marmelab.com/react-admin/SortButton.html + +![SortButton](https://marmelab.com/react-admin/img/sort-button.gif) + +--- + +The filter sidebar is a great way to let users filter a list by selecting possible filter values with the mouse. But for a full-text search, you need a form input with a watch on the value. That's what `` does. #list https://marmelab.com/react-admin/FilterLiveSearch.html + +![FilterLiveSearch](https://marmelab.com/react-admin/img/filter-live-search.gif) + +--- + +`` renders the number of records related to another record via a one-to-many relationship (e.g. the number of comments related to a post). It calls dataProvider.getManyReference() with the pagination parameter set to retrieve no data - only the total number of records. #relationships https://marmelab.com/react-admin/ReferenceManyCount.html + +![ReferenceManyCount](https://marmelab.com/react-admin/img/reference_many_count.webp) + +--- + +The `` component lets users switch from light to dark mode, and persists that choice by leveraging the store. #preferences https://marmelab.com/react-admin/ToggleThemeButton.html + +![ToggleThemeButton](https://marmelab.com/react-admin/img/ToggleThemeButton.gif) + +--- + +If you need horizontal space, switch the classic menu for an ``. It renders a reduced menu bar with a sliding panel for second-level menu items. This menu saves a lot of screen real estate, and allows for sub menus of any level of complexity. #UI https://marmelab.com/react-admin/IconMenu.html + +![IconMenu](https://react-admin-ee.marmelab.com/assets/ra-multilevelmenu-categories.gif) + +--- + +To let user enter a boolean value, you can use the `` to render a switch. But most often, you need the ``, which renders a select input with three choices: "Yes", "No" and "" (empty string). It is necessary to distinguish between false and empty values #input https://marmelab.com/react-admin/NullableBooleanInput.html + +![NullableBooleanInput](https://marmelab.com/react-admin/img/nullable-boolean-input.gif) + +--- + +The `` component renders a confirmation dialog. It's useful to confirm destructive actions, such as deleting a record. #ui https://marmelab.com/react-admin/Confirm.html + +![Confirm dialog](https://marmelab.com/react-admin/img/confirm-dialog.png) + +--- + +`` has one drawback: users have to click on it to see the choices. `` is a better alternative for a small list of choices, as it shows all the options by default. #input https://marmelab.com/react-admin/CheckboxGroupInput.html + +![CheckboxGroupInput](https://marmelab.com/react-admin/img/checkbox-group-input.gif) + +--- + +When a form becomes too complex, organize the inputs in different sections with the ``. #form https://marmelab.com/react-admin/TabbedForm.html + +![TabbedForm](https://marmelab.com/react-admin/img/tabbed-form.gif) + +--- + +To provide users visibility on their progression through a complex form, use the ``. #form https://marmelab.com/react-admin/WizardForm.html + +![WizardForm](https://react-admin-ee.marmelab.com/assets/ra-wizard-form-overview.gif) + +--- + +If you need nested forms to edit e.g. variants of a product, use the `` component. It leverages the `` to let you edit record in another table. #form https://marmelab.com/react-admin/ReferenceManyInput.html + +![ReferenceManyInput](https://marmelab.com/react-admin/img/reference-many-input.gif) + +--- + +If your app relies heavily on filters, you can offer your users the ability to save their favorite filters. The `` component lets users save the current filter and sort parameters, and retrieve them later. #list https://marmelab.com/react-admin/FilteringTutorial.html#saved-queries-let-users-save-filter-and-sort + + + +--- + +You can let end users customize the fields displayed in the `` by using the `` component instead. #list https://marmelab.com/react-admin/Datagrid.html#configurable + + + +--- + +If you are working with records that can be edited by only one user at a time, you can use react-admin to put locks on records. The `useLockOnMount` hook will lock the record when the component mounts, while the `useLockOnCall` hook allows you to trigger the lock manually. #realtime https://marmelab.com/react-admin/useLockOnMount.html + + + +--- + +You can leverage react-admin's realtime abilities to get live updates about the lock status of records. Use `useGetLockLive` to get the live lock status for a specific record, or `useGetLocksLive` to get them all for a specific resource. #realtime https://marmelab.com/react-admin/useGetLockLive.html + + + +--- + +Many end-users prefer an Excel-like experience when browsing a list of records. They want to see the first records, then scroll down to see more, and so on. This is called infinite pagination, and it's supported in react-admin. #list https://marmelab.com/react-admin/InfiniteList.html + + + +--- + +With your admin getting bigger, or if you have to manage many resources and/or sub-resources, it might be a good idea to add a breadcrumb to your app. The `` component will do just that. #ui https://marmelab.com/react-admin/Breadcrumb.html + + + +--- + +React-admin ships with a powerful and versatile validation engine. It supports the most common validation strategies: + +- per field validation +- form validation +- schema validation, e.g. powered by yup or zod +- server-side validation + +\#forms https://marmelab.com/react-admin/Features.html#forms--validation + +![Validation example](https://marmelab.com/react-admin/img/validation.png) + +--- + +The `` component, also known as the “language switcher”, displays a menu allowing users to select the language of the interface. It leverages the store to persist their selection. #i18n #preferences https://marmelab.com/react-admin/LocalesMenuButton.html + + + +--- + +To bootstrap a List view based on a new API route, you can use the `` component to generate the JSX for the table columns for you. #list https://marmelab.com/react-admin/ListGuesser.html + +![ListGuesser](https://marmelab.com/react-admin/img/guessed-list.png) + +--- + +To bootstrap a new react-admin project, prefer the `create-react-admin` package. It will generate a fully functional React App powered by Vite, complete with a data provider, an auth provider, and a few example resources. #getting-started https://marmelab.com/react-admin/CreateReactAdmin.html + + + +--- + +Edition forms in react-admin have a built-in "Undo" feature, letting end users cancel a form submissions a few seconds after they have submitted it. You can disable this built-in feature by setting `mutationMode` as `pessimistic`. #form https://marmelab.com/react-admin/Features.html#forms--undo + + + +--- + +`` is designed to be a page component, passed to the edit prop of the `` component. But you may want to let users edit a record in a dialiog without leaving the context of the list page. If so, you can use the `` component. #form https://marmelab.com/react-admin/EditDialog.html + + + +--- + +If you want to let users edit a record from another page, use the `` component. #form https://marmelab.com/react-admin/EditInDialogButton.html + + + +--- + +The `` component lets users save a form automatically after a given delay. It's useful to avoid losing data when users navigate away from a form without submitting it. #form https://marmelab.com/react-admin/AutoSave.html + + + +--- + +Use `` in an `` or `` view to edit a record linked to the current record via a one-to-one relationship, e.g. to edit the details of a book in the book edition view. #form https://marmelab.com/react-admin/ReferenceOneInput.html + + + +--- + +The `` component renders a global search input. It’s designed to be always accessible in the top ``. #ui https://marmelab.com/react-admin/Search.html + + + +--- + +The `` component makes another component configurable by the end user. When users enter the configuration mode, they can customize the component’s settings via the inspector. #ui https://marmelab.com/react-admin/Configurable.html + + + +--- + +In the case you want keep track of user actions, and get an overview of the activity of your admin, you can display event lists and audit logs with ``, `` and with `` components. #activitylog #timeline #eventlog https://react-admin-ee.marmelab.com/ra-audit-log + + + +--- + +To show more data from a resource without adding too many columns, you can show data in an expandable panel below the row on demand, using the `` prop. #datagrid https://marmelab.com/react-admin/Datagrid.html#expand + + + +--- +With your admin getting bigger, the default sidebar menu might become too crowded. The `SolarLayout` is a beautiful alternative layout that help you organize your pages. #ui + + + +--- + +If your app needs to display **events**, **appointments**, **time intervals**, or any other kind of time-based data, you can use the `` component. #ui https://marmelab.com/react-admin/Calendar.html + + + +--- + +`` allows you to perform bulk actions such as mass deletion or mass edition. You can add other bulk action buttons by passing a custom element as the `bulkActionButtons` prop of the `` component. #datagrid https://marmelab.com/react-admin/Datagrid.html#bulkactionbuttons + + + +--- + +The `` component renders a search input and the search results directly below the input. It's ideal for dashboards or menu panels. #ui #search https://react-admin-ee.marmelab.com/ra-search#searchwithresult + + + +--- + +All Field components accept a type parameter that describes the record. This lets TypeScript validate that the `source` prop targets an actual field of the record, and will also allow your IDE to provide auto-completion for both the `source` and `sortBy` props. `` will also allow TypeScript to provide auto-completion for the `record` fields. #typescript https://marmelab.com/react-admin/Fields.html#typescript + +![FunctionField TypeScript](https://marmelab.com/static/44d79f8feb06b87c363c301395037081/df77d/typescript-function-field.webp) + +--- + +React Admin supports translation out of the box. It supports features like interpolation, pluralization and default translation. You can customize the translation keys to translate any part of the UI, or you can use the `useTranslate` hook to easily translate custom components. #i18n https://marmelab.com/react-admin/Translation.html + + + +--- + +The `` component renders navigation buttons linking to the next or previous record of a resource. It also renders the current index and the total number of records. #ux #navigation https://marmelab.com/react-admin/PrevNextButtons.html + + + +--- + +`` offers a replacement for `` when the records form a **tree structure** (like directories, categories, etc.). It allows to render the tree alongside the show/edit views. #list #tree https://marmelab.com/react-admin/TreeWithDetails.html + + + +--- + +The `` component allows to select one or several nodes from a tree. #input #tree https://marmelab.com/react-admin/TreeInput.html + + + +--- + +React-admin Enterprise Edition proposes alternative components to ``, `` and `` based on the MUI X Date/Time pickers. They allow for more customization of the UI, and make it easier to work with specific locale and date formats. #input #date https://react-admin-ee.marmelab.com/documentation/ra-form-layout#dateinput-datetimeinput-and-timeinput + + + +--- + +When your admin application is a Single Page Application, users who keep a browser tab open at all times might not use the most recent version of the application. + +If you include the `` component to your layout, React Admin will regularly check whether the application source code has changed and prompts users to reload the page when an update is available. #spa #ux https://marmelab.com/react-admin/CheckForApplicationUpdate.html + +![CheckForApplicationUpdate](https://marmelab.com/react-admin/img/CheckForApplicationUpdate.png) + +--- + +If you need to display an enumerated field in a list component like Datagrid, `` allows to easily map the value to a string. #list #datagrid https://marmelab.com/react-admin/SelectField.html + +![SelectField](https://marmelab.com/react-admin/img/SelectField.png) + diff --git a/docs/assets/logo_white.png b/docs/assets/logo_white.png new file mode 100644 index 00000000000..30b8dd6664b Binary files /dev/null and b/docs/assets/logo_white.png differ diff --git a/docs/assets/tips.md_ignore b/docs/assets/tips.md_ignore new file mode 100644 index 00000000000..456142d721c --- /dev/null +++ b/docs/assets/tips.md_ignore @@ -0,0 +1,2078 @@ +You can restrict access to certain pages based on the current user's permissions. For example, to restrict the ability to edit customer details or to add new admin users: + +```jsx +const App = () => ( + + {(permissions) => ( + <> + {/* Restrict access to the edit view to admin only */} + + {/* Only include the adminUsers resource for admin users */} + {permissions === "admin" ? ( + + ) : null} + + )} + +); +``` + +https://marmelab.com/react-admin/Permissions.html#restricting-access-to-resources-or-views + +--- + +Use `` with a `sort` prop to display the latest record related to the current one. For instance, to render the latest message in a discussion: + +{% raw %} + +```jsx + + + +``` + +{% endraw %} + +https://marmelab.com/react-admin/ReferenceOneField.html#usage + +--- + +Use `useAuthenticated` to restrict access to custom pages to authenticated users. + +```jsx +import { useAuthenticated } from "react-admin"; + +const MyPage = () => { + useAuthenticated(); // redirects to login if not authenticated + return
...
; +}; + +export default MyPage; +``` + +https://marmelab.com/react-admin/useAuthenticated.html + +--- + +Add the following theme override to remove bottom gutters on the last row of all ``, and hence improve the UI of all lists, especially when using rounded corners. + +```js +import { defaultTheme } from "react-admin"; + +export const lightTheme = { + ...defaultTheme, + components: { + ...defaultTheme.components, + MuiTableRow: { + styleOverrides: { + root: { + "&:last-child td": { border: 0 }, + }, + }, + }, + }, +}; +``` + +https://github.com/marmelab/react-admin/blob/master/examples/demo/src/layout/themes.ts#L102 + +--- + +If you want to publish a public list page in an application that uses authentication, you must set the `disableAuthentication` prop to `true` on the `` component. #security + +```jsx +import { List } from "react-admin"; + +const BookList = () => ...; +``` + +https://marmelab.com/react-admin/List.html#disableauthentication + +--- + +If you use `useGetOne` in a custom component that may be used more than once per page, prefer the `useGetManyAggregate` hook to group and deduplicate all API requests into a single one. #performance + +```diff +-import { useGetOne, useRecordContext } from 'react-admin'; ++import { useGetManyAggregate, useRecordContext } from 'react-admin'; + +const UserProfile = () => { + const record = useRecordContext(); +- const { data: user, isLoading, error } = useGetOne('users', { id: record.userId }); ++ const { data: users, isLoading, error } = useGetManyAggregate('users', { ids: [record.userId] }); + if (isLoading) { return ; } + if (error) { return

ERROR

; } +- return
User {user.username}
; ++ return
User {users[0].username}
; +}; +``` + +https://marmelab.com/react-admin/useGetOne.html#aggregating-getone-calls + +--- + +The filter sidebar is a great way to let users filter a list by selecting possible filter values with the mouse. But for a full-text search, you need a form input with a watch on the value. That's what `` does. #list + +```diff ++import { FilterLiveSearch } from 'react-admin'; + +const FilterSidebar = () => ( + + ++ + + + + + + +); +``` + +https://marmelab.com/react-admin/FilterLiveSearch.html + +--- + +If you don't use `` in a list, you'll need a control to let users choose the sort order. The `` component does just that. #list + +```jsx +import * as React from "react"; +import { + TopToolbar, + SortButton, + CreateButton, + ExportButton, +} from "react-admin"; + +const ListActions = () => ( + + + + + +); +``` + +https://marmelab.com/react-admin/SortButton.html + +--- + +Sometimes, the default views from react-admin may not match the design you want. For instance, you may want to have more prominent page titles, add breadcrumbs or display the view actions elsewhere. React-admin provides _base_ components for each view (e.g. `` instead of ``). These headless components give you full control over the UI: + +```jsx +import * as React from "react"; +import { EditBase, SimpleForm, TextInput, SelectInput } from "react-admin"; +import { Card } from "@mui/material"; + +export const BookEdit = () => ( + +
+ + <Card> + <SimpleForm> + <TextInput source="title" /> + <TextInput source="author" /> + <SelectInput source="availability" choices={[ + { id: "in_stock", name: "In stock" }, + { id: "out_of_stock", name: "Out of stock" }, + { id: "out_of_print", name: "Out of print" }, + ]} /> + </SimpleForm> + </Card> + </div> + </EditBase> +); +``` + +--- + +When leveraging `<ReferenceInput>` to let users select a related record from a list, you may want to display only a subset of the related records (e.g. only the published posts). You can do so by adding a `filter` prop to the `<ReferenceInput>`. #relationship https://marmelab.com/react-admin/ReferenceInput.html#filter + +{% raw %} + +```jsx +<ReferenceInput + source="post_id" + reference="posts" + filter={{ is_published: true }} +/> +``` + +{% endraw %} + +--- + +The `sx` prop is responsive: you can set different values depending on the breakpoint. #style https://marmelab.com/react-admin/Theming.html#sx-overriding-a-component-style + +{% raw %} + +```jsx +<Box + sx={{ + width: { + xs: 100, // theme.breakpoints.up('xs') + sm: 200, // theme.breakpoints.up('sm') + md: 300, // theme.breakpoints.up('md') + lg: 400, // theme.breakpoints.up('lg') + xl: 500, // theme.breakpoints.up('xl') + }, + }} +> + This box has a responsive width. +</Box> +``` + +{% endraw %} + +--- + +The `<ListLive>` component is a `<List>` that automatically refreshes when the data changes. #list #realtime https://marmelab.com/react-admin/ListLive.html + +```jsx +import { Datagrid, TextField } from "react-admin"; +import { ListLive } from "@react-admin/ra-realtime"; + +const PostList = () => ( + <ListLive> + <Datagrid> + <TextField source="title" /> + </Datagrid> + </ListLive> +); +``` + +--- + +Don't add an optional "s" to a name depending on the item count: `useTranslate` supports pluralization. #i18n https://marmelab.com/react-admin/useTranslate.html#using-pluralization-and-interpolation + +```jsx +const messages = { + 'hello_name': 'Hello, %{name}', + 'count_beer': 'One beer |||| %{smart_count} beers', +}; + +const translate = useTranslate(); + +// interpolation +translate('hello_name', { name: 'John Doe' }); +=> 'Hello, John Doe.' + +// pluralization +translate('count_beer', { smart_count: 1 }); +=> 'One beer' + +translate('count_beer', { smart_count: 2 }); +=> '2 beers' +``` + +--- + +`<SelectInput>` can render certain options as disabled. Just set the `disabled:true` property on the option. #input https://marmelab.com/react-admin/SelectInput.html#disablevalue + +```jsx +const choices = [ + { id: "tech", name: "Tech" }, + { id: "lifestyle", name: "Lifestyle" }, + { id: "people", name: "People", disabled: true }, +]; +<SelectInput source="category" choices={choices} />; +``` + +--- + +If you need to transform or combine multiple values to render a field, `<FunctionField>` is the perfect match. + +While `render` is the only required prop, when used inside a `<Datagrid>`, you can also provide a `source` or a `sortBy` prop to make the column sortable. Indeed when a user clicks on a column, `<Datagrid>` uses these props to sort. Should you provide both, `sortBy` will override `source` for sorting the column. + +#field https://marmelab.com/react-admin/FunctionField.html + +```diff +<Datagrid> + <FunctionField ++ source="last_name" + render={customer => + customer + ? `${customer.first_name} ${customer.last_name}` + : '' + } + /> +</Datagrid> +``` + +--- + +Need to setup a POC quickly and you don't have an API yet? Use the FakeRest data provider and get a local fake REST server based on simple JSON objects! #dataFetching https://www.npmjs.com/package/ra-data-fakerest + +```jsx +import * as React from "react"; +import { Admin, Resource } from "react-admin"; +import fakeDataProvider from "ra-data-fakerest"; + +const dataProvider = fakeDataProvider({ + posts: [ + { id: 0, title: "Hello, world!" }, + { id: 1, title: "FooBar" }, + ], + comments: [ + { id: 0, post_id: 0, author: "John Doe", body: "Sensational!" }, + { id: 1, post_id: 0, author: "Jane Doe", body: "I agree" }, + ], +}); + +import { PostList } from "./posts"; + +const App = () => ( + <Admin dataProvider={dataProvider}> + <Resource name="posts" list={PostList} /> + </Admin> +); + +export default App; +``` + +--- + +If the provided form layouts do not suit your needs, you can build your own with the `<Form>` component. #form https://marmelab.com/react-admin/Form.html + +```jsx +import { + Create, + Form, + TextInput, + RichTextInput, + SaveButton, +} from "react-admin"; +import { Grid } from "@mui/material"; + +export const PostCreate = () => ( + <Create> + <Form> + <Grid container> + <Grid item xs={6}> + <TextInput source="title" fullWidth /> + </Grid> + <Grid item xs={6}> + <TextInput source="author" fullWidth /> + </Grid> + <Grid item xs={12}> + <RichTextInput source="body" fullWidth /> + </Grid> + <Grid item xs={12}> + <SaveButton /> + </Grid> + </Grid> + </Form> + </Create> +); +``` + +--- + +By default, react-admin synchronizes the `<List>` parameters (sort, pagination, filters) with the query string in the URL (using react-router location). + +When you use a `<List>` component anywhere else than as `<Resource list>`, you may want to disable this feature. +This allows, among others, to have multiple lists on a single page. + +To do so, pass the `disableSyncWithLocation` prop to the `<List>`. + +#list https://marmelab.com/react-admin/List.html#disablesyncwithlocation + +```jsx +const Dashboard = () => ( + <div> + <ResourceContextProvider value="posts"> + <List disableSyncWithLocation> + <SimpleList + primaryText={(record) => record.title} + secondaryText={(record) => `${record.views} views`} + tertiaryText={(record) => + new Date(record.published_at).toLocaleDateString() + } + /> + </List> + </ResourceContextProvider> + <ResourceContextProvider value="comments"> + <List disableSyncWithLocation> + <SimpleList + primaryText={(record) => record.title} + secondaryText={(record) => `${record.views} views`} + tertiaryText={(record) => + new Date(record.published_at).toLocaleDateString() + } + /> + </List> + </ResourceContextProvider> + </div> +); +``` + +--- + +If you need to have multiple lists of the same resource in your app, and would like to keep distinct states for each of them (filters, sorting and pagination), you can use the `storeKey` prop to differentiate them. + +#list https://marmelab.com/react-admin/List.html#storekey + +{% raw %} + +```jsx +import * as React from "react"; +import { Admin, CustomRoutes, List, Datagrid, TextField } from "react-admin"; +import { Route } from "react-router-dom"; +import { dataProvider } from "./dataProvider"; + +const Books = ({ storeKey, order }) => ( + <List resource="books" storeKey={storeKey} sort={{ field: "year", order }}> + <Datagrid> + <TextField source="id" /> + <TextField source="title" /> + <TextField source="author" /> + <TextField source="year" /> + </Datagrid> + </List> +); + +const App = () => ( + <Admin dataProvider={dataProvider}> + <CustomRoutes> + <Route + path="/newerBooks" + element={<Books storeKey="newerBooks" order="DESC" />} + /> + <Route + path="/olderBooks" + element={<Books storeKey="olderBooks" order="ASC" />} + /> + </CustomRoutes> + </Admin> +); +``` + +{% endraw %} + +--- + +How to build a multi-tenant web app with react-admin? Although this may sound simple, you should NOT do the following. This blog post explains why. #multiTenancy https://marmelab.com/blog/2022/12/14/multitenant-spa.html + +```diff ++const tenantId = localStorage.getItem('tenantId'); +const { data, isLoading } = useGetList( + 'tickets', + { + pagination: { page: 1, perPage: 25 }, + sort: { field: 'id', order: 'DESC' }, +- filter: {}, ++ filter: { tenantId }, + }, +); +``` + +--- + +If you need to build an app relying on more than one API, you can combine multiple data providers into one using the `combineDataProviders` helper. #dataFetching https://marmelab.com/react-admin/DataProviders.html#combining-data-providers + +```jsx +import buildRestProvider from "ra-data-simple-rest"; +import { + Admin, + Resource, + ListGuesser, + combineDataProviders, +} from "react-admin"; + +const dataProvider1 = buildRestProvider("http://path.to.my.first.api/"); +const dataProvider2 = buildRestProvider("http://path.to.my.second.api/"); + +const dataProvider = combineDataProviders((resource) => { + switch (resource) { + case "posts": + case "comments": + return dataProvider1; + case "users": + return dataProvider2; + default: + throw new Error(`Unknown resource: ${resource}`); + } +}); + +export const App = () => ( + <Admin dataProvider={dataProvider}> + <Resource name="posts" list={ListGuesser} /> + <Resource name="comments" list={ListGuesser} /> + <Resource name="users" list={ListGuesser} /> + </Admin> +); +``` + +--- + +React Admin's `fetchJson` is a neat utility that makes it easier to query a JSON API with the required headers. It also allows to add your own headers, and handles the JSON decoding of the response. #dataProvider https://marmelab.com/react-admin/fetchJson.html + +```js +import { fetchUtils } from "react-admin"; +const httpClient = async (url, options = {}) => { + const { status, headers, body, json } = await fetchUtils.fetchJson( + url, + options + ); + console.log("fetchJson result", { status, headers, body, json }); + return { status, headers, body, json }; +}; +``` + +--- + +If you need to combine several fields in a single cell (in a `<Datagrid>`) or in a single row (in a `<SimpleShowLayout>`), use a `<WrapperField>` to define the `label` and `sortBy` props. #field https://marmelab.com/react-admin/WrapperField.html + +```js +import { List, Datagrid, WrapperField, TextField } from "react-admin"; + +const BookList = () => ( + <List> + <Datagrid> + <TextField source="title" /> + <WrapperField label="author" sortBy="author.last_name"> + <TextField source="author_first_name" /> + <TextField source="author_last_name" /> + </WrapperField> + </Datagrid> + </List> +); +``` + +--- + +If you use `useMediaQuery` to display different content on mobile and desktop, be aware that the component will render twice on mobile - that's a limitation of the hook to support server-side rendering. To avoid that double render, set the `noSsr` option. #mobile https://marmelab.com/react-admin/Theming.html#usemediaquery-hook + +```jsx +import { useMediaQuery, Theme } from "@material-ui/core"; + +const PostList = () => { + const isSmall = + useMediaQuery < + Theme > + ((theme) => theme.breakpoints.down("md"), { noSsr: true }); + return isSmall ? <PostListMobile /> : <PostListDesktop />; +}; +``` + +--- + +You can use a `<Show>` Layout component for the `<Datagrid expand>` prop. #datagrid https://marmelab.com/react-admin/Datagrid.html#expand + +```jsx +const PostShow = () => ( + <SimpleShowLayout> + <RichTextField source="body" /> + </SimpleShowLayout> +); + +const PostList = () => ( + <List> + <Datagrid expand={<PostShow />}> + <TextField source="id" /> + <TextField source="title" /> + <DateField source="published_at" /> + <BooleanField source="commentable" /> + <EditButton /> + </Datagrid> + </List> +); +``` + +--- + +By default, the `polyglotI18nProvider` logs a warning each time a message can’t be found in the translations. This helps track missing translation keys. To silence this, you can pass the `allowMissing` option to Polyglot. #i18n https://marmelab.com/react-admin/TranslationSetup.html#silencing-translation-warnings + +```diff +// in src/i18nProvider.js +import polyglotI18nProvider from 'ra-i18n-polyglot'; +import en from './i18n/englishMessages'; +import fr from './i18n/frenchMessages'; + +const i18nProvider = polyglotI18nProvider(locale => + locale === 'fr' ? fr : en, + 'en', // Default locale + [ + { locale: 'en', name: 'English' }, + { locale: 'fr', name: 'Français' } + ], ++ { allowMissing: true } +); +``` + +--- + +The `<AutocompleteInput>` dropdown has the same width as the input. You can make it larger by specifying a custom `PopperComponent` prop. #autocomplete https://marmelab.com/react-admin/AutocompleteInput.html + +{% raw %} + +```jsx +import { AutocompleteInput, ReferenceInput, SearchInput } from "react-admin"; +import { Popper } from "@mui/material"; + +const LargePopper = (props: any) => ( + <Popper {...props} style={{ width: 400 }} placement="bottom-start" /> +); + +const ListFilters = [ + <SearchInput alwaysOn />, + <ReferenceInput reference="companies" source="company_id" alwaysOn> + <AutocompleteInput PopperComponent={LargePopper} /> + </ReferenceInput>, +]; +``` + +{% endraw %} + +--- +If you need to add custom pages in your application, for instance to let users manage their profile (password, preferences, etc), use the `<CustomRoutes>` component. #router https://marmelab.com/react-admin/CustomRoutes.html + +```jsx +import { Admin, Resource, CustomRoutes } from 'react-admin'; +import { Route } from "react-router-dom"; + +import dataProvider from './dataProvider'; +import posts from './posts'; +import comments from './comments'; +import Settings from './Settings'; +import Profile from './Profile'; + +const App = () => ( + <Admin dataProvider={dataProvider}> + <Resource name="posts" {...posts} /> + <Resource name="comments" {...comments} /> + <CustomRoutes> + <Route path="/settings" element={<Settings />} /> + <Route path="/profile" element={<Profile />} /> + </CustomRoutes> + </Admin> +); + +export default App; +``` + +--- + +If you'd like to reset the list filters when your users click on a menu item, you can use an empty `filter` query parameter to empty the filters. #list #menu https://marmelab.com/react-admin/Menu.html#resetting-filters-on-menu-click + +```jsx +<Menu.Item + to="/posts?filter=%7B%7D" // %7B%7D is JSON.stringify({}) + primaryText="Posts" + leftIcon={<BookIcon />} +/> +``` + +--- + +If you need to display/hide an input based on the value of another input, the `<FormDataConsumer>` component can help. Also, remember to set the `shouldUnregister` prop, so that when the input is hidden, its value isn’t included in the submitted data. #form https://marmelab.com/react-admin/Inputs.html#hiding-inputs-based-on-other-inputs + +{% raw %} + +```jsx +import { FormDataConsumer } from 'react-admin'; + +const PostEdit = () => ( + <Edit> + <SimpleForm shouldUnregister> + <BooleanInput source="hasEmail" /> + <FormDataConsumer> + {({ formData, ...rest }) => formData.hasEmail && + <TextInput source="email" {...rest} /> + } + </FormDataConsumer> + </SimpleForm> + </Edit> +); +``` + +{% endraw %} + +--- + +You can leverage the `useListContext` hook to build your own list UI. #list https://marmelab.com/react-admin/useListContext.html + +{% raw %} + +```jsx +const CompanyList = () => { + const { data, isLoading } = useListContext(); + + if (isLoading) return null; + + return ( + <Box display="flex" flexWrap="wrap" width="100%" gap={1}> + {data.map(record => ( + <RecordContextProvider key={record.id} value={record}> + <CompanyCard /> + </RecordContextProvider> + ))} + </Box> + ); +}; +``` + +{% endraw %} + +--- + +`<AutocompleteInput>` and `<SelectInput>` both provide an easy way to create new options on-the-fly. Simply use the `onCreate` prop to render a `prompt` to ask users about the new value. #input https://marmelab.com/react-admin/AutocompleteInput.html#oncreate + +{% raw %} +```jsx +import { AutocompleteInput, Create, SimpleForm, TextInput } from 'react-admin'; + +const PostCreate = () => { + const categories = [ + { name: 'Tech', id: 'tech' }, + { name: 'Lifestyle', id: 'lifestyle' }, + ]; + return ( + <Create> + <SimpleForm> + <TextInput source="title" /> + <AutocompleteInput + onCreate={() => { + const newCategoryName = prompt('Enter a new category'); + const newCategory = { id: newCategoryName.toLowerCase(), name: newCategoryName }; + categories.push(newCategory); + return newCategory; + }} + source="category" + choices={categories} + /> + </SimpleForm> + </Create> + ); +} +``` + +{% endraw %} + +--- + +You can customize the preview of an image file dropped in an [`<ImageInput>` component](https://marmelab.com/react-admin/ImageInput.html). Let's replace the default preview provided by `<ImageField>`, with the [MUI Avatar component](https://mui.com/material-ui/react-avatar/): + +{% raw %} + +```jsx +import { Create, ImageInput, SimpleForm, useRecordContext } from 'react-admin'; +import Avatar from '@mui/material/Avatar'; + +export const PostCreate = () => ( + <Create> + <SimpleForm> + <ImageInput + source="file" + label="Image" + accept="image/*" + sx={{ + '& .RaFileInput-removeButton': { + '& button': { + top: -20, + right: 40, + zIndex: 1, + }, + }, + }} + > + <Preview /> + </ImageInput> + </SimpleForm> + </Create> +); + +const Preview = () => { + const record = useRecordContext(); + return ( + <Avatar + sx={{ width: 56, height: 56 }} + alt={record.title} + src={record.src} + /> + ); +}; +``` + +{% endraw %} + +--- + +`<AutocompleteInput>` accepts the same props as MUI's `<Autocomplete>`. For instance, you can use `filterSelectedOptions` to choose whether or not to display the currently selected option among the list of available choices. #input https://marmelab.com/react-admin/AutocompleteInput.html#additional-props + +{% raw %} + +```jsx +// Setting filterSelectedOptions to false will include the currently selected option +// in the list of available choices (it will be highlighted in blue) +<AutocompleteInput + filterSelectedOptions={false} +/> +``` + +{% endraw %} + +--- + +If your API does not serve a resource as expected by your application, and if you cannot tranform this resource server-side, you can alter it client-side in the `dataProvider` by using `withLifecycleCallbacks`. #dataProvider https://marmelab.com/react-admin/withLifecycleCallbacks.html + +{% raw %} +```ts +// in src/dataProvider.ts +import { withLifecycleCallbacks } from 'react-admin'; +import simpleRestProvider from 'ra-data-simple-rest'; + +const baseDataProvider = simpleRestProvider('http://path.to.my.api/'); + +export const dataProvider = withLifecycleCallbacks( + baseDataProvider, + [ + { + // we want to transform the resource called event + resource: "events", + // transform the resource after getList() + afterGetList: async (result) => { + const events = result.data.map((event) => ({ + id: event.id, + date: event.created_at, + author: { + id: event.user_id, + }, + resource: "posts", + action: event.type, + payload: { + comment: event.comment, + }, + })); + return { data: events, total: result.total }; + }, + }, + ] +); +``` +{% endraw %} + +--- + +If you want to style a particular column in a `<Datagrid>`, you can take advantage of the generated class names per column. For instance a field with `source="title"` will have the class `column-title`. #datagrid https://marmelab.com/react-admin/Datagrid.html#styling-specific-columns + +{% raw %} + +```tsx +import { List, Datagrid, TextField } from 'react-admin'; + +const PostList = () => ( + <List> + <Datagrid + sx={{ + '& .column-title': { backgroundColor: '#fee' }, + }} + > + <TextField source="id" /> + <TextField source="title" /> {/* will have different background */} + <TextField source="author" /> + <TextField source="year" /> + </Datagrid> + </List> +); +``` + +{% endraw %} + +--- + +Instead of defining the same `optionText` prop in multiple `<Input>` or `<Field>`, you can choose a default template using the `recordRepresentation` prop of `<Resource>`. #resource https://marmelab.com/react-admin/Resource.html#recordrepresentation + +{% raw %} + +```tsx +import { Admin, Resource } from 'react-admin'; + +const App = () => ( + <Admin> + <Resource + name="customers" + list={CustomerList} + recordRepresentation={(record) => + `${record.first_name} ${record.last_name}` + } + /> + </Admin> +); +``` + +{% endraw %} + +--- + +The `<ReferenceManyField>` provides a `ListContext` to its children, just like the `<List>`. You can leverage that to build richer UI for references. For instance, adding search. https://marmelab.com/react-admin/ReferenceManyField.html + +{% raw %} + +```tsx +export const PostEdit = () => ( + <Edit> + <SimpleForm> + <TextInput source="title" /> + <ReferenceManyField reference="comments" target="postId"> + <FilterLiveSearch /> + <Datagrid> + <TextField source="id" /> + <TextField source="name" /> + <TextField source="email" /> + <TextField source="body" /> + </Datagrid> + </ReferenceManyField> + </SimpleForm> + </Edit> +); +``` + +{% endraw %} + +--- + +Check the uniqueness of a value in a form with the `useUnique` validator. It checks the validity using `dataProvider.getList()` with a filter param, and fails when a record exists with the current input value. +#form https://marmelab.com/react-admin/useUnique.html + +{% raw %} +```tsx +import { SimpleForm, TextInput, useUnique } from 'react-admin'; + +const UserCreateForm = () => { + const unique = useUnique(); + return ( + <SimpleForm> + <TextInput source="username" validate={unique({ message: 'myapp.validation.unique' })} /> + </SimpleForm> + ); +}; +``` +{% endraw %} + +--- + +In confirmation messages, and on the empty page, the resource name appears in the middle of sentences, as lower case. This works in English, but you may want to display resources in another way, like in German, where names are always capitalized. To do this, simply add a `forcedCaseName` key next to the `name` key in your translation file. #i18n https://marmelab.com/react-admin/TranslationTranslating.html#forcing-the-case-in-confirm-messages-and-empty-page + +{% raw %} + +```js +{ + resources: { + comments: { + name: 'Kommentar |||| Kommentare', + // Will render "Sind Sie sicher, dass Sie diesen Kommentar löschen möchten?" + // Instead of "Sind Sie sicher, dass Sie diesen kommentar löschen möchten?" + forcedCaseName: 'Kommentar |||| Kommentare', + fields: { + id: 'Id', + name: 'Bezeichnung', + } + } + } +} +``` + +{% endraw %} + +--- + +With `<Datagrid>`, you can select a range of rows by pressing the shift key while clicking on a row checkbox. #datagrid https://marmelab.com/react-admin/Datagrid.html#bulkactionbuttons + +<video controls autoplay playsinline muted loop> + <source src="https://marmelab.com/react-admin/img/datagrid-select-range.mp4" type="video/mp4"/> + Your browser does not support the video tag. +</video> + +--- + +If you need to customize the `<SolarLayout>` appBar that appears on Mobile, you can set the `appBar` prop of `<SolarLayout>`. For instance, here's how you could customize its colors and add some extra content to its far right. +#SolarLayout https://react-admin-ee.marmelab.com/documentation/ra-navigation#appbar-1 + +{% raw %} +```tsx +const CustomAppBar = () => ( + <SolarAppBar + sx={{ color: "text.secondary", bgcolor: "background.default" }} + toolbar={ + <Box display="flex" justifyContent="space-between" alignItems="center"> + <Box mr={1}>Custom toolbar</Box> + <Box mr={1}>with</Box> + <Box mr={1}>multiple</Box> + <Box mr={1}>elements</Box> + </Box> + } + /> +); + +const CustomLayout = (props: SolarLayoutProps) => ( + <SolarLayout {...props} appBar={CustomAppBar} /> +); +``` +{% endraw %} + +--- + +There are several ways to upload files: you can send files as Base64 string, you can send files using multipart/form-data, or you might want to send files to a third party service such as CDN, etc. The Handling File Uploads section of our documentation contains example code for all three, including and example using Cloudinary as CDN. + +#dataProvider https://marmelab.com/react-admin/DataProviders.html#handling-file-uploads + +{% raw %} +```tsx +export const dataProvider = withLifecycleCallbacks( + simpleRestProvider('http://path.to.my.api'), + [ + { + resource: 'posts', + beforeSave: async (params: any) => { + const response = await fetch( + 'http://path.to.my.api/get-cloudinary-signature', + { method: 'GET' } + ); // get the Cloudinary signature from your backend + + const signData = await response.json(); + const formData = new FormData(); + formData.append('file', params.picture.rawFile); + formData.append('api_key', signData.api_key); + // add other Cloudinary parameters here, such as `signature` + + const imageResponse = await fetch( + `https://api.cloudinary.com/v1_1/${signData.cloud_name}/auto/upload`, + { + method: 'POST', + body: formData, + } + ); + + const image = await imageResponse.json(); + return { + ...params, + picture: { + src: image.secure_url, + title: image.asset_id, + }, + }; + }, + }, + ] +); +``` +{% endraw %} + +--- + +Most `<List>` children, such as `<Datagrid>`, `<SimpleList>` or `<SingleFieldList>` support the `empty` prop. It accepts a React Component, allowing to customize the content to display when the list is empty. #list https://marmelab.com/react-admin/List.html#empty + +{% raw %} +```jsx +const CustomEmpty = () => <div>No books found</div>; + +const PostList = () => ( + <List> + <Datagrid empty={<CustomEmpty />}> + <TextField source="id" /> + <TextField source="title" /> + <TextField source="views" /> + </Datagrid> + </List> +); +``` +{% endraw %} + +--- + +If you are implementing a custom list iterator, but don't want to handle the loading state by grabbing the `isLoading` variable from the `ListContext`, a convenient solution is to leverage the `<List emptyWhileLoading>` prop. With it, the `<List>` component won’t render its child component until the data is available. #list https://marmelab.com/react-admin/ListTutorial.html#building-a-custom-iterator + +{% raw %} +```jsx +import { List, useListContext } from "react-admin"; +import { Stack, Typography } from "@mui/material"; + +const BookListView = () => { + const { data } = useListContext(); + return ( + <Stack spacing={2} sx={{ padding: 2 }}> + {data.map((book) => ( + <Typography key={book.id}> + <i>{book.title}</i>, by {book.author} ({book.year}) + </Typography> + ))} + </Stack> + ); +}; + +const BookList = () => ( + <List emptyWhileLoading> + <BookListView /> + </List> +); +``` +{% endraw %} + +--- + +Components based on Material UI `<Dialog>`, like `<EditDialog>` or `<CreateDialog>`, can be set to take up full width by setting the `fullWidth` prop to `true`. It works well in conjunction with the `maxWidth` prop, allowing the dialog to grow only until a given breakpoint. #ui https://marmelab.com/react-admin/EditDialog.html#fullwidth + +{% raw %} +```jsx +const MyEditDialog = () => ( + <EditDialog fullWidth maxWidth="sm"> + ... + </EditDialog> +); +``` +{% endraw %} + +--- + +With `<EditableDatagrid>`, if you are providing your own side effects to manage successful or failed save or delete actions, you can leverage the `useRowContext` hook to close the form programmatically. #datagrid #form https://marmelab.com/react-admin/EditableDatagrid.html#providing-custom-side-effects + +{% raw %} +```tsx +import { RowForm, useRowContext } from '@react-admin/ra-editable-datagrid'; +import { useNotify } from 'react-admin'; + +const ArtistCreationForm = () => { + const notify = useNotify(); + const { close } = useRowContext(); + + const handleSuccess = response => { + notify(`Artist ${response.name} ${response.firstName} has been added`); + close(); + }; + + return ( + <RowForm mutationOptions={{ onSuccess: handleSuccess }}> + {/*...*/} + </RowForm> + ); +}; +``` +{% endraw %} + +--- + +When editing a record, if ever the record is refetched and its value has changed, the form will be reset to the new value. If you want to avoid loosing changes already made to the record, you can leverage the `resetOptions` to keep the dirty values. #form https://marmelab.com/react-admin/Form.html#props + +{% raw %} +```tsx +<SimpleForm + resetOptions={{ + keepDirtyValues: true, + }} +> + {/*...*/} +</SimpleForm> +``` +{% endraw %} + +--- + +If you would like to make the tabs vertical in a `<TabbedShowLayout>`, you can specify a different `orientation` to `<TabbedShowLayoutTabs>`, as they accept the same props as the MUI `<Tabs>` component. #form #layout https://mui.com/material-ui/react-tabs/ + +{% raw %} +```tsx +<TabbedShowLayout + tabs={<TabbedShowLayoutTabs orientation="vertical" />} + sx={{ + display: 'flex', + flexDirection: 'row', + }} +> + {/*...*/} +</TabbedShowLayout> +``` +{% endraw %} + +--- + +Instead of numbers, you can pass an array of objects to `<Pagination rowsPerPageOptions>` to specify a custom label corresponding to each value. #list https://marmelab.com/react-admin/List.html#pagination + +{% raw %} +```tsx +import { Pagination, List } from 'react-admin'; + +const PostPagination = () => ( + <Pagination + rowsPerPageOptions={[ + { label: 'ten', value: 10 }, + { label: 'twenty', value: 20 }, + { label: 'one hundred', value: 100 }, + ]} + /> +); + +export const PostList = () => ( + <List pagination={<PostPagination />}> + {/*...*/} + </List> +); +``` +{% endraw %} + +--- + +The `canAccess` helper function allows you to check if the current user has the permissions to execute an action. You can use it to disable desired links on a menu for instance. #Role-Based-Access-Control #RBAC https://react-admin-ee.marmelab.com/ra-rbac#canaccess + +```tsx +import { usePermissions, Menu } from "react-admin"; +import { canAccess } from "@react-admin/ra-rbac"; + +const MyMenu = () => { + const { permissions } = usePermissions(); + return ( + <Menu> + <Menu.DashboardItem /> + <Menu.Item + to="/categories" + primaryText="Categories" + disabled={ + !canAccess({ + permissions, + resource: "categories", + }) + } + /> + </Menu> + ); +}; +``` + +--- + +If you render more than one `<DatagridConfigurable>` on the same page, you must pass a unique preferenceKey prop to each one. Do not forget to link their `<SelectColumnsButton>` components by giving them the same preferenceKey. #datagrid https://marmelab.com/react-admin/Datagrid.html#configurable + +{% raw %} +```tsx +const PostListActions = () => ( + <TopToolbar> + <SelectColumnsButton preferenceKey="posts.datagrid" /> + </TopToolbar> +); + +const PostList = () => ( + <List actions={<PostListActions />}> + <DatagridConfigurable preferenceKey="posts.datagrid"> + <TextField source="id" /> + <TextField source="title" /> + <TextField source="author" /> + <TextField source="year" /> + </DatagridConfigurable> + </List> +); +``` +{% endraw %} + +--- + +If your API answers with an error status after submitting a form and you need to access the error object, you can use the `mutationOptions` prop. #form +https://marmelab.com/react-admin/Edit.html#mutationoptions + +{% raw %} +```ts +import * as React from 'react'; +import { useNotify, useRefresh, useRedirect, Edit, SimpleForm } from 'react-admin'; + +const PostEdit = () => { + const notify = useNotify(); + + const onError = (error) => { + notify(`Could not edit post: ${error.message}`); + }; + + return ( + <Edit mutationOptions={{ onError }}> + <SimpleForm> + ... + </SimpleForm> + </Edit> + ); +} +``` +{% endraw %} + +--- + +Setting a `QueryClient` with a `staleTime` greater than 0 means that the UI may display stale data. If necessary, you can invalidate the query so that the next `useQuery` hook fetches fresh data. +https://marmelab.com/react-admin/Admin.html#queryclient + +{% raw %} +```ts +import { useQueryClient } from "react-query"; + +const PostEdit = () => { + const queryClient = useQueryClient(); + queryClient.invalidateQueries(["posts", "getOne"]); + return <PostForm />; +}; +``` +{% endraw %} + +--- + +Don’t confuse Material-UI’s `useTheme`, which returns the material-ui theme object, with react-admin’s `useTheme`, which lets you read and update the theme name (light or dark). #theme https://marmelab.com/react-admin/useTheme.html + +{% raw %} +```ts +import { defaultTheme, useTheme } from 'react-admin'; +import { Button } from '@mui/material'; + +const ThemeToggler = () => { + const [theme, setTheme] = useTheme(); + + return ( + <Button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}> + {theme === 'dark' ? 'Switch to light theme' : 'Switch to dark theme'} + </Button> + ); +} +``` +{% endraw %} + +--- + +If you need to tweak the default layout to add a right column or move the menu to the top, you’re probably better off writing your own layout component (https://marmelab.com/react-admin/Layout.html#writing-a-layout-from-scratch). #layout #style + +```tsx +import * as React from 'react'; +import { Box } from '@mui/material'; +import { AppBar, Menu, Sidebar } from 'react-admin'; + +const MyLayout = ({ children, dashboard }) => ( + <Box + display="flex" + flexDirection="column" + zIndex={1} + minHeight="100vh" + backgroundColor="theme.palette.background.default" + position="relative" + > + <Box + display="flex" + flexDirection="column" + overflowX="auto" + > + <AppBar /> + <Box display="flex" flexGrow={1}> + <Sidebar> + <Menu hasDashboard={!!dashboard} /> + </Sidebar> + <Box + display="flex" + flexDirection="column" + flexGrow={2} + p={3} + marginTop="4em" + paddingLeft={5} + > + {children} + </Box> + </Box> + </Box> + </Box> +); + +export default MyLayout; +``` + +--- + +If you need to override the Layout's global styles (like the default font size or family), you should write a custom theme (https://marmelab.com/react-admin/AppTheme.html#writing-a-custom-theme) rather than override the `<Layout sx>` prop. #layout #style + +```tsx +const theme = { + palette: { + primary: { + main: '#FF5733', + }, + secondary: { + main: '#E0C2FF', + light: '#F5EBFF', + contrastText: '#47008F', + }, + }, + spacing: 4, + typography: { + fontFamily: 'Raleway, Arial', + }, + components: { + MuiCssBaseline: { + styleOverrides: ` + @font-face { + font-family: 'Raleway'; + font-style: normal; + font-display: swap; + } + `, + }, + }, +}; +``` + +--- + +If you're using the `<RichTextInput>` component, you may want to access the `TipTap` editor object to tweak extensions, input rules, etc. To do so, you can assign a ref in the `onCreate` function in the `editorOptions` prop of your `<RichTextInput>` component. #rich-text https://marmelab.com/react-admin/RichTextInput.html#calling-the-editor-object + +{% raw %} +```tsx +import * as React from "react"; +import { Edit, SaveButton, SimpleForm, TextInput, Toolbar } from "react-admin"; +import { DefaultEditorOptions, RichTextInput } from "ra-input-rich-text"; +import { Button } from "ra-ui-materialui"; +import { Editor } from "@tiptap/react"; + +const MyToolbar = ({ editorRef }) => ( + <Toolbar> + <SaveButton /> + <Button + onClick={() => { + if (!editorRef.current) return; + editorRef.current.commands.setContent("<h3>Template content</h3>"); // access the editor ref + }} + > + Use template + </Button> + </Toolbar> +); + +export const PostEdit = () => { + const editorRef = React.useRef<Editor | null>(null); + + return ( + <Edit> + <SimpleForm toolbar={<MyToolbar editorRef={editorRef} />}> + <RichTextInput + source="body" + editorOptions={{ + ...DefaultEditorOptions, + onCreate: ({ editor }: { editor: Editor }) => { + editorRef.current = editor; // assign the editor ref + }, + }} + /> + </SimpleForm> + </Edit> + ); +}; +``` +{% endraw %} + +--- + +When users don’t find the reference they are looking for in the list of possible values, they need to create a new reference. Here's how you can let users create a new reference on the fly with `<ReferenceInput>`, `<AutocompleteInput onCreate>` and `useCreate`. #form #reference https://marmelab.com/react-admin/ReferenceInput.html#creating-a-new-reference + +{% raw %} +```tsx +export const ContactEdit = () => { + const [create] = useCreate(); + const notify = useNotify(); + const handleCreateCompany = async (companyName?: string) => { + if (!companyName) return; + try { + const newCompany = await create( + 'companies', + { data: { name: companyName } }, + { returnPromise: true } + ); + return newCompany; + } catch (error) { + notify('An error occurred while creating the company', { + type: 'error', + }); + throw(error); + } + }; + return ( + <Edit> + <SimpleForm> + <TextInput source="first_name" /> + <TextInput source="last_name" /> + <ReferenceInput source="company_id" reference="companies"> + <AutocompleteInput onCreate={handleCreateCompany} /> + </ReferenceInput> + </SimpleForm> + </Edit> + ); +}; +``` +{% endraw %} + +--- + +When you need to programmatically set form values, use the `useFormContext` hook from `react-hook-form`. #form #input https://react-hook-form.com/docs/useformcontext https://react-hook-form.com/docs/useform/setvalue + +{% raw %} +```tsx +import { useFormContext } from 'react-hook-form'; + +export const ArticleInputs = () => { + const { setValue } = useFormContext(); + + return ( + <> + <Button + type="button" + onClick={() => { + setValue('title', ''); + setValue('description', ''); + }} + > + Reset + </Button> + <TextInput source="title" /> + <TextInput source="description" /> + </> + ); +}; +``` +{% endraw %} + +--- + +Thanks to the react-admin community, you can find third-party react-admin components to enhance your apps, such as a color-picker, JSON fields and inputs, a trim field, a URL input, and more. Check the non-exhaustive list in [the third-party inputs documentation](https://marmelab.com/react-admin/Inputs.html#third-party-components). + +--- + +The `notifictaion` prop of the `<Admin>` component allows you to customize the notification component. You can use the `Notification` component from the `react-admin` package to customize the notification content. #ui https://marmelab.com/react-admin/Admin.html#notification + +{% raw %} +```tsx +import { Admin, Notification } from 'react-admin'; +import { Slide } from '@mui/material'; + +const MyNotification = () => ( + <Notification + autoHideDuration={3000} + anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }} + TransitionComponent={Slide} + message="My custom notification" + /> +); + +export const App = () => { + return ( + <Admin notification={<MyNotification />}> + {/*...*/} + </Admin> + ); +}; +``` +{% endraw %} + +--- + +The `useNotify` hook allows you to display notifications in your application. You can customize the notification content by passing a component directly to the `notify` method. #ui https://marmelab.com/react-admin/useNotify.html + +{% raw %} +```tsx +import { useNotify } from 'react-admin'; + +const NotifyButton = () => { + const notify = useNotify(); + const handleClick = () => { + notify( + <Alert severity="info"> + Comment approved + </Alert>, + { type: 'info' } + ); + } + return <button onClick={handleClick}>Notify</button>; +}; +``` +{% endraw %} + +--- + +Throwing an `HttpError` in your `dataProvider` will have the effect to display a notification in your application. You can customize the content of the notification by passing a component directly to the `HttpError` method. #dataProvider https://marmelab.com/react-admin/DataProviderWriting.html#error-format + +{% raw %} +```tsx +import { HttpError } from 'react-admin'; +import { Alert, AlertTitle } from '@mui/material'; +import ReportProblemOutlinedIcon from '@mui/icons-material/ReportProblemOutlined'; +export const MyDataProvider = { + getList: (resource, params) => { + return new Promise((resolve, reject) => { + myApiClient(url, { ...options, headers: requestHeaders }) + .then(response => + //... + ) + .then(({ status, statusText, headers, body }) => { + let json; + try { + json = JSON.parse(body); + } catch (e) { + // not json, no big deal + } + if (status < 200 || status >= 300) { + return reject( + new HttpError( + ( + <Alert + severity="error" + variant="outlined" + sx={{ width: '100%' }} + iconMapping={{ + error: ( + <ReportProblemOutlinedIcon /> + ), + }} + > + <AlertTitle> + An error has occured + </AlertTitle> + {(json && json.message) || statusText} + </Alert> + ), + status, + json + ) + ); + } + //... + }); + }); + }, + // ... +}; +``` +{% endraw %} + +--- + +The `<Datagrid rowClick>` prop also accepts a function. This allows for more complex scenarios, like opening the 'edit' or 'show' view depending on whether or not a post accepts comments. #datagrid https://marmelab.com/react-admin/Datagrid.html#rowclick + +{% raw %} +```tsx +import { List, Datagrid } from 'react-admin'; + +const rowClick = (_id, _resource, record) => { + if (record.commentable) { + return 'edit'; + } + return 'show'; +}; + +export const PostList = () => ( + <List> + <Datagrid rowClick={rowClick}> + ... + </Datagrid> + </List> +); +``` +{% endraw %} + +--- + +By default, the Dashboard page requires users to be authenticated and will redirect anonymous users to the login page. If you want to allow anonymous access to the dashboard, edit your `authProvider` to add an exception to the `checkAuth` method, as follows. #dashboard #authProvider https://marmelab.com/react-admin/Admin.html#dashboard + +{% raw %} +```diff +const authProvider = { + // ... + checkAuth: (params) => { ++ if (params?.route === 'dashboard') return Promise.resolve(); + // ... + }, +} +``` +{% endraw %} + +--- + +When exporting the content of a list with the `<ExportButton>`, you may need to augment your objects based on relationships (e.g. comments should include the title of the related post). Fortunately, the `exporter` receives a `fetchRelatedRecords` function which helps fetch related records. #list https://marmelab.com/react-admin/List.html#exporter + +{% raw %} +```tsx +// in CommentList.js +import { List, downloadCSV } from 'react-admin'; +import type { FetchRelatedRecords } from 'react-admin'; +import jsonExport from 'jsonexport/dist'; + +const exporter = async (comments: Comments[], fetchRelatedRecords: FetchRelatedRecords) => { + // will call dataProvider.getMany('posts', { ids: records.map(record => record.post_id) }), + // ignoring duplicate and empty post_id + const posts = await fetchRelatedRecords<Post>(comments, 'post_id', 'posts') + const commentsWithPostTitle = comments.map(comment => ({ + ...comment, + post_title: posts[comment.post_id].title, + })); + return jsonExport(commentsWithPostTitle, { + headers: ['id', 'post_id', 'post_title', 'body'], + }, (err, csv) => { + downloadCSV(csv, 'comments'); + }); +}; + +const CommentList = () => ( + <List exporter={exporter}> + ... + </List> +); +``` +{% endraw %} + +--- + +Should you need quick actions that update a record, you can leverage [the `<UpdateButton>` component](https://marmelab.com/react-admin/Buttons.html#updatebutton). It supports `undoable`, `optimistic` and `pessimistic` mutation modes and will even ask users for confirmation unless you chose the `undoable` mode. + +{% raw %} +```tsx +import { Edit, SimpleForm, TextInput, TopToolbar, UpdateButton } from 'react-admin'; + +const PostEditActions = () => ( + <TopToolbar> + <UpdateButton label="Reset views" data={{ views: 0 }} /> + </TopToolbar> +); + +export const PostEdit = () => ( + <Edit actions={<PostEditActions />}> + <SimpleForm> + <TextInput source="title" /> + <TextInput source="body" /> + </SimpleForm> + </Edit> +); +``` +{% endraw %} + +--- + +Sometimes you need to render a record property but it might cumbersome to build a component calling [the `useRecordContext` hook](https://marmelab.com/react-admin/useRecordContext.html). The `WithRecord` component might often be enough: + +{% raw %} +```tsx +import { Show, SimpleShowLayout, WithRecord } from 'react-admin'; + +const BookShow = () => ( + <Show> + <SimpleShowLayout> + <WithRecord label="author" render={record => <span>{record.author}</span>} /> + </SimpleShowLayout> + </Show> +); +``` +{% endraw %} + +--- + +After an upgrade of a react-admin package, you may encounter new bugs where a component cannot read a context created by another component. This is often caused by 2 conflicting versions of the same package in your dependencies. To fix such bugs, relax your npm dependencies (from `~` to `^`) and / or run [the `dedupe` command](https://docs.npmjs.com/cli/v9/commands/npm-dedupe) with you package manager. + +```sh +$ npm dedupe +``` + +--- + +When displaying large pages of data, you might experience some performance issues. This is mostly due to the fact that we iterate over the `<Datagrid>` children and clone them. + +In such cases, you can opt-in for an optimized version of the `<Datagrid>` by setting its optimized prop to true. Be aware that you can’t have dynamic children, such as those displayed or hidden by checking permissions, when using this mode. + +```jsx +import { List, Datagrid, TextField } from 'react-admin'; + +const PostList = () => ( + <List> + <Datagrid optimized> + <TextField source="id" /> + <TextField source="title" /> + <TextField source="views" /> + </Datagrid> + </List> +); +``` + +--- + +Edition forms often contain linked inputs, e.g. country and city (the choices of the latter depending on the value of the former). + +React-admin relies on react-hook-form for form handling. You can grab the current form values using react-hook-form’s useWatch hook. + +{% raw %} + +```jsx +import * as React from 'react'; +import { Edit, SimpleForm, SelectInput } from 'react-admin'; +import { useWatch } from 'react-hook-form'; + +const countries = ['USA', 'UK', 'France']; +const cities = { + USA: ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Phoenix'], + UK: ['London', 'Birmingham', 'Glasgow', 'Liverpool', 'Bristol'], + France: ['Paris', 'Marseille', 'Lyon', 'Toulouse', 'Nice'], +}; +const toChoices = items => items.map(item => ({ id: item, name: item })); + +const CityInput = () => { + const country = useWatch({ name: 'country' }); + return ( + <SelectInput + choices={country ? toChoices(cities[country]) : []} + source="cities" + /> + ); +}; + +const OrderEdit = () => ( + <Edit> + <SimpleForm> + <SelectInput source="country" choices={toChoices(countries)} /> + <CityInput /> + </SimpleForm> + </Edit> +); + +export default OrderEdit; +``` + +{% endraw %} + +--- + +When used inside a [`<ReferenceArrayInput>`](https://marmelab.com/react-admin/ReferenceArrayInput.html), whenever users type a string in the autocomplete input, `<AutocompleteArrayInput>` calls `dataProvider.getList()` using the string as filter, to return a filtered list of possible options from the reference resource. This filter is built using the `filterToQuery` prop. + +By default, the filter is built using the `q` parameter. This means that if the user types the string ‘lorem’, the filter will be `{ q: 'lorem' }`. + +You can customize the filter by setting the `filterToQuery` prop. It should be a function that returns a filter object. + +{% raw %} + +```tsx +const filterToQuery = searchText => ({ name_ilike: `%${searchText}%` }); + +<ReferenceArrayInput source="tag_ids" reference="tags"> + <AutocompleteArrayInput filterToQuery={filterToQuery} /> +</ReferenceArrayInput> +``` + +{% endraw %} + +--- + +You can choose to permanently filter the tree to display only a sub tree. + +For instance, imagine you have one `employees` resource with a `department` field, and you want to display a tree for the Finance department. Use the `filter` prop to filter the tree: + +{% raw %} + +```jsx +const EmployeeList = () => <TreeWithDetails filter={{ department: 'finance' }} />; +``` + +{% endraw %} + +**Note:** This only works if the filter field allows to extract a subtree with its own root node. If you use the `filter` prop to display a sparse selection of nodes (e.g. only the `male` employees), dragging nodes in this tree will not work as expected. + +--- + +`react-hook-form` supports schema validation with many libraries through its [`resolver` props](https://react-hook-form.com/docs/useform#validationResolver). + +To use schema validation, use the `resolver` prop following [react-hook-form’s resolvers documentation](https://github.com/react-hook-form/resolvers). Here’s an example using `yup`: + +```tsx +import { yupResolver } from '@hookform/resolvers/yup'; +import * as yup from 'yup'; +import { SimpleForm, TextInput, NumberInput } from 'react-admin'; + +const schema = yup + .object() + .shape({ + name: yup.string().required(), + age: yup.number().required(), + }) + .required(); + +const CustomerCreate = () => ( + <Create> + <SimpleForm resolver={yupResolver(schema)}> + <TextInput source="name" /> + <NumberInput source="age" /> + </SimpleForm> + </Create> +); +``` + +--- + +If you are using `ra-data-simple-rest`, you can change the name of the content range header to be something else than the default `Content-Range`. +#dataProvider https://github.com/marmelab/react-admin/tree/master/packages/ra-data-simple-rest#replacing-content-range-with-another-header + +```jsx +const dataProvider = simpleRestProvider('http://path.to.my.api/', undefined, 'X-Total-Count'); +``` + +--- + +The `useUpdate` or `useCreate` hooks return `@tanstack/query` mutation callbacks, which cannot be awaited. If you wish to work with a Promise instead, you can use the `returnPromise` prop. This can be useful if the server changes the record, and you need the updated data to update another record. +#query #dataProvider https://marmelab.com/react-admin/useUpdate.html#returnpromise + +{% raw %} + +```tsx +const [update] = useUpdate( + 'posts', + { id: record.id, data: { isPublished: true } }, + { returnPromise: true } +); +const [create] = useCreate('auditLogs'); + +const publishPost = async () => { + try { + const post = await update(); + create('auditLogs', { data: { action: 'publish', recordId: post.id, date: post.updatedAt } }); + } catch (error) { + // handle error + } +}; +``` + +{% endraw %} + +--- +If you need to have custom pages to let your users sign-up, use the `<CustomRoutes>` component and set its `noLayout` prop. This ensures React-admin won't check whether users are authenticated. #router https://marmelab.com/react-admin/CustomRoutes.html + +```jsx +import { Admin, Resource, CustomRoutes } from 'react-admin'; +import { Route } from "react-router-dom"; + +import dataProvider from './dataProvider'; +import posts from './posts'; +import comments from './comments'; +import SignUp from './SignUp'; + +const App = () => ( + <Admin dataProvider={dataProvider}> + <Resource name="posts" {...posts} /> + <Resource name="comments" {...comments} /> + <CustomRoutes noLayout> + <Route path="/sign-up" element={<SignUp />} /> + </CustomRoutes> + </Admin> +); + +export default App; +``` + +--- + +By using `<DatagridAG>` or `<DatagridAGClient>`, you can easily customize the cell style in the `columnDefs` definition using `cellStyle`: + +{% raw %} +```jsx +const columnDefs = [ + // same style for each row + { + field: 'static', + cellStyle: {color: 'red', 'background-color': 'green'} + }, + // different styles for each row + { + field: 'dynamic', + cellStyle: params => { + if (params.value === 'Police') { + //mark police cells as red + return {color: 'red', backgroundColor: 'green'}; + } + return null; + } + }, +]; +``` +{% endraw %} + +https://www.ag-grid.com/react-data-grid/cell-styles/#cell-style + +--- + +Similar to what you can do with `<Datagrid>`, you can also use [the CSS API](https://marmelab.com/react-admin/Datagrid.html#sx-css-api) to style your `<DatagridAG>` or your `<DatagridAGClient>`. + +{% raw %} +```tsx +<DatagridAG + columnDefs={columnDefs} + sx={{ + ".ag-cell.ag-column-first" { + backgroundColor: "#2244CC44", + } + ".ag-cell.ag-column-last" { + backgroundColor: "#CC333344", + } + }} +/> +``` +{% endraw %} + +https://www.ag-grid.com/react-data-grid/cell-styles/#first--last-columns + +--- + +You can add custom CSS classes to any column or cell in `DatagridAG` or `DatagridAGClient`, using the `cellClass` or `cellClassRules` keys of `columnDefs`: + +{% raw %} +```tsx +const columnDefs = [ + // return same class for each row + { + field: 'static', + cellClass: 'my-class' + }, + // return same array of classes for each row + { + field: 'staticArray', + cellClass: ['my-class1','my-class2'], + }, + // return class based on function + { + field: 'function', + cellClass: params => { + return params.value === 'something' ? 'my-class-1' : 'my-class-2'; + }, + }, + // return array of classes based on function + { + field: 'functionArray', + cellClass: params => ['my-class-1','my-class-2'], + }, + // return array of classes based on many functions with `cellClassRules` + { + field: 'functionRules', + cellClassRules: { + // apply green to 2008 + 'rag-green-outer': params => params.value === 2008, + // apply blue to 2004 + 'rag-blue-outer': params => params.value === 2004, + // apply red to 2000 + 'rag-red-outer': params => params.value === 2000, + } + } + // return array of classes based on many functions with `cellClassRules` + { + field: 'simplifiedFunctionRules', + cellClassRules: { + 'rag-green': 'x < 20', + 'rag-blue': 'x >= 20 && x < 25', + 'rag-red': 'x >= 25', + } + } +]; +``` +{% endraw %} + +https://www.ag-grid.com/react-data-grid/cell-styles diff --git a/docs/css/docsearch.css b/docs/css/docsearch.css new file mode 100644 index 00000000000..4e5f136aa1e --- /dev/null +++ b/docs/css/docsearch.css @@ -0,0 +1,55 @@ +:root { + --docsearch-highlight-color: #368fe7; + --docsearch-primary-color: #368fe7; +} + +#docsearch .DocSearch-Button { + position: absolute; + margin-top: 1rem; + width: 400px; + border-radius: 4px; + + --docsearch-searchbox-background: #368fe7; + --docsearch-muted-color: white; + --docsearch-text-color: white; + --docsearch-searchbox-focus-background: #5fa2e6; +} + +#docsearch .DocSearch-Button-Key { + border: 1px solid #5fa2e6; + background: transparent; + box-shadow: none; +} + +div.DocSearch-Container { + z-index: 1000; /* navbar materialize is z-index: 999; */ +} + +/* Start override materialize input color */ +input[type='search']:not(.browser-default) { + border: none; + margin: 0px; + padding: 0 0 0 8px; +} +input[type='search']:not(.browser-default):focus:not([readonly]) { + box-shadow: none; + border-bottom: none; +} +/* End override materialize input color */ + +@media only screen and (max-width: 1300px) { + #docsearch .DocSearch-Button { + width: 250px; + } +} + +@media only screen and (max-width: 992px) { + #docsearch .DocSearch-Button { + width: 200px; + } +} + +#docsearch .DocSearch-Button-Placeholder { + display: block; /* display on mobile */ + margin-right: auto; +} diff --git a/docs/css/materialize.min.css b/docs/css/materialize.min.css new file mode 100644 index 00000000000..74b1741b62e --- /dev/null +++ b/docs/css/materialize.min.css @@ -0,0 +1,13 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +.materialize-red{background-color:#e51c23 !important}.materialize-red-text{color:#e51c23 !important}.materialize-red.lighten-5{background-color:#fdeaeb !important}.materialize-red-text.text-lighten-5{color:#fdeaeb !important}.materialize-red.lighten-4{background-color:#f8c1c3 !important}.materialize-red-text.text-lighten-4{color:#f8c1c3 !important}.materialize-red.lighten-3{background-color:#f3989b !important}.materialize-red-text.text-lighten-3{color:#f3989b !important}.materialize-red.lighten-2{background-color:#ee6e73 !important}.materialize-red-text.text-lighten-2{color:#ee6e73 !important}.materialize-red.lighten-1{background-color:#ea454b !important}.materialize-red-text.text-lighten-1{color:#ea454b !important}.materialize-red.darken-1{background-color:#d0181e !important}.materialize-red-text.text-darken-1{color:#d0181e !important}.materialize-red.darken-2{background-color:#b9151b !important}.materialize-red-text.text-darken-2{color:#b9151b !important}.materialize-red.darken-3{background-color:#a21318 !important}.materialize-red-text.text-darken-3{color:#a21318 !important}.materialize-red.darken-4{background-color:#8b1014 !important}.materialize-red-text.text-darken-4{color:#8b1014 !important}.red{background-color:#F44336 !important}.red-text{color:#F44336 !important}.red.lighten-5{background-color:#FFEBEE !important}.red-text.text-lighten-5{color:#FFEBEE !important}.red.lighten-4{background-color:#FFCDD2 !important}.red-text.text-lighten-4{color:#FFCDD2 !important}.red.lighten-3{background-color:#EF9A9A !important}.red-text.text-lighten-3{color:#EF9A9A !important}.red.lighten-2{background-color:#E57373 !important}.red-text.text-lighten-2{color:#E57373 !important}.red.lighten-1{background-color:#EF5350 !important}.red-text.text-lighten-1{color:#EF5350 !important}.red.darken-1{background-color:#E53935 !important}.red-text.text-darken-1{color:#E53935 !important}.red.darken-2{background-color:#D32F2F !important}.red-text.text-darken-2{color:#D32F2F !important}.red.darken-3{background-color:#C62828 !important}.red-text.text-darken-3{color:#C62828 !important}.red.darken-4{background-color:#B71C1C !important}.red-text.text-darken-4{color:#B71C1C !important}.red.accent-1{background-color:#FF8A80 !important}.red-text.text-accent-1{color:#FF8A80 !important}.red.accent-2{background-color:#FF5252 !important}.red-text.text-accent-2{color:#FF5252 !important}.red.accent-3{background-color:#FF1744 !important}.red-text.text-accent-3{color:#FF1744 !important}.red.accent-4{background-color:#D50000 !important}.red-text.text-accent-4{color:#D50000 !important}.pink{background-color:#e91e63 !important}.pink-text{color:#e91e63 !important}.pink.lighten-5{background-color:#fce4ec !important}.pink-text.text-lighten-5{color:#fce4ec !important}.pink.lighten-4{background-color:#f8bbd0 !important}.pink-text.text-lighten-4{color:#f8bbd0 !important}.pink.lighten-3{background-color:#f48fb1 !important}.pink-text.text-lighten-3{color:#f48fb1 !important}.pink.lighten-2{background-color:#f06292 !important}.pink-text.text-lighten-2{color:#f06292 !important}.pink.lighten-1{background-color:#ec407a !important}.pink-text.text-lighten-1{color:#ec407a !important}.pink.darken-1{background-color:#d81b60 !important}.pink-text.text-darken-1{color:#d81b60 !important}.pink.darken-2{background-color:#c2185b !important}.pink-text.text-darken-2{color:#c2185b !important}.pink.darken-3{background-color:#ad1457 !important}.pink-text.text-darken-3{color:#ad1457 !important}.pink.darken-4{background-color:#880e4f !important}.pink-text.text-darken-4{color:#880e4f !important}.pink.accent-1{background-color:#ff80ab !important}.pink-text.text-accent-1{color:#ff80ab !important}.pink.accent-2{background-color:#ff4081 !important}.pink-text.text-accent-2{color:#ff4081 !important}.pink.accent-3{background-color:#f50057 !important}.pink-text.text-accent-3{color:#f50057 !important}.pink.accent-4{background-color:#c51162 !important}.pink-text.text-accent-4{color:#c51162 !important}.purple{background-color:#9c27b0 !important}.purple-text{color:#9c27b0 !important}.purple.lighten-5{background-color:#f3e5f5 !important}.purple-text.text-lighten-5{color:#f3e5f5 !important}.purple.lighten-4{background-color:#e1bee7 !important}.purple-text.text-lighten-4{color:#e1bee7 !important}.purple.lighten-3{background-color:#ce93d8 !important}.purple-text.text-lighten-3{color:#ce93d8 !important}.purple.lighten-2{background-color:#ba68c8 !important}.purple-text.text-lighten-2{color:#ba68c8 !important}.purple.lighten-1{background-color:#ab47bc !important}.purple-text.text-lighten-1{color:#ab47bc !important}.purple.darken-1{background-color:#8e24aa !important}.purple-text.text-darken-1{color:#8e24aa !important}.purple.darken-2{background-color:#7b1fa2 !important}.purple-text.text-darken-2{color:#7b1fa2 !important}.purple.darken-3{background-color:#6a1b9a !important}.purple-text.text-darken-3{color:#6a1b9a !important}.purple.darken-4{background-color:#4a148c !important}.purple-text.text-darken-4{color:#4a148c !important}.purple.accent-1{background-color:#ea80fc !important}.purple-text.text-accent-1{color:#ea80fc !important}.purple.accent-2{background-color:#e040fb !important}.purple-text.text-accent-2{color:#e040fb !important}.purple.accent-3{background-color:#d500f9 !important}.purple-text.text-accent-3{color:#d500f9 !important}.purple.accent-4{background-color:#a0f !important}.purple-text.text-accent-4{color:#a0f !important}.deep-purple{background-color:#673ab7 !important}.deep-purple-text{color:#673ab7 !important}.deep-purple.lighten-5{background-color:#ede7f6 !important}.deep-purple-text.text-lighten-5{color:#ede7f6 !important}.deep-purple.lighten-4{background-color:#d1c4e9 !important}.deep-purple-text.text-lighten-4{color:#d1c4e9 !important}.deep-purple.lighten-3{background-color:#b39ddb !important}.deep-purple-text.text-lighten-3{color:#b39ddb !important}.deep-purple.lighten-2{background-color:#9575cd !important}.deep-purple-text.text-lighten-2{color:#9575cd !important}.deep-purple.lighten-1{background-color:#7e57c2 !important}.deep-purple-text.text-lighten-1{color:#7e57c2 !important}.deep-purple.darken-1{background-color:#5e35b1 !important}.deep-purple-text.text-darken-1{color:#5e35b1 !important}.deep-purple.darken-2{background-color:#512da8 !important}.deep-purple-text.text-darken-2{color:#512da8 !important}.deep-purple.darken-3{background-color:#4527a0 !important}.deep-purple-text.text-darken-3{color:#4527a0 !important}.deep-purple.darken-4{background-color:#311b92 !important}.deep-purple-text.text-darken-4{color:#311b92 !important}.deep-purple.accent-1{background-color:#b388ff !important}.deep-purple-text.text-accent-1{color:#b388ff !important}.deep-purple.accent-2{background-color:#7c4dff !important}.deep-purple-text.text-accent-2{color:#7c4dff !important}.deep-purple.accent-3{background-color:#651fff !important}.deep-purple-text.text-accent-3{color:#651fff !important}.deep-purple.accent-4{background-color:#6200ea !important}.deep-purple-text.text-accent-4{color:#6200ea !important}.indigo{background-color:#3f51b5 !important}.indigo-text{color:#3f51b5 !important}.indigo.lighten-5{background-color:#e8eaf6 !important}.indigo-text.text-lighten-5{color:#e8eaf6 !important}.indigo.lighten-4{background-color:#c5cae9 !important}.indigo-text.text-lighten-4{color:#c5cae9 !important}.indigo.lighten-3{background-color:#9fa8da !important}.indigo-text.text-lighten-3{color:#9fa8da !important}.indigo.lighten-2{background-color:#7986cb !important}.indigo-text.text-lighten-2{color:#7986cb !important}.indigo.lighten-1{background-color:#5c6bc0 !important}.indigo-text.text-lighten-1{color:#5c6bc0 !important}.indigo.darken-1{background-color:#3949ab !important}.indigo-text.text-darken-1{color:#3949ab !important}.indigo.darken-2{background-color:#303f9f !important}.indigo-text.text-darken-2{color:#303f9f !important}.indigo.darken-3{background-color:#283593 !important}.indigo-text.text-darken-3{color:#283593 !important}.indigo.darken-4{background-color:#1a237e !important}.indigo-text.text-darken-4{color:#1a237e !important}.indigo.accent-1{background-color:#8c9eff !important}.indigo-text.text-accent-1{color:#8c9eff !important}.indigo.accent-2{background-color:#536dfe !important}.indigo-text.text-accent-2{color:#536dfe !important}.indigo.accent-3{background-color:#3d5afe !important}.indigo-text.text-accent-3{color:#3d5afe !important}.indigo.accent-4{background-color:#304ffe !important}.indigo-text.text-accent-4{color:#304ffe !important}.blue{background-color:#2196F3 !important}.blue-text{color:#2196F3 !important}.blue.lighten-5{background-color:#E3F2FD !important}.blue-text.text-lighten-5{color:#E3F2FD !important}.blue.lighten-4{background-color:#BBDEFB !important}.blue-text.text-lighten-4{color:#BBDEFB !important}.blue.lighten-3{background-color:#90CAF9 !important}.blue-text.text-lighten-3{color:#90CAF9 !important}.blue.lighten-2{background-color:#64B5F6 !important}.blue-text.text-lighten-2{color:#64B5F6 !important}.blue.lighten-1{background-color:#42A5F5 !important}.blue-text.text-lighten-1{color:#42A5F5 !important}.blue.darken-1{background-color:#1E88E5 !important}.blue-text.text-darken-1{color:#1E88E5 !important}.blue.darken-2{background-color:#1976D2 !important}.blue-text.text-darken-2{color:#1976D2 !important}.blue.darken-3{background-color:#1565C0 !important}.blue-text.text-darken-3{color:#1565C0 !important}.blue.darken-4{background-color:#0D47A1 !important}.blue-text.text-darken-4{color:#0D47A1 !important}.blue.accent-1{background-color:#82B1FF !important}.blue-text.text-accent-1{color:#82B1FF !important}.blue.accent-2{background-color:#448AFF !important}.blue-text.text-accent-2{color:#448AFF !important}.blue.accent-3{background-color:#2979FF !important}.blue-text.text-accent-3{color:#2979FF !important}.blue.accent-4{background-color:#2962FF !important}.blue-text.text-accent-4{color:#2962FF !important}.light-blue{background-color:#03a9f4 !important}.light-blue-text{color:#03a9f4 !important}.light-blue.lighten-5{background-color:#e1f5fe !important}.light-blue-text.text-lighten-5{color:#e1f5fe !important}.light-blue.lighten-4{background-color:#b3e5fc !important}.light-blue-text.text-lighten-4{color:#b3e5fc !important}.light-blue.lighten-3{background-color:#81d4fa !important}.light-blue-text.text-lighten-3{color:#81d4fa !important}.light-blue.lighten-2{background-color:#4fc3f7 !important}.light-blue-text.text-lighten-2{color:#4fc3f7 !important}.light-blue.lighten-1{background-color:#29b6f6 !important}.light-blue-text.text-lighten-1{color:#29b6f6 !important}.light-blue.darken-1{background-color:#039be5 !important}.light-blue-text.text-darken-1{color:#039be5 !important}.light-blue.darken-2{background-color:#0288d1 !important}.light-blue-text.text-darken-2{color:#0288d1 !important}.light-blue.darken-3{background-color:#0277bd !important}.light-blue-text.text-darken-3{color:#0277bd !important}.light-blue.darken-4{background-color:#01579b !important}.light-blue-text.text-darken-4{color:#01579b !important}.light-blue.accent-1{background-color:#80d8ff !important}.light-blue-text.text-accent-1{color:#80d8ff !important}.light-blue.accent-2{background-color:#40c4ff !important}.light-blue-text.text-accent-2{color:#40c4ff !important}.light-blue.accent-3{background-color:#00b0ff !important}.light-blue-text.text-accent-3{color:#00b0ff !important}.light-blue.accent-4{background-color:#0091ea !important}.light-blue-text.text-accent-4{color:#0091ea !important}.cyan{background-color:#00bcd4 !important}.cyan-text{color:#00bcd4 !important}.cyan.lighten-5{background-color:#e0f7fa !important}.cyan-text.text-lighten-5{color:#e0f7fa !important}.cyan.lighten-4{background-color:#b2ebf2 !important}.cyan-text.text-lighten-4{color:#b2ebf2 !important}.cyan.lighten-3{background-color:#80deea !important}.cyan-text.text-lighten-3{color:#80deea !important}.cyan.lighten-2{background-color:#4dd0e1 !important}.cyan-text.text-lighten-2{color:#4dd0e1 !important}.cyan.lighten-1{background-color:#26c6da !important}.cyan-text.text-lighten-1{color:#26c6da !important}.cyan.darken-1{background-color:#00acc1 !important}.cyan-text.text-darken-1{color:#00acc1 !important}.cyan.darken-2{background-color:#0097a7 !important}.cyan-text.text-darken-2{color:#0097a7 !important}.cyan.darken-3{background-color:#00838f !important}.cyan-text.text-darken-3{color:#00838f !important}.cyan.darken-4{background-color:#006064 !important}.cyan-text.text-darken-4{color:#006064 !important}.cyan.accent-1{background-color:#84ffff !important}.cyan-text.text-accent-1{color:#84ffff !important}.cyan.accent-2{background-color:#18ffff !important}.cyan-text.text-accent-2{color:#18ffff !important}.cyan.accent-3{background-color:#00e5ff !important}.cyan-text.text-accent-3{color:#00e5ff !important}.cyan.accent-4{background-color:#00b8d4 !important}.cyan-text.text-accent-4{color:#00b8d4 !important}.teal{background-color:#009688 !important}.teal-text{color:#009688 !important}.teal.lighten-5{background-color:#e0f2f1 !important}.teal-text.text-lighten-5{color:#e0f2f1 !important}.teal.lighten-4{background-color:#b2dfdb !important}.teal-text.text-lighten-4{color:#b2dfdb !important}.teal.lighten-3{background-color:#80cbc4 !important}.teal-text.text-lighten-3{color:#80cbc4 !important}.teal.lighten-2{background-color:#4db6ac !important}.teal-text.text-lighten-2{color:#4db6ac !important}.teal.lighten-1{background-color:#26a69a !important}.teal-text.text-lighten-1{color:#26a69a !important}.teal.darken-1{background-color:#00897b !important}.teal-text.text-darken-1{color:#00897b !important}.teal.darken-2{background-color:#00796b !important}.teal-text.text-darken-2{color:#00796b !important}.teal.darken-3{background-color:#00695c !important}.teal-text.text-darken-3{color:#00695c !important}.teal.darken-4{background-color:#004d40 !important}.teal-text.text-darken-4{color:#004d40 !important}.teal.accent-1{background-color:#a7ffeb !important}.teal-text.text-accent-1{color:#a7ffeb !important}.teal.accent-2{background-color:#64ffda !important}.teal-text.text-accent-2{color:#64ffda !important}.teal.accent-3{background-color:#1de9b6 !important}.teal-text.text-accent-3{color:#1de9b6 !important}.teal.accent-4{background-color:#00bfa5 !important}.teal-text.text-accent-4{color:#00bfa5 !important}.green{background-color:#4CAF50 !important}.green-text{color:#4CAF50 !important}.green.lighten-5{background-color:#E8F5E9 !important}.green-text.text-lighten-5{color:#E8F5E9 !important}.green.lighten-4{background-color:#C8E6C9 !important}.green-text.text-lighten-4{color:#C8E6C9 !important}.green.lighten-3{background-color:#A5D6A7 !important}.green-text.text-lighten-3{color:#A5D6A7 !important}.green.lighten-2{background-color:#81C784 !important}.green-text.text-lighten-2{color:#81C784 !important}.green.lighten-1{background-color:#66BB6A !important}.green-text.text-lighten-1{color:#66BB6A !important}.green.darken-1{background-color:#43A047 !important}.green-text.text-darken-1{color:#43A047 !important}.green.darken-2{background-color:#388E3C !important}.green-text.text-darken-2{color:#388E3C !important}.green.darken-3{background-color:#2E7D32 !important}.green-text.text-darken-3{color:#2E7D32 !important}.green.darken-4{background-color:#1B5E20 !important}.green-text.text-darken-4{color:#1B5E20 !important}.green.accent-1{background-color:#B9F6CA !important}.green-text.text-accent-1{color:#B9F6CA !important}.green.accent-2{background-color:#69F0AE !important}.green-text.text-accent-2{color:#69F0AE !important}.green.accent-3{background-color:#00E676 !important}.green-text.text-accent-3{color:#00E676 !important}.green.accent-4{background-color:#00C853 !important}.green-text.text-accent-4{color:#00C853 !important}.light-green{background-color:#8bc34a !important}.light-green-text{color:#8bc34a !important}.light-green.lighten-5{background-color:#f1f8e9 !important}.light-green-text.text-lighten-5{color:#f1f8e9 !important}.light-green.lighten-4{background-color:#dcedc8 !important}.light-green-text.text-lighten-4{color:#dcedc8 !important}.light-green.lighten-3{background-color:#c5e1a5 !important}.light-green-text.text-lighten-3{color:#c5e1a5 !important}.light-green.lighten-2{background-color:#aed581 !important}.light-green-text.text-lighten-2{color:#aed581 !important}.light-green.lighten-1{background-color:#9ccc65 !important}.light-green-text.text-lighten-1{color:#9ccc65 !important}.light-green.darken-1{background-color:#7cb342 !important}.light-green-text.text-darken-1{color:#7cb342 !important}.light-green.darken-2{background-color:#689f38 !important}.light-green-text.text-darken-2{color:#689f38 !important}.light-green.darken-3{background-color:#558b2f !important}.light-green-text.text-darken-3{color:#558b2f !important}.light-green.darken-4{background-color:#33691e !important}.light-green-text.text-darken-4{color:#33691e !important}.light-green.accent-1{background-color:#ccff90 !important}.light-green-text.text-accent-1{color:#ccff90 !important}.light-green.accent-2{background-color:#b2ff59 !important}.light-green-text.text-accent-2{color:#b2ff59 !important}.light-green.accent-3{background-color:#76ff03 !important}.light-green-text.text-accent-3{color:#76ff03 !important}.light-green.accent-4{background-color:#64dd17 !important}.light-green-text.text-accent-4{color:#64dd17 !important}.lime{background-color:#cddc39 !important}.lime-text{color:#cddc39 !important}.lime.lighten-5{background-color:#f9fbe7 !important}.lime-text.text-lighten-5{color:#f9fbe7 !important}.lime.lighten-4{background-color:#f0f4c3 !important}.lime-text.text-lighten-4{color:#f0f4c3 !important}.lime.lighten-3{background-color:#e6ee9c !important}.lime-text.text-lighten-3{color:#e6ee9c !important}.lime.lighten-2{background-color:#dce775 !important}.lime-text.text-lighten-2{color:#dce775 !important}.lime.lighten-1{background-color:#d4e157 !important}.lime-text.text-lighten-1{color:#d4e157 !important}.lime.darken-1{background-color:#c0ca33 !important}.lime-text.text-darken-1{color:#c0ca33 !important}.lime.darken-2{background-color:#afb42b !important}.lime-text.text-darken-2{color:#afb42b !important}.lime.darken-3{background-color:#9e9d24 !important}.lime-text.text-darken-3{color:#9e9d24 !important}.lime.darken-4{background-color:#827717 !important}.lime-text.text-darken-4{color:#827717 !important}.lime.accent-1{background-color:#f4ff81 !important}.lime-text.text-accent-1{color:#f4ff81 !important}.lime.accent-2{background-color:#eeff41 !important}.lime-text.text-accent-2{color:#eeff41 !important}.lime.accent-3{background-color:#c6ff00 !important}.lime-text.text-accent-3{color:#c6ff00 !important}.lime.accent-4{background-color:#aeea00 !important}.lime-text.text-accent-4{color:#aeea00 !important}.yellow{background-color:#ffeb3b !important}.yellow-text{color:#ffeb3b !important}.yellow.lighten-5{background-color:#fffde7 !important}.yellow-text.text-lighten-5{color:#fffde7 !important}.yellow.lighten-4{background-color:#fff9c4 !important}.yellow-text.text-lighten-4{color:#fff9c4 !important}.yellow.lighten-3{background-color:#fff59d !important}.yellow-text.text-lighten-3{color:#fff59d !important}.yellow.lighten-2{background-color:#fff176 !important}.yellow-text.text-lighten-2{color:#fff176 !important}.yellow.lighten-1{background-color:#ffee58 !important}.yellow-text.text-lighten-1{color:#ffee58 !important}.yellow.darken-1{background-color:#fdd835 !important}.yellow-text.text-darken-1{color:#fdd835 !important}.yellow.darken-2{background-color:#fbc02d !important}.yellow-text.text-darken-2{color:#fbc02d !important}.yellow.darken-3{background-color:#f9a825 !important}.yellow-text.text-darken-3{color:#f9a825 !important}.yellow.darken-4{background-color:#f57f17 !important}.yellow-text.text-darken-4{color:#f57f17 !important}.yellow.accent-1{background-color:#ffff8d !important}.yellow-text.text-accent-1{color:#ffff8d !important}.yellow.accent-2{background-color:#ff0 !important}.yellow-text.text-accent-2{color:#ff0 !important}.yellow.accent-3{background-color:#ffea00 !important}.yellow-text.text-accent-3{color:#ffea00 !important}.yellow.accent-4{background-color:#ffd600 !important}.yellow-text.text-accent-4{color:#ffd600 !important}.amber{background-color:#ffc107 !important}.amber-text{color:#ffc107 !important}.amber.lighten-5{background-color:#fff8e1 !important}.amber-text.text-lighten-5{color:#fff8e1 !important}.amber.lighten-4{background-color:#ffecb3 !important}.amber-text.text-lighten-4{color:#ffecb3 !important}.amber.lighten-3{background-color:#ffe082 !important}.amber-text.text-lighten-3{color:#ffe082 !important}.amber.lighten-2{background-color:#ffd54f !important}.amber-text.text-lighten-2{color:#ffd54f !important}.amber.lighten-1{background-color:#ffca28 !important}.amber-text.text-lighten-1{color:#ffca28 !important}.amber.darken-1{background-color:#ffb300 !important}.amber-text.text-darken-1{color:#ffb300 !important}.amber.darken-2{background-color:#ffa000 !important}.amber-text.text-darken-2{color:#ffa000 !important}.amber.darken-3{background-color:#ff8f00 !important}.amber-text.text-darken-3{color:#ff8f00 !important}.amber.darken-4{background-color:#ff6f00 !important}.amber-text.text-darken-4{color:#ff6f00 !important}.amber.accent-1{background-color:#ffe57f !important}.amber-text.text-accent-1{color:#ffe57f !important}.amber.accent-2{background-color:#ffd740 !important}.amber-text.text-accent-2{color:#ffd740 !important}.amber.accent-3{background-color:#ffc400 !important}.amber-text.text-accent-3{color:#ffc400 !important}.amber.accent-4{background-color:#ffab00 !important}.amber-text.text-accent-4{color:#ffab00 !important}.orange{background-color:#ff9800 !important}.orange-text{color:#ff9800 !important}.orange.lighten-5{background-color:#fff3e0 !important}.orange-text.text-lighten-5{color:#fff3e0 !important}.orange.lighten-4{background-color:#ffe0b2 !important}.orange-text.text-lighten-4{color:#ffe0b2 !important}.orange.lighten-3{background-color:#ffcc80 !important}.orange-text.text-lighten-3{color:#ffcc80 !important}.orange.lighten-2{background-color:#ffb74d !important}.orange-text.text-lighten-2{color:#ffb74d !important}.orange.lighten-1{background-color:#ffa726 !important}.orange-text.text-lighten-1{color:#ffa726 !important}.orange.darken-1{background-color:#fb8c00 !important}.orange-text.text-darken-1{color:#fb8c00 !important}.orange.darken-2{background-color:#f57c00 !important}.orange-text.text-darken-2{color:#f57c00 !important}.orange.darken-3{background-color:#ef6c00 !important}.orange-text.text-darken-3{color:#ef6c00 !important}.orange.darken-4{background-color:#e65100 !important}.orange-text.text-darken-4{color:#e65100 !important}.orange.accent-1{background-color:#ffd180 !important}.orange-text.text-accent-1{color:#ffd180 !important}.orange.accent-2{background-color:#ffab40 !important}.orange-text.text-accent-2{color:#ffab40 !important}.orange.accent-3{background-color:#ff9100 !important}.orange-text.text-accent-3{color:#ff9100 !important}.orange.accent-4{background-color:#ff6d00 !important}.orange-text.text-accent-4{color:#ff6d00 !important}.deep-orange{background-color:#ff5722 !important}.deep-orange-text{color:#ff5722 !important}.deep-orange.lighten-5{background-color:#fbe9e7 !important}.deep-orange-text.text-lighten-5{color:#fbe9e7 !important}.deep-orange.lighten-4{background-color:#ffccbc !important}.deep-orange-text.text-lighten-4{color:#ffccbc !important}.deep-orange.lighten-3{background-color:#ffab91 !important}.deep-orange-text.text-lighten-3{color:#ffab91 !important}.deep-orange.lighten-2{background-color:#ff8a65 !important}.deep-orange-text.text-lighten-2{color:#ff8a65 !important}.deep-orange.lighten-1{background-color:#ff7043 !important}.deep-orange-text.text-lighten-1{color:#ff7043 !important}.deep-orange.darken-1{background-color:#f4511e !important}.deep-orange-text.text-darken-1{color:#f4511e !important}.deep-orange.darken-2{background-color:#e64a19 !important}.deep-orange-text.text-darken-2{color:#e64a19 !important}.deep-orange.darken-3{background-color:#d84315 !important}.deep-orange-text.text-darken-3{color:#d84315 !important}.deep-orange.darken-4{background-color:#bf360c !important}.deep-orange-text.text-darken-4{color:#bf360c !important}.deep-orange.accent-1{background-color:#ff9e80 !important}.deep-orange-text.text-accent-1{color:#ff9e80 !important}.deep-orange.accent-2{background-color:#ff6e40 !important}.deep-orange-text.text-accent-2{color:#ff6e40 !important}.deep-orange.accent-3{background-color:#ff3d00 !important}.deep-orange-text.text-accent-3{color:#ff3d00 !important}.deep-orange.accent-4{background-color:#dd2c00 !important}.deep-orange-text.text-accent-4{color:#dd2c00 !important}.brown{background-color:#795548 !important}.brown-text{color:#795548 !important}.brown.lighten-5{background-color:#efebe9 !important}.brown-text.text-lighten-5{color:#efebe9 !important}.brown.lighten-4{background-color:#d7ccc8 !important}.brown-text.text-lighten-4{color:#d7ccc8 !important}.brown.lighten-3{background-color:#bcaaa4 !important}.brown-text.text-lighten-3{color:#bcaaa4 !important}.brown.lighten-2{background-color:#a1887f !important}.brown-text.text-lighten-2{color:#a1887f !important}.brown.lighten-1{background-color:#8d6e63 !important}.brown-text.text-lighten-1{color:#8d6e63 !important}.brown.darken-1{background-color:#6d4c41 !important}.brown-text.text-darken-1{color:#6d4c41 !important}.brown.darken-2{background-color:#5d4037 !important}.brown-text.text-darken-2{color:#5d4037 !important}.brown.darken-3{background-color:#4e342e !important}.brown-text.text-darken-3{color:#4e342e !important}.brown.darken-4{background-color:#3e2723 !important}.brown-text.text-darken-4{color:#3e2723 !important}.blue-grey{background-color:#607d8b !important}.blue-grey-text{color:#607d8b !important}.blue-grey.lighten-5{background-color:#eceff1 !important}.blue-grey-text.text-lighten-5{color:#eceff1 !important}.blue-grey.lighten-4{background-color:#cfd8dc !important}.blue-grey-text.text-lighten-4{color:#cfd8dc !important}.blue-grey.lighten-3{background-color:#b0bec5 !important}.blue-grey-text.text-lighten-3{color:#b0bec5 !important}.blue-grey.lighten-2{background-color:#90a4ae !important}.blue-grey-text.text-lighten-2{color:#90a4ae !important}.blue-grey.lighten-1{background-color:#78909c !important}.blue-grey-text.text-lighten-1{color:#78909c !important}.blue-grey.darken-1{background-color:#546e7a !important}.blue-grey-text.text-darken-1{color:#546e7a !important}.blue-grey.darken-2{background-color:#455a64 !important}.blue-grey-text.text-darken-2{color:#455a64 !important}.blue-grey.darken-3{background-color:#37474f !important}.blue-grey-text.text-darken-3{color:#37474f !important}.blue-grey.darken-4{background-color:#263238 !important}.blue-grey-text.text-darken-4{color:#263238 !important}.grey{background-color:#9e9e9e !important}.grey-text{color:#9e9e9e !important}.grey.lighten-5{background-color:#fafafa !important}.grey-text.text-lighten-5{color:#fafafa !important}.grey.lighten-4{background-color:#f5f5f5 !important}.grey-text.text-lighten-4{color:#f5f5f5 !important}.grey.lighten-3{background-color:#eee !important}.grey-text.text-lighten-3{color:#eee !important}.grey.lighten-2{background-color:#e0e0e0 !important}.grey-text.text-lighten-2{color:#e0e0e0 !important}.grey.lighten-1{background-color:#bdbdbd !important}.grey-text.text-lighten-1{color:#bdbdbd !important}.grey.darken-1{background-color:#757575 !important}.grey-text.text-darken-1{color:#757575 !important}.grey.darken-2{background-color:#616161 !important}.grey-text.text-darken-2{color:#616161 !important}.grey.darken-3{background-color:#424242 !important}.grey-text.text-darken-3{color:#424242 !important}.grey.darken-4{background-color:#212121 !important}.grey-text.text-darken-4{color:#212121 !important}.black{background-color:#000 !important}.black-text{color:#000 !important}.white{background-color:#fff !important}.white-text{color:#fff !important}.transparent{background-color:rgba(0,0,0,0) !important}.transparent-text{color:rgba(0,0,0,0) !important}/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a{background-color:transparent;-webkit-text-decoration-skip:objects}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}html{-webkit-box-sizing:border-box;box-sizing:border-box}*,*:before,*:after{-webkit-box-sizing:inherit;box-sizing:inherit}button,input,optgroup,select,textarea{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif}ul:not(.browser-default){padding-left:0;list-style-type:none}ul:not(.browser-default)>li{list-style-type:none}a{color:#039be5;text-decoration:none;-webkit-tap-highlight-color:transparent}.valign-wrapper{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}.clearfix{clear:both}.z-depth-0{-webkit-box-shadow:none !important;box-shadow:none !important}.z-depth-1,nav,.card-panel,.card,.toast,.btn,.btn-large,.btn-small,.btn-floating,.dropdown-content,.collapsible,.sidenav{-webkit-box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2);box-shadow:0 2px 2px 0 rgba(0,0,0,0.14),0 3px 1px -2px rgba(0,0,0,0.12),0 1px 5px 0 rgba(0,0,0,0.2)}.z-depth-1-half,.btn:hover,.btn-large:hover,.btn-small:hover,.btn-floating:hover{-webkit-box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2);box-shadow:0 3px 3px 0 rgba(0,0,0,0.14),0 1px 7px 0 rgba(0,0,0,0.12),0 3px 1px -1px rgba(0,0,0,0.2)}.z-depth-2{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3);box-shadow:0 4px 5px 0 rgba(0,0,0,0.14),0 1px 10px 0 rgba(0,0,0,0.12),0 2px 4px -1px rgba(0,0,0,0.3)}.z-depth-3{-webkit-box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2);box-shadow:0 8px 17px 2px rgba(0,0,0,0.14),0 3px 14px 2px rgba(0,0,0,0.12),0 5px 5px -3px rgba(0,0,0,0.2)}.z-depth-4{-webkit-box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2);box-shadow:0 16px 24px 2px rgba(0,0,0,0.14),0 6px 30px 5px rgba(0,0,0,0.12),0 8px 10px -7px rgba(0,0,0,0.2)}.z-depth-5,.modal{-webkit-box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2);box-shadow:0 24px 38px 3px rgba(0,0,0,0.14),0 9px 46px 8px rgba(0,0,0,0.12),0 11px 15px -7px rgba(0,0,0,0.2)}.hoverable{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s}.hoverable:hover{-webkit-box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);box-shadow:0 8px 17px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}.divider{height:1px;overflow:hidden;background-color:#e0e0e0}blockquote{margin:20px 0;padding-left:1.5rem;border-left:5px solid #ee6e73}i{line-height:inherit}i.left{float:left;margin-right:15px}i.right{float:right;margin-left:15px}i.tiny{font-size:1rem}i.small{font-size:2rem}i.medium{font-size:4rem}i.large{font-size:6rem}img.responsive-img,video.responsive-video{max-width:100%;height:auto}.pagination li{display:inline-block;border-radius:2px;text-align:center;vertical-align:top;height:30px}.pagination li a{color:#444;display:inline-block;font-size:1.2rem;padding:0 10px;line-height:30px}.pagination li.active a{color:#fff}.pagination li.active{background-color:#ee6e73}.pagination li.disabled a{cursor:default;color:#999}.pagination li i{font-size:2rem}.pagination li.pages ul li{display:inline-block;float:none}@media only screen and (max-width: 992px){.pagination{width:100%}.pagination li.prev,.pagination li.next{width:10%}.pagination li.pages{width:80%;overflow:hidden;white-space:nowrap}}.breadcrumb{font-size:18px;color:rgba(255,255,255,0.7)}.breadcrumb i,.breadcrumb [class^="mdi-"],.breadcrumb [class*="mdi-"],.breadcrumb i.material-icons{display:inline-block;float:left;font-size:24px}.breadcrumb:before{content:'\E5CC';color:rgba(255,255,255,0.7);vertical-align:top;display:inline-block;font-family:'Material Icons';font-weight:normal;font-style:normal;font-size:25px;margin:0 10px 0 8px;-webkit-font-smoothing:antialiased}.breadcrumb:first-child:before{display:none}.breadcrumb:last-child{color:#fff}.parallax-container{position:relative;overflow:hidden;height:500px}.parallax-container .parallax{position:absolute;top:0;left:0;right:0;bottom:0;z-index:-1}.parallax-container .parallax img{opacity:0;position:absolute;left:50%;bottom:0;min-width:100%;min-height:100%;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-transform:translateX(-50%);transform:translateX(-50%)}.pin-top,.pin-bottom{position:relative}.pinned{position:fixed !important}ul.staggered-list li{opacity:0}.fade-in{opacity:0;-webkit-transform-origin:0 50%;transform-origin:0 50%}@media only screen and (max-width: 600px){.hide-on-small-only,.hide-on-small-and-down{display:none !important}}@media only screen and (max-width: 992px){.hide-on-med-and-down{display:none !important}}@media only screen and (min-width: 601px){.hide-on-med-and-up{display:none !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.hide-on-med-only{display:none !important}}@media only screen and (min-width: 993px){.hide-on-large-only{display:none !important}}@media only screen and (min-width: 1201px){.hide-on-extra-large-only{display:none !important}}@media only screen and (min-width: 1201px){.show-on-extra-large{display:block !important}}@media only screen and (min-width: 993px){.show-on-large{display:block !important}}@media only screen and (min-width: 600px) and (max-width: 992px){.show-on-medium{display:block !important}}@media only screen and (max-width: 600px){.show-on-small{display:block !important}}@media only screen and (min-width: 601px){.show-on-medium-and-up{display:block !important}}@media only screen and (max-width: 992px){.show-on-medium-and-down{display:block !important}}@media only screen and (max-width: 600px){.center-on-small-only{text-align:center}}.page-footer{padding-top:20px;color:#fff;background-color:#ee6e73}.page-footer .footer-copyright{overflow:hidden;min-height:50px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;padding:10px 0px;color:rgba(255,255,255,0.8);background-color:rgba(51,51,51,0.08)}table,th,td{border:none}table{width:100%;display:table;border-collapse:collapse;border-spacing:0}table.striped tr{border-bottom:none}table.striped>tbody>tr:nth-child(odd){background-color:rgba(242,242,242,0.5)}table.striped>tbody>tr>td{border-radius:0}table.highlight>tbody>tr{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}table.highlight>tbody>tr:hover{background-color:rgba(242,242,242,0.5)}table.centered thead tr th,table.centered tbody tr td{text-align:center}tr{border-bottom:1px solid rgba(0,0,0,0.12)}td,th{padding:15px 5px;display:table-cell;text-align:left;vertical-align:middle;border-radius:2px}@media only screen and (max-width: 992px){table.responsive-table{width:100%;border-collapse:collapse;border-spacing:0;display:block;position:relative}table.responsive-table td:empty:before{content:'\00a0'}table.responsive-table th,table.responsive-table td{margin:0;vertical-align:top}table.responsive-table th{text-align:left}table.responsive-table thead{display:block;float:left}table.responsive-table thead tr{display:block;padding:0 10px 0 0}table.responsive-table thead tr th::before{content:"\00a0"}table.responsive-table tbody{display:block;width:auto;position:relative;overflow-x:auto;white-space:nowrap}table.responsive-table tbody tr{display:inline-block;vertical-align:top}table.responsive-table th{display:block;text-align:right}table.responsive-table td{display:block;min-height:1.25em;text-align:left}table.responsive-table tr{border-bottom:none;padding:0 10px}table.responsive-table thead{border:0;border-right:1px solid rgba(0,0,0,0.12)}}.collection{margin:.5rem 0 1rem 0;border:1px solid #e0e0e0;border-radius:2px;overflow:hidden;position:relative}.collection .collection-item{background-color:#fff;line-height:1.5rem;padding:10px 20px;margin:0;border-bottom:1px solid #e0e0e0}.collection .collection-item.avatar{min-height:84px;padding-left:72px;position:relative}.collection .collection-item.avatar:not(.circle-clipper)>.circle,.collection .collection-item.avatar :not(.circle-clipper)>.circle{position:absolute;width:42px;height:42px;overflow:hidden;left:15px;display:inline-block;vertical-align:middle}.collection .collection-item.avatar i.circle{font-size:18px;line-height:42px;color:#fff;background-color:#999;text-align:center}.collection .collection-item.avatar .title{font-size:16px}.collection .collection-item.avatar p{margin:0}.collection .collection-item.avatar .secondary-content{position:absolute;top:16px;right:16px}.collection .collection-item:last-child{border-bottom:none}.collection .collection-item.active{background-color:#26a69a;color:#eafaf9}.collection .collection-item.active .secondary-content{color:#fff}.collection a.collection-item{display:block;-webkit-transition:.25s;transition:.25s;color:#26a69a}.collection a.collection-item:not(.active):hover{background-color:#ddd}.collection.with-header .collection-header{background-color:#fff;border-bottom:1px solid #e0e0e0;padding:10px 20px}.collection.with-header .collection-item{padding-left:30px}.collection.with-header .collection-item.avatar{padding-left:72px}.secondary-content{float:right;color:#26a69a}.collapsible .collection{margin:0;border:none}.video-container{position:relative;padding-bottom:56.25%;height:0;overflow:hidden}.video-container iframe,.video-container object,.video-container embed{position:absolute;top:0;left:0;width:100%;height:100%}.progress{position:relative;height:4px;display:block;width:100%;background-color:#acece6;border-radius:2px;margin:.5rem 0 1rem 0;overflow:hidden}.progress .determinate{position:absolute;top:0;left:0;bottom:0;background-color:#26a69a;-webkit-transition:width .3s linear;transition:width .3s linear}.progress .indeterminate{background-color:#26a69a}.progress .indeterminate:before{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;animation:indeterminate 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite}.progress .indeterminate:after{content:'';position:absolute;background-color:inherit;top:0;left:0;bottom:0;will-change:left, right;-webkit-animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;animation:indeterminate-short 2.1s cubic-bezier(0.165, 0.84, 0.44, 1) infinite;-webkit-animation-delay:1.15s;animation-delay:1.15s}@-webkit-keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@keyframes indeterminate{0%{left:-35%;right:100%}60%{left:100%;right:-90%}100%{left:100%;right:-90%}}@-webkit-keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}@keyframes indeterminate-short{0%{left:-200%;right:100%}60%{left:107%;right:-8%}100%{left:107%;right:-8%}}.hide{display:none !important}.left-align{text-align:left}.right-align{text-align:right}.center,.center-align{text-align:center}.left{float:left !important}.right{float:right !important}.no-select,input[type=range],input[type=range]+.thumb{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.circle{border-radius:50%}.center-block{display:block;margin-left:auto;margin-right:auto}.truncate{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.no-padding{padding:0 !important}span.badge{min-width:3rem;padding:0 6px;margin-left:14px;text-align:center;font-size:1rem;line-height:22px;height:22px;color:#757575;float:right;-webkit-box-sizing:border-box;box-sizing:border-box}span.badge.new{font-weight:300;font-size:0.8rem;color:#fff;background-color:#26a69a;border-radius:2px}span.badge.new:after{content:" new"}span.badge[data-badge-caption]::after{content:" " attr(data-badge-caption)}nav ul a span.badge{display:inline-block;float:none;margin-left:4px;line-height:22px;height:22px;-webkit-font-smoothing:auto}.collection-item span.badge{margin-top:calc(.75rem - 11px)}.collapsible span.badge{margin-left:auto}.sidenav span.badge{margin-top:calc(24px - 11px)}table span.badge{display:inline-block;float:none;margin-left:auto}.material-icons{text-rendering:optimizeLegibility;-webkit-font-feature-settings:'liga';-moz-font-feature-settings:'liga';font-feature-settings:'liga'}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width: 601px){.container{width:85%}}@media only screen and (min-width: 993px){.container{width:70%}}.col .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;-webkit-box-sizing:border-box;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*="push-"],.row .col[class*="pull-"]{position:relative}.row .col.s1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.3333333333%}.row .col.pull-s1{right:8.3333333333%}.row .col.push-s1{left:8.3333333333%}.row .col.offset-s2{margin-left:16.6666666667%}.row .col.pull-s2{right:16.6666666667%}.row .col.push-s2{left:16.6666666667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.3333333333%}.row .col.pull-s4{right:33.3333333333%}.row .col.push-s4{left:33.3333333333%}.row .col.offset-s5{margin-left:41.6666666667%}.row .col.pull-s5{right:41.6666666667%}.row .col.push-s5{left:41.6666666667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.3333333333%}.row .col.pull-s7{right:58.3333333333%}.row .col.push-s7{left:58.3333333333%}.row .col.offset-s8{margin-left:66.6666666667%}.row .col.pull-s8{right:66.6666666667%}.row .col.push-s8{left:66.6666666667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.3333333333%}.row .col.pull-s10{right:83.3333333333%}.row .col.push-s10{left:83.3333333333%}.row .col.offset-s11{margin-left:91.6666666667%}.row .col.pull-s11{right:91.6666666667%}.row .col.push-s11{left:91.6666666667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width: 601px){.row .col.m1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.3333333333%}.row .col.pull-m1{right:8.3333333333%}.row .col.push-m1{left:8.3333333333%}.row .col.offset-m2{margin-left:16.6666666667%}.row .col.pull-m2{right:16.6666666667%}.row .col.push-m2{left:16.6666666667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.3333333333%}.row .col.pull-m4{right:33.3333333333%}.row .col.push-m4{left:33.3333333333%}.row .col.offset-m5{margin-left:41.6666666667%}.row .col.pull-m5{right:41.6666666667%}.row .col.push-m5{left:41.6666666667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.3333333333%}.row .col.pull-m7{right:58.3333333333%}.row .col.push-m7{left:58.3333333333%}.row .col.offset-m8{margin-left:66.6666666667%}.row .col.pull-m8{right:66.6666666667%}.row .col.push-m8{left:66.6666666667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.3333333333%}.row .col.pull-m10{right:83.3333333333%}.row .col.push-m10{left:83.3333333333%}.row .col.offset-m11{margin-left:91.6666666667%}.row .col.pull-m11{right:91.6666666667%}.row .col.push-m11{left:91.6666666667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width: 993px){.row .col.l1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.3333333333%}.row .col.pull-l1{right:8.3333333333%}.row .col.push-l1{left:8.3333333333%}.row .col.offset-l2{margin-left:16.6666666667%}.row .col.pull-l2{right:16.6666666667%}.row .col.push-l2{left:16.6666666667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.3333333333%}.row .col.pull-l4{right:33.3333333333%}.row .col.push-l4{left:33.3333333333%}.row .col.offset-l5{margin-left:41.6666666667%}.row .col.pull-l5{right:41.6666666667%}.row .col.push-l5{left:41.6666666667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.3333333333%}.row .col.pull-l7{right:58.3333333333%}.row .col.push-l7{left:58.3333333333%}.row .col.offset-l8{margin-left:66.6666666667%}.row .col.pull-l8{right:66.6666666667%}.row .col.push-l8{left:66.6666666667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.3333333333%}.row .col.pull-l10{right:83.3333333333%}.row .col.push-l10{left:83.3333333333%}.row .col.offset-l11{margin-left:91.6666666667%}.row .col.pull-l11{right:91.6666666667%}.row .col.push-l11{left:91.6666666667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width: 1201px){.row .col.xl1{width:8.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.3333333333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.6666666667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.3333333333%}.row .col.pull-xl1{right:8.3333333333%}.row .col.push-xl1{left:8.3333333333%}.row .col.offset-xl2{margin-left:16.6666666667%}.row .col.pull-xl2{right:16.6666666667%}.row .col.push-xl2{left:16.6666666667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.3333333333%}.row .col.pull-xl4{right:33.3333333333%}.row .col.push-xl4{left:33.3333333333%}.row .col.offset-xl5{margin-left:41.6666666667%}.row .col.pull-xl5{right:41.6666666667%}.row .col.push-xl5{left:41.6666666667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.3333333333%}.row .col.pull-xl7{right:58.3333333333%}.row .col.push-xl7{left:58.3333333333%}.row .col.offset-xl8{margin-left:66.6666666667%}.row .col.pull-xl8{right:66.6666666667%}.row .col.push-xl8{left:66.6666666667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.3333333333%}.row .col.pull-xl10{right:83.3333333333%}.row .col.push-xl10{left:83.3333333333%}.row .col.offset-xl11{margin-left:91.6666666667%}.row .col.pull-xl11{right:91.6666666667%}.row .col.push-xl11{left:91.6666666667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}nav{color:#fff;background-color:#ee6e73;width:100%;height:56px;line-height:56px}nav.nav-extended{height:auto}nav.nav-extended .nav-wrapper{min-height:56px;height:auto}nav.nav-extended .nav-content{position:relative;line-height:normal}nav a{color:#fff}nav i,nav [class^="mdi-"],nav [class*="mdi-"],nav i.material-icons{display:block;font-size:24px;height:56px;line-height:56px}nav .nav-wrapper{position:relative;height:100%}@media only screen and (min-width: 993px){nav a.sidenav-trigger{display:none}}nav .sidenav-trigger{float:left;position:relative;z-index:1;height:56px;margin:0 18px}nav .sidenav-trigger i{height:56px;line-height:56px}nav .brand-logo{position:absolute;color:#fff;display:inline-block;font-size:2.1rem;padding:0}nav .brand-logo.center{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}@media only screen and (max-width: 992px){nav .brand-logo{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}nav .brand-logo.left,nav .brand-logo.right{padding:0;-webkit-transform:none;transform:none}nav .brand-logo.left{left:0.5rem}nav .brand-logo.right{right:0.5rem;left:auto}}nav .brand-logo.right{right:0.5rem;padding:0}nav .brand-logo i,nav .brand-logo [class^="mdi-"],nav .brand-logo [class*="mdi-"],nav .brand-logo i.material-icons{float:left;margin-right:15px}nav .nav-title{display:inline-block;font-size:32px;padding:28px 0}nav ul{margin:0}nav ul li{-webkit-transition:background-color .3s;transition:background-color .3s;float:left;padding:0}nav ul li.active{background-color:rgba(0,0,0,0.1)}nav ul a{-webkit-transition:background-color .3s;transition:background-color .3s;font-size:1rem;color:#fff;display:block;padding:0 15px;cursor:pointer}nav ul a.btn,nav ul a.btn-large,nav ul a.btn-small,nav ul a.btn-large,nav ul a.btn-flat,nav ul a.btn-floating{margin-top:-2px;margin-left:15px;margin-right:15px}nav ul a.btn>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-small>.material-icons,nav ul a.btn-large>.material-icons,nav ul a.btn-flat>.material-icons,nav ul a.btn-floating>.material-icons{height:inherit;line-height:inherit}nav ul a:hover{background-color:rgba(0,0,0,0.1)}nav ul.left{float:left}nav form{height:100%}nav .input-field{margin:0;height:100%}nav .input-field input{height:100%;font-size:1.2rem;border:none;padding-left:2rem}nav .input-field input:focus,nav .input-field input[type=text]:valid,nav .input-field input[type=password]:valid,nav .input-field input[type=email]:valid,nav .input-field input[type=url]:valid,nav .input-field input[type=date]:valid{border:none;-webkit-box-shadow:none;box-shadow:none}nav .input-field label{top:0;left:0}nav .input-field label i{color:rgba(255,255,255,0.7);-webkit-transition:color .3s;transition:color .3s}nav .input-field label.active i{color:#fff}.navbar-fixed{position:relative;height:56px;z-index:997}.navbar-fixed nav{position:fixed}@media only screen and (min-width: 601px){nav.nav-extended .nav-wrapper{min-height:64px}nav,nav .nav-wrapper i,nav a.sidenav-trigger,nav a.sidenav-trigger i{height:64px;line-height:64px}.navbar-fixed{height:64px}}a{text-decoration:none}html{line-height:1.5;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;font-weight:normal;color:rgba(0,0,0,0.87)}@media only screen and (min-width: 0){html{font-size:14px}}@media only screen and (min-width: 992px){html{font-size:14.5px}}@media only screen and (min-width: 1200px){html{font-size:15px}}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.3}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:4.2rem;line-height:110%;margin:2.8rem 0 1.68rem 0}h2{font-size:3.56rem;line-height:110%;margin:2.3733333333rem 0 1.424rem 0}h3{font-size:2.92rem;line-height:110%;margin:1.9466666667rem 0 1.168rem 0}h4{font-size:2.28rem;line-height:110%;margin:1.52rem 0 .912rem 0}h5{font-size:1.64rem;line-height:110%;margin:1.0933333333rem 0 .656rem 0}h6{font-size:1.15rem;line-height:110%;margin:.7666666667rem 0 .46rem 0}em{font-style:italic}strong{font-weight:500}small{font-size:75%}.light{font-weight:300}.thin{font-weight:200}@media only screen and (min-width: 360px){.flow-text{font-size:1.2rem}}@media only screen and (min-width: 390px){.flow-text{font-size:1.224rem}}@media only screen and (min-width: 420px){.flow-text{font-size:1.248rem}}@media only screen and (min-width: 450px){.flow-text{font-size:1.272rem}}@media only screen and (min-width: 480px){.flow-text{font-size:1.296rem}}@media only screen and (min-width: 510px){.flow-text{font-size:1.32rem}}@media only screen and (min-width: 540px){.flow-text{font-size:1.344rem}}@media only screen and (min-width: 570px){.flow-text{font-size:1.368rem}}@media only screen and (min-width: 600px){.flow-text{font-size:1.392rem}}@media only screen and (min-width: 630px){.flow-text{font-size:1.416rem}}@media only screen and (min-width: 660px){.flow-text{font-size:1.44rem}}@media only screen and (min-width: 690px){.flow-text{font-size:1.464rem}}@media only screen and (min-width: 720px){.flow-text{font-size:1.488rem}}@media only screen and (min-width: 750px){.flow-text{font-size:1.512rem}}@media only screen and (min-width: 780px){.flow-text{font-size:1.536rem}}@media only screen and (min-width: 810px){.flow-text{font-size:1.56rem}}@media only screen and (min-width: 840px){.flow-text{font-size:1.584rem}}@media only screen and (min-width: 870px){.flow-text{font-size:1.608rem}}@media only screen and (min-width: 900px){.flow-text{font-size:1.632rem}}@media only screen and (min-width: 930px){.flow-text{font-size:1.656rem}}@media only screen and (min-width: 960px){.flow-text{font-size:1.68rem}}@media only screen and (max-width: 360px){.flow-text{font-size:1.2rem}}.scale-transition{-webkit-transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:-webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important;transition:transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63), -webkit-transform 0.3s cubic-bezier(0.53, 0.01, 0.36, 1.63) !important}.scale-transition.scale-out{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .2s !important;transition:-webkit-transform .2s !important;transition:transform .2s !important;transition:transform .2s, -webkit-transform .2s !important}.scale-transition.scale-in{-webkit-transform:scale(1);transform:scale(1)}.card-panel{-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;padding:24px;margin:.5rem 0 1rem 0;border-radius:2px;background-color:#fff}.card{position:relative;margin:.5rem 0 1rem 0;background-color:#fff;-webkit-transition:-webkit-box-shadow .25s;transition:-webkit-box-shadow .25s;transition:box-shadow .25s;transition:box-shadow .25s, -webkit-box-shadow .25s;border-radius:2px}.card .card-title{font-size:24px;font-weight:300}.card .card-title.activator{cursor:pointer}.card.small,.card.medium,.card.large{position:relative}.card.small .card-image,.card.medium .card-image,.card.large .card-image{max-height:60%;overflow:hidden}.card.small .card-image+.card-content,.card.medium .card-image+.card-content,.card.large .card-image+.card-content{max-height:40%}.card.small .card-content,.card.medium .card-content,.card.large .card-content{max-height:100%;overflow:hidden}.card.small .card-action,.card.medium .card-action,.card.large .card-action{position:absolute;bottom:0;left:0;right:0}.card.small{height:300px}.card.medium{height:400px}.card.large{height:500px}.card.horizontal{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.card.horizontal.small .card-image,.card.horizontal.medium .card-image,.card.horizontal.large .card-image{height:100%;max-height:none;overflow:visible}.card.horizontal.small .card-image img,.card.horizontal.medium .card-image img,.card.horizontal.large .card-image img{height:100%}.card.horizontal .card-image{max-width:50%}.card.horizontal .card-image img{border-radius:2px 0 0 2px;max-width:100%;width:auto}.card.horizontal .card-stacked{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;position:relative}.card.horizontal .card-stacked .card-content{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.card.sticky-action .card-action{z-index:2}.card.sticky-action .card-reveal{z-index:1;padding-bottom:64px}.card .card-image{position:relative}.card .card-image img{display:block;border-radius:2px 2px 0 0;position:relative;left:0;right:0;top:0;bottom:0;width:100%}.card .card-image .card-title{color:#fff;position:absolute;bottom:0;left:0;max-width:100%;padding:24px}.card .card-content{padding:24px;border-radius:0 0 2px 2px}.card .card-content p{margin:0}.card .card-content .card-title{display:block;line-height:32px;margin-bottom:8px}.card .card-content .card-title i{line-height:32px}.card .card-action{background-color:inherit;border-top:1px solid rgba(160,160,160,0.2);position:relative;padding:16px 24px}.card .card-action:last-child{border-radius:0 0 2px 2px}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating){color:#ffab40;margin-right:24px;-webkit-transition:color .3s ease;transition:color .3s ease;text-transform:uppercase}.card .card-action a:not(.btn):not(.btn-large):not(.btn-small):not(.btn-large):not(.btn-floating):hover{color:#ffd8a6}.card .card-reveal{padding:24px;position:absolute;background-color:#fff;width:100%;overflow-y:auto;left:0;top:100%;height:100%;z-index:3;display:none}.card .card-reveal .card-title{cursor:pointer;display:block}#toast-container{display:block;position:fixed;z-index:10000}@media only screen and (max-width: 600px){#toast-container{min-width:100%;bottom:0%}}@media only screen and (min-width: 601px) and (max-width: 992px){#toast-container{left:5%;bottom:7%;max-width:90%}}@media only screen and (min-width: 993px){#toast-container{top:10%;right:7%;max-width:86%}}.toast{border-radius:2px;top:35px;width:auto;margin-top:10px;position:relative;max-width:100%;height:auto;min-height:48px;line-height:1.5em;background-color:#323232;padding:10px 25px;font-size:1.1rem;font-weight:300;color:#fff;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;cursor:default}.toast .toast-action{color:#eeff41;font-weight:500;margin-right:-25px;margin-left:3rem}.toast.rounded{border-radius:24px}@media only screen and (max-width: 600px){.toast{width:100%;border-radius:0}}.tabs{position:relative;overflow-x:auto;overflow-y:hidden;height:48px;width:100%;background-color:#fff;margin:0 auto;white-space:nowrap}.tabs.tabs-transparent{background-color:transparent}.tabs.tabs-transparent .tab a,.tabs.tabs-transparent .tab.disabled a,.tabs.tabs-transparent .tab.disabled a:hover{color:rgba(255,255,255,0.7)}.tabs.tabs-transparent .tab a:hover,.tabs.tabs-transparent .tab a.active{color:#fff}.tabs.tabs-transparent .indicator{background-color:#fff}.tabs.tabs-fixed-width{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs.tabs-fixed-width .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab{display:inline-block;text-align:center;line-height:48px;height:48px;padding:0;margin:0;text-transform:uppercase}.tabs .tab a{color:rgba(238,110,115,0.7);display:block;width:100%;height:100%;padding:0 24px;font-size:14px;text-overflow:ellipsis;overflow:hidden;-webkit-transition:color .28s ease, background-color .28s ease;transition:color .28s ease, background-color .28s ease}.tabs .tab a:focus,.tabs .tab a:focus.active{background-color:rgba(246,178,181,0.2);outline:none}.tabs .tab a:hover,.tabs .tab a.active{background-color:transparent;color:#ee6e73}.tabs .tab.disabled a,.tabs .tab.disabled a:hover{color:rgba(238,110,115,0.4);cursor:default}.tabs .indicator{position:absolute;bottom:0;height:2px;background-color:#f6b2b5;will-change:left, right}@media only screen and (max-width: 992px){.tabs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.tabs .tab{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1}.tabs .tab a{padding:0 12px}}.material-tooltip{padding:10px 8px;font-size:1rem;z-index:2000;background-color:transparent;border-radius:2px;color:#fff;min-height:36px;line-height:120%;opacity:0;position:absolute;text-align:center;max-width:calc(100% - 4px);overflow:hidden;left:0;top:0;pointer-events:none;visibility:hidden;background-color:#323232}.backdrop{position:absolute;opacity:0;height:7px;width:14px;border-radius:0 0 50% 50%;background-color:#323232;z-index:-1;-webkit-transform-origin:50% 0%;transform-origin:50% 0%;visibility:hidden}.btn,.btn-large,.btn-small,.btn-flat{border:none;border-radius:2px;display:inline-block;height:36px;line-height:36px;padding:0 16px;text-transform:uppercase;vertical-align:middle;-webkit-tap-highlight-color:transparent}.btn.disabled,.disabled.btn-large,.disabled.btn-small,.btn-floating.disabled,.btn-large.disabled,.btn-small.disabled,.btn-flat.disabled,.btn:disabled,.btn-large:disabled,.btn-small:disabled,.btn-floating:disabled,.btn-large:disabled,.btn-small:disabled,.btn-flat:disabled,.btn[disabled],.btn-large[disabled],.btn-small[disabled],.btn-floating[disabled],.btn-large[disabled],.btn-small[disabled],.btn-flat[disabled]{pointer-events:none;background-color:#DFDFDF !important;-webkit-box-shadow:none;box-shadow:none;color:#9F9F9F !important;cursor:default}.btn.disabled:hover,.disabled.btn-large:hover,.disabled.btn-small:hover,.btn-floating.disabled:hover,.btn-large.disabled:hover,.btn-small.disabled:hover,.btn-flat.disabled:hover,.btn:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-floating:disabled:hover,.btn-large:disabled:hover,.btn-small:disabled:hover,.btn-flat:disabled:hover,.btn[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-floating[disabled]:hover,.btn-large[disabled]:hover,.btn-small[disabled]:hover,.btn-flat[disabled]:hover{background-color:#DFDFDF !important;color:#9F9F9F !important}.btn,.btn-large,.btn-small,.btn-floating,.btn-large,.btn-small,.btn-flat{font-size:14px;outline:0}.btn i,.btn-large i,.btn-small i,.btn-floating i,.btn-large i,.btn-small i,.btn-flat i{font-size:1.3rem;line-height:inherit}.btn:focus,.btn-large:focus,.btn-small:focus,.btn-floating:focus{background-color:#1d7d74}.btn,.btn-large,.btn-small{text-decoration:none;color:#fff;background-color:#26a69a;text-align:center;letter-spacing:.5px;-webkit-transition:background-color .2s ease-out;transition:background-color .2s ease-out;cursor:pointer}.btn:hover,.btn-large:hover,.btn-small:hover{background-color:#2bbbad}.btn-floating{display:inline-block;color:#fff;position:relative;overflow:hidden;z-index:1;width:40px;height:40px;line-height:40px;padding:0;background-color:#26a69a;border-radius:50%;-webkit-transition:background-color .3s;transition:background-color .3s;cursor:pointer;vertical-align:middle}.btn-floating:hover{background-color:#26a69a}.btn-floating:before{border-radius:0}.btn-floating.btn-large{width:56px;height:56px;padding:0}.btn-floating.btn-large.halfway-fab{bottom:-28px}.btn-floating.btn-large i{line-height:56px}.btn-floating.btn-small{width:32.4px;height:32.4px}.btn-floating.btn-small.halfway-fab{bottom:-16.2px}.btn-floating.btn-small i{line-height:32.4px}.btn-floating.halfway-fab{position:absolute;right:24px;bottom:-20px}.btn-floating.halfway-fab.left{right:auto;left:24px}.btn-floating i{width:inherit;display:inline-block;text-align:center;color:#fff;font-size:1.6rem;line-height:40px}button.btn-floating{border:none}.fixed-action-btn{position:fixed;right:23px;bottom:23px;padding-top:15px;margin-bottom:0;z-index:997}.fixed-action-btn.active ul{visibility:visible}.fixed-action-btn.direction-left,.fixed-action-btn.direction-right{padding:0 0 0 15px}.fixed-action-btn.direction-left ul,.fixed-action-btn.direction-right ul{text-align:right;right:64px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);height:100%;left:auto;width:500px}.fixed-action-btn.direction-left ul li,.fixed-action-btn.direction-right ul li{display:inline-block;margin:7.5px 15px 0 0}.fixed-action-btn.direction-right{padding:0 15px 0 0}.fixed-action-btn.direction-right ul{text-align:left;direction:rtl;left:64px;right:auto}.fixed-action-btn.direction-right ul li{margin:7.5px 0 0 15px}.fixed-action-btn.direction-bottom{padding:0 0 15px 0}.fixed-action-btn.direction-bottom ul{top:64px;bottom:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:reverse;-webkit-flex-direction:column-reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.fixed-action-btn.direction-bottom ul li{margin:15px 0 0 0}.fixed-action-btn.toolbar{padding:0;height:56px}.fixed-action-btn.toolbar.active>a i{opacity:0}.fixed-action-btn.toolbar ul{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;top:0;bottom:0;z-index:1}.fixed-action-btn.toolbar ul li{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:inline-block;margin:0;height:100%;-webkit-transition:none;transition:none}.fixed-action-btn.toolbar ul li a{display:block;overflow:hidden;position:relative;width:100%;height:100%;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;color:#fff;line-height:56px;z-index:1}.fixed-action-btn.toolbar ul li a i{line-height:inherit}.fixed-action-btn ul{left:0;right:0;text-align:center;position:absolute;bottom:64px;margin:0;visibility:hidden}.fixed-action-btn ul li{margin-bottom:15px}.fixed-action-btn ul a.btn-floating{opacity:0}.fixed-action-btn .fab-backdrop{position:absolute;top:0;left:0;z-index:-1;width:40px;height:40px;background-color:#26a69a;border-radius:50%;-webkit-transform:scale(0);transform:scale(0)}.btn-flat{-webkit-box-shadow:none;box-shadow:none;background-color:transparent;color:#343434;cursor:pointer;-webkit-transition:background-color .2s;transition:background-color .2s}.btn-flat:focus,.btn-flat:hover{-webkit-box-shadow:none;box-shadow:none}.btn-flat:focus{background-color:rgba(0,0,0,0.1)}.btn-flat.disabled,.btn-flat.btn-flat[disabled]{background-color:transparent !important;color:#b3b2b2 !important;cursor:default}.btn-large{height:54px;line-height:54px;font-size:15px;padding:0 28px}.btn-large i{font-size:1.6rem}.btn-small{height:32.4px;line-height:32.4px;font-size:13px}.btn-small i{font-size:1.2rem}.btn-block{display:block}.dropdown-content{background-color:#fff;margin:0;display:none;min-width:100px;overflow-y:auto;opacity:0;position:absolute;left:0;top:0;z-index:9999;-webkit-transform-origin:0 0;transform-origin:0 0}.dropdown-content:focus{outline:0}.dropdown-content li{clear:both;color:rgba(0,0,0,0.87);cursor:pointer;min-height:50px;line-height:1.5rem;width:100%;text-align:left}.dropdown-content li:hover,.dropdown-content li.active{background-color:#eee}.dropdown-content li:focus{outline:none}.dropdown-content li.divider{min-height:0;height:1px}.dropdown-content li>a,.dropdown-content li>span{font-size:16px;color:#26a69a;display:block;line-height:22px;padding:14px 16px}.dropdown-content li>span>label{top:1px;left:0;height:18px}.dropdown-content li>a>i{height:inherit;line-height:inherit;float:left;margin:0 24px 0 0;width:24px}body.keyboard-focused .dropdown-content li:focus{background-color:#dadada}.input-field.col .dropdown-content [type="checkbox"]+label{top:1px;left:0;height:18px;-webkit-transform:none;transform:none}.dropdown-trigger{cursor:pointer}/*! + * Waves v0.6.0 + * http://fian.my.id/Waves + * + * Copyright 2014 Alfiana E. Sibuea and other contributors + * Released under the MIT license + * https://github.com/fians/Waves/blob/master/LICENSE + */.waves-effect{position:relative;cursor:pointer;display:inline-block;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;vertical-align:middle;z-index:1;-webkit-transition:.3s ease-out;transition:.3s ease-out}.waves-effect .waves-ripple{position:absolute;border-radius:50%;width:20px;height:20px;margin-top:-10px;margin-left:-10px;opacity:0;background:rgba(0,0,0,0.2);-webkit-transition:all 0.7s ease-out;transition:all 0.7s ease-out;-webkit-transition-property:opacity, -webkit-transform;transition-property:opacity, -webkit-transform;transition-property:transform, opacity;transition-property:transform, opacity, -webkit-transform;-webkit-transform:scale(0);transform:scale(0);pointer-events:none}.waves-effect.waves-light .waves-ripple{background-color:rgba(255,255,255,0.45)}.waves-effect.waves-red .waves-ripple{background-color:rgba(244,67,54,0.7)}.waves-effect.waves-yellow .waves-ripple{background-color:rgba(255,235,59,0.7)}.waves-effect.waves-orange .waves-ripple{background-color:rgba(255,152,0,0.7)}.waves-effect.waves-purple .waves-ripple{background-color:rgba(156,39,176,0.7)}.waves-effect.waves-green .waves-ripple{background-color:rgba(76,175,80,0.7)}.waves-effect.waves-teal .waves-ripple{background-color:rgba(0,150,136,0.7)}.waves-effect input[type="button"],.waves-effect input[type="reset"],.waves-effect input[type="submit"]{border:0;font-style:normal;font-size:inherit;text-transform:inherit;background:none}.waves-effect img{position:relative;z-index:-1}.waves-notransition{-webkit-transition:none !important;transition:none !important}.waves-circle{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-mask-image:-webkit-radial-gradient(circle, white 100%, black 100%)}.waves-input-wrapper{border-radius:0.2em;vertical-align:bottom}.waves-input-wrapper .waves-button-input{position:relative;top:0;left:0;z-index:1}.waves-circle{text-align:center;width:2.5em;height:2.5em;line-height:2.5em;border-radius:50%;-webkit-mask-image:none}.waves-block{display:block}.waves-effect .waves-ripple{z-index:-1}.modal{display:none;position:fixed;left:0;right:0;background-color:#fafafa;padding:0;max-height:70%;width:55%;margin:auto;overflow-y:auto;border-radius:2px;will-change:top, opacity}.modal:focus{outline:none}@media only screen and (max-width: 992px){.modal{width:80%}}.modal h1,.modal h2,.modal h3,.modal h4{margin-top:0}.modal .modal-content{padding:24px}.modal .modal-close{cursor:pointer}.modal .modal-footer{border-radius:0 0 2px 2px;background-color:#fafafa;padding:4px 6px;height:56px;width:100%;text-align:right}.modal .modal-footer .btn,.modal .modal-footer .btn-large,.modal .modal-footer .btn-small,.modal .modal-footer .btn-flat{margin:6px 0}.modal-overlay{position:fixed;z-index:999;top:-25%;left:0;bottom:0;right:0;height:125%;width:100%;background:#000;display:none;will-change:opacity}.modal.modal-fixed-footer{padding:0;height:70%}.modal.modal-fixed-footer .modal-content{position:absolute;height:calc(100% - 56px);max-height:100%;width:100%;overflow-y:auto}.modal.modal-fixed-footer .modal-footer{border-top:1px solid rgba(0,0,0,0.1);position:absolute;bottom:0}.modal.bottom-sheet{top:auto;bottom:-100%;margin:0;width:100%;max-height:45%;border-radius:0;will-change:bottom, opacity}.collapsible{border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;margin:.5rem 0 1rem 0}.collapsible-header{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;cursor:pointer;-webkit-tap-highlight-color:transparent;line-height:1.5;padding:1rem;background-color:#fff;border-bottom:1px solid #ddd}.collapsible-header:focus{outline:0}.collapsible-header i{width:2rem;font-size:1.6rem;display:inline-block;text-align:center;margin-right:1rem}.keyboard-focused .collapsible-header:focus{background-color:#eee}.collapsible-body{display:none;border-bottom:1px solid #ddd;-webkit-box-sizing:border-box;box-sizing:border-box;padding:2rem}.sidenav .collapsible,.sidenav.fixed .collapsible{border:none;-webkit-box-shadow:none;box-shadow:none}.sidenav .collapsible li,.sidenav.fixed .collapsible li{padding:0}.sidenav .collapsible-header,.sidenav.fixed .collapsible-header{background-color:transparent;border:none;line-height:inherit;height:inherit;padding:0 16px}.sidenav .collapsible-header:hover,.sidenav.fixed .collapsible-header:hover{background-color:rgba(0,0,0,0.05)}.sidenav .collapsible-header i,.sidenav.fixed .collapsible-header i{line-height:inherit}.sidenav .collapsible-body,.sidenav.fixed .collapsible-body{border:0;background-color:#fff}.sidenav .collapsible-body li a,.sidenav.fixed .collapsible-body li a{padding:0 23.5px 0 31px}.collapsible.popout{border:none;-webkit-box-shadow:none;box-shadow:none}.collapsible.popout>li{-webkit-box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12);margin:0 24px;-webkit-transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94);transition:margin 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94)}.collapsible.popout>li.active{-webkit-box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);box-shadow:0 5px 11px 0 rgba(0,0,0,0.18),0 4px 15px 0 rgba(0,0,0,0.15);margin:16px 0}.chip{display:inline-block;height:32px;font-size:13px;font-weight:500;color:rgba(0,0,0,0.6);line-height:32px;padding:0 12px;border-radius:16px;background-color:#e4e4e4;margin-bottom:5px;margin-right:5px}.chip:focus{outline:none;background-color:#26a69a;color:#fff}.chip>img{float:left;margin:0 8px 0 -12px;height:32px;width:32px;border-radius:50%}.chip .close{cursor:pointer;float:right;font-size:16px;line-height:32px;padding-left:8px}.chips{border:none;border-bottom:1px solid #9e9e9e;-webkit-box-shadow:none;box-shadow:none;margin:0 0 8px 0;min-height:45px;outline:none;-webkit-transition:all .3s;transition:all .3s}.chips.focus{border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}.chips:hover{cursor:text}.chips .input{background:none;border:0;color:rgba(0,0,0,0.6);display:inline-block;font-size:16px;height:3rem;line-height:32px;outline:0;margin:0;padding:0 !important;width:120px !important}.chips .input:focus{border:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.chips .autocomplete-content{margin-top:0;margin-bottom:0}.prefix ~ .chips{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.chips:empty ~ label{font-size:0.8rem;-webkit-transform:translateY(-140%);transform:translateY(-140%)}.materialboxed{display:block;cursor:-webkit-zoom-in;cursor:zoom-in;position:relative;-webkit-transition:opacity .4s;transition:opacity .4s;-webkit-backface-visibility:hidden}.materialboxed:hover:not(.active){opacity:.8}.materialboxed.active{cursor:-webkit-zoom-out;cursor:zoom-out}#materialbox-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background-color:#292929;z-index:1000;will-change:opacity}.materialbox-caption{position:fixed;display:none;color:#fff;line-height:50px;bottom:0;left:0;width:100%;text-align:center;padding:0% 15%;height:50px;z-index:1000;-webkit-font-smoothing:antialiased}select:focus{outline:1px solid #c9f3ef}button:focus{outline:none;background-color:#2ab7a9}label{font-size:.8rem;color:#9e9e9e}::-webkit-input-placeholder{color:#d1d1d1}::-moz-placeholder{color:#d1d1d1}:-ms-input-placeholder{color:#d1d1d1}::-ms-input-placeholder{color:#d1d1d1}::placeholder{color:#d1d1d1}input:not([type]),input[type=text]:not(.browser-default),input[type=password]:not(.browser-default),input[type=email]:not(.browser-default),input[type=url]:not(.browser-default),input[type=time]:not(.browser-default),input[type=date]:not(.browser-default),input[type=datetime]:not(.browser-default),input[type=datetime-local]:not(.browser-default),input[type=tel]:not(.browser-default),input[type=number]:not(.browser-default),input[type=search]:not(.browser-default),textarea.materialize-textarea{background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;border-radius:0;outline:none;height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-transition:border .3s, -webkit-box-shadow .3s;transition:border .3s, -webkit-box-shadow .3s;transition:box-shadow .3s, border .3s;transition:box-shadow .3s, border .3s, -webkit-box-shadow .3s}input:not([type]):disabled,input:not([type])[readonly="readonly"],input[type=text]:not(.browser-default):disabled,input[type=text]:not(.browser-default)[readonly="readonly"],input[type=password]:not(.browser-default):disabled,input[type=password]:not(.browser-default)[readonly="readonly"],input[type=email]:not(.browser-default):disabled,input[type=email]:not(.browser-default)[readonly="readonly"],input[type=url]:not(.browser-default):disabled,input[type=url]:not(.browser-default)[readonly="readonly"],input[type=time]:not(.browser-default):disabled,input[type=time]:not(.browser-default)[readonly="readonly"],input[type=date]:not(.browser-default):disabled,input[type=date]:not(.browser-default)[readonly="readonly"],input[type=datetime]:not(.browser-default):disabled,input[type=datetime]:not(.browser-default)[readonly="readonly"],input[type=datetime-local]:not(.browser-default):disabled,input[type=datetime-local]:not(.browser-default)[readonly="readonly"],input[type=tel]:not(.browser-default):disabled,input[type=tel]:not(.browser-default)[readonly="readonly"],input[type=number]:not(.browser-default):disabled,input[type=number]:not(.browser-default)[readonly="readonly"],input[type=search]:not(.browser-default):disabled,input[type=search]:not(.browser-default)[readonly="readonly"],textarea.materialize-textarea:disabled,textarea.materialize-textarea[readonly="readonly"]{color:rgba(0,0,0,0.42);border-bottom:1px dotted rgba(0,0,0,0.42)}input:not([type]):disabled+label,input:not([type])[readonly="readonly"]+label,input[type=text]:not(.browser-default):disabled+label,input[type=text]:not(.browser-default)[readonly="readonly"]+label,input[type=password]:not(.browser-default):disabled+label,input[type=password]:not(.browser-default)[readonly="readonly"]+label,input[type=email]:not(.browser-default):disabled+label,input[type=email]:not(.browser-default)[readonly="readonly"]+label,input[type=url]:not(.browser-default):disabled+label,input[type=url]:not(.browser-default)[readonly="readonly"]+label,input[type=time]:not(.browser-default):disabled+label,input[type=time]:not(.browser-default)[readonly="readonly"]+label,input[type=date]:not(.browser-default):disabled+label,input[type=date]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime]:not(.browser-default):disabled+label,input[type=datetime]:not(.browser-default)[readonly="readonly"]+label,input[type=datetime-local]:not(.browser-default):disabled+label,input[type=datetime-local]:not(.browser-default)[readonly="readonly"]+label,input[type=tel]:not(.browser-default):disabled+label,input[type=tel]:not(.browser-default)[readonly="readonly"]+label,input[type=number]:not(.browser-default):disabled+label,input[type=number]:not(.browser-default)[readonly="readonly"]+label,input[type=search]:not(.browser-default):disabled+label,input[type=search]:not(.browser-default)[readonly="readonly"]+label,textarea.materialize-textarea:disabled+label,textarea.materialize-textarea[readonly="readonly"]+label{color:rgba(0,0,0,0.42)}input:not([type]):focus:not([readonly]),input[type=text]:not(.browser-default):focus:not([readonly]),input[type=password]:not(.browser-default):focus:not([readonly]),input[type=email]:not(.browser-default):focus:not([readonly]),input[type=url]:not(.browser-default):focus:not([readonly]),input[type=time]:not(.browser-default):focus:not([readonly]),input[type=date]:not(.browser-default):focus:not([readonly]),input[type=datetime]:not(.browser-default):focus:not([readonly]),input[type=datetime-local]:not(.browser-default):focus:not([readonly]),input[type=tel]:not(.browser-default):focus:not([readonly]),input[type=number]:not(.browser-default):focus:not([readonly]),input[type=search]:not(.browser-default):focus:not([readonly]),textarea.materialize-textarea:focus:not([readonly]){border-bottom:1px solid #26a69a;-webkit-box-shadow:0 1px 0 0 #26a69a;box-shadow:0 1px 0 0 #26a69a}input:not([type]):focus:not([readonly])+label,input[type=text]:not(.browser-default):focus:not([readonly])+label,input[type=password]:not(.browser-default):focus:not([readonly])+label,input[type=email]:not(.browser-default):focus:not([readonly])+label,input[type=url]:not(.browser-default):focus:not([readonly])+label,input[type=time]:not(.browser-default):focus:not([readonly])+label,input[type=date]:not(.browser-default):focus:not([readonly])+label,input[type=datetime]:not(.browser-default):focus:not([readonly])+label,input[type=datetime-local]:not(.browser-default):focus:not([readonly])+label,input[type=tel]:not(.browser-default):focus:not([readonly])+label,input[type=number]:not(.browser-default):focus:not([readonly])+label,input[type=search]:not(.browser-default):focus:not([readonly])+label,textarea.materialize-textarea:focus:not([readonly])+label{color:#26a69a}input:not([type]):focus.valid ~ label,input[type=text]:not(.browser-default):focus.valid ~ label,input[type=password]:not(.browser-default):focus.valid ~ label,input[type=email]:not(.browser-default):focus.valid ~ label,input[type=url]:not(.browser-default):focus.valid ~ label,input[type=time]:not(.browser-default):focus.valid ~ label,input[type=date]:not(.browser-default):focus.valid ~ label,input[type=datetime]:not(.browser-default):focus.valid ~ label,input[type=datetime-local]:not(.browser-default):focus.valid ~ label,input[type=tel]:not(.browser-default):focus.valid ~ label,input[type=number]:not(.browser-default):focus.valid ~ label,input[type=search]:not(.browser-default):focus.valid ~ label,textarea.materialize-textarea:focus.valid ~ label{color:#4CAF50}input:not([type]):focus.invalid ~ label,input[type=text]:not(.browser-default):focus.invalid ~ label,input[type=password]:not(.browser-default):focus.invalid ~ label,input[type=email]:not(.browser-default):focus.invalid ~ label,input[type=url]:not(.browser-default):focus.invalid ~ label,input[type=time]:not(.browser-default):focus.invalid ~ label,input[type=date]:not(.browser-default):focus.invalid ~ label,input[type=datetime]:not(.browser-default):focus.invalid ~ label,input[type=datetime-local]:not(.browser-default):focus.invalid ~ label,input[type=tel]:not(.browser-default):focus.invalid ~ label,input[type=number]:not(.browser-default):focus.invalid ~ label,input[type=search]:not(.browser-default):focus.invalid ~ label,textarea.materialize-textarea:focus.invalid ~ label{color:#F44336}input:not([type]).validate+label,input[type=text]:not(.browser-default).validate+label,input[type=password]:not(.browser-default).validate+label,input[type=email]:not(.browser-default).validate+label,input[type=url]:not(.browser-default).validate+label,input[type=time]:not(.browser-default).validate+label,input[type=date]:not(.browser-default).validate+label,input[type=datetime]:not(.browser-default).validate+label,input[type=datetime-local]:not(.browser-default).validate+label,input[type=tel]:not(.browser-default).validate+label,input[type=number]:not(.browser-default).validate+label,input[type=search]:not(.browser-default).validate+label,textarea.materialize-textarea.validate+label{width:100%}input.valid:not([type]),input.valid:not([type]):focus,input.valid[type=text]:not(.browser-default),input.valid[type=text]:not(.browser-default):focus,input.valid[type=password]:not(.browser-default),input.valid[type=password]:not(.browser-default):focus,input.valid[type=email]:not(.browser-default),input.valid[type=email]:not(.browser-default):focus,input.valid[type=url]:not(.browser-default),input.valid[type=url]:not(.browser-default):focus,input.valid[type=time]:not(.browser-default),input.valid[type=time]:not(.browser-default):focus,input.valid[type=date]:not(.browser-default),input.valid[type=date]:not(.browser-default):focus,input.valid[type=datetime]:not(.browser-default),input.valid[type=datetime]:not(.browser-default):focus,input.valid[type=datetime-local]:not(.browser-default),input.valid[type=datetime-local]:not(.browser-default):focus,input.valid[type=tel]:not(.browser-default),input.valid[type=tel]:not(.browser-default):focus,input.valid[type=number]:not(.browser-default),input.valid[type=number]:not(.browser-default):focus,input.valid[type=search]:not(.browser-default),input.valid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.valid,textarea.materialize-textarea.valid:focus,.select-wrapper.valid>input.select-dropdown{border-bottom:1px solid #4CAF50;-webkit-box-shadow:0 1px 0 0 #4CAF50;box-shadow:0 1px 0 0 #4CAF50}input.invalid:not([type]),input.invalid:not([type]):focus,input.invalid[type=text]:not(.browser-default),input.invalid[type=text]:not(.browser-default):focus,input.invalid[type=password]:not(.browser-default),input.invalid[type=password]:not(.browser-default):focus,input.invalid[type=email]:not(.browser-default),input.invalid[type=email]:not(.browser-default):focus,input.invalid[type=url]:not(.browser-default),input.invalid[type=url]:not(.browser-default):focus,input.invalid[type=time]:not(.browser-default),input.invalid[type=time]:not(.browser-default):focus,input.invalid[type=date]:not(.browser-default),input.invalid[type=date]:not(.browser-default):focus,input.invalid[type=datetime]:not(.browser-default),input.invalid[type=datetime]:not(.browser-default):focus,input.invalid[type=datetime-local]:not(.browser-default),input.invalid[type=datetime-local]:not(.browser-default):focus,input.invalid[type=tel]:not(.browser-default),input.invalid[type=tel]:not(.browser-default):focus,input.invalid[type=number]:not(.browser-default),input.invalid[type=number]:not(.browser-default):focus,input.invalid[type=search]:not(.browser-default),input.invalid[type=search]:not(.browser-default):focus,textarea.materialize-textarea.invalid,textarea.materialize-textarea.invalid:focus,.select-wrapper.invalid>input.select-dropdown,.select-wrapper.invalid>input.select-dropdown:focus{border-bottom:1px solid #F44336;-webkit-box-shadow:0 1px 0 0 #F44336;box-shadow:0 1px 0 0 #F44336}input:not([type]).valid ~ .helper-text[data-success],input:not([type]):focus.valid ~ .helper-text[data-success],input:not([type]).invalid ~ .helper-text[data-error],input:not([type]):focus.invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default).valid ~ .helper-text[data-success],input[type=text]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=text]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=text]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default).valid ~ .helper-text[data-success],input[type=password]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=password]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=password]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default).valid ~ .helper-text[data-success],input[type=email]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=email]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=email]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default).valid ~ .helper-text[data-success],input[type=url]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=url]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=url]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default).valid ~ .helper-text[data-success],input[type=time]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=time]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=time]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default).valid ~ .helper-text[data-success],input[type=date]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=date]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=date]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default).valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default).valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=tel]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default).valid ~ .helper-text[data-success],input[type=number]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=number]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=number]:not(.browser-default):focus.invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default).valid ~ .helper-text[data-success],input[type=search]:not(.browser-default):focus.valid ~ .helper-text[data-success],input[type=search]:not(.browser-default).invalid ~ .helper-text[data-error],input[type=search]:not(.browser-default):focus.invalid ~ .helper-text[data-error],textarea.materialize-textarea.valid ~ .helper-text[data-success],textarea.materialize-textarea:focus.valid ~ .helper-text[data-success],textarea.materialize-textarea.invalid ~ .helper-text[data-error],textarea.materialize-textarea:focus.invalid ~ .helper-text[data-error],.select-wrapper.valid .helper-text[data-success],.select-wrapper.invalid ~ .helper-text[data-error]{color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}input:not([type]).valid ~ .helper-text:after,input:not([type]):focus.valid ~ .helper-text:after,input[type=text]:not(.browser-default).valid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=password]:not(.browser-default).valid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=email]:not(.browser-default).valid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=url]:not(.browser-default).valid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=time]:not(.browser-default).valid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=date]:not(.browser-default).valid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).valid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=tel]:not(.browser-default).valid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=number]:not(.browser-default).valid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.valid ~ .helper-text:after,input[type=search]:not(.browser-default).valid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.valid ~ .helper-text:after,textarea.materialize-textarea.valid ~ .helper-text:after,textarea.materialize-textarea:focus.valid ~ .helper-text:after,.select-wrapper.valid ~ .helper-text:after{content:attr(data-success);color:#4CAF50}input:not([type]).invalid ~ .helper-text:after,input:not([type]):focus.invalid ~ .helper-text:after,input[type=text]:not(.browser-default).invalid ~ .helper-text:after,input[type=text]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=password]:not(.browser-default).invalid ~ .helper-text:after,input[type=password]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=email]:not(.browser-default).invalid ~ .helper-text:after,input[type=email]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=url]:not(.browser-default).invalid ~ .helper-text:after,input[type=url]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=time]:not(.browser-default).invalid ~ .helper-text:after,input[type=time]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=date]:not(.browser-default).invalid ~ .helper-text:after,input[type=date]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default).invalid ~ .helper-text:after,input[type=datetime-local]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=tel]:not(.browser-default).invalid ~ .helper-text:after,input[type=tel]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=number]:not(.browser-default).invalid ~ .helper-text:after,input[type=number]:not(.browser-default):focus.invalid ~ .helper-text:after,input[type=search]:not(.browser-default).invalid ~ .helper-text:after,input[type=search]:not(.browser-default):focus.invalid ~ .helper-text:after,textarea.materialize-textarea.invalid ~ .helper-text:after,textarea.materialize-textarea:focus.invalid ~ .helper-text:after,.select-wrapper.invalid ~ .helper-text:after{content:attr(data-error);color:#F44336}input:not([type])+label:after,input[type=text]:not(.browser-default)+label:after,input[type=password]:not(.browser-default)+label:after,input[type=email]:not(.browser-default)+label:after,input[type=url]:not(.browser-default)+label:after,input[type=time]:not(.browser-default)+label:after,input[type=date]:not(.browser-default)+label:after,input[type=datetime]:not(.browser-default)+label:after,input[type=datetime-local]:not(.browser-default)+label:after,input[type=tel]:not(.browser-default)+label:after,input[type=number]:not(.browser-default)+label:after,input[type=search]:not(.browser-default)+label:after,textarea.materialize-textarea+label:after,.select-wrapper+label:after{display:block;content:"";position:absolute;top:100%;left:0;opacity:0;-webkit-transition:.2s opacity ease-out, .2s color ease-out;transition:.2s opacity ease-out, .2s color ease-out}.input-field{position:relative;margin-top:1rem;margin-bottom:1rem}.input-field.inline{display:inline-block;vertical-align:middle;margin-left:5px}.input-field.inline input,.input-field.inline .select-dropdown{margin-bottom:1rem}.input-field.col label{left:.75rem}.input-field.col .prefix ~ label,.input-field.col .prefix ~ .validate ~ label{width:calc(100% - 3rem - 1.5rem)}.input-field>label{color:#9e9e9e;position:absolute;top:0;left:0;font-size:1rem;cursor:text;-webkit-transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:color .2s ease-out, -webkit-transform .2s ease-out;transition:transform .2s ease-out, color .2s ease-out;transition:transform .2s ease-out, color .2s ease-out, -webkit-transform .2s ease-out;-webkit-transform-origin:0% 100%;transform-origin:0% 100%;text-align:initial;-webkit-transform:translateY(12px);transform:translateY(12px)}.input-field>label:not(.label-icon).active{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field>input[type]:-webkit-autofill:not(.browser-default):not([type="search"])+label,.input-field>input[type=date]:not(.browser-default)+label,.input-field>input[type=time]:not(.browser-default)+label{-webkit-transform:translateY(-14px) scale(0.8);transform:translateY(-14px) scale(0.8);-webkit-transform-origin:0 0;transform-origin:0 0}.input-field .helper-text{position:relative;min-height:18px;display:block;font-size:12px;color:rgba(0,0,0,0.54)}.input-field .helper-text::after{opacity:1;position:absolute;top:0;left:0}.input-field .prefix{position:absolute;width:3rem;font-size:2rem;-webkit-transition:color .2s;transition:color .2s;top:.5rem}.input-field .prefix.active{color:#26a69a}.input-field .prefix ~ input,.input-field .prefix ~ textarea,.input-field .prefix ~ label,.input-field .prefix ~ .validate ~ label,.input-field .prefix ~ .helper-text,.input-field .prefix ~ .autocomplete-content{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.input-field .prefix ~ label{margin-left:3rem}@media only screen and (max-width: 992px){.input-field .prefix ~ input{width:86%;width:calc(100% - 3rem)}}@media only screen and (max-width: 600px){.input-field .prefix ~ input{width:80%;width:calc(100% - 3rem)}}.input-field input[type=search]{display:block;line-height:inherit;-webkit-transition:.3s background-color;transition:.3s background-color}.nav-wrapper .input-field input[type=search]{height:inherit;padding-left:4rem;width:calc(100% - 4rem);border:0;-webkit-box-shadow:none;box-shadow:none}.input-field input[type=search]:focus:not(.browser-default){background-color:#fff;border:0;-webkit-box-shadow:none;box-shadow:none;color:#444}.input-field input[type=search]:focus:not(.browser-default)+label i,.input-field input[type=search]:focus:not(.browser-default) ~ .mdi-navigation-close,.input-field input[type=search]:focus:not(.browser-default) ~ .material-icons{color:#444}.input-field input[type=search]+.label-icon{-webkit-transform:none;transform:none;left:1rem}.input-field input[type=search] ~ .mdi-navigation-close,.input-field input[type=search] ~ .material-icons{position:absolute;top:0;right:1rem;color:transparent;cursor:pointer;font-size:2rem;-webkit-transition:.3s color;transition:.3s color}textarea{width:100%;height:3rem;background-color:transparent}textarea.materialize-textarea{line-height:normal;overflow-y:hidden;padding:.8rem 0 .8rem 0;resize:none;min-height:3rem;-webkit-box-sizing:border-box;box-sizing:border-box}.hiddendiv{visibility:hidden;white-space:pre-wrap;word-wrap:break-word;overflow-wrap:break-word;padding-top:1.2rem;position:absolute;top:0;z-index:-1}.autocomplete-content li .highlight{color:#444}.autocomplete-content li img{height:40px;width:40px;margin:5px 15px}.character-counter{min-height:18px}[type="radio"]:not(:checked),[type="radio"]:checked{position:absolute;opacity:0;pointer-events:none}[type="radio"]:not(:checked)+span,[type="radio"]:checked+span{position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-transition:.28s ease;transition:.28s ease;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="radio"]+span:before,[type="radio"]+span:after{content:'';position:absolute;left:0;top:0;margin:4px;width:16px;height:16px;z-index:0;-webkit-transition:.28s ease;transition:.28s ease}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after,[type="radio"]:checked+span:before,[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border-radius:50%}[type="radio"]:not(:checked)+span:before,[type="radio"]:not(:checked)+span:after{border:2px solid #5a5a5a}[type="radio"]:not(:checked)+span:after{-webkit-transform:scale(0);transform:scale(0)}[type="radio"]:checked+span:before{border:2px solid transparent}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:before,[type="radio"].with-gap:checked+span:after{border:2px solid #26a69a}[type="radio"]:checked+span:after,[type="radio"].with-gap:checked+span:after{background-color:#26a69a}[type="radio"]:checked+span:after{-webkit-transform:scale(1.02);transform:scale(1.02)}[type="radio"].with-gap:checked+span:after{-webkit-transform:scale(0.5);transform:scale(0.5)}[type="radio"].tabbed:focus+span:before{-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1)}[type="radio"].with-gap:disabled:checked+span:before{border:2px solid rgba(0,0,0,0.42)}[type="radio"].with-gap:disabled:checked+span:after{border:none;background-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before,[type="radio"]:disabled:checked+span:before{background-color:transparent;border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled+span{color:rgba(0,0,0,0.42)}[type="radio"]:disabled:not(:checked)+span:before{border-color:rgba(0,0,0,0.42)}[type="radio"]:disabled:checked+span:after{background-color:rgba(0,0,0,0.42);border-color:#949494}[type="checkbox"]:not(:checked),[type="checkbox"]:checked{position:absolute;opacity:0;pointer-events:none}[type="checkbox"]+span:not(.lever){position:relative;padding-left:35px;cursor:pointer;display:inline-block;height:25px;line-height:25px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}[type="checkbox"]+span:not(.lever):before,[type="checkbox"]:not(.filled-in)+span:not(.lever):after{content:'';position:absolute;top:0;left:0;width:18px;height:18px;z-index:0;border:2px solid #5a5a5a;border-radius:1px;margin-top:3px;-webkit-transition:.2s;transition:.2s}[type="checkbox"]:not(.filled-in)+span:not(.lever):after{border:0;-webkit-transform:scale(0);transform:scale(0)}[type="checkbox"]:not(:checked):disabled+span:not(.lever):before{border:none;background-color:rgba(0,0,0,0.42)}[type="checkbox"].tabbed:focus+span:not(.lever):after{-webkit-transform:scale(1);transform:scale(1);border:0;border-radius:50%;-webkit-box-shadow:0 0 0 10px rgba(0,0,0,0.1);box-shadow:0 0 0 10px rgba(0,0,0,0.1);background-color:rgba(0,0,0,0.1)}[type="checkbox"]:checked+span:not(.lever):before{top:-4px;left:-5px;width:12px;height:22px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #26a69a;border-bottom:2px solid #26a69a;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:checked:disabled+span:before{border-right:2px solid rgba(0,0,0,0.42);border-bottom:2px solid rgba(0,0,0,0.42)}[type="checkbox"]:indeterminate+span:not(.lever):before{top:-11px;left:-12px;width:10px;height:22px;border-top:none;border-left:none;border-right:2px solid #26a69a;border-bottom:none;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"]:indeterminate:disabled+span:not(.lever):before{border-right:2px solid rgba(0,0,0,0.42);background-color:transparent}[type="checkbox"].filled-in+span:not(.lever):after{border-radius:2px}[type="checkbox"].filled-in+span:not(.lever):before,[type="checkbox"].filled-in+span:not(.lever):after{content:'';left:0;position:absolute;-webkit-transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;transition:border .25s, background-color .25s, width .20s .1s, height .20s .1s, top .20s .1s, left .20s .1s;z-index:1}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):before{width:0;height:0;border:3px solid transparent;left:6px;top:10px;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:not(:checked)+span:not(.lever):after{height:20px;width:20px;background-color:transparent;border:2px solid #5a5a5a;top:0px;z-index:0}[type="checkbox"].filled-in:checked+span:not(.lever):before{top:0;left:1px;width:8px;height:13px;border-top:2px solid transparent;border-left:2px solid transparent;border-right:2px solid #fff;border-bottom:2px solid #fff;-webkit-transform:rotateZ(37deg);transform:rotateZ(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}[type="checkbox"].filled-in:checked+span:not(.lever):after{top:0;width:20px;height:20px;border:2px solid #26a69a;background-color:#26a69a;z-index:0}[type="checkbox"].filled-in.tabbed:focus+span:not(.lever):after{border-radius:2px;border-color:#5a5a5a;background-color:rgba(0,0,0,0.1)}[type="checkbox"].filled-in.tabbed:checked:focus+span:not(.lever):after{border-radius:2px;background-color:#26a69a;border-color:#26a69a}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):before{background-color:transparent;border:2px solid transparent}[type="checkbox"].filled-in:disabled:not(:checked)+span:not(.lever):after{border-color:transparent;background-color:#949494}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):before{background-color:transparent}[type="checkbox"].filled-in:disabled:checked+span:not(.lever):after{background-color:#949494;border-color:#949494}.switch,.switch *{-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.switch label{cursor:pointer}.switch label input[type=checkbox]{opacity:0;width:0;height:0}.switch label input[type=checkbox]:checked+.lever{background-color:#84c7c1}.switch label input[type=checkbox]:checked+.lever:before,.switch label input[type=checkbox]:checked+.lever:after{left:18px}.switch label input[type=checkbox]:checked+.lever:after{background-color:#26a69a}.switch label .lever{content:"";display:inline-block;position:relative;width:36px;height:14px;background-color:rgba(0,0,0,0.38);border-radius:15px;margin-right:10px;-webkit-transition:background 0.3s ease;transition:background 0.3s ease;vertical-align:middle;margin:0 16px}.switch label .lever:before,.switch label .lever:after{content:"";position:absolute;display:inline-block;width:20px;height:20px;border-radius:50%;left:0;top:-3px;-webkit-transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease;transition:left 0.3s ease, background .3s ease, box-shadow 0.1s ease, transform .1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform .1s ease}.switch label .lever:before{background-color:rgba(38,166,154,0.15)}.switch label .lever:after{background-color:#F1F1F1;-webkit-box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12);box-shadow:0px 3px 1px -2px rgba(0,0,0,0.2),0px 2px 2px 0px rgba(0,0,0,0.14),0px 1px 5px 0px rgba(0,0,0,0.12)}input[type=checkbox]:checked:not(:disabled) ~ .lever:active::before,input[type=checkbox]:checked:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(38,166,154,0.15)}input[type=checkbox]:not(:disabled) ~ .lever:active:before,input[type=checkbox]:not(:disabled).tabbed:focus ~ .lever::before{-webkit-transform:scale(2.4);transform:scale(2.4);background-color:rgba(0,0,0,0.08)}.switch input[type=checkbox][disabled]+.lever{cursor:default;background-color:rgba(0,0,0,0.12)}.switch label input[type=checkbox][disabled]+.lever:after,.switch label input[type=checkbox][disabled]:checked+.lever:after{background-color:#949494}select{display:none}select.browser-default{display:block}select{background-color:rgba(255,255,255,0.9);width:100%;padding:5px;border:1px solid #f2f2f2;border-radius:2px;height:3rem}.select-label{position:absolute}.select-wrapper{position:relative}.select-wrapper.valid+label,.select-wrapper.invalid+label{width:100%;pointer-events:none}.select-wrapper input.select-dropdown{position:relative;cursor:pointer;background-color:transparent;border:none;border-bottom:1px solid #9e9e9e;outline:none;height:3rem;line-height:3rem;width:100%;font-size:16px;margin:0 0 8px 0;padding:0;display:block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:1}.select-wrapper input.select-dropdown:focus{border-bottom:1px solid #26a69a}.select-wrapper .caret{position:absolute;right:0;top:0;bottom:0;margin:auto 0;z-index:0;fill:rgba(0,0,0,0.87)}.select-wrapper+label{position:absolute;top:-26px;font-size:.8rem}select:disabled{color:rgba(0,0,0,0.42)}.select-wrapper.disabled+label{color:rgba(0,0,0,0.42)}.select-wrapper.disabled .caret{fill:rgba(0,0,0,0.42)}.select-wrapper input.select-dropdown:disabled{color:rgba(0,0,0,0.42);cursor:default;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.select-wrapper i{color:rgba(0,0,0,0.3)}.select-dropdown li.disabled,.select-dropdown li.disabled>span,.select-dropdown li.optgroup{color:rgba(0,0,0,0.3);background-color:transparent}body.keyboard-focused .select-dropdown.dropdown-content li:focus{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li:hover{background-color:rgba(0,0,0,0.08)}.select-dropdown.dropdown-content li.selected{background-color:rgba(0,0,0,0.03)}.prefix ~ .select-wrapper{margin-left:3rem;width:92%;width:calc(100% - 3rem)}.prefix ~ label{margin-left:3rem}.select-dropdown li img{height:40px;width:40px;margin:5px 15px;float:right}.select-dropdown li.optgroup{border-top:1px solid #eee}.select-dropdown li.optgroup.selected>span{color:rgba(0,0,0,0.7)}.select-dropdown li.optgroup>span{color:rgba(0,0,0,0.4)}.select-dropdown li.optgroup ~ li.optgroup-option{padding-left:1rem}.file-field{position:relative}.file-field .file-path-wrapper{overflow:hidden;padding-left:10px}.file-field input.file-path{width:100%}.file-field .btn,.file-field .btn-large,.file-field .btn-small{float:left;height:3rem;line-height:3rem}.file-field span{cursor:pointer}.file-field input[type=file]{position:absolute;top:0;right:0;left:0;bottom:0;width:100%;margin:0;padding:0;font-size:20px;cursor:pointer;opacity:0;filter:alpha(opacity=0)}.file-field input[type=file]::-webkit-file-upload-button{display:none}.range-field{position:relative}input[type=range],input[type=range]+.thumb{cursor:pointer}input[type=range]{position:relative;background-color:transparent;border:none;outline:none;width:100%;margin:15px 0;padding:0}input[type=range]:focus{outline:none}input[type=range]+.thumb{position:absolute;top:10px;left:0;border:none;height:0;width:0;border-radius:50%;background-color:#26a69a;margin-left:7px;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}input[type=range]+.thumb .value{display:block;width:30px;text-align:center;color:#26a69a;font-size:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}input[type=range]+.thumb.active{border-radius:50% 50% 50% 0}input[type=range]+.thumb.active .value{color:#fff;margin-left:-1px;margin-top:8px;font-size:10px}input[type=range]{-webkit-appearance:none}input[type=range]::-webkit-slider-runnable-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-webkit-slider-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;-webkit-appearance:none;background-color:#26a69a;-webkit-transform-origin:50% 50%;transform-origin:50% 50%;margin:-5px 0 0 0}.keyboard-focused input[type=range]:focus:not(.active)::-webkit-slider-thumb{-webkit-box-shadow:0 0 0 10px rgba(38,166,154,0.26);box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]{border:1px solid white}input[type=range]::-moz-range-track{height:3px;background:#c2c0c2;border:none}input[type=range]::-moz-focus-inner{border:0}input[type=range]::-moz-range-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s;margin-top:-5px}input[type=range]:-moz-focusring{outline:1px solid #fff;outline-offset:-1px}.keyboard-focused input[type=range]:focus:not(.active)::-moz-range-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}input[type=range]::-ms-track{height:3px;background:transparent;border-color:transparent;border-width:6px 0;color:transparent}input[type=range]::-ms-fill-lower{background:#777}input[type=range]::-ms-fill-upper{background:#ddd}input[type=range]::-ms-thumb{border:none;height:14px;width:14px;border-radius:50%;background:#26a69a;-webkit-transition:-webkit-box-shadow .3s;transition:-webkit-box-shadow .3s;transition:box-shadow .3s;transition:box-shadow .3s, -webkit-box-shadow .3s}.keyboard-focused input[type=range]:focus:not(.active)::-ms-thumb{box-shadow:0 0 0 10px rgba(38,166,154,0.26)}.table-of-contents.fixed{position:fixed}.table-of-contents li{padding:2px 0}.table-of-contents a{display:inline-block;font-weight:300;color:#757575;padding-left:16px;height:1.5rem;line-height:1.5rem;letter-spacing:.4;display:inline-block}.table-of-contents a:hover{color:#a8a8a8;padding-left:15px;border-left:1px solid #ee6e73}.table-of-contents a.active{font-weight:500;padding-left:14px;border-left:2px solid #ee6e73}.sidenav{position:fixed;width:300px;left:0;top:0;margin:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);height:100%;height:calc(100% + 60px);height:-moz-calc(100%);padding-bottom:60px;background-color:#fff;z-index:999;overflow-y:auto;will-change:transform;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.right-aligned{right:0;-webkit-transform:translateX(105%);transform:translateX(105%);left:auto;-webkit-transform:translateX(100%);transform:translateX(100%)}.sidenav .collapsible{margin:0}.sidenav li{float:none;line-height:48px}.sidenav li.active{background-color:rgba(0,0,0,0.05)}.sidenav li>a{color:rgba(0,0,0,0.87);display:block;font-size:14px;font-weight:500;height:48px;line-height:48px;padding:0 32px}.sidenav li>a:hover{background-color:rgba(0,0,0,0.05)}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-flat,.sidenav li>a.btn-floating{margin:10px 15px}.sidenav li>a.btn,.sidenav li>a.btn-large,.sidenav li>a.btn-small,.sidenav li>a.btn-large,.sidenav li>a.btn-floating{color:#fff}.sidenav li>a.btn-flat{color:#343434}.sidenav li>a.btn:hover,.sidenav li>a.btn-large:hover,.sidenav li>a.btn-small:hover,.sidenav li>a.btn-large:hover{background-color:#2bbbad}.sidenav li>a.btn-floating:hover{background-color:#26a69a}.sidenav li>a>i,.sidenav li>a>[class^="mdi-"],.sidenav li>a li>a>[class*="mdi-"],.sidenav li>a>i.material-icons{float:left;height:48px;line-height:48px;margin:0 32px 0 0;width:24px;color:rgba(0,0,0,0.54)}.sidenav .divider{margin:8px 0 0 0}.sidenav .subheader{cursor:initial;pointer-events:none;color:rgba(0,0,0,0.54);font-size:14px;font-weight:500;line-height:48px}.sidenav .subheader:hover{background-color:transparent}.sidenav .user-view{position:relative;padding:32px 32px 0;margin-bottom:8px}.sidenav .user-view>a{height:auto;padding:0}.sidenav .user-view>a:hover{background-color:transparent}.sidenav .user-view .background{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1}.sidenav .user-view .circle,.sidenav .user-view .name,.sidenav .user-view .email{display:block}.sidenav .user-view .circle{height:64px;width:64px}.sidenav .user-view .name,.sidenav .user-view .email{font-size:14px;line-height:24px}.sidenav .user-view .name{margin-top:16px;font-weight:500}.sidenav .user-view .email{padding-bottom:16px;font-weight:400}.drag-target{height:100%;width:10px;position:fixed;top:0;z-index:998}.drag-target.right-aligned{right:0}.sidenav.sidenav-fixed{left:0;-webkit-transform:translateX(0);transform:translateX(0);position:fixed}.sidenav.sidenav-fixed.right-aligned{right:0;left:auto}@media only screen and (max-width: 992px){.sidenav.sidenav-fixed{-webkit-transform:translateX(-105%);transform:translateX(-105%)}.sidenav.sidenav-fixed.right-aligned{-webkit-transform:translateX(105%);transform:translateX(105%)}.sidenav>a{padding:0 16px}.sidenav .user-view{padding:16px 16px 0}}.sidenav .collapsible-body>ul:not(.collapsible)>li.active,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active{background-color:#ee6e73}.sidenav .collapsible-body>ul:not(.collapsible)>li.active a,.sidenav.sidenav-fixed .collapsible-body>ul:not(.collapsible)>li.active a{color:#fff}.sidenav .collapsible-body{padding:0}.sidenav-overlay{position:fixed;top:0;left:0;right:0;opacity:0;height:120vh;background-color:rgba(0,0,0,0.5);z-index:997;display:none}.preloader-wrapper{display:inline-block;position:relative;width:50px;height:50px}.preloader-wrapper.small{width:36px;height:36px}.preloader-wrapper.big{width:64px;height:64px}.preloader-wrapper.active{-webkit-animation:container-rotate 1568ms linear infinite;animation:container-rotate 1568ms linear infinite}@-webkit-keyframes container-rotate{to{-webkit-transform:rotate(360deg)}}@keyframes container-rotate{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-layer{position:absolute;width:100%;height:100%;opacity:0;border-color:#26a69a}.spinner-blue,.spinner-blue-only{border-color:#4285f4}.spinner-red,.spinner-red-only{border-color:#db4437}.spinner-yellow,.spinner-yellow-only{border-color:#f4b400}.spinner-green,.spinner-green-only{border-color:#0f9d58}.active .spinner-layer.spinner-blue{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,blue-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-red{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,red-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-yellow{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,yellow-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer.spinner-green{-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both,green-fade-in-out 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .spinner-layer,.active .spinner-layer.spinner-blue-only,.active .spinner-layer.spinner-red-only,.active .spinner-layer.spinner-yellow-only,.active .spinner-layer.spinner-green-only{opacity:1;-webkit-animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:fill-unfill-rotate 5332ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg)}}@keyframes fill-unfill-rotate{12.5%{-webkit-transform:rotate(135deg);transform:rotate(135deg)}25%{-webkit-transform:rotate(270deg);transform:rotate(270deg)}37.5%{-webkit-transform:rotate(405deg);transform:rotate(405deg)}50%{-webkit-transform:rotate(540deg);transform:rotate(540deg)}62.5%{-webkit-transform:rotate(675deg);transform:rotate(675deg)}75%{-webkit-transform:rotate(810deg);transform:rotate(810deg)}87.5%{-webkit-transform:rotate(945deg);transform:rotate(945deg)}to{-webkit-transform:rotate(1080deg);transform:rotate(1080deg)}}@-webkit-keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@keyframes blue-fade-in-out{from{opacity:1}25%{opacity:1}26%{opacity:0}89%{opacity:0}90%{opacity:1}100%{opacity:1}}@-webkit-keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@keyframes red-fade-in-out{from{opacity:0}15%{opacity:0}25%{opacity:1}50%{opacity:1}51%{opacity:0}}@-webkit-keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@keyframes yellow-fade-in-out{from{opacity:0}40%{opacity:0}50%{opacity:1}75%{opacity:1}76%{opacity:0}}@-webkit-keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}@keyframes green-fade-in-out{from{opacity:0}65%{opacity:0}75%{opacity:1}90%{opacity:1}100%{opacity:0}}.gap-patch{position:absolute;top:0;left:45%;width:10%;height:100%;overflow:hidden;border-color:inherit}.gap-patch .circle{width:1000%;left:-450%}.circle-clipper{display:inline-block;position:relative;width:50%;height:100%;overflow:hidden;border-color:inherit}.circle-clipper .circle{width:200%;height:100%;border-width:3px;border-style:solid;border-color:inherit;border-bottom-color:transparent !important;border-radius:50%;-webkit-animation:none;animation:none;position:absolute;top:0;right:0;bottom:0}.circle-clipper.left .circle{left:0;border-right-color:transparent !important;-webkit-transform:rotate(129deg);transform:rotate(129deg)}.circle-clipper.right .circle{left:-100%;border-left-color:transparent !important;-webkit-transform:rotate(-129deg);transform:rotate(-129deg)}.active .circle-clipper.left .circle{-webkit-animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:left-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}.active .circle-clipper.right .circle{-webkit-animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both;animation:right-spin 1333ms cubic-bezier(0.4, 0, 0.2, 1) infinite both}@-webkit-keyframes left-spin{from{-webkit-transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg)}}@keyframes left-spin{from{-webkit-transform:rotate(130deg);transform:rotate(130deg)}50%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(130deg);transform:rotate(130deg)}}@-webkit-keyframes right-spin{from{-webkit-transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg)}}@keyframes right-spin{from{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}50%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}to{-webkit-transform:rotate(-130deg);transform:rotate(-130deg)}}#spinnerContainer.cooldown{-webkit-animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1);animation:container-rotate 1568ms linear infinite,fade-out 400ms cubic-bezier(0.4, 0, 0.2, 1)}@-webkit-keyframes fade-out{from{opacity:1}to{opacity:0}}@keyframes fade-out{from{opacity:1}to{opacity:0}}.slider{position:relative;height:400px;width:100%}.slider.fullscreen{height:100%;width:100%;position:absolute;top:0;left:0;right:0;bottom:0}.slider.fullscreen ul.slides{height:100%}.slider.fullscreen ul.indicators{z-index:2;bottom:30px}.slider .slides{background-color:#9e9e9e;margin:0;height:400px}.slider .slides li{opacity:0;position:absolute;top:0;left:0;z-index:1;width:100%;height:inherit;overflow:hidden}.slider .slides li img{height:100%;width:100%;background-size:cover;background-position:center}.slider .slides li .caption{color:#fff;position:absolute;top:15%;left:15%;width:70%;opacity:0}.slider .slides li .caption p{color:#e0e0e0}.slider .slides li.active{z-index:2}.slider .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.slider .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:16px;width:16px;margin:0 12px;background-color:#e0e0e0;-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.slider .indicators .indicator-item.active{background-color:#4CAF50}.carousel{overflow:hidden;position:relative;width:100%;height:400px;-webkit-perspective:500px;perspective:500px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transform-origin:0% 50%;transform-origin:0% 50%}.carousel.carousel-slider{top:0;left:0}.carousel.carousel-slider .carousel-fixed-item{position:absolute;left:0;right:0;bottom:20px;z-index:1}.carousel.carousel-slider .carousel-fixed-item.with-indicators{bottom:68px}.carousel.carousel-slider .carousel-item{width:100%;height:100%;min-height:400px;position:absolute;top:0;left:0}.carousel.carousel-slider .carousel-item h2{font-size:24px;font-weight:500;line-height:32px}.carousel.carousel-slider .carousel-item p{font-size:15px}.carousel .carousel-item{visibility:hidden;width:200px;height:200px;position:absolute;top:0;left:0}.carousel .carousel-item>img{width:100%}.carousel .indicators{position:absolute;text-align:center;left:0;right:0;bottom:0;margin:0}.carousel .indicators .indicator-item{display:inline-block;position:relative;cursor:pointer;height:8px;width:8px;margin:24px 4px;background-color:rgba(255,255,255,0.5);-webkit-transition:background-color .3s;transition:background-color .3s;border-radius:50%}.carousel .indicators .indicator-item.active{background-color:#fff}.carousel.scrolling .carousel-item .materialboxed,.carousel .carousel-item:not(.active) .materialboxed{pointer-events:none}.tap-target-wrapper{width:800px;height:800px;position:fixed;z-index:1000;visibility:hidden;-webkit-transition:visibility 0s .3s;transition:visibility 0s .3s}.tap-target-wrapper.open{visibility:visible;-webkit-transition:visibility 0s;transition:visibility 0s}.tap-target-wrapper.open .tap-target{-webkit-transform:scale(1);transform:scale(1);opacity:.95;-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-wrapper.open .tap-target-wave::before{-webkit-transform:scale(1);transform:scale(1)}.tap-target-wrapper.open .tap-target-wave::after{visibility:visible;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;-webkit-transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, visibility 0s 1s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s 1s;transition:opacity .3s, transform .3s, visibility 0s 1s, -webkit-transform .3s}.tap-target{position:absolute;font-size:1rem;border-radius:50%;background-color:#ee6e73;-webkit-box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);box-shadow:0 20px 20px 0 rgba(0,0,0,0.14),0 10px 50px 0 rgba(0,0,0,0.12),0 30px 10px -20px rgba(0,0,0,0.2);width:100%;height:100%;opacity:0;-webkit-transform:scale(0);transform:scale(0);-webkit-transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1);transition:transform 0.3s cubic-bezier(0.42, 0, 0.58, 1),opacity 0.3s cubic-bezier(0.42, 0, 0.58, 1),-webkit-transform 0.3s cubic-bezier(0.42, 0, 0.58, 1)}.tap-target-content{position:relative;display:table-cell}.tap-target-wave{position:absolute;border-radius:50%;z-index:10001}.tap-target-wave::before,.tap-target-wave::after{content:'';display:block;position:absolute;width:100%;height:100%;border-radius:50%;background-color:#ffffff}.tap-target-wave::before{-webkit-transform:scale(0);transform:scale(0);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s, -webkit-transform .3s}.tap-target-wave::after{visibility:hidden;-webkit-transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, visibility 0s, -webkit-transform .3s;transition:opacity .3s, transform .3s, visibility 0s;transition:opacity .3s, transform .3s, visibility 0s, -webkit-transform .3s;z-index:-1}.tap-target-origin{top:50%;left:50%;-webkit-transform:translate(-50%, -50%);transform:translate(-50%, -50%);z-index:10002;position:absolute !important}.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small),.tap-target-origin:not(.btn):not(.btn-large):not(.btn-small):hover{background:none}@media only screen and (max-width: 600px){.tap-target,.tap-target-wrapper{width:600px;height:600px}}.pulse{overflow:visible;position:relative}.pulse::before{content:'';display:block;position:absolute;width:100%;height:100%;top:0;left:0;background-color:inherit;border-radius:inherit;-webkit-transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, -webkit-transform .3s;transition:opacity .3s, transform .3s;transition:opacity .3s, transform .3s, -webkit-transform .3s;-webkit-animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;animation:pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;z-index:-1}@-webkit-keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}@keyframes pulse-animation{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}100%{opacity:0;-webkit-transform:scale(1.5);transform:scale(1.5)}}.datepicker-modal{max-width:325px;min-width:300px;max-height:none}.datepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.datepicker-controls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;width:280px;margin:0 auto}.datepicker-controls .selects-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.datepicker-controls .select-wrapper input{border-bottom:none;text-align:center;margin:0}.datepicker-controls .select-wrapper input:focus{border-bottom:none}.datepicker-controls .select-wrapper .caret{display:none}.datepicker-controls .select-year input{width:50px}.datepicker-controls .select-month input{width:70px}.month-prev,.month-next{margin-top:4px;cursor:pointer;background-color:transparent;border:none}.datepicker-date-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;color:#fff;padding:20px 22px;font-weight:500}.datepicker-date-display .year-text{display:block;font-size:1.5rem;line-height:25px;color:rgba(255,255,255,0.7)}.datepicker-date-display .date-text{display:block;font-size:2.8rem;line-height:47px;font-weight:500}.datepicker-calendar-container{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.datepicker-table{width:280px;font-size:1rem;margin:0 auto}.datepicker-table thead{border-bottom:none}.datepicker-table th{padding:10px 5px;text-align:center}.datepicker-table tr{border:none}.datepicker-table abbr{text-decoration:none;color:#999}.datepicker-table td{border-radius:50%;padding:0}.datepicker-table td.is-today{color:#26a69a}.datepicker-table td.is-selected{background-color:#26a69a;color:#fff}.datepicker-table td.is-outside-current-month,.datepicker-table td.is-disabled{color:rgba(0,0,0,0.3);pointer-events:none}.datepicker-day-button{background-color:transparent;border:none;line-height:38px;display:block;width:100%;border-radius:50%;padding:0 5px;cursor:pointer;color:inherit}.datepicker-day-button:focus{background-color:rgba(43,161,150,0.25)}.datepicker-footer{width:280px;margin:0 auto;padding-bottom:5px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.datepicker-cancel,.datepicker-clear,.datepicker-today,.datepicker-done{color:#26a69a;padding:0 1rem}.datepicker-clear{color:#F44336}@media only screen and (min-width: 601px){.datepicker-modal{max-width:625px}.datepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.datepicker-date-display{-webkit-box-flex:0;-webkit-flex:0 1 270px;-ms-flex:0 1 270px;flex:0 1 270px}.datepicker-controls,.datepicker-table,.datepicker-footer{width:320px}.datepicker-day-button{line-height:44px}}.timepicker-modal{max-width:325px;max-height:none}.timepicker-container.modal-content{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0}.text-primary{color:#fff}.timepicker-digital-display{-webkit-box-flex:1;-webkit-flex:1 auto;-ms-flex:1 auto;flex:1 auto;background-color:#26a69a;padding:10px;font-weight:300}.timepicker-text-container{font-size:4rem;font-weight:bold;text-align:center;color:rgba(255,255,255,0.6);font-weight:400;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-span-hours,.timepicker-span-minutes,.timepicker-span-am-pm div{cursor:pointer}.timepicker-span-hours{margin-right:3px}.timepicker-span-minutes{margin-left:3px}.timepicker-display-am-pm{font-size:1.3rem;position:absolute;right:1rem;bottom:1rem;font-weight:400}.timepicker-analog-display{-webkit-box-flex:2.5;-webkit-flex:2.5 auto;-ms-flex:2.5 auto;flex:2.5 auto}.timepicker-plate{background-color:#eee;border-radius:50%;width:270px;height:270px;overflow:visible;position:relative;margin:auto;margin-top:25px;margin-bottom:5px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.timepicker-canvas,.timepicker-dial{position:absolute;left:0;right:0;top:0;bottom:0}.timepicker-minutes{visibility:hidden}.timepicker-tick{border-radius:50%;color:rgba(0,0,0,0.87);line-height:40px;text-align:center;width:40px;height:40px;position:absolute;cursor:pointer;font-size:15px}.timepicker-tick.active,.timepicker-tick:hover{background-color:rgba(38,166,154,0.25)}.timepicker-dial{-webkit-transition:opacity 350ms, -webkit-transform 350ms;transition:opacity 350ms, -webkit-transform 350ms;transition:transform 350ms, opacity 350ms;transition:transform 350ms, opacity 350ms, -webkit-transform 350ms}.timepicker-dial-out{opacity:0}.timepicker-dial-out.timepicker-hours{-webkit-transform:scale(1.1, 1.1);transform:scale(1.1, 1.1)}.timepicker-dial-out.timepicker-minutes{-webkit-transform:scale(0.8, 0.8);transform:scale(0.8, 0.8)}.timepicker-canvas{-webkit-transition:opacity 175ms;transition:opacity 175ms}.timepicker-canvas line{stroke:#26a69a;stroke-width:4;stroke-linecap:round}.timepicker-canvas-out{opacity:0.25}.timepicker-canvas-bearing{stroke:none;fill:#26a69a}.timepicker-canvas-bg{stroke:none;fill:#26a69a}.timepicker-footer{margin:0 auto;padding:5px 1rem;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.timepicker-clear{color:#F44336}.timepicker-close{color:#26a69a}.timepicker-clear,.timepicker-close{padding:0 20px}@media only screen and (min-width: 601px){.timepicker-modal{max-width:600px}.timepicker-container.modal-content{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.timepicker-text-container{top:32%}.timepicker-display-am-pm{position:relative;right:auto;bottom:auto;text-align:center;margin-top:1.2rem}} diff --git a/docs/css/newsletter.css b/docs/css/newsletter.css new file mode 100644 index 00000000000..20f634c63fe --- /dev/null +++ b/docs/css/newsletter.css @@ -0,0 +1,3550 @@ +/* https://sibforms.com/forms/end-form/build/sib-styles.css */ +@charset "UTF-8"; /*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | https://dbushell.com/ + */ +.pika-single { + z-index: 9999; + display: block; + position: relative; + color: #333; + background: #fff; + border: 1px solid #ccc; + border-bottom-color: #bbb; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} + +/* +clear child float (pika-lendar), using the famous micro clearfix hack +http://nicolasgallagher.com/micro-clearfix-hack/ +*/ +.pika-single:before, .pika-single:after { + content: " "; + display: table; +} + +.pika-single:after { + clear: both +} + +.pika-single.is-hidden { + display: none; +} + +.pika-single.is-bound { + position: absolute; + box-shadow: 0 5px 15px -5px rgba(0,0,0,.5); +} + +.pika-lendar { + float: left; + width: 240px; + margin: 8px; +} + +.pika-title { + position: relative; + text-align: center; +} + +.pika-label { + display: inline-block; + position: relative; + z-index: 9999; + overflow: hidden; + margin: 0; + padding: 5px 3px; + font-size: 14px; + line-height: 20px; + font-weight: bold; + background-color: #fff; +} + +.pika-title select { + cursor: pointer; + position: absolute; + z-index: 9998; + margin: 0; + left: 0; + top: 5px; + opacity: 0; +} + +.pika-prev, .pika-next { + display: block; + cursor: pointer; + position: relative; + outline: none; + border: 0; + padding: 0; + width: 20px; + height: 30px; + /* hide text using text-indent trick, using width value (it's enough) */ + text-indent: 20px; + white-space: nowrap; + overflow: hidden; + background-color: transparent; + background-position: center center; + background-repeat: no-repeat; + background-size: 75% 75%; + opacity: .5; +} + +.pika-prev:hover, .pika-next:hover { + opacity: 1; +} + +.pika-prev, .is-rtl .pika-next { + float: left; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg=='); +} + +.pika-next, .is-rtl .pika-prev { + float: right; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII='); +} + +.pika-prev.is-disabled, .pika-next.is-disabled { + cursor: default; + opacity: .2; +} + +.pika-select { + display: inline-block; +} + +.pika-table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + border: 0; +} + +.pika-table th, .pika-table td { + width: 14.285714285714286%; + padding: 0; +} + +.pika-table th { + color: #999; + font-size: 12px; + line-height: 25px; + font-weight: bold; + text-align: center; +} + +.pika-button { + cursor: pointer; + display: block; + box-sizing: border-box; + -moz-box-sizing: border-box; + outline: none; + border: 0; + margin: 0; + width: 100%; + padding: 5px; + color: #666; + font-size: 12px; + line-height: 15px; + text-align: right; + background: #f5f5f5; + height: initial; +} + +.pika-week { + font-size: 11px; + color: #999; +} + +.is-today .pika-button { + color: #33aaff; + font-weight: bold; +} + +.is-selected .pika-button, .has-event .pika-button { + color: #fff; + font-weight: bold; + background: #33aaff; + box-shadow: inset 0 1px 3px #178fe5; + border-radius: 3px; +} + +.has-event .pika-button { + background: #005da9; + box-shadow: inset 0 1px 3px #0076c9; +} + +.is-disabled .pika-button, .is-inrange .pika-button { + background: #D5E9F7; +} + +.is-startrange .pika-button { + color: #fff; + background: #6CB31D; + box-shadow: none; + border-radius: 3px; +} + +.is-endrange .pika-button { + color: #fff; + background: #33aaff; + box-shadow: none; + border-radius: 3px; +} + +.is-disabled .pika-button { + pointer-events: none; + cursor: default; + color: #999; + opacity: .3; +} + +.is-outside-current-month .pika-button { + color: #999; + opacity: .3; +} + +.is-selection-disabled { + pointer-events: none; + cursor: default; +} + +.pika-button:hover, .pika-row.pick-whole-week:hover .pika-button { + color: #fff; + background: #ff8000; + box-shadow: none; + border-radius: 3px; +} + +/* styling for abbr */ +.pika-table abbr { + border-bottom: none; + cursor: help; +} + +.pika-single { + color: #3c4858 +} + +.pika-button { + color: #3c4858; + background: #fff +} + +.sib-is-today .pika-button { + color: #0092ff +} + +.sib-is-selected .pika-button { + color: #fff +} + +.sib-is-today:hover .pika-button { + color: #fff +} + +.sib-is-selected .pika-button,.sib-has-event .pika-button { + background: #0092ff +} + +.pika-button:hover,.pika-row.sib-pick-whole-week:hover .pika-button { + background: #0092ff +} + +.pika-table abbr { + cursor: default; + color: #8390A4; + text-decoration: none +} + +.pika-label { + font-size: 0 +} + +.pika-title select { + position: initial; + opacity: 1; + z-index: inherit +} + +.sib-sms-tooltip { + margin-left: 8px; + position: relative +} + +.sib-sms-tooltip__box { + display: none; + border-radius: 5px; + color: #fff; + background-color: #333; + position: absolute; + bottom: 100%; + width: 200px; + padding: 5px; + right: calc(100% - 60px); + font-size: 12px +} + +.sib-sms-tooltip:hover .sib-sms-tooltip__box { + display: block +} + +.sib-sms-tooltip__icon { + border-radius: 50%; + color: #4DA6E0; + width: 24px; + height: 24px; + padding: 3px; + font-weight: 700; + font-style: normal; + font-size: 24px +} + +.sib-container--medium.sib-container--horizontal .sib-sms-tooltip,.sib-container--small .sib-sms-tooltip { + position: absolute; + bottom: 0; + right: 0; + border-radius: 100%; + height: 18px; + width: 18px; + margin: 12px 8px; + background: #687484; + text-align: center; + display: flex; + justify-content: center; + align-items: center +} + +.sib-container--medium.sib-container--horizontal .sib-sms-tooltip__icon,.sib-container--small .sib-sms-tooltip__icon { + color: #fff; + font-size: 16px +} + +.sib-sms-input-wrapper { + display: flex; + align-items: center; + position: relative +} + +.sib-sms-field .form__label-row--horizontal { + flex-wrap: wrap +} + +/*! + * Generated with CSS Flag Sprite generator (https://www.flag-sprites.com/) + */ +.sib-flag { + display: inline-block; + width: 32px; + min-width: 2rem; + height: 32px; + background: url("https://static.brevo.com/images/flags.png") no-repeat +} + +.sib-flag.sib-flag-ad { + background-position: -3px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ae { + background-position: -36px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-af { + background-position: -69px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ag { + background-position: -102px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ai { + background-position: -135px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-al { + background-position: -168px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-am { + background-position: -201px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ao { + background-position: -234px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-aq { + background-position: -267px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ar { + background-position: -300px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-as { + background-position: -333px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-at { + background-position: -366px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-au { + background-position: -399px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-aw { + background-position: -432px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ax { + background-position: -465px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-az { + background-position: -498px -0px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ba { + background-position: -3px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bb { + background-position: -36px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bd { + background-position: -69px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-be { + background-position: -102px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bf { + background-position: -135px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bg { + background-position: -168px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bh { + background-position: -201px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bi { + background-position: -234px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bj { + background-position: -267px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bl { + background-position: -300px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bm { + background-position: -333px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bn { + background-position: -366px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bo { + background-position: -399px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bq { + background-position: -432px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-br { + background-position: -465px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bs { + background-position: -498px -33px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bt { + background-position: -3px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bv { + background-position: -36px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bw { + background-position: -69px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-by { + background-position: -102px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-bz { + background-position: -135px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ca { + background-position: -168px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cc { + background-position: -201px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cd { + background-position: -234px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cf { + background-position: -267px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cg { + background-position: -300px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ch { + background-position: -333px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ci { + background-position: -366px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ck { + background-position: -399px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cl { + background-position: -432px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cm { + background-position: -465px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cn { + background-position: -498px -66px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-co { + background-position: -3px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cr { + background-position: -36px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cu { + background-position: -69px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cv { + background-position: -102px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cw { + background-position: -135px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cx { + background-position: -168px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cy { + background-position: -201px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-cz { + background-position: -234px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-de { + background-position: -267px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-dj { + background-position: -300px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-dk { + background-position: -333px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-dm { + background-position: -366px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-do { + background-position: -399px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-dz { + background-position: -432px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ec { + background-position: -465px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ee { + background-position: -498px -99px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-eg { + background-position: -3px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-eh { + background-position: -36px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-er { + background-position: -69px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-es { + background-position: -102px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-et { + background-position: -135px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fi { + background-position: -168px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fj { + background-position: -201px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fk { + background-position: -234px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fm { + background-position: -267px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fo { + background-position: -300px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-fr { + background-position: -333px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ga { + background-position: -366px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gb { + background-position: -399px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gd { + background-position: -432px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ge { + background-position: -465px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gf { + background-position: -498px -132px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gg { + background-position: -3px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gh { + background-position: -36px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gi { + background-position: -69px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gl { + background-position: -102px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gm { + background-position: -135px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gn { + background-position: -168px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gp { + background-position: -201px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gq { + background-position: -234px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gr { + background-position: -267px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gs { + background-position: -300px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gt { + background-position: -333px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gu { + background-position: -366px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gw { + background-position: -399px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-gy { + background-position: -432px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-hk { + background-position: -465px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-hm { + background-position: -498px -165px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-hn { + background-position: -3px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-hr { + background-position: -36px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ht { + background-position: -69px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-hu { + background-position: -102px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-id { + background-position: -135px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ie { + background-position: -168px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-il { + background-position: -201px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-im { + background-position: -234px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-in { + background-position: -267px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-io { + background-position: -300px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-iq { + background-position: -333px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ir { + background-position: -366px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-is { + background-position: -399px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-it { + background-position: -432px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-je { + background-position: -465px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-jm { + background-position: -498px -198px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-jo { + background-position: -3px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-jp { + background-position: -36px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ke { + background-position: -69px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kg { + background-position: -102px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kh { + background-position: -135px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ki { + background-position: -168px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-km { + background-position: -201px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kn { + background-position: -234px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kp { + background-position: -267px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kr { + background-position: -300px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kw { + background-position: -333px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ky { + background-position: -366px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-kz { + background-position: -399px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-la { + background-position: -432px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lb { + background-position: -465px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lc { + background-position: -498px -231px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-li { + background-position: -3px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lk { + background-position: -36px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lr { + background-position: -69px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ls { + background-position: -102px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lt { + background-position: -135px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lu { + background-position: -168px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-lv { + background-position: -201px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ly { + background-position: -234px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ma { + background-position: -267px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mc { + background-position: -300px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-md { + background-position: -333px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-me { + background-position: -366px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mf { + background-position: -399px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mg { + background-position: -432px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mh { + background-position: -465px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mk { + background-position: -498px -264px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ml { + background-position: -3px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mm { + background-position: -36px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mn { + background-position: -69px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mo { + background-position: -102px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mp { + background-position: -135px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mq { + background-position: -168px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mr { + background-position: -201px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ms { + background-position: -234px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mt { + background-position: -267px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mu { + background-position: -300px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mv { + background-position: -333px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mw { + background-position: -366px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mx { + background-position: -399px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-my { + background-position: -432px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-mz { + background-position: -465px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-na { + background-position: -498px -297px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nc { + background-position: -3px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ne { + background-position: -36px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nf { + background-position: -69px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ng { + background-position: -102px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ni { + background-position: -135px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nl { + background-position: -168px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-no { + background-position: -201px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-np { + background-position: -234px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nr { + background-position: -267px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nu { + background-position: -300px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-nz { + background-position: -333px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-om { + background-position: -366px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pa { + background-position: -399px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pe { + background-position: -432px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pf { + background-position: -465px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pg { + background-position: -498px -330px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ph { + background-position: -3px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pk { + background-position: -36px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pl { + background-position: -69px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pm { + background-position: -102px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pn { + background-position: -135px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pr { + background-position: -168px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ps { + background-position: -201px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pt { + background-position: -234px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-pw { + background-position: -267px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-py { + background-position: -300px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-qa { + background-position: -333px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-re { + background-position: -366px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ro { + background-position: -399px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-rs { + background-position: -432px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ru { + background-position: -465px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-rw { + background-position: -498px -363px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sa { + background-position: -3px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sb { + background-position: -36px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sc { + background-position: -69px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sd { + background-position: -102px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-se { + background-position: -135px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sg { + background-position: -168px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sh { + background-position: -201px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-si { + background-position: -234px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sj { + background-position: -267px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sk { + background-position: -300px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sl { + background-position: -333px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sm { + background-position: -366px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sn { + background-position: -399px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-so { + background-position: -432px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sr { + background-position: -465px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ss { + background-position: -498px -396px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-st { + background-position: -3px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sv { + background-position: -36px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sx { + background-position: -69px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sy { + background-position: -102px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-sz { + background-position: -135px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tc { + background-position: -168px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-td { + background-position: -201px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tf { + background-position: -234px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tg { + background-position: -267px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-th { + background-position: -300px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tj { + background-position: -333px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tk { + background-position: -366px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tl { + background-position: -399px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tm { + background-position: -432px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tn { + background-position: -465px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-to { + background-position: -498px -429px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tr { + background-position: -3px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tt { + background-position: -36px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tv { + background-position: -69px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tw { + background-position: -102px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-tz { + background-position: -135px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ua { + background-position: -168px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ug { + background-position: -201px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-um { + background-position: -234px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-us { + background-position: -267px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-uy { + background-position: -300px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-uz { + background-position: -333px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-va { + background-position: -366px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-vc { + background-position: -399px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ve { + background-position: -432px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-vg { + background-position: -465px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-vi { + background-position: -498px -462px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-vn { + background-position: -3px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-vu { + background-position: -36px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-wf { + background-position: -69px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ws { + background-position: -102px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-xk { + background-position: -135px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-ye { + background-position: -168px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-yt { + background-position: -201px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-za { + background-position: -234px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-zm { + background-position: -267px -495px; + width: 30px; + height: 30px +} + +.sib-flag.sib-flag-zw { + background-position: -300px -495px; + width: 30px; + height: 30px +} + +.sib-sms-select { + display: flex; + width: 100%; + font-size: 14px; + position: relative +} + +.sib-container--medium.sib-container--horizontal .sib-sms-select,.sib-container--small .sib-sms-select { + flex-direction: column +} + +.sib-sms-select__title { + display: flex; + position: relative; + align-items: center; + background: #ffffff; + border: 1px solid #c0ccda; + border-radius: 3px; + box-sizing: border-box; + cursor: pointer; + font-size: 14px; + height: 3em; + padding: 8px 16px 8px 8px; + margin-right: 8px; + position: relative; + text-align: left; + width: 100%; + max-width: 60px +} + +.sib-sms-select__title::after { + content: ''; + display: block; + position: absolute; + right: 5px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000 +} + +.sib-sms-select__title>.sib-sms-select__label-text { + display: none +} + +.sib-container--medium.sib-container--horizontal .sib-sms-select__title,.sib-container--small .sib-sms-select__title { + max-width: 100%; + margin-right: 0; + margin-bottom: 0.5rem +} + +.sib-container--medium.sib-container--horizontal .sib-sms-select__title::after,.sib-container--small .sib-sms-select__title::after { + content: ''; + display: block; + position: absolute; + right: 8px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000 +} + +.sib-container--medium.sib-container--horizontal .sib-sms-select__title>.sib-sms-select__label-text,.sib-container--small .sib-sms-select__title>.sib-sms-select__label-text { + display: block +} + +.sib-sms-select__list { + background: #fff; + border: 1px solid #c0ccda; + border-radius: 3px; + box-sizing: border-box; + display: none; + height: 0; + list-style: none; + margin: 8px 0 0 0; + opacity: 0; + padding: 0; + position: absolute; + width: 100%; + z-index: 999 +} + +.sib-sms-select__list.sib-is-open { + display: block; + height: auto; + max-height: 250px; + overflow: scroll; + opacity: 1 +} + +.sib-sms-select__list li { + display: flex; + align-items: center; + border-bottom: 1px solid #c0ccda; + cursor: pointer; + padding: 8px; + font-size: 14px +} + +.sib-sms-select__list li:hover,.sib-sms-select__list li.sib-is-selected { + background-color: #8ed8fd +} + +.sib-sms-select__number-input { + display: flex; + width: 100%; + height: 3em; + border: 1px solid #c0ccda; + border-radius: 3px; + background: #fff +} + +.sib-sms-select__calling-code { + height: 100%; + max-width: 70px; + padding: 8px; + border-top: 0; + border-right: 1px solid #c0ccda; + border-bottom: 0; + border-left: 0; + border-radius: 3px 0 0 3px; + line-height: 1.8em; + text-align: center; + font-size: inherit; + color: inherit; + outline: none +} + +.sib-container--medium.sib-container--horizontal .sib-sms-select__calling-code,.sib-container--small .sib-sms-select__calling-code { + max-width: 50px; + padding: 8px 4px +} + +.sib-sms-select__phone-number { + width: calc(100% - 70px); + height: 100%; + padding: 8px; + border-radius: 3px; + border: 0; + outline: 0; + font-size: inherit +} + +.sib-sms-select__label-text { + margin-left: 8px; + margin-left: 8px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis +} + +@media screen and (max-width: 480px) { + .sib-sms-select { + display:block + } + + .sib-sms-select__title { + display: inline-block; + max-width: 100%; + margin-bottom: 10px + } + + .sib-container--small .sib-sms-select__title { + display: flex + } + + .sib-container--small .sib-sms-select__title .sib-flag { + margin-left: 0; + bottom: 0 + } + + .sib-container--small .sib-sms-select__title .sib-sms-select__label-text { + margin-left: 0.5rem; + padding-bottom: 0 + } + + .sib-sms-select__title::after { + content: ''; + display: block; + position: absolute; + right: 20px; + top: 50%; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000 + } + + .sib-sms-select__title__phone-number { + padding-right: 45px + } + + .sib-sms-select__title>.sib-flag { + margin-left: 10px; + float: left; + position: relative; + bottom: 4px + } + + .sib-sms-select__title>.sib-sms-select__label-text { + display: inline-block; + max-width: 70%; + margin-left: 18px; + padding-bottom: 5px; + font-size: 20px; + float: left + } +} + +@media screen and (max-width: 480px) { + .sib-sms-tooltip { + position:absolute; + right: 12px; + top: 56%; + width: 18px; + height: 18px + } + + .sib-sms-tooltip__icon { + color: #FFF; + width: 24px; + height: 24px; + display: block; + background: transparent; + text-align: center; + font-size: 12px !important; + padding: 4px + } +} + +@media screen and (max-width: 375px) { + .g-recaptcha.sib-visible-recaptcha { + transform:scale(0.8); + -webkit-transform: scale(0.8); + transform-origin: 0 0; + -webkit-transform-origin: 0 0 + } +} + +.sib-form *,.sib-form ::after,.sib-form ::before { + box-sizing: border-box +} + +.sib-form { + background-attachment: fixed; + font-size: 16px; + font-family: Roboto, sans-serif; + padding: 32px 12px 32px; + margin: 0 +} + +.sib-form__declaration { + display: flex; + padding: 0 16px; + align-items: center +} + +.sib-form__declaration .declaration-block-icon { + display: flex; + padding: 0 16px 0 0; + margin: 0 +} + +.sib-form__declaration .declaration-block-icon [class^="sib-svgIcon"] { + width: 65px; + height: 65px +} + +.sib-form__declaration p { + line-height: 1.5em; + margin: 0 +} + +.sib-form--blockPosition { + position: relative +} + +.sib-form ul,.sib-form ol { + padding: 0 +} + +#sib-container { + background: #fff; + margin: 0 auto; + padding: 17px; + display: inline-block; + width: 100%; + border-radius: 6px !important; +} + +#sib-form { + text-align: left +} + +#sib-form .entry__choice label { + display: unset +} + +.sib-menu { + display: none; + position: absolute; + top: 0; + left: 0; + z-index: 10; + background-color: #fff; + border: 1px solid #d1d1d1; + border-radius: 3px; + margin-top: 8px +} + +.sib-menu .entry__choice { + white-space: nowrap; + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + padding: 0; + text-indent: 0 +} + +.sib-menu__item-list { + margin: 0; + list-style: none; + overflow-y: auto; + overflow-x: hidden; + box-shadow: none; + margin-top: 8px; + max-height: 360px; + border: none; + padding: 12px 0 +} + +.sib-menu__item { + line-height: 1.5em; + cursor: pointer; + padding: 4px 16px; + overflow: hidden +} + +.sib-menu__item:hover { + background-color: #8ED8FD +} + +.sib-menu__apply { + text-align: right; + padding: 8px 12px 12px 0 +} + +@media screen and (max-width: 375px) { + .sib-menu__apply { + display:flex; + flex-direction: column-reverse; + padding: 8px + } +} + +.sib-menu__apply button { + padding: 8px 16px +} + +.sib-menu__separator { + font-size: 20px; + vertical-align: sub +} + +.sib-menu__select { + padding: 0px 7px +} + +.sib-menu__selectTextAlign { + padding: 0px 15px !important +} + +.sib-menu__select button { + padding: 8px 5px +} + +.sib-menu .input_replaced { + opacity: 0; + position: static; + width: 0px; + margin: 0 +} + +.sib-menu .sib-multiselect__label { + width: 100% +} + +.sib-menu .sib-multiselect__label-text { + text-indent: 0 +} + +#sib-other-container .entry__controls--other { + margin-left: 1.5em +} + +#sib-other-container .entry__choice--other { + width: 100% +} + +#sib-other-container #sib-other-reason { + width: 100%; + padding: 8px; + resize: vertical; + border: 1px solid #687484 +} + +.checkbox__label { + word-wrap: break-word +} + +.checkbox.checkbox_tick_positive::before { + left: calc(50% - 1px) +} + +.input_display { + line-height: 1.5rem +} + +.entry__choice { + width: 100%; + margin-bottom: 3px; + font-family: Roboto, sans-serif; + word-wrap: break-all; + word-wrap: break-word +} + +.entry__label { + margin-bottom: 10px; + width: 100%; + font-weight: 500; + word-break: break-word; + word-wrap: break-word +} + +.entry__label_optin { + display: inline +} + +.entry__label>* { + float: left +} + +.entry__label::after { + content: attr(data-required); + font-size: 1em; + color: #FF4949; + text-decoration: none; + word-wrap: break-all; + word-wrap: break-word; + display: inline +} + +.entry__specification { + margin: 10px 0 +} + +.entry__controls { + margin: 0 +} + +.entry__error { + display: none; + margin-top: 6px; + margin-bottom: 6px; + background: transparent +} + +.sib-entry_mcq .entry__controls { + display: block; + background: transparent; + border: none; + outline: none +} + +.sib-form-block { + padding: 0 16px; + word-wrap: break-word; + outline: none +} + +.sib-form-block p,.sib-form-block ol,.sib-form-block ul { + text-align: inherit; + margin: 0; + line-height: 1.5em +} + +.sib-form-block ol,.sib-form-block ul { + list-style-position: inside +} + +.sib-form-block__button { + display: inline-block; + padding: 8px 18px; + border: none; + overflow-wrap: break-word; + max-width: 100%; + cursor: pointer +} + +.sib-form-block__button-disabled { + opacity: 0.5 +} + +.sib-form-block__button-with-loader { + min-height: 40px; + line-height: 23px +} + +.sib-image-form-block { + padding: 2px +} + +.sib-image-form-block a { + display: block; + overflow: hidden +} + +.sib-image-form-block img { + max-width: 100% +} + +.sib-divider-form-block { + border: 0; + margin: 0 +} + +.form__label-row { + display: flex; + flex-direction: column; + justify-content: stretch +} + +.form__label-row--horizontal { + flex-direction: row; + align-items: flex-start; + margin: 10px 0 +} + +.form__label-row--horizontal>*:first-child { + margin-right: 20px +} + +.form__label-row--horizontal>* { + width: 50%; + flex-grow: 1 +} + +.input { + width: calc(100% - 1rem) +} + +.sib-form .input[type=text] { + border: 1px solid rgb(205, 210, 215); + border-radius: 6px; + padding: 4px 2px; +} +.sib-form .input[type=text]:focus:not([readonly]) { + outline: 1px solid rgb(0, 127, 255); + border: 1px solid rgb(0, 127, 255); + border-bottom: 1px solid rgb(0, 127, 255); + box-shadow: none; +} + +.input--multiselect { + position: relative; + padding-right: 32px; + line-height: 37px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap +} + +.input--multiselect::before { + content: ''; + position: absolute; + right: 8px; + border: 8px solid transparent; + border-top-color: #343F4E; + top: calc(50% - 4px) +} + +.input--select { + position: relative; + width: 100% +} + +.input--select::before,.input--select::after { + content: ''; + position: absolute; + right: 8px +} + +.input--select::before { + top: calc(50% - 12px); + border: 5px solid transparent; + border-bottom-color: #343F4E +} + +.input--select::after { + top: calc(50% + 2px); + border: 5px solid transparent; + border-top-color: #343F4E +} + +.input--hidden { + display: none !important +} + +.input--centerText { + display: flex; + align-items: center +} + +.input__rtl[type=text]::placeholder { + text-align: right !important +} + +.input__textareaRtl::placeholder { + text-align: right !important +} + +input::-webkit-input-placeholder { + color: #BFCAD8 +} + +input::-moz-placeholder { + color: #BFCAD8 +} + +input:-ms-input-placeholder { + color: #BFCAD8 +} + +input:-moz-placeholder { + color: #BFCAD8 +} + +textarea.input { + padding: calc(.5rem - 1px) +} + +.sib-form-container a { + text-decoration: underline; + color: #2BB2FC +} + +.sib-sms-input { + width: 100%; + display: flex; + align-items: center +} + +.sib-sms-input .sib-smscode-select { + width: 70px; + margin-right: 10px; + flex-shrink: 0 +} + +.sib-sms-input .entry__controls { + width: 100% +} + +.sib-sms-input .sib-menu__item { + padding: 4px 2px +} + +.form__entry { + position: static; + margin-left: 0; + padding-left: 0 +} + +.sib-panel { + position: relative; + width: 100%; + margin: 24px 0; + padding: 10px 25px; + border-width: 1px; + border-style: solid; + border-radius: 3px; + color: #3C4858; + text-align: center; + box-shadow: none +} + +.sib-panel--active { + display: block +} + +.sib-panel--inactive { + display: none +} + +.sib-panel__text { + margin: 0; + font-weight: 600; + text-align: left +} + +.sib-panel__link { + padding: 0 5px; + color: #3C4858; + text-decoration: underline; + cursor: pointer +} + +.sib-panel__close-icon { + position: absolute; + top: 12px; + right: 25px; + cursor: pointer +} + +.sib-form-message-panel { + margin: 0 0 1.25rem 0; + width: 100%; + padding: 0.4375rem; + border: 1px solid; + display: none +} + +.sib-form-message-panel--active { + display: inline-block +} + +.sib-form-message-panel__text { + display: flex; + align-items: center; + margin: 0; + padding: 0.5rem +} + +.sib-form-message-panel__text .sib-icon { + contain: strict; + display: inline-block; + fill: currentColor +} + +.sib-form-message-panel__text .sib-notification__icon { + height: 1.5em; + width: 1.5em; + flex-shrink: 0; + margin-right: calc(1rem - 1px) +} + +.sib-loader { + display: inline-block; + position: relative; + width: 64px; + height: 64px +} + +.checkbox_tick_positive:before { + left: 49% +} + +@media screen and (max-width: 500px) { + #sib-container { + padding:32px 9px 32px + } + + .form__label-row--horizontal { + flex-direction: column + } + + .form__label-row--horizontal>* { + width: 100% + } +} + +.sib-loader div { + position: absolute; + width: 5px; + height: 5px; + background: #fff; + border-radius: 50%; + animation: loader 1.2s linear infinite +} + +.sib-loader div:nth-child(1) { + animation-delay: 0s; + top: 29px; + left: 53px +} + +.sib-loader div:nth-child(2) { + animation-delay: -0.1s; + top: 18px; + left: 50px +} + +.sib-loader div:nth-child(3) { + animation-delay: -0.2s; + top: 9px; + left: 41px +} + +.sib-loader div:nth-child(4) { + animation-delay: -0.3s; + top: 6px; + left: 29px +} + +.sib-loader div:nth-child(5) { + animation-delay: -0.4s; + top: 9px; + left: 18px +} + +.sib-loader div:nth-child(6) { + animation-delay: -0.5s; + top: 18px; + left: 9px +} + +.sib-loader div:nth-child(7) { + animation-delay: -0.6s; + top: 29px; + left: 6px +} + +.sib-loader div:nth-child(8) { + animation-delay: -0.7s; + top: 41px; + left: 9px +} + +.sib-loader div:nth-child(9) { + animation-delay: -0.8s; + top: 50px; + left: 18px +} + +.sib-loader div:nth-child(10) { + animation-delay: -0.9s; + top: 53px; + left: 29px +} + +.sib-loader div:nth-child(11) { + animation-delay: -1s; + top: 50px; + left: 41px +} + +.sib-loader div:nth-child(12) { + animation-delay: -1.1s; + top: 41px; + left: 50px +} + +.entry__choice label p { + display: inline +} + +@keyframes loader { + 0%,20%,80%,100% { + transform: scale(1) + } + + 50% { + transform: scale(1.5) + } +} + +@media screen and (max-width: 400px) { + #sib-container { + padding:32px 0px 32px + } +} + +@media screen and (max-width: 480px) { + .sib-image-form-block img { + height:auto !important + } +} + +.progress-indicator { + background: transparent +} + +.sib-hide-loader-icon { + display: none +} + +.sib-form ::-webkit-input-placeholder { + color: #c0ccda; + opacity: 1 +} + +.sib-form ::-moz-placeholder { + color: #c0ccda; + opacity: 1 +} + +.sib-form :-ms-input-placeholder { + color: #c0ccda; + opacity: 1 +} + +.sib-form ::-ms-input-placeholder { + color: #c0ccda; + opacity: 1 +} + +.sib-form ::placeholder { + color: #c0ccda; + opacity: 1 +} + +.sib-form .sib-form_fieldset { + display: table-row-group +} + +.sib-form .fieldset__separator { + display: table-row +} + +.sib-form .fieldset__separator:after,.sib-form .fieldset__separator:before { + background: #c0ccda; + background-clip: padding-box; + border: solid transparent; + border-width: calc(4rem - 1px) 0 4rem; + -moz-box-sizing: content-box; + box-sizing: content-box; + content: ""; + display: table-cell; + height: 1px +} + +.sib-form .form__fieldset { + border: 0; + display: table-row; + padding: 0 +} + +.sib-form .form__fieldset:first-child .form__entries,.sib-form .form__fieldset:first-child .form__legend { + padding-top: 0 +} + +.sib-form .form__entries,.sib-form .form__legend { + display: table-cell; + margin: 0; + padding-top: 4rem; + vertical-align: top +} + +.sib-form .form__legend { + font-size: 1.14869835rem; + line-height: 1.5rem; + font-weight: 700; + padding-right: 2.5rem +} + +@media (max-width: 45rem) { + .sib-form .fieldset__separator,.sib-form .form__entries,.sib-form .form__fieldset,.sib-form .form__legend,.sib-form .sib-form_fieldset { + display:block + } + + .sib-form .form__legend { + padding-bottom: .5rem; + padding-right: 0 + } + + .sib-form .form__entries { + padding-top: 0 + } + + .sib-form .fieldset__separator { + border: 0 + } +} + +.sib-form .form__entry { + border: 0; + margin: 0; + padding: 0; + position: relative +} + +.sib-form .form__entry:not(:first-child) { + margin-top: 1.5rem +} + +.sib-form .entry__label+.form__entry { + margin-top: 0 +} + +.sib-form .entry__label { + display: table; + font-weight: 700; + padding: 0; + white-space: normal +} + +.sib-form .form__row { + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + margin: -.25rem -.75rem +} + +.sib-form .form__row:not(:first-child) { + margin-top: 1.25rem +} + +.sib-form .entry__label+.form__row { + margin-top: -.25rem +} + +.sib-form .form__row>.form__entry { + margin: .25rem .75rem +} + +.sib-form .entry__optional-indicator { + color: #687484; + font-size: .87055056rem; + line-height: 1rem; + font-weight: 400 +} + +.sib-form .entry__field { + -webkit-align-items: center; + align-items: center; + background: #fff; + display: -webkit-inline-flex; + display: inline-flex; + margin: .25rem 0; + max-width: 100% +} + +.sib-form .input,.sib-form .input__affix { + background: none; + border: 0; + font: inherit; + margin: 0 +} + +.sib-form .input:first-child,.sib-form .input__affix:first-child { + padding-left: .5rem +} + +.sib-form .input:last-child,.sib-form .input__affix:last-child { + padding-right: .5rem +} + +.sib-form .input,.sib-form .input__button { + -moz-box-sizing: content-box; + box-sizing: content-box; + color: inherit; + outline: 0 +} + +.sib-form .input:not(textarea),.sib-form .input__button { + height: calc(2.5rem - 2px) +} + +.sib-form .input__affix { + color: #687484; + -webkit-flex-shrink: 0; + flex-shrink: 0 +} + +.sib-form .input__button { + cursor: pointer; + padding: 0 .5rem +} + +.sib-form .input__button[type=submit] { + border-bottom-left-radius: 0; + border-left: 1px solid #c0ccda; + border-top-left-radius: 0; + color: inherit; + margin-left: .5rem +} + +.sib-form .input__button .sib-icon { + height: 1.5rem; + vertical-align: bottom; + width: 1.5rem +} + +.sib-form .input { + box-shadow: none; + min-width: 1px; + padding: 0 +} + +.sib-form textarea.input { + padding: calc(.5rem - 1px) +} + +.sib-form select.input { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 286.1 167'%3E%3Cpath d='M24.1 0h238c21.4 0 32.1 25.9 17 41l-119 119c-9.4 9.4-24.6 9.4-33.9 0L7.1 41C-8 25.9 2.7 0 24.1 0z' fill='%233c4858'/%3E%3C/svg%3E"); + background-position: right .65em top 50%; + background-repeat: no-repeat; + background-size: .65em auto +} + +.sib-form select.input:first-child,.sib-form select.input:last-child { + padding-right: calc(2rem - 1px) +} + +.sib-form .sib-entry_block .entry__field,.sib-form .form__row .entry__field,.sib-form .sib-form_block .entry__field { + display: -webkit-flex; + display: flex +} + +.sib-form .sib-entry_block .input,.sib-form .form__row .input,.sib-form .sib-form_block .input { + -webkit-flex-grow: 1; + flex-grow: 1 +} + +.sib-form .sib-entry_phrasing,.sib-form .sib-entry_phrasing .entry__label,.sib-form .sib-entry_phrasing .entry__specification { + display: inline-block +} + +.sib-form .sib-entry_phrasing .entry__label { + font-weight: 400 +} + +.sib-form .sib-entry_errored { + margin-left: -.5rem; + padding-left: .5rem +} + +.sib-form .sib-entry_errored:before { + background: #ff4949; + bottom: 0; + content: ""; + position: absolute; + right: 100%; + top: 0; + width: .25rem +} + +.sib-form .entry__error,.sib-form .entry__label,.sib-form .entry__specification,.sib-form .form__error { + max-width: 40em +} + +.sib-form .entry__error,.sib-form .entry__specification,.sib-form .form__error { + display: block +} + +.sib-form .entry__choice+.entry__error,.sib-form .entry__choice+.entry__specification,.sib-form .entry__error+.entry__error,.sib-form .entry__error+.entry__specification,.sib-form .entry__specification+.entry__error,.sib-form .entry__specification+.entry__specification { + margin-top: .5rem +} + +.sib-form .entry__error { + color: #ff4949; + font-size: .87055056rem; + line-height: 1rem +} + +.sib-form .entry__specification { + color: #687484; + margin: 0 +} + +.sib-form .entry__choice { + padding-left: 1.5em; + text-indent: -1.5em +} + +.sib-form .entry__choice .checkbox,.sib-form .entry__choice .radio-button { + margin-right: .5em +} + +.sib-form .entry__choice .sib-toggletip { + text-indent: 0 +} + +.sib-form .entry__choice:not(:first-child) { + margin-top: .5rem +} + +.sib-form .entry__choices.menu { + margin-top: 2px; + max-height: 20rem; + overflow: auto; + padding: .5rem +} + +.sib-form .checkbox,.sib-form .radio-button { + background: #fff; + border: 1px solid #687484; + cursor: pointer; + display: inline-block; + height: 1em; + vertical-align: -.125em; + width: 1em; + position: relative +} + +.sib-form .checkbox { + border-radius: 3px +} + +.sib-form .radio-button { + border-radius: 50% +} + +.sib-form .radio-button:before { + border-radius: 50%; + bottom: 2px; + content: ""; + left: 2px; + position: absolute; + right: 2px; + top: 2px +} + +.sib-form .checkbox_tick_negative:after,.sib-form .checkbox_tick_negative:before { + border: solid #fff; + border-width: 0 0 0 2px; + bottom: 0; + content: ""; + left: 50%; + margin-left: -1px; + position: absolute; + top: 0 +} + +.sib-form .checkbox_tick_negative:after { + -webkit-transform: rotate(-45deg); + transform: rotate(-45deg) +} + +.sib-form .checkbox_tick_negative:before,.sib-form .checkbox_tick_positive:before { + -webkit-transform: rotate(45deg); + transform: rotate(45deg) +} + +.sib-form .checkbox_tick_positive:before { + border-color: #fff; + border-style: solid; + border-width: 0 2px 2px 0; + bottom: 1px; + content: ""; + left: 50%; + margin-left: -25%; + position: absolute; + top: 1px; + -webkit-transform-origin: 80% 45%; + transform-origin: 80% 45%; + width: 50% +} + +.sib-form .input_replaced { + opacity: 0; + position: absolute; + z-index: -1 +} + +.sib-form .input_replaced:checked+.checkbox_tick_positive { + background: #13ce66; + border-color: #13ce66 +} + +.sib-form .input_replaced:checked+.checkbox_tick_negative { + background: #ff4949; + border-color: #ff4949 +} + +.sib-form .input_replaced:checked+.radio-button { + border-color: #0092ff +} + +.sib-form .input_replaced:checked+.radio-button:before { + background: #0092ff +} + +.sib-form .input_replaced:indeterminate+.checkbox { + background: #fff; + border-color: #687484 +} + +.sib-form .input_replaced:indeterminate+.checkbox:before { + background: #687484; + border: 0; + content: ""; + height: 2px; + left: 2px; + margin: -1px 0 0; + position: absolute; + right: 2px; + -webkit-transform: none; + transform: none; + top: 50%; + width: auto +} + +.sib-form .input_replaced:indeterminate+.checkbox:after { + content: normal +} + +.sib-form .input_replaced:active+.checkbox,.sib-form .input_replaced:active+.radio-button,.sib-form .input_replaced:focus+.checkbox,.sib-form .input_replaced:focus+.radio-button { + box-shadow: 0 0 0 2px #c9e1f4 +} + +.sib-form .choice__form { + border: 0; + margin: 0; + padding: 0 +} + +.sib-form .choice__form[disabled] { + display: none +} + +.sib-form .entry__choice+.choice__form { + border-left: 2px solid #c0ccda; + margin-left: calc(.5em - 1px); + padding: 0.5rem calc(.5rem + .5em - 1px) +} + +.sib-form ::-ms-reveal { + display: none +} + +.sib-form ::-webkit-inner-spin-button,.sib-form ::-webkit-search-decoration { + display: none +} + +.sib-form [type=search] { + -webkit-appearance: textfield; + -moz-appearance: textfield; + appearance: textfield +} + +.sib-form .input[readonly] { + background-color: #f9fafc +} + +.sib-form .input[type=text]+.input__password-toggler { + color: #0092ff +} + +.sib-form .sib-ap-nostyle-input-icon { + display: none +} + +.sib-form .sib-ap-nostyle-dropdown-menu { + -moz-box-sizing: content-box; + box-sizing: content-box; + background: #fff; + border: 1px solid #c0ccda; + border-radius: 3px; + list-style: none; + margin: 0; + max-width: 100vw; + min-width: 100%; + padding: calc(.5rem - 1px) 0 +} + +.sib-form .sib-ap-nostyle-dropdown-menu.sib-collapsible__content { + position: absolute; + top: 100%; + z-index: 1 +} + +.sib-form .sib-ap-nostyle-dropdown-menu.sib-collapsible__content:not(.sib-collapsible__content_toggled) { + display: none +} + +.sib-form .sib-ap-nostyle-dropdown-menu em { + font-style: normal; + font-weight: 700 +} + +.sib-form .sib-ap-nostyle-input { + padding-right: .5rem +} + +.sib-form .sib-ap-nostyle-suggestion { + cursor: default; + color: inherit; + cursor: pointer; + display: block; + overflow: hidden; + padding: .5rem 1rem; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap +} + +.sib-form .sib-ap-nostyle-cursor,.sib-form .sib-ap-nostyle-suggestion:focus,.sib-form .sib-ap-nostyle-suggestion:hover { + background: #eff2f7 +} + +.sib-form .sib-ap-footer { + display: none +} + +.sib-form .menu { + background: #fff; + border: 1px solid #c0ccda; + border-radius: 3px; + list-style: none; + margin: 0; + max-width: 100vw; + min-width: 100%; + padding: calc(.5rem - 1px) 0 +} + +.sib-form .menu.sib-collapsible__content { + position: absolute; + top: 100%; + z-index: 1 +} + +.sib-form .menu.sib-collapsible__content:not(.sib-collapsible__content_toggled) { + display: none +} + +.sib-form .menu__content,.sib-form .menu__heading { + padding: 0; + margin: 1rem +} + +.sib-form .menu__content:first-child,.sib-form .menu__heading:first-child { + margin-top: .5rem +} + +.sib-form .menu__content:last-child,.sib-form .menu__heading:last-child { + margin-bottom: .5rem +} + +.sib-form .menu__heading { + font-size: 1.31950791rem; + line-height: 1.5rem; + font-weight: 400 +} + +.sib-form .menu__content { + list-style: none +} + +.sib-form .menu__icon { + color: #8492a6; + height: 1em; + vertical-align: -.125em; + width: 1em; + margin-right: .5rem +} + +.sib-form .menu__control { + color: inherit; + cursor: pointer; + display: block; + overflow: hidden; + padding: .5rem 1rem; + text-decoration: none; + text-overflow: ellipsis; + white-space: nowrap +} + +.sib-form .menu__control:focus,.sib-form .menu__control:hover { + background: #eff2f7 +} + +.sib-form .menu__divider { + border: 0; + border-top: 1px solid #c0ccda; + margin: .5rem 0 +} + +.sib-form .clickable_button,.sib-form .clickable_link { + font: inherit; + margin: 0 +} + +.sib-form .clickable_button.sib-collapsible__trigger:before,.sib-form .clickable_link.sib-collapsible__trigger:before { + border-left: .25rem solid transparent; + border-right: .25rem solid transparent; + border-bottom: 0; + border-top: .25rem solid; + content: ""; + float: right; + margin: .625rem 0 0 .25em +} + +.sib-form .clickable_button.sib-collapsible__trigger_toggled:before,.sib-form .clickable_link.sib-collapsible__trigger_toggled:before { + border-bottom: .25rem solid; + border-top: 0 +} + +.sib-form .clickable_button:not([disabled]),.sib-form .clickable_link:not([disabled]) { + cursor: pointer +} + +.sib-form .clickable_button { + background: #0092ff; + border: 1px solid #0092ff; + border-radius: 3px; + color: #fff; + display: inline-block; + outline: 0; + padding: calc(.5rem - 1px) calc(1rem - 1px); + text-decoration: none +} + +.sib-form .clickable_button.sib-collapsible__trigger { + overflow: hidden; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap +} + +.sib-form .clickable_button[disabled] { + opacity: .5 +} + +.sib-form .clickable_button:focus { + box-shadow: 0 0 0 2px #c9e1f4 +} + +.sib-form .clickable_button:focus:not([disabled]),.sib-form .clickable_button:hover:not([disabled]) { + background: #007cd9; + border-color: #007cd9 +} + +.sib-form .clickable_ghost { + background: none; + border-color: #c0ccda; + color: #3c4858 +} + +.sib-form .clickable_ghost:focus:not([disabled]),.sib-form .clickable_ghost:hover:not([disabled]) { + background: none; + border-color: #8492a6 +} + +.sib-form .clickable_dropdown { + display: inline-block; + position: relative +} + +.sib-form .clickable_dropdown .menu { + margin-top: 2px +} + +.sib-form .clickable_dropdown .menu_left { + left: 0 +} + +.sib-form .clickable_dropdown .menu_right { + right: 0 +} + +.sib-form .clickable_block { + width: 100% +} + +.sib-form .clickable_cta { + border-radius: 9999em +} + +.sib-form .clickable_link { + background: none; + border: 0; + color: #0092ff; + display: inline; + padding: 0; + text-decoration: none +} + +.sib-form .clickable_link:focus,.sib-form .clickable_link:hover { + color: #007cd9; + text-decoration: underline +} + +.sib-form .clickable_link:focus { + outline: 0 +} + +.sib-form .clickable_sneaky,.sib-form .clickable_sneaky:focus,.sib-form .clickable_sneaky:hover { + color: inherit +} + +.sib-form .clickable_plan { + color: #0092ff +} + +.sib-form .clickable_plan:focus,.sib-form .clickable_plan:hover { + color: #007cd9 +} + +.sib-form .clickable_destructive { + background: #ff4949; + border-color: #ff4949 +} + +.sib-form .clickable_destructive:focus:not([disabled]),.sib-form .clickable_destructive:hover:not([disabled]) { + background: #d93e3e; + border-color: #d93e3e +} + +.sib-form .clickable__group { + display: -webkit-inline-flex; + display: inline-flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap +} + +.sib-form .clickable__group .clickable_button:focus,.sib-form .clickable__group .clickable_button:hover { + position: relative +} + +.sib-form .clickable__group .clickable_button:not(:first-child),.sib-form .clickable__group .clickable_dropdown:not(:first-child) .clickable_button { + border-bottom-left-radius: 0; + border-top-left-radius: 0; + margin-left: -1px +} + +.sib-form .clickable__group>.clickable_button:not(:last-child),.sib-form .clickable__group>.clickable_dropdown:not(:last-child) .clickable_button { + border-bottom-right-radius: 0; + border-top-right-radius: 0 +} + +.sib-form .clickable__group>.clickable_dropdown:not(:last-child) .clickable_link,.sib-form .clickable__group>.clickable_link:not(:last-child) { + margin-right: 1.5em; + position: relative +} + +.sib-form .clickable__group>.clickable_dropdown:not(:last-child) .clickable_link:after,.sib-form .clickable__group>.clickable_link:not(:last-child):after { + background: #c0ccda; + border-radius: 50%; + content: ""; + cursor: auto; + display: inline-block; + height: .25rem; + pointer-events: none; + position: absolute; + right: -.9em; + top: .7em; + width: .25rem +} + +.sib-form .clickable__icon { + height: 1.5rem; + vertical-align: bottom; + width: 1.5rem +} + +.sib-form .clickable__icon:not(.sib-icon_standalone) { + margin-right: calc(.7002rem - 1px) +} + +.sib-form .progress-indicator { + -webkit-align-items: center; + align-items: center; + background: rgba(255,255,255,0.9); + display: -webkit-flex; + display: flex; + height: 100%; + -webkit-justify-content: center; + justify-content: center; + width: 100% +} + +.sib-form .progress-indicator .progress-indicator__icon { + fill: #0092ff; + height: 2rem; + width: 2rem +} + +.sib-form .progress-indicator_small .progress-indicator__icon { + height: 1rem; + width: 1rem +} + +.sib-form .progress-indicator__icon { + -webkit-animation: indicator-spin 1.3s cubic-bezier(0.46, 0.35, 0.39, 0.85) infinite; + animation: indicator-spin 1.3s cubic-bezier(0.46, 0.35, 0.39, 0.85) infinite +} + +@-webkit-keyframes indicator-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg) + } + + to { + -webkit-transform: rotate(1turn); + transform: rotate(1turn) + } +} + +@keyframes indicator-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg) + } + + to { + -webkit-transform: rotate(1turn); + transform: rotate(1turn) + } +} diff --git a/docs/css/normalize.css b/docs/css/normalize.css deleted file mode 100644 index 46ebe138802..00000000000 --- a/docs/css/normalize.css +++ /dev/null @@ -1,460 +0,0 @@ -/*! normalize.css v4.2.0 | MIT License | github.com/necolas/normalize.css */ - -/** - * 1. Change the default font family in all browsers (opinionated). - * 2. Correct the line height in all browsers. - * 3. Prevent adjustments of font size after orientation changes in IE and iOS. - */ - -/* Document - ========================================================================== */ - -html { - font-family: sans-serif; /* 1 */ - line-height: 1.15; /* 2 */ - -ms-text-size-adjust: 100%; /* 3 */ - -webkit-text-size-adjust: 100%; /* 3 */ -} - -/* Sections - ========================================================================== */ - -/** - * Remove the margin in all browsers (opinionated). - */ - -body { - margin: 0; -} - -/** - * Add the correct display in IE 9-. - */ - -article, -aside, -footer, -header, -nav, -section { - display: block; -} - -/** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/* Grouping content - ========================================================================== */ - -/** - * Add the correct display in IE 9-. - * 1. Add the correct display in IE. - */ - -figcaption, -figure, -main { /* 1 */ - display: block; -} - -/** - * Add the correct margin in IE 8. - */ - -figure { - margin: 1em 40px; -} - -/** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - -hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/* Text-level semantics - ========================================================================== */ - -/** - * 1. Remove the gray background on active links in IE 10. - * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. - */ - -a { - background-color: transparent; /* 1 */ - -webkit-text-decoration-skip: objects; /* 2 */ -} - -/** - * Remove the outline on focused links when they are also active or hovered - * in all browsers (opinionated). - */ - -a:active, -a:hover { - outline-width: 0; -} - -/** - * 1. Remove the bottom border in Firefox 39-. - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - -abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ -} - -/** - * Prevent the duplicate application of `bolder` by the next rule in Safari 6. - */ - -b, -strong { - font-weight: inherit; -} - -/** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - -b, -strong { - font-weight: bolder; -} - -/** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - -code, -kbd, -samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ -} - -/** - * Add the correct font style in Android 4.3-. - */ - -dfn { - font-style: italic; -} - -/** - * Add the correct background and color in IE 9-. - */ - -mark { - background-color: #ff0; - color: #000; -} - -/** - * Add the correct font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sub { - bottom: -0.25em; -} - -sup { - top: -0.5em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Add the correct display in IE 9-. - */ - -audio, -video { - display: inline-block; -} - -/** - * Add the correct display in iOS 4-7. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Remove the border on images inside links in IE 10-. - */ - -img { - border-style: none; -} - -/** - * Hide the overflow in IE. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Forms - ========================================================================== */ - -/** - * 1. Change the font styles in all browsers (opinionated). - * 2. Remove the margin in Firefox and Safari. - */ - -button, -input, -optgroup, -select, -textarea { - font-family: sans-serif; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ -} - -/** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - -button, -input { /* 1 */ - overflow: visible; -} - -/** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - -button, -select { /* 1 */ - text-transform: none; -} - -/** - * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` - * controls in Android 4. - * 2. Correct the inability to style clickable types in iOS and Safari. - */ - -button, -html [type="button"], /* 1 */ -[type="reset"], -[type="submit"] { - -webkit-appearance: button; /* 2 */ -} - -/** - * Remove the inner border and padding in Firefox. - */ - -button::-moz-focus-inner, -[type="button"]::-moz-focus-inner, -[type="reset"]::-moz-focus-inner, -[type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; -} - -/** - * Restore the focus styles unset by the previous rule. - */ - -button:-moz-focusring, -[type="button"]:-moz-focusring, -[type="reset"]:-moz-focusring, -[type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; -} - -/** - * Change the border, margin, and padding in all browsers (opinionated). - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - -legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ -} - -/** - * 1. Add the correct display in IE 9-. - * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - -progress { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Remove the default vertical scrollbar in IE. - */ - -textarea { - overflow: auto; -} - -/** - * 1. Add the correct box sizing in IE 10-. - * 2. Remove the padding in IE 10-. - */ - -[type="checkbox"], -[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - -[type="number"]::-webkit-inner-spin-button, -[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - -[type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ -} - -/** - * Remove the inner padding and cancel buttons in Chrome and Safari on OS X. - */ - -[type="search"]::-webkit-search-cancel-button, -[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - -::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ -} - -/* Interactive - ========================================================================== */ - -/* - * Add the correct display in IE 9-. - * 1. Add the correct display in Edge, IE, and Firefox. - */ - -details, /* 1 */ -menu { - display: block; -} - -/* - * Add the correct display in all browsers. - */ - -summary { - display: list-item; -} - -/* Scripting - ========================================================================== */ - -/** - * Add the correct display in IE 9-. - */ - -canvas { - display: inline-block; -} - -/** - * Add the correct display in IE. - */ - -template { - display: none; -} - -/* Hidden - ========================================================================== */ - -/** - * Add the correct display in IE 10-. - */ - -[hidden] { - display: none; -} diff --git a/docs/css/prism.css b/docs/css/prism.css index a0971da65dc..b1191633530 100644 --- a/docs/css/prism.css +++ b/docs/css/prism.css @@ -1,139 +1,118 @@ -/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+jsx */ -/** - * prism.js default theme for JavaScript, CSS and HTML - * Based on dabblet (http://dabblet.com) - * @author Lea Verou - */ - +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+jsx+tsx+typescript */ code[class*="language-"], pre[class*="language-"] { - color: black; - background: none; - text-shadow: 0 1px white; - font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; - text-align: left; - white-space: pre; - word-spacing: normal; - word-break: normal; - word-wrap: normal; - line-height: 1.5; - - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, -code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { - text-shadow: none; - background: #b3d4fc; -} - -pre[class*="language-"]::selection, pre[class*="language-"] ::selection, -code[class*="language-"]::selection, code[class*="language-"] ::selection { - text-shadow: none; - background: #b3d4fc; -} - + color: #222; + background: 0 0; + text-shadow: 0 1px #fff; + font-family: Menlo, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +code[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +pre[class*="language-"]::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +code[class*="language-"] ::selection, +code[class*="language-"]::selection, +pre[class*="language-"] ::selection, +pre[class*="language-"]::selection { + text-shadow: none; + background: #b3d4fc; +} @media print { - code[class*="language-"], - pre[class*="language-"] { - text-shadow: none; - } + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } } - -/* Code blocks */ pre[class*="language-"] { - padding: 1em; - margin: .5em 0 1.275em 0; - overflow: auto; + padding: 1em; + margin: 0; + overflow: auto; + border-radius: 4px; } - :not(pre) > code[class*="language-"], pre[class*="language-"] { - background: #f5f2f0; + background: #eff1f5; } - -/* Inline code */ :not(pre) > code[class*="language-"] { - padding: .1em; - border-radius: .3em; - white-space: normal; + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; } - +.token.cdata, .token.comment, -.token.prolog, .token.doctype, -.token.cdata { - color: slategray; +.token.prolog { + color: #708090; } - .token.punctuation { - color: #999; + color: #999; } - -.namespace { - opacity: .7; +.token.namespace { + opacity: 0.7; } - -.token.property, -.token.tag, .token.boolean, -.token.number, .token.constant, +.token.deleted, +.token.number, +.token.property, .token.symbol, -.token.deleted { - color: #905; +.token.tag { + color: #905; } - -.token.selector, .token.attr-name, -.token.string, -.token.char, .token.builtin, -.token.inserted { - color: #690; +.token.char, +.token.inserted, +.token.selector, +.token.string { + color: #690; } - -.token.operator, -.token.entity, -.token.url, .language-css .token.string, -.style .token.string { - color: #a67f59; - background: hsla(0, 0%, 100%, .5); +.style .token.string, +.token.entity, +.token.operator, +.token.url { + color: #9a6e3a; + background: hsla(0, 0%, 100%, 0.5); } - .token.atrule, .token.attr-value, .token.keyword { - color: #07a; + color: #07a; } - +.token.class-name, .token.function { - color: #DD4A68; + color: #dd4a68; } - -.token.regex, .token.important, +.token.regex, .token.variable { - color: #e90; + color: #e90; } - -.token.important, -.token.bold { - font-weight: bold; +.token.bold, +.token.important { + font-weight: 700; } .token.italic { - font-style: italic; + font-style: italic; } - .token.entity { - cursor: help; + cursor: help; } - diff --git a/docs/css/style-v20.css b/docs/css/style-v20.css new file mode 100644 index 00000000000..5597842cbfc --- /dev/null +++ b/docs/css/style-v20.css @@ -0,0 +1,756 @@ +/* Layout */ + +main > .container { + padding-top: 50px; +} +main > .container .markdown-section { + max-width: 740px; + margin: 0 auto; +} +@media only screen and (min-width: 992px) { + body:not(.no-sidebar) > header, + body:not(.no-sidebar) > main, + body:not(.no-sidebar) > footer { + padding-left: 300px; + } +} +@media only screen and (max-width: 992px) { + body > header, + body > main, + body > footer { + padding-left: 0; + } +} + +@media only screen and (min-width: 601px) { + body { + line-height: 1.6; + font-size: 16px; + -webkit-font-smoothing: antialiased; + } + main > .container { + width: 100%; + padding-left: 1em; + padding-right: 1em; + } +} + +/* Sticky TOC */ + +.sticker-container { + position: relative; +} +.toc-container { + position: sticky; + align-self: start; + top: 10px; + padding-left: 1em; +} +.toc { + overflow-y: auto; + max-height: calc( + 100vh - 114px + ); /* 104px = 50px container top padding + 64px navbar height */ +} +.toc.is-position-fixed { + position: static !important; + max-height: calc( + 100vh - 10px + ); /* container top padding */ +} + +/* Navigation */ + +nav { + background: linear-gradient(145deg, #027be3 11%, #1a237e 75%); +} +nav ul#nav-mobile a { + font-family: 'Roboto', sans-serif; + font-size: 16px; +} + +nav ul a { + padding: 0 12px; +} + +nav ul li.social a { + padding: 0 6px; +} + +nav ul li:nth-child(5) { + padding-left: 6px; +} + +nav ul li:nth-child(7) { + padding-right: 6px; +} +.sidenav { + height: 100%; + padding-bottom: 1em; +} + +.sidenav.sidenav-fixed li { + line-height: 44px; +} + +.sidenav li.logo { + text-align: center; + margin-top: 1em; +} + +.sidenav li.logo a { + height: auto; +} + +.sidenav li.logo img { + width: 50px; +} + +.sidenav li.version { + text-align: center; + padding: 0.5em 0 1em 0; +} + +.sidenav li.version li { + min-height: auto; +} + +.sidenav li.version .dropdown-trigger { + margin: 0 auto; + display: inline-block; + padding: 0 10px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + width: 70%; + height: 2em; +} + +.sidenav li.version .dropdown-trigger .caret { + position: relative; + top: 10px; + fill: rgba(0, 0, 0, 0.6); +} + +.sidenav ul { + padding: 0.5em 0 0.5em 1em; +} + +.sidenav ul div { + text-transform: uppercase; + font-weight: bold; + font-size: 0.8em; +} + +.sidenav li > a { + height: 1.6em; + line-height: 1.6em; + padding: 0 0 0 1em; + font-size: 1em; + font-weight: normal; +} + +@media only screen and (max-width: 992px) { + .sidenav li > a { + height: 1.7em; + line-height: 1.7em; + padding: 0 0 0 1em; + font-size: 1.2em; + font-weight: normal; + } +} + +.sidenav.sidenav-fixed ul.collapsible-accordion a.collapsible-header { + padding: 0 30px; +} + +.sidenav.sidenav-fixed ul.collapsible-accordion .collapsible-body li a { + font-weight: 400; + padding: 0 37.5px 0 45px; +} + +ul.sidenav code { + font-size: 0.9em; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; +} + +.sidenav img.premium { + width: 23px; + height: 23px; + vertical-align: middle; + box-shadow: none; +} + +.switch label input[type=checkbox]:checked+.lever { + background-color: #85b3df; +} + +.switch label .lever:before { + background-color: rgba(38,77,166,0.15); +} + +.switch label input[type=checkbox]:checked+.lever:after { + background-color: #145dc2; +} + +/* Table of contents */ + +.table-of-contents { + overflow-y: auto; + height: calc(100% - 75px); +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 14px; + border-left: 2px solid #1a237e; +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 15px; + border-left: 1px solid #1a237e; +} + +.table-of-contents a { + color: rgba(0, 0, 0, 0.55); + font-weight: 400; +} + +.markdown-section { + display: block; + word-wrap: break-word; + overflow: auto; + color: #333; + line-height: 1.7; + text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; +} + +.markdown-section * { + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.markdown-section *:focus { + outline: none; +} + +.markdown-section > :first-child { + margin-top: 0 !important; +} + +.markdown-section > :last-child { + margin-bottom: 0 !important; +} + +.markdown-section blockquote, +.markdown-section code, +.markdown-section figure, +.markdown-section img, +.markdown-section pre, +.markdown-section table, +.markdown-section tr { + page-break-inside: avoid; +} + +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5, +.markdown-section p { + orphans: 3; + widows: 3; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5 { + page-break-after: avoid; +} + +.markdown-section b, +.markdown-section strong { + font-weight: 700; +} + +.markdown-section em { + font-style: italic; +} + +.markdown-section blockquote, +.markdown-section dl, +.markdown-section ol, +.markdown-section p, +.markdown-section table, +.markdown-section ul { + margin-top: 0; + margin-bottom: 0.85em; +} + +.markdown-section h3 + table { + font-size: 0.8em; +} + +.markdown-section ul > li { + list-style-type: disc; +} + +.markdown-section a { + color: #4183c4; + text-decoration: none; + background: 0 0; +} + +.markdown-section a code { + color: #4183c4; +} + +.markdown-section a:active, +.markdown-section a:focus, +.markdown-section a:hover { + text-decoration: underline; +} + +.markdown-section .highlight { + margin-bottom: 1em; +} + +.marmelab-language-switcher-tabs { + margin-top: -0.5em; +} + +@media only screen and (max-width: 992px) { + img:not(.no-shadow) { + width: 100%; + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.22); + } +} + +.markdown-section img, +.markdown-section video { + max-width: 100%; +} + +@media only screen and (min-width: 601px) { + .markdown-section img, + .markdown-section video { + max-width: 90%; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.24); + border-radius: 2px; + margin: 1rem; + } + .markdown-section img.no-shadow, + .markdown-section video.no-shadow { + max-width: 90%; + box-shadow: none; + border-radius: 0; + margin: 1rem; + } +} + +.markdown-section hr { + height: 4px; + padding: 0; + margin: 1.7em 0; + overflow: hidden; + background-color: #e7e7e7; + border: none; +} + +.markdown-section hr:after, +.markdown-section hr:before { + display: table; + content: ' '; +} + +.markdown-section hr:after { + clear: both; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3 { + margin-top: 1.275em; + margin-bottom: 0.85em; + font-weight: 700; +} + +.markdown-section h1 { + font-size: 2.5em; +} + +.markdown-section h2 { + font-size: 1.75em; +} +.markdown-section h3 { + margin-top: 1.5em; + font-size: 1.25em; +} + +.markdown-section h4 { + margin-top: 1.25em; + font-size: 1em; + font-weight: bold; +} + +.markdown-section code, +.markdown-section pre { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + direction: ltr; + margin: 0; + padding: 0; + border: none; + color: inherit; +} + +.markdown-section pre { + overflow: auto; + word-wrap: normal; + margin: 0; + padding: 0.85em 1em; + margin-bottom: 1.275em; + background: #f7f7f7; + line-height: 1.3; +} +.markdown-section pre[class*='language-'] { + line-height: 1.3; +} +.markdown-section pre > code { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + font-size: 0.85em; + white-space: pre; + background: 0 0; +} +.markdown-section pre > code:after, +.markdown-section pre > code:before { + content: normal; +} +.markdown-section code { + padding: 0.2em; + margin: 0; + font-size: 0.85em; + background-color: #f7f7f7; +} +.markdown-section code:after, +.markdown-section code:before { + letter-spacing: -0.2em; + content: '\00a0'; +} +.markdown-section table { + display: table; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; +} +.markdown-section table td, +.markdown-section table th { + padding: 6px 13px; + border: 1px solid #ddd; +} +.markdown-section table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} +.markdown-section table tr:nth-child(2n) { + background-color: #f8f8f8; +} +.markdown-section table th { + font-weight: 700; +} +.markdown-section ol, +.markdown-section ul { + padding: 0; + margin: 0; + margin-bottom: 0.85em; + padding-left: 2em; +} +.markdown-section ol ol, +.markdown-section ol ul, +.markdown-section ul ol, +.markdown-section ul ul { + margin-top: 0; + margin-bottom: 0; +} +.markdown-section ol ol { + list-style-type: lower-roman; +} +.markdown-section blockquote { + margin: 0; + margin-bottom: 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; +} +.markdown-section blockquote:first-child { + margin-top: 0; +} +.markdown-section blockquote:last-child { + margin-bottom: 0; +} +.markdown-section dl { + padding: 0; +} +.markdown-section dl dt { + padding: 0; + margin-top: 0.85em; + font-style: italic; + font-weight: 700; +} +.markdown-section dl dd { + padding: 0 0.85em; + margin-bottom: 0.85em; +} +.markdown-section dd { + margin-left: 0; +} +.markdown-section .glossary-term { + cursor: help; + text-decoration: underline; +} + +.markdown-section .icon { + box-shadow: none; + margin: 0; + width: 26px; + height: 26px; + transform: translate(0, 40%); + margin-top: -16px; + margin-left: -4px; + margin-right: -4px; +} + +.docBlocks { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 1em; + grid-row-gap: 1em; + grid-auto-rows: 1fr; + margin: 1em; +} + +.docBlocks a { + position: relative; + padding: 1em 1.5em 1.5em 1em; + overflow: hidden; + background: #efefef; + border-width: 1px; + border-style: solid; + border-radius: 5px; + border-color: #d7d7d7; + box-shadow: 0 0px 0px 0px rgba(0, 0, 0, 0); + color: inherit; + transition: box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out; +} + +.docBlocks a:hover { + border: #c0c0c0 1px solid; + box-shadow: 0 2px 3px 1px rgba(0, 0, 0, 0.1); + text-decoration: none; +} + +.docBlocks a .docBlock { + position: relative; + z-index: 10; +} + +.docBlocks a .material-icons { + position: absolute; + z-index: 1; + font-size: 36px; + opacity: 0.06; + top: 70%; + left: 80%; + transform: translate(-50%, -50%) scale(3) rotate(30deg); + transition: transform 0.2s ease-in-out, right 0.2s ease-in-out, + top 0.2s ease-in-out, left 0.2s ease-in-out; +} +.docBlocks a:hover .material-icons { + top: 60%; + left: 60%; + transform: scale(7) rotate(40deg); +} + +.docBlock h2 { + margin: 0 0 0.5em 0; + color: var(--docsearch-primary-color); + font-size: 1.5em; + font-weight: 700; + line-height: 1.2; +} + +@media only screen and (max-width: 1100px) { + .docBlocks { + grid-template-columns: 1fr 1fr; + } +} + +@media only screen and (max-width: 735px) { + .docBlocks { + display: block; + margin: 0; + } + .docBlocks a { + display: block; + margin-bottom: 1em; + } + .docBlock h2 { + margin: 0 0 0.2em 0; + } + .docBlocks a .material-icons { + left: auto; + top: 50%; + right: -16px; + transform: translate(-50%, -50%) scale(3.5) rotate(30deg); + } + .docBlocks a:hover .material-icons { + left: auto; + top: 50%; + right: 16px; + transform: translate(-50%, -50%) scale(2) rotate(0deg); + } +} + +/* Documentation summary navigation tweaks */ + +.react-admin-logo { + margin: 0 0.5em 0 1em; + display: none; + padding: 0.75em 0; + height: 100%; +} +body.no-sidebar .react-admin-logo { + display: block; +} +.react-admin-logo svg { + height: 100%; + width: auto; + aspect-ratio: 1; +} +.react-admin-logo:hover svg { + opacity: 1; +} +body.no-sidebar .react-admin-logo { + display: block; +} +body.no-sidebar .sidenav-trigger { + display: none; +} + +/* Prism overrides */ +/* Added the container selector to have a greater specificity */ +.container .token.operator, +.container .token.entity, +.container .token.url, +.container .language-css .token.string, +.container .style .token.string { + color: #9a6e3a; + background: none; +} + +.pages-index { + column-count: 3; +} +.pages-index ul { + padding-left: 0; +} +.pages-index ul > li { + list-style-type: none; + line-height: 1.2em; +} + +.pages-index code { + font-size: 0.8em; + background: none !important; +} + +#docsearch .DocSearch-Button { + transition: width 0.2s ease-in-out; +} + +@media only screen and (max-width: 1500px) { + #docsearch .DocSearch-Button { + width: 200px !important; + } +} + +.news { + display: inline; + margin: 0 15px; + padding: 4px 8px; + border-radius: 4px; + border: solid 1px #368fe7; + background: #368fe7; + color: #fff; +} + +.news-mobile { + margin-right: 16px; +} +@media only screen and (min-width: 991px) { + .news-mobile { + display: none; + } +} +@media only screen and (max-width: 600px) { + .news-mobile { + display: none; + } +} + +.marmelab-language-switcher-tabs { + display: flex; + gap: 1rem; + justify-content: end; +} + +.language-switcher { + background-color: #f5f2f0; + padding: 0.5rem 1rem; + transition: all 0.2s ease-in-out; +} + +.language-switcher.active { + background-color: #f5f2f0; + text-decoration: none !important; +} + +/* Auth and Data Provider icons */ + +.providers-list img { + width: 25px !important; + margin: 2px 10px 2px 0px !important; + box-shadow: none !important; + vertical-align: middle; +} +.providers-list .flex { + display: flex !important; + text-align: -webkit-match-parent !important; + align-items: center !important; +} +.providers-list .avatar { + display: flex; + align-items: center; + justify-content: center; + background-color: DarkGray; + width: 25px; + height: 25px; + margin: 2px 10px 2px 0px; + border-radius: 100%; + font-size: 12px; +} +.providers-list ul { + padding-left: 0; +} +.providers-list ul > li { + list-style-type: none; + max-height: 2em; +} diff --git a/docs/css/style-v21.css b/docs/css/style-v21.css new file mode 100644 index 00000000000..3577e73e306 --- /dev/null +++ b/docs/css/style-v21.css @@ -0,0 +1,758 @@ +/* Layout */ + +main > .container { + padding-top: 50px; +} +main > .container .markdown-section { + max-width: 740px; + margin: 0 auto; +} +@media only screen and (min-width: 992px) { + body:not(.no-sidebar) > header, + body:not(.no-sidebar) > main, + body:not(.no-sidebar) > footer { + padding-left: 300px; + } +} +@media only screen and (max-width: 992px) { + body > header, + body > main, + body > footer { + padding-left: 0; + } +} + +@media only screen and (min-width: 601px) { + body { + line-height: 1.6; + font-size: 16px; + -webkit-font-smoothing: antialiased; + } + main > .container { + width: 100%; + padding-left: 1em; + padding-right: 1em; + } +} + +/* Sticky TOC */ + +.sticker-container { + position: relative; +} +.toc-container { + position: sticky; + align-self: start; + top: 10px; + padding-left: 1em; +} +.toc { + overflow-y: auto; + max-height: calc( + 100vh - 114px + ); /* 104px = 50px container top padding + 64px navbar height */ +} +.toc.is-position-fixed { + position: static !important; + max-height: calc( + 100vh - 10px + ); /* container top padding */ +} + +/* Navigation */ + +nav { + background: linear-gradient(145deg, #027be3 11%, #1a237e 75%); +} +nav ul#nav-mobile a { + font-family: 'Roboto', sans-serif; + font-size: 16px; +} + +nav ul a { + padding: 0 12px; +} + +nav ul li.social a { + padding: 0 6px; +} + +nav ul li:nth-child(5) { + padding-left: 6px; +} + +nav ul li:nth-child(7) { + padding-right: 6px; +} +.sidenav { + height: 100%; + padding-bottom: 1em; +} + +.sidenav.sidenav-fixed li { + line-height: 44px; +} + +.sidenav li.logo { + text-align: center; + margin-top: 1em; +} + +.sidenav li.logo a { + height: auto; +} + +.sidenav li.logo img { + width: 50px; +} + +.sidenav li.version { + text-align: center; + padding: 0.5em 0 1em 0; +} + +.sidenav li.version li { + min-height: auto; +} + +.sidenav li.version .dropdown-trigger { + margin: 0 auto; + display: inline-block; + padding: 0 10px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + width: 70%; + height: 2em; +} + +.sidenav li.version .dropdown-trigger .caret { + position: relative; + top: 10px; + fill: rgba(0, 0, 0, 0.6); +} + +.sidenav ul { + padding: 0.5em 0 0.5em 1em; +} + +.sidenav ul div { + text-transform: uppercase; + font-weight: bold; + font-size: 0.8em; +} + +.sidenav li > a { + height: 1.6em; + line-height: 1.6em; + padding: 0 0 0 1em; + font-size: 1em; + font-weight: normal; +} + +@media only screen and (max-width: 992px) { + .sidenav li > a { + height: 1.7em; + line-height: 1.7em; + padding: 0 0 0 1em; + font-size: 1.2em; + font-weight: normal; + } +} + +.sidenav.sidenav-fixed ul.collapsible-accordion a.collapsible-header { + padding: 0 30px; +} + +.sidenav.sidenav-fixed ul.collapsible-accordion .collapsible-body li a { + font-weight: 400; + padding: 0 37.5px 0 45px; +} + +ul.sidenav code { + font-size: 0.9em; + font-family: Menlo, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; +} + +.sidenav img.premium { + width: 23px; + height: 23px; + vertical-align: middle; + box-shadow: none; +} + +.switch label input[type=checkbox]:checked+.lever { + background-color: #85b3df; +} + +.switch label .lever:before { + background-color: rgba(38,77,166,0.15); +} + +.switch label input[type=checkbox]:checked+.lever:after { + background-color: #145dc2; +} + +/* Table of contents */ + +.table-of-contents { + overflow-y: auto; + height: calc(100% - 75px); +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 14px; + border-left: 2px solid #1a237e; +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 15px; + border-left: 1px solid #1a237e; +} + +.table-of-contents a { + color: rgba(0, 0, 0, 0.55); + font-weight: 400; +} + +.markdown-section { + display: block; + word-wrap: break-word; + overflow: auto; + color: #333; + line-height: 1.7; + text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; +} + +.markdown-section * { + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.markdown-section *:focus { + outline: none; +} + +.markdown-section > :first-child { + margin-top: 0 !important; +} + +.markdown-section > :last-child { + margin-bottom: 0 !important; +} + +.markdown-section blockquote, +.markdown-section code, +.markdown-section figure, +.markdown-section img, +.markdown-section pre, +.markdown-section table, +.markdown-section tr { + page-break-inside: avoid; +} + +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5, +.markdown-section p { + orphans: 3; + widows: 3; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5 { + page-break-after: avoid; +} + +.markdown-section b, +.markdown-section strong { + font-weight: 700; +} + +.markdown-section em { + font-style: italic; +} + +.markdown-section blockquote, +.markdown-section dl, +.markdown-section ol, +.markdown-section p, +.markdown-section table, +.markdown-section ul { + margin-top: 0; + margin-bottom: 0.85em; +} + +.markdown-section ul > li { + list-style-type: disc; +} + +.markdown-section a { + color: #4183c4; + text-decoration: none; + background: 0 0; +} + +.markdown-section a code { + color: #4183c4; +} + +.markdown-section a:active, +.markdown-section a:focus, +.markdown-section a:hover { + text-decoration: underline; +} + +.markdown-section .highlight { + margin-bottom: 1em; +} + +.marmelab-language-switcher-tabs { + margin-top: -0.5em; +} + +@media only screen and (max-width: 992px) { + img:not(.no-shadow) { + width: 100%; + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.22); + } +} + +.markdown-section img, +.markdown-section video { + max-width: 100%; +} + +@media only screen and (min-width: 601px) { + .markdown-section img, + .markdown-section video { + max-width: 90%; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.24); + border-radius: 2px; + margin: 1rem; + } + .markdown-section img.no-shadow, + .markdown-section video.no-shadow { + max-width: 90%; + box-shadow: none; + border-radius: 0; + margin: 1rem; + } +} + +.markdown-section hr { + height: 4px; + padding: 0; + margin: 1.7em 0; + overflow: hidden; + background-color: #e7e7e7; + border: none; +} + +.markdown-section hr:after, +.markdown-section hr:before { + display: table; + content: ' '; +} + +.markdown-section hr:after { + clear: both; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3 { + margin-top: 1.275em; + margin-bottom: 0.85em; + font-weight: 700; +} + +.markdown-section h1 { + font-size: 2.5em; +} + +.markdown-section h2 { + font-size: 1.75em; +} +.markdown-section h3 { + margin-top: 1.5em; + font-size: 1.25em; +} + +.markdown-section h4 { + margin-top: 1.25em; + font-size: 1em; + font-weight: bold; +} + +.markdown-section code, +.markdown-section pre { + font-family: Menlo, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + direction: ltr; + margin: 0; + padding: 0; + border: none; + color: inherit; +} + +.markdown-section pre { + overflow: auto; + word-wrap: normal; + margin: 0; + padding: 0.85em 1em; + margin-bottom: 1.275em; + background: #f7f7f7; + line-height: 1.3; +} +.markdown-section pre[class*='language-'] { + line-height: 1.3; +} +.markdown-section pre > code { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + font-size: 0.85em; + white-space: pre; + background: 0 0; +} +.markdown-section .highlight > pre > code { + font-size: 14px; +} +.markdown-section pre > code:after, +.markdown-section pre > code:before { + content: normal; +} +.markdown-section code { + padding: 0.2em; + margin: 0; + font-size: 0.85em; +} +.markdown-section p > code { + font-size: 14px; + background-color: #f7f7f7; +} +.markdown-section code:after, +.markdown-section code:before { + letter-spacing: -0.2em; + content: '\00a0'; +} +.markdown-section table { + display: table; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; +} +.markdown-section table td, +.markdown-section table th { + padding: 6px 13px; + border: 1px solid #ddd; +} +.markdown-section table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} +.markdown-section table tr:nth-child(2n) { + background-color: #f8f8f8; +} +.markdown-section table th { + font-weight: 700; +} +.markdown-section ol, +.markdown-section ul { + padding: 0; + margin: 0; + margin-bottom: 0.85em; + padding-left: 2em; +} +.markdown-section ol ol, +.markdown-section ol ul, +.markdown-section ul ol, +.markdown-section ul ul { + margin-top: 0; + margin-bottom: 0; +} +.markdown-section ol ol { + list-style-type: lower-roman; +} +.markdown-section blockquote { + margin: 0; + margin-bottom: 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; +} +.markdown-section blockquote:first-child { + margin-top: 0; +} +.markdown-section blockquote:last-child { + margin-bottom: 0; +} +.markdown-section dl { + padding: 0; +} +.markdown-section dl dt { + padding: 0; + margin-top: 0.85em; + font-style: italic; + font-weight: 700; +} +.markdown-section dl dd { + padding: 0 0.85em; + margin-bottom: 0.85em; +} +.markdown-section dd { + margin-left: 0; +} +.markdown-section .glossary-term { + cursor: help; + text-decoration: underline; +} + +.markdown-section .icon { + box-shadow: none; + margin: 0; + width: 26px; + height: 26px; + transform: translate(0, 40%); + margin-top: -16px; + margin-left: -4px; + margin-right: -4px; +} + +.docBlocks { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 1em; + grid-row-gap: 1em; + grid-auto-rows: 1fr; + margin: 1em; +} + +.docBlocks a { + position: relative; + padding: 1em 1.5em 1.5em 1em; + overflow: hidden; + background: #efefef; + border-width: 1px; + border-style: solid; + border-radius: 5px; + border-color: #d7d7d7; + box-shadow: 0 0px 0px 0px rgba(0, 0, 0, 0); + color: inherit; + transition: box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out; +} + +.docBlocks a:hover { + border: #c0c0c0 1px solid; + box-shadow: 0 2px 3px 1px rgba(0, 0, 0, 0.1); + text-decoration: none; +} + +.docBlocks a .docBlock { + position: relative; + z-index: 10; +} + +.docBlocks a .material-icons { + position: absolute; + z-index: 1; + font-size: 36px; + opacity: 0.06; + top: 70%; + left: 80%; + transform: translate(-50%, -50%) scale(3) rotate(30deg); + transition: transform 0.2s ease-in-out, right 0.2s ease-in-out, + top 0.2s ease-in-out, left 0.2s ease-in-out; +} +.docBlocks a:hover .material-icons { + top: 60%; + left: 60%; + transform: scale(7) rotate(40deg); +} + +.docBlock h2 { + margin: 0 0 0.5em 0; + color: var(--docsearch-primary-color); + font-size: 1.5em; + font-weight: 700; + line-height: 1.2; +} + +@media only screen and (max-width: 1100px) { + .docBlocks { + grid-template-columns: 1fr 1fr; + } +} + +@media only screen and (max-width: 735px) { + .docBlocks { + display: block; + margin: 0; + } + .docBlocks a { + display: block; + margin-bottom: 1em; + } + .docBlock h2 { + margin: 0 0 0.2em 0; + } + .docBlocks a .material-icons { + left: auto; + top: 50%; + right: -16px; + transform: translate(-50%, -50%) scale(3.5) rotate(30deg); + } + .docBlocks a:hover .material-icons { + left: auto; + top: 50%; + right: 16px; + transform: translate(-50%, -50%) scale(2) rotate(0deg); + } +} + +/* Documentation summary navigation tweaks */ + +.react-admin-logo { + margin: 0 0.5em 0 1em; + display: none; + padding: 0.75em 0; + height: 100%; +} +body.no-sidebar .react-admin-logo { + display: block; +} +.react-admin-logo svg { + height: 100%; + width: auto; + aspect-ratio: 1; +} +.react-admin-logo:hover svg { + opacity: 1; +} +body.no-sidebar .react-admin-logo { + display: block; +} +body.no-sidebar .sidenav-trigger { + display: none; +} + +/* Prism overrides */ +/* Added the container selector to have a greater specificity */ +.container .token.operator, +.container .token.entity, +.container .token.url, +.container .language-css .token.string, +.container .style .token.string { + color: #9a6e3a; + background: none; +} + +.pages-index { + column-count: 3; +} +.pages-index ul { + padding-left: 0; +} +.pages-index ul > li { + list-style-type: none; + line-height: 1.2em; +} + +.pages-index code { + font-size: 0.8em; + background: none !important; +} + +#docsearch .DocSearch-Button { + transition: width 0.2s ease-in-out; +} + +@media only screen and (max-width: 1500px) { + #docsearch .DocSearch-Button { + width: 200px !important; + } +} + +.news { + display: inline; + margin: 0 15px; + padding: 4px 8px; + border-radius: 4px; + border: solid 1px #368fe7; + background: #368fe7; + color: #fff; +} + +.news-mobile { + margin-right: 16px; +} +@media only screen and (min-width: 991px) { + .news-mobile { + display: none; + } +} +@media only screen and (max-width: 600px) { + .news-mobile { + display: none; + } +} + +.marmelab-language-switcher-tabs { + display: flex; + gap: 1rem; + justify-content: end; +} + +.language-switcher { + background-color: #eff1f5; + padding: 0.5rem 1rem; + transition: all 0.2s ease-in-out; +} + +.language-switcher.active { + background-color: #eff1f5; + text-decoration: none !important; +} + +/* Auth and Data Provider icons */ + +.providers-list img { + width: 25px !important; + margin: 2px 10px 2px 0px !important; + box-shadow: none !important; + vertical-align: middle; +} +.providers-list .flex { + display: flex !important; + text-align: -webkit-match-parent !important; + align-items: center !important; +} +.providers-list .avatar { + display: flex; + align-items: center; + justify-content: center; + background-color: DarkGray; + width: 25px; + height: 25px; + margin: 2px 10px 2px 0px; + border-radius: 100%; + font-size: 12px; +} +.providers-list ul { + padding-left: 0; +} +.providers-list ul > li { + list-style-type: none; + max-height: 2em; +} diff --git a/docs/css/style-v22.css b/docs/css/style-v22.css new file mode 100644 index 00000000000..60941be4e44 --- /dev/null +++ b/docs/css/style-v22.css @@ -0,0 +1,768 @@ +/* Layout */ + +main > .container { + padding-top: 50px; +} +main > .container .markdown-section { + max-width: 740px; + margin: 0 auto; +} +@media only screen and (min-width: 992px) { + body:not(.no-sidebar) > header, + body:not(.no-sidebar) > main, + body:not(.no-sidebar) > footer { + padding-left: 300px; + } +} +@media only screen and (max-width: 992px) { + body > header, + body > main, + body > footer { + padding-left: 0; + } +} + +@media only screen and (min-width: 601px) { + body { + line-height: 1.6; + font-size: 16px; + -webkit-font-smoothing: antialiased; + } + main > .container { + width: 100%; + padding-left: 1em; + padding-right: 1em; + } +} + +/* Sticky TOC */ + +.sticker-container { + position: relative; +} +.toc-container { + position: sticky; + align-self: start; + top: 10px; + padding-left: 1em; +} +.toc { + overflow-y: auto; + max-height: calc( + 100vh - 114px + ); /* 104px = 50px container top padding + 64px navbar height */ +} +.toc.is-position-fixed { + position: static !important; + max-height: calc( + 100vh - 10px + ); /* container top padding */ +} + +/* Navigation */ + +nav { + background: linear-gradient(145deg, #027be3 11%, #1a237e 75%); +} +nav ul#nav-mobile a { + font-family: 'Roboto', sans-serif; + font-size: 16px; +} + +nav ul a { + padding: 0 12px; +} + +nav ul li.social a { + padding: 0 6px; +} + +nav ul li:nth-child(5) { + padding-left: 6px; +} + +nav ul li:nth-child(7) { + padding-right: 6px; +} +.sidenav { + height: 100%; + padding-bottom: 1em; +} + +.sidenav.sidenav-fixed li { + line-height: 44px; +} + +.sidenav li.logo { + text-align: center; + margin-top: 1em; +} + +.sidenav li.logo a { + height: auto; +} + +.sidenav li.logo img { + width: 50px; +} + +.sidenav li.version { + text-align: center; + padding: 0.5em 0 1em 0; +} + +.sidenav li.version li { + min-height: auto; +} + +.sidenav li.version .dropdown-trigger { + margin: 0 auto; + display: inline-block; + padding: 0 10px; + border-bottom: 1px solid rgba(0, 0, 0, 0.2); + width: 70%; + height: 2em; +} + +.sidenav li.version .dropdown-trigger .caret { + position: relative; + top: 10px; + fill: rgba(0, 0, 0, 0.6); +} + +.sidenav ul { + padding: 0.5em 0 0.5em 1em; +} + +.sidenav ul div { + text-transform: uppercase; + font-weight: bold; + font-size: 0.8em; +} + +.sidenav li > a { + height: 1.6em; + line-height: 1.6em; + padding: 0 0 0 1em; + font-size: 1em; + font-weight: normal; +} + +@media only screen and (max-width: 992px) { + .sidenav li > a { + height: 1.7em; + line-height: 1.7em; + padding: 0 0 0 1em; + font-size: 1.2em; + font-weight: normal; + } +} + +.sidenav.sidenav-fixed ul.collapsible-accordion a.collapsible-header { + padding: 0 30px; +} + +.sidenav.sidenav-fixed ul.collapsible-accordion .collapsible-body li a { + font-weight: 400; + padding: 0 37.5px 0 45px; +} + +ul.sidenav code { + font-size: 0.9em; + font-family: Menlo, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; +} + +.sidenav img.premium { + width: 23px; + height: 23px; + vertical-align: middle; + box-shadow: none; +} + +.switch label input[type=checkbox]:checked+.lever { + background-color: #85b3df; +} + +.switch label .lever:before { + background-color: rgba(38,77,166,0.15); +} + +.switch label input[type=checkbox]:checked+.lever:after { + background-color: #145dc2; +} + +/* Table of contents */ + +.table-of-contents { + overflow-y: auto; + height: calc(100% - 75px); +} + +.table-of-contents a.active { + font-weight: 500; + padding-left: 14px; + border-left: 2px solid #1a237e; +} + +.table-of-contents a:hover { + color: #a8a8a8; + padding-left: 15px; + border-left: 1px solid #1a237e; +} + +.table-of-contents a { + color: rgba(0, 0, 0, 0.55); + font-weight: 400; +} + +.markdown-section { + display: block; + word-wrap: break-word; + overflow: auto; + color: #333; + line-height: 1.7; + text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + -moz-text-size-adjust: 100%; +} + +.markdown-section * { + box-sizing: border-box; + -webkit-box-sizing: border-box; +} + +.markdown-section *:focus { + outline: none; +} + +.markdown-section > :first-child { + margin-top: 0 !important; +} + +.markdown-section > :last-child { + margin-bottom: 0 !important; +} + +.markdown-section blockquote, +.markdown-section code, +.markdown-section figure, +.markdown-section img, +.markdown-section pre, +.markdown-section table, +.markdown-section tr { + page-break-inside: avoid; +} + +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5, +.markdown-section p { + orphans: 3; + widows: 3; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3, +.markdown-section h4, +.markdown-section h5 { + page-break-after: avoid; +} + +.markdown-section b, +.markdown-section strong { + font-weight: 700; +} + +.markdown-section em { + font-style: italic; +} + +.markdown-section blockquote, +.markdown-section dl, +.markdown-section ol, +.markdown-section p, +.markdown-section table, +.markdown-section ul { + margin-top: 0; + margin-bottom: 0.85em; +} + +.markdown-section ul > li { + list-style-type: disc; +} + +.markdown-section a { + color: #4183c4; + text-decoration: none; + background: 0 0; +} + +.markdown-section a code { + color: #4183c4; +} + +.markdown-section a:active, +.markdown-section a:focus, +.markdown-section a:hover { + text-decoration: underline; +} + +.markdown-section .highlight { + margin-bottom: 1em; +} + +.marmelab-language-switcher-tabs { + margin-top: -0.5em; +} + +@media only screen and (max-width: 992px) { + img:not(.no-shadow) { + width: 100%; + box-shadow: 1px 1px 5px 0px rgba(0, 0, 0, 0.22); + } +} + +.markdown-section img, +.markdown-section video { + max-width: 100%; +} + +@media only screen and (min-width: 601px) { + .markdown-section img, + .markdown-section video { + max-width: 90%; + box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.24); + border-radius: 2px; + margin: 1rem; + } + .markdown-section img.no-shadow, + .markdown-section video.no-shadow { + max-width: 90%; + box-shadow: none; + border-radius: 0; + margin: 1rem; + } +} + +.markdown-section hr { + height: 4px; + padding: 0; + margin: 1.7em 0; + overflow: hidden; + background-color: #e7e7e7; + border: none; +} + +.markdown-section hr:after, +.markdown-section hr:before { + display: table; + content: ' '; +} + +.markdown-section hr:after { + clear: both; +} + +.markdown-section h1, +.markdown-section h2, +.markdown-section h3 { + margin-top: 1.275em; + margin-bottom: 0.85em; + font-weight: 700; +} + +.markdown-section h1 { + font-size: 2.5em; +} + +.markdown-section h2 { + font-size: 1.75em; +} +.markdown-section h3 { + margin-top: 1.5em; + font-size: 1.25em; +} + +.markdown-section h4 { + margin-top: 1.25em; + font-size: 1em; + font-weight: bold; +} + +.markdown-section code, +.markdown-section pre { + font-family: Menlo, Consolas, Monaco, "Andale Mono", "Ubuntu Mono", monospace; + direction: ltr; + margin: 0; + padding: 0; + border: none; + color: inherit; +} + +.markdown-section pre { + overflow: auto; + word-wrap: normal; + margin: 0; + padding: 0.85em 1em; + margin-bottom: 1.275em; + background: #f7f7f7; + line-height: 1.3; +} +.markdown-section pre[class*='language-'] { + line-height: 1.3; +} +.markdown-section pre > code { + display: inline; + max-width: initial; + padding: 0; + margin: 0; + overflow: initial; + line-height: inherit; + font-size: 0.85em; + white-space: pre; + background: 0 0; +} +.markdown-section .highlight > pre > code { + font-size: 14px; +} +.markdown-section pre > code:after, +.markdown-section pre > code:before { + content: normal; +} +.markdown-section code { + padding: 0.2em; + margin: 0; + font-size: 0.85em; +} +.markdown-section p > code { + font-size: 14px; + background-color: #f7f7f7; +} +.markdown-section code:after, +.markdown-section code:before { + letter-spacing: -0.2em; + content: '\00a0'; +} +.markdown-section table { + display: table; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; +} +.markdown-section table td, +.markdown-section table th { + padding: 6px 13px; + border: 1px solid #ddd; +} +.markdown-section table tr { + background-color: #fff; + border-top: 1px solid #ccc; +} +.markdown-section table tr:nth-child(2n) { + background-color: #f8f8f8; +} +.markdown-section table th { + font-weight: 700; +} +.markdown-section ol, +.markdown-section ul { + padding: 0; + margin: 0; + margin-bottom: 0.85em; + padding-left: 2em; +} +.markdown-section ol ol, +.markdown-section ol ul, +.markdown-section ul ol, +.markdown-section ul ul { + margin-top: 0; + margin-bottom: 0; +} +.markdown-section ol ol { + list-style-type: lower-roman; +} +.markdown-section blockquote { + margin: 0; + margin-bottom: 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; +} +.markdown-section blockquote:first-child { + margin-top: 0; +} +.markdown-section blockquote:last-child { + margin-bottom: 0; +} +.markdown-section dl { + padding: 0; +} +.markdown-section dl dt { + padding: 0; + margin-top: 0.85em; + font-style: italic; + font-weight: 700; +} +.markdown-section dl dd { + padding: 0 0.85em; + margin-bottom: 0.85em; +} +.markdown-section dd { + margin-left: 0; +} +.markdown-section .glossary-term { + cursor: help; + text-decoration: underline; +} + +.markdown-section .icon { + box-shadow: none; + margin: 0; + width: 26px; + height: 26px; + transform: translate(0, 40%); + margin-top: -16px; + margin-left: -4px; + margin-right: -4px; +} + +.docBlocks { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 1em; + grid-row-gap: 1em; + grid-auto-rows: 1fr; + margin: 1em; +} + +.docBlocks a { + position: relative; + padding: 1em 1.5em 1.5em 1em; + overflow: hidden; + background: #efefef; + border-width: 1px; + border-style: solid; + border-radius: 5px; + border-color: #d7d7d7; + box-shadow: 0 0px 0px 0px rgba(0, 0, 0, 0); + color: inherit; + transition: box-shadow 0.2s ease-in-out, border-color 0.2s ease-in-out; +} + +.docBlocks a:hover { + border: #c0c0c0 1px solid; + box-shadow: 0 2px 3px 1px rgba(0, 0, 0, 0.1); + text-decoration: none; +} + +.docBlocks a .docBlock { + position: relative; + z-index: 10; +} + +.docBlocks a .material-icons { + position: absolute; + z-index: 1; + font-size: 36px; + opacity: 0.06; + top: 70%; + left: 80%; + transform: translate(-50%, -50%) scale(3) rotate(30deg); + transition: transform 0.2s ease-in-out, right 0.2s ease-in-out, + top 0.2s ease-in-out, left 0.2s ease-in-out; +} +.docBlocks a:hover .material-icons { + top: 60%; + left: 60%; + transform: scale(7) rotate(40deg); +} + +.docBlock h2 { + margin: 0 0 0.5em 0; + color: var(--docsearch-primary-color); + font-size: 1.5em; + font-weight: 700; + line-height: 1.2; +} + +@media only screen and (max-width: 1100px) { + .docBlocks { + grid-template-columns: 1fr 1fr; + } +} + +@media only screen and (max-width: 735px) { + .docBlocks { + display: block; + margin: 0; + } + .docBlocks a { + display: block; + margin-bottom: 1em; + } + .docBlock h2 { + margin: 0 0 0.2em 0; + } + .docBlocks a .material-icons { + left: auto; + top: 50%; + right: -16px; + transform: translate(-50%, -50%) scale(3.5) rotate(30deg); + } + .docBlocks a:hover .material-icons { + left: auto; + top: 50%; + right: 16px; + transform: translate(-50%, -50%) scale(2) rotate(0deg); + } +} + +/* Documentation summary navigation tweaks */ + +.react-admin-logo { + margin: 0 0.5em 0 1em; + display: none; + padding: 0.75em 0; + height: 100%; +} +body.no-sidebar .react-admin-logo { + display: block; +} +.react-admin-logo svg { + height: 100%; + width: auto; + aspect-ratio: 1; +} +.react-admin-logo:hover svg { + opacity: 1; +} +body.no-sidebar .react-admin-logo { + display: block; +} +body.no-sidebar .sidenav-trigger { + display: none; +} + +/* Prism overrides */ +/* Added the container selector to have a greater specificity */ +.container .token.operator, +.container .token.entity, +.container .token.url, +.container .language-css .token.string, +.container .style .token.string { + color: #9a6e3a; + background: none; +} + +.pages-index { + column-count: 3; +} +.pages-index ul { + padding-left: 0; +} +.pages-index ul > li { + list-style-type: none; + line-height: 1.2em; +} + +.pages-index code { + font-size: 0.8em; + background: none !important; +} + +#docsearch .DocSearch-Button { + transition: width 0.2s ease-in-out; +} + +@media only screen and (max-width: 1500px) { + #docsearch .DocSearch-Button { + width: 200px !important; + } +} + +.news { + display: inline; + margin: 0 15px; + padding: 4px 8px; + border-radius: 4px; + border: solid 1px #368fe7; + background: #368fe7; + color: #fff; +} + +.news-mobile { + margin-right: 16px; +} +@media only screen and (min-width: 991px) { + .news-mobile { + display: none; + } +} +@media only screen and (max-width: 600px) { + .news-mobile { + display: none; + } +} + +.marmelab-language-switcher-tabs { + display: flex; + gap: 1rem; + justify-content: end; +} + +.language-switcher { + background-color: #eff1f5; + padding: 0.5rem 1rem; + transition: all 0.2s ease-in-out; +} + +.language-switcher.active { + background-color: #eff1f5; + text-decoration: none !important; +} + +/* Auth and Data Provider icons */ + +.providers-list img { + width: 25px !important; + margin: 2px 10px 2px 0px !important; + box-shadow: none !important; + vertical-align: middle; +} +.providers-list .flex { + display: flex !important; + text-align: -webkit-match-parent !important; + align-items: center !important; +} +.providers-list .avatar { + display: flex; + align-items: center; + justify-content: center; + background-color: DarkGray; + width: 25px; + height: 25px; + margin: 2px 10px 2px 0px; + border-radius: 100%; + font-size: 12px; +} +.providers-list ul { + padding-left: 0; +} +.providers-list ul > li { + list-style-type: none; + max-height: 2em; +} + +#tip-container { + margin: 0 auto; + max-width: 740px; +} +#tip video, #tip img { + display: block; + margin: 0 auto; + max-width: 100%; +} \ No newline at end of file diff --git a/docs/css/style.css b/docs/css/style.css deleted file mode 100644 index 81a1cf5f2c3..00000000000 --- a/docs/css/style.css +++ /dev/null @@ -1,555 +0,0 @@ -.book-summary { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - position: absolute; - top: 0; - left: -300px; - bottom: 0; - z-index: 1; - overflow-y: auto; - width: 300px; - color: #364149; - background: #fafafa; - border-right: 1px solid rgba(0, 0, 0, .07); - -webkit-transition: left 250ms ease; - -moz-transition: left 250ms ease; - -o-transition: left 250ms ease; - transition: left 250ms ease -} -.book-summary ul.summary { - list-style: none; - margin: 0; - padding: 0; - -webkit-transition: top .5s ease; - -moz-transition: top .5s ease; - -o-transition: top .5s ease; - transition: top .5s ease -} -.book-summary ul.summary li { - list-style: none -} -.book-summary ul.summary li.header { - padding: 10px 15px; - padding-top: 20px; - text-transform: uppercase; - color: #939da3 -} -.book-summary ul.summary li.divider { - height: 1px; - margin: 7px 0; - overflow: hidden; - background: rgba(0, 0, 0, .07) -} -.book-summary ul.summary li i.fa-check { - display: none; - position: absolute; - right: 9px; - top: 16px; - font-size: 9px; - color: #3c3 -} -.book-summary ul.summary li.done>a { - color: #364149; - font-weight: 400 -} -.book-summary ul.summary li.done>a i { - display: inline -} -.book-summary ul.summary li a, -.book-summary ul.summary li span { - display: block; - padding: 10px 15px; - border-bottom: none; - color: #364149; - background: 0 0; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; - position: relative -} -.book-summary ul.summary li a:hover { - text-decoration: underline -} -.book-summary ul.summary li.active>a { - color: #008cff; - background: 0 0; - text-decoration: none -} -.book-summary ul.summary li ul { - padding-left: 20px -} -@media (max-width: 600px) { - .book-summary { - width: calc(100% - 60px); - bottom: 0; - left: -100% - } -} -.book.with-summary .book-summary { - left: 0 -} -.book.without-animation .book-summary { - -webkit-transition: none!important; - -moz-transition: none!important; - -o-transition: none!important; - transition: none!important -} -.book { - position: relative; - width: 100%; - height: 100% -} -@media (min-width: 600px) { - .book.with-summary .book-body { - left: 300px - } -} -@media (max-width: 600px) { - .book.with-summary { - overflow: hidden - } - .book.with-summary .book-summary { - width: 0; - overflow-x: hidden; - transition: all 250ms ease-out - } - .book.with-summary .book-summary.open { - position: fixed; - width: 100%; - height: 100%; - padding-top: 30px - } -} -.book.without-animation .book-body { - -webkit-transition: none!important; - -moz-transition: none!important; - -o-transition: none!important; - transition: none!important -} - -.page-menu { - background: #fafafa; - display: none; - padding: 10px 15px; - box-shadow: rgba(0, 0, 0, 0.12) 0px 1px 6px, rgba(0, 0, 0, 0.12) 0px 1px 4px; -} - -@media (max-width: 600px) { - .page-menu { - display: flex; - position: fixed; - z-index: 1; - width: 100% - } -} -.page-menu button { - color: #939da3; - cursor: pointer; - border: none; - background: none; - text-transform: uppercase -} - -.page-menu button img { - width: 16px; - height: 16px; -} - - -.book-body { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - overflow-y: auto; - color: #000; - background: #fff; - -webkit-transition: left 250ms ease; - -moz-transition: left 250ms ease; - -o-transition: left 250ms ease; - transition: left 250ms ease -} -.book-body .body-inner { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; - overflow-y: auto -} -@media (max-width: 1240px) { - .book-body { - -webkit-transition: -webkit-transform 250ms ease; - -moz-transition: -moz-transform 250ms ease; - -o-transition: -o-transform 250ms ease; - transition: transform 250ms ease; - padding-bottom: 20px - } - .book-body .body-inner { - position: static; - min-height: calc(100% - 50px) - } -} -.page-wrapper { - position: relative; - outline: 0 -} -.page-inner { - position: relative; - max-width: 800px; - margin: 0 auto; - padding: 20px 15px 40px 15px -} -@media (max-width: 600px) { - .page-inner { - padding: 40px 15px 40px 15px - } -} - -.page-inner .btn-group .btn { - border-radius: 0; - background: #eee; - border: 0 -} -.buttons:after, -.buttons:before { - content: " "; - display: table; - line-height: 0 -} -.buttons:after { - clear: both -} -.button { - border: 0; - background-color: transparent; - background: #eee; - color: #666; - width: 100%; - text-align: center; - float: left; - line-height: 1.42857143; - padding: 8px 4px -} -.button:hover { - color: #444 -} -.button.size-2 { - width: 50% -} -.button.size-3 { - width: 33% -} -.markdown-section { - display: block; - word-wrap: break-word; - overflow: hidden; - color: #333; - line-height: 1.7; - text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - -moz-text-size-adjust: 100% -} -.markdown-section * { - box-sizing: border-box; - -webkit-box-sizing: border-box; - font-size: inherit -} -.markdown-section>:first-child { - margin-top: 0!important -} -.markdown-section>:last-child { - margin-bottom: 0!important -} -.markdown-section blockquote, -.markdown-section code, -.markdown-section figure, -.markdown-section img, -.markdown-section pre, -.markdown-section table, -.markdown-section tr { - page-break-inside: avoid -} -.markdown-section h2, -.markdown-section h3, -.markdown-section h4, -.markdown-section h5, -.markdown-section p { - orphans: 3; - widows: 3 -} -.markdown-section h1, -.markdown-section h2, -.markdown-section h3, -.markdown-section h4, -.markdown-section h5 { - page-break-after: avoid -} -.markdown-section b, -.markdown-section strong { - font-weight: 700 -} -.markdown-section em { - font-style: italic -} -.markdown-section blockquote, -.markdown-section dl, -.markdown-section ol, -.markdown-section p, -.markdown-section table, -.markdown-section ul { - margin-top: 0; - margin-bottom: .85em -} -.markdown-section a { - color: #4183c4; - text-decoration: none; - background: 0 0 -} -.markdown-section a:active, -.markdown-section a:focus, -.markdown-section a:hover { - text-decoration: underline -} -.markdown-section img { - max-width: 90%; - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); - border-radius: 2px; - margin: 2rem; -} -.markdown-section hr { - height: 4px; - padding: 0; - margin: 1.7em 0; - overflow: hidden; - background-color: #e7e7e7; - border: none -} -.markdown-section hr:after, -.markdown-section hr:before { - display: table; - content: " " -} -.markdown-section hr:after { - clear: both -} -.markdown-section h1, -.markdown-section h2, -.markdown-section h3 { - margin-top: 1.275em; - margin-bottom: .85em; - font-weight: 700 -} -.markdown-section h1 { - font-size: 2em -} -.markdown-section h2 { - font-size: 1.75em -} -.markdown-section h3 { - margin-top: .85em; - font-size: 1em -} -.markdown-section code, -.markdown-section pre { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - direction: ltr; - margin: 0; - padding: 0; - border: none; - color: inherit -} -.markdown-section pre { - overflow: auto; - word-wrap: normal; - margin: 0; - padding: .85em 1em; - margin-bottom: 1.275em; - background: #f7f7f7 -} -.markdown-section pre>code { - display: inline; - max-width: initial; - padding: 0; - margin: 0; - overflow: initial; - line-height: inherit; - font-size: .85em; - white-space: pre; - background: 0 0 -} -.markdown-section pre>code:after, -.markdown-section pre>code:before { - content: normal -} -.markdown-section code { - padding: .2em; - margin: 0; - font-size: .85em; - background-color: #f7f7f7 -} -.markdown-section code:after, -.markdown-section code:before { - letter-spacing: -.2em; - content: "\00a0" -} -.markdown-section table { - display: table; - width: 100%; - border-collapse: collapse; - border-spacing: 0; - overflow: auto -} -.markdown-section table td, -.markdown-section table th { - padding: 6px 13px; - border: 1px solid #ddd -} -.markdown-section table tr { - background-color: #fff; - border-top: 1px solid #ccc -} -.markdown-section table tr:nth-child(2n) { - background-color: #f8f8f8 -} -.markdown-section table th { - font-weight: 700 -} -.markdown-section ol, -.markdown-section ul { - padding: 0; - margin: 0; - margin-bottom: .85em; - padding-left: 2em -} -.markdown-section ol ol, -.markdown-section ol ul, -.markdown-section ul ol, -.markdown-section ul ul { - margin-top: 0; - margin-bottom: 0 -} -.markdown-section ol ol { - list-style-type: lower-roman -} -.markdown-section blockquote { - margin: 0; - margin-bottom: .85em; - padding: 0 15px; - color: #858585; - border-left: 4px solid #e5e5e5 -} -.markdown-section blockquote:first-child { - margin-top: 0 -} -.markdown-section blockquote:last-child { - margin-bottom: 0 -} -.markdown-section dl { - padding: 0 -} -.markdown-section dl dt { - padding: 0; - margin-top: .85em; - font-style: italic; - font-weight: 700 -} -.markdown-section dl dd { - padding: 0 .85em; - margin-bottom: .85em -} -.markdown-section dd { - margin-left: 0 -} -.markdown-section .glossary-term { - cursor: help; - text-decoration: underline -} -.navigation { - position: absolute; - top: 50px; - bottom: 0; - margin: 0; - max-width: 150px; - min-width: 90px; - display: flex; - justify-content: center; - align-content: center; - flex-direction: column; - font-size: 40px; - color: #ccc; - text-align: center; - -webkit-transition: all 350ms ease; - -moz-transition: all 350ms ease; - -o-transition: all 350ms ease; - transition: all 350ms ease -} -.navigation:hover { - text-decoration: none; - color: #444 -} -.navigation.navigation-next { - right: 0 -} -.navigation.navigation-prev { - left: 0 -} -@media (max-width: 1240px) { - .navigation { - position: static; - top: auto; - max-width: 50%; - width: 50%; - display: inline-block; - float: left - } - .navigation.navigation-unique { - max-width: 100%; - width: 100% - } -} -.book .book-header .font-settings .font-enlarge { - line-height: 30px; - font-size: 1.4em; -} -.book .book-header .font-settings .font-reduce { - line-height: 30px; - font-size: 1em; -} -.book.font-size-2 .book-body .page-inner section { - font-size: 1.6rem; -} -.book.font-family-1 { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-overflow-scrolling: touch; - -webkit-tap-highlight-color: transparent; - -webkit-text-size-adjust: none; - -webkit-touch-callout: none; - -webkit-font-smoothing: antialiased -} -a { - text-decoration: none -} -body, -html { - height: 100% -} -html { - font-size: 62.5% -} -body { - text-rendering: optimizeLegibility; - font-smoothing: antialiased; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - letter-spacing: .2px; - text-size-adjust: 100%; - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100% -} diff --git a/docs/css/tocbot.css b/docs/css/tocbot.css new file mode 100644 index 00000000000..b5b0dd91158 --- /dev/null +++ b/docs/css/tocbot.css @@ -0,0 +1,61 @@ +:root { + --black: #333; + --deepblue: #00023b; +} + +.toc-list-item { + padding-bottom: 8px; + line-height: normal; +} + +.toc-list-item code { + padding-top: 0 !important; + padding-bottom: 0 !important; + line-height: normal; + font-size: 0.9em; +} + +.toc-list-item > ol > li.toc-list-item:first-child { + padding-top: 8px; +} + +.toc-list-item > ol > li.toc-list-item:last-child { + padding-bottom: 0; +} + +.toc-link { + font-size: 0.9em; + color: var(--black) !important; +} + +.toc-link::before { + margin-top: -3px !important; +} + +.toc-link:hover { + color: var(--deepblue) !important; + font-weight: 700; +} + +.toc-link:hover::before { + color: var(--deepblue) !important; + background-color: var(--deepblue); +} + +.toc-link-icon { + position: relative; + top: 3px; + left: 8px; +} + +.is-active-link { + color: var(--deepblue) !important; +} + +.is-active-link::before { + background-color: var(--deepblue) !important; +} + +.is-position-fixed { + margin-top: 0; +} diff --git a/docs/documentation.html b/docs/documentation.html new file mode 100644 index 00000000000..cab7dd1ee4f --- /dev/null +++ b/docs/documentation.html @@ -0,0 +1,367 @@ +--- +--- + +<!doctype html> +<html lang="en-US"> + <head> + <title>React-admin - Documentation + + + + + + + + + + + + + + + + + + + + + + + +
+ {% include nav.html %} +
    + +
  • {% include versions.html %}
  • + {% include_relative navigation.html %} +
+
+ +
+ +
+ + + + + + + + + {% if page.dir contains "doc" %} {% assign version = page.dir | split: + '/' | last %} {% else %} {% assign version = "latest" %} {% endif %} + + + + + + + + + {% include banner_script.html %} + + diff --git a/docs/fetchJson.md b/docs/fetchJson.md new file mode 100644 index 00000000000..cf4e68745eb --- /dev/null +++ b/docs/fetchJson.md @@ -0,0 +1,133 @@ +--- +layout: default +title: "fetchJson" +storybook_path: ra-core-dataprovider-fetch--fetch-json +--- + +# `fetchJson` + +React-admin includes a `fetchJson` utility function to make HTTP calls. It's a wrapper around the browser's `fetch` function, that adds the following features: + +- It adds the `Content-Type='application/json'` header to all non GET requests +- It adds the `Authorization` header with optional parameters +- It makes it easier to add custom headers to all requests +- It handles the JSON decoding of the response +- It handles HTTP errors codes by throwing an `HttpError` + +## Usage + +You can use it to make HTTP calls directly, to build a custom [`dataProvider`](./DataProviders.md), or pass it directly to any `dataProvider` that supports it, such as [`ra-data-simple-rest`](https://github.com/marmelab/react-admin/tree/master/packages/ra-data-simple-rest). + +```jsx +import { fetchUtils, Admin, Resource } from 'react-admin'; +import simpleRestProvider from 'ra-data-simple-rest'; +import { PostList } from './posts'; + +const httpClient = async (url, options = {}) => { + const { status, headers, body, json } = await fetchUtils.fetchJson(url, options); + console.log('fetchJson result', { status, headers, body, json }); + return { status, headers, body, json }; +} +const dataProvider = simpleRestProvider('http://path.to.my.api/', httpClient); + +const App = () => ( + + + +); +``` + +**Tip:** `fetchJson` is included in the `fetchUtils` object exported by the `react-admin` package. + +## Parameters + +`fetchJson(url, options)` expects the following parameters: + +- `url` **string** The URL to fetch +- `options` **Object** The options to pass to the fetch call. Defaults to `{}`. +- `options.user` **Object** The user object, used for the `Authorization` header +- `options.user.token` **string** The token to pass as the `Authorization` header +- `options.user.authenticated` **boolean** Whether the user is authenticated or not (the `Authorization` header will be set only if this is true) +- `options.headers` **Headers** The headers to pass to the fetch call + +## Return Value + +`fetchJson` returns an object with the following properties: + +- `status` **number** The HTTP status code +- `headers` **Headers** The response headers +- `body` **string** The response body +- `json` **Object** The response body, parsed as JSON + +## Adding Custom Headers + +Here is an example of how to add custom headers to all requests: + +```jsx +import { fetchUtils, Admin, Resource } from 'react-admin'; +import simpleRestProvider from 'ra-data-simple-rest'; +import { PostList } from './posts'; + +const httpClient = (url, options = {}) => { + if (!options.headers) { + options.headers = new Headers({ Accept: 'application/json' }); + } + // add your own headers here + options.headers.set('X-Custom-Header', 'foobar'); + return fetchUtils.fetchJson(url, options); +} +const dataProvider = simpleRestProvider('http://path.to.my.api/', httpClient); + +const App = () => ( + + + +); +``` + +## TypeScript Support + +For TypeScript users, here is a typed example of a custom `httpClient` that adds custom headers to all requests: + +```ts +import { fetchUtils } from 'react-admin'; + +const httpClient = (url: string, options: fetchUtils.Options = {}) => { + const customHeaders = (options.headers || + new Headers({ + Accept: 'application/json', + })) as Headers; + // add your own headers here + customHeaders.set('X-Custom-Header', 'foobar'); + options.headers = customHeaders; + return fetchUtils.fetchJson(url, options); +} +``` + +## Adding The `Authorization` Header + +Here is an example of how to add the `Authorization` header to all requests, using a token stored in the browser's local storage: + +```jsx +import { fetchUtils } from 'react-admin'; + +const httpClient = (url, options = {}) => { + const token = localStorage.getItem('token'); + const user = { token: `Bearer ${token}`, authenticated: !!token }; + return fetchUtils.fetchJson(url, {...options, user}); +} +``` + +**Tip:** The `Authorization` header will only be added to the request if `user.authenticated` is `true`. + +## Handling HTTP Errors + +The `fetchJson` function rejects with an `HttpError` when the HTTP response status code is not in the 2xx range. + +```jsx +import { fetchUtils } from 'react-admin'; + +fetchUtils.fetchJson('https://jsonplaceholder.typicode.com/posts/1') + .then(({ json }) => console.log('HTTP call succeeded. Return value:', json)) + .catch(error => console.log('HTTP call failed. Error message:', error)); +``` diff --git a/docs/img/AccessControl.mp4 b/docs/img/AccessControl.mp4 new file mode 100644 index 00000000000..4df1a618066 Binary files /dev/null and b/docs/img/AccessControl.mp4 differ diff --git a/docs/img/AppBar-children.png b/docs/img/AppBar-children.png new file mode 100644 index 00000000000..0ec82e71b7e Binary files /dev/null and b/docs/img/AppBar-children.png differ diff --git a/docs/img/AppBar-color.png b/docs/img/AppBar-color.png new file mode 100644 index 00000000000..a7475467a32 Binary files /dev/null and b/docs/img/AppBar-color.png differ diff --git a/docs/img/AppBar-user-menu.mp4 b/docs/img/AppBar-user-menu.mp4 new file mode 100644 index 00000000000..81006722e1d Binary files /dev/null and b/docs/img/AppBar-user-menu.mp4 differ diff --git a/docs/img/AppBar-user-menu.webm b/docs/img/AppBar-user-menu.webm new file mode 100644 index 00000000000..84e39aeb9a2 Binary files /dev/null and b/docs/img/AppBar-user-menu.webm differ diff --git a/docs/img/AppBar.mp4 b/docs/img/AppBar.mp4 new file mode 100644 index 00000000000..c340572c794 Binary files /dev/null and b/docs/img/AppBar.mp4 differ diff --git a/docs/img/AppBar.webm b/docs/img/AppBar.webm new file mode 100644 index 00000000000..9430e83f0da Binary files /dev/null and b/docs/img/AppBar.webm differ diff --git a/docs/img/ArrayInput-global-validation.png b/docs/img/ArrayInput-global-validation.png new file mode 100644 index 00000000000..863b339797d Binary files /dev/null and b/docs/img/ArrayInput-global-validation.png differ diff --git a/docs/img/AutoPersistInStore.mp4 b/docs/img/AutoPersistInStore.mp4 new file mode 100644 index 00000000000..94533d6d2ce Binary files /dev/null and b/docs/img/AutoPersistInStore.mp4 differ diff --git a/docs/img/AutoRefresh.mp4 b/docs/img/AutoRefresh.mp4 new file mode 100644 index 00000000000..93c2374fa5e Binary files /dev/null and b/docs/img/AutoRefresh.mp4 differ diff --git a/docs/img/AutoSave.mp4 b/docs/img/AutoSave.mp4 new file mode 100644 index 00000000000..eebe8964bce Binary files /dev/null and b/docs/img/AutoSave.mp4 differ diff --git a/docs/img/AutoSave.webm b/docs/img/AutoSave.webm new file mode 100644 index 00000000000..e1740654fc4 Binary files /dev/null and b/docs/img/AutoSave.webm differ diff --git a/docs/img/AutocompleteInput-createItemLabel.png b/docs/img/AutocompleteInput-createItemLabel.png new file mode 100644 index 00000000000..93c7a11b21d Binary files /dev/null and b/docs/img/AutocompleteInput-createItemLabel.png differ diff --git a/docs/img/AutocompleteInput-createLabel.png b/docs/img/AutocompleteInput-createLabel.png new file mode 100644 index 00000000000..6ce0ab8b0b8 Binary files /dev/null and b/docs/img/AutocompleteInput-createLabel.png differ diff --git a/docs/img/AutocompleteInput-onCreate.mp4 b/docs/img/AutocompleteInput-onCreate.mp4 new file mode 100644 index 00000000000..b08dd170b92 Binary files /dev/null and b/docs/img/AutocompleteInput-onCreate.mp4 differ diff --git a/docs/img/BulkActionButtons.jpg b/docs/img/BulkActionButtons.jpg new file mode 100644 index 00000000000..e14c4123bf7 Binary files /dev/null and b/docs/img/BulkActionButtons.jpg differ diff --git a/docs/img/BulkDeleteButton_Success.png b/docs/img/BulkDeleteButton_Success.png new file mode 100644 index 00000000000..3118bf5e4f4 Binary files /dev/null and b/docs/img/BulkDeleteButton_Success.png differ diff --git a/docs/img/BulkUpdateButton-InputSelectorForm.mp4 b/docs/img/BulkUpdateButton-InputSelectorForm.mp4 new file mode 100644 index 00000000000..2be3a8dc476 Binary files /dev/null and b/docs/img/BulkUpdateButton-InputSelectorForm.mp4 differ diff --git a/docs/img/BulkUpdateButton-InputSelectorForm.webm b/docs/img/BulkUpdateButton-InputSelectorForm.webm new file mode 100644 index 00000000000..969e59c649a Binary files /dev/null and b/docs/img/BulkUpdateButton-InputSelectorForm.webm differ diff --git a/docs/img/BulkUpdateButton-SimpleForm.mp4 b/docs/img/BulkUpdateButton-SimpleForm.mp4 new file mode 100644 index 00000000000..18ed31b914c Binary files /dev/null and b/docs/img/BulkUpdateButton-SimpleForm.mp4 differ diff --git a/docs/img/BulkUpdateButton-SimpleForm.webm b/docs/img/BulkUpdateButton-SimpleForm.webm new file mode 100644 index 00000000000..5eb74bb5684 Binary files /dev/null and b/docs/img/BulkUpdateButton-SimpleForm.webm differ diff --git a/docs/img/CRUD.mp4 b/docs/img/CRUD.mp4 new file mode 100644 index 00000000000..1638a9a0e5a Binary files /dev/null and b/docs/img/CRUD.mp4 differ diff --git a/docs/img/CRUD.webm b/docs/img/CRUD.webm new file mode 100644 index 00000000000..d5d3471aa21 Binary files /dev/null and b/docs/img/CRUD.webm differ diff --git a/docs/img/Calendar.jpg b/docs/img/Calendar.jpg new file mode 100644 index 00000000000..2908f600f7b Binary files /dev/null and b/docs/img/Calendar.jpg differ diff --git a/docs/img/CheckForApplicationUpdate.png b/docs/img/CheckForApplicationUpdate.png new file mode 100644 index 00000000000..98993ff4f84 Binary files /dev/null and b/docs/img/CheckForApplicationUpdate.png differ diff --git a/docs/img/CheckboxGroupInput-labelPlacement.png b/docs/img/CheckboxGroupInput-labelPlacement.png new file mode 100644 index 00000000000..eb94f3ff8c2 Binary files /dev/null and b/docs/img/CheckboxGroupInput-labelPlacement.png differ diff --git a/docs/img/CheckboxGroupInput-options.png b/docs/img/CheckboxGroupInput-options.png new file mode 100644 index 00000000000..fc061456bf9 Binary files /dev/null and b/docs/img/CheckboxGroupInput-options.png differ diff --git a/docs/img/CheckboxGroupInput-row.png b/docs/img/CheckboxGroupInput-row.png new file mode 100644 index 00000000000..32ca3136e6a Binary files /dev/null and b/docs/img/CheckboxGroupInput-row.png differ diff --git a/docs/img/CollaborativeDemo.mp4 b/docs/img/CollaborativeDemo.mp4 new file mode 100644 index 00000000000..4312c64620a Binary files /dev/null and b/docs/img/CollaborativeDemo.mp4 differ diff --git a/docs/img/ColumnsButton.mp4 b/docs/img/ColumnsButton.mp4 new file mode 100644 index 00000000000..6460bc73a60 Binary files /dev/null and b/docs/img/ColumnsButton.mp4 differ diff --git a/docs/img/CompleteCalendar.png b/docs/img/CompleteCalendar.png new file mode 100644 index 00000000000..caaff662e9a Binary files /dev/null and b/docs/img/CompleteCalendar.png differ diff --git a/docs/img/CreateSuccess.png b/docs/img/CreateSuccess.png new file mode 100644 index 00000000000..ae6c3d93148 Binary files /dev/null and b/docs/img/CreateSuccess.png differ diff --git a/docs/img/DataTableColumnCellSx.png b/docs/img/DataTableColumnCellSx.png new file mode 100644 index 00000000000..1313cbc50a9 Binary files /dev/null and b/docs/img/DataTableColumnCellSx.png differ diff --git a/docs/img/DataTableColumnSource.png b/docs/img/DataTableColumnSource.png new file mode 100644 index 00000000000..67328f902f6 Binary files /dev/null and b/docs/img/DataTableColumnSource.png differ diff --git a/docs/img/DataTableColumnType.png b/docs/img/DataTableColumnType.png new file mode 100644 index 00000000000..fcf6e70f036 Binary files /dev/null and b/docs/img/DataTableColumnType.png differ diff --git a/docs/img/DataTableCustomField.png b/docs/img/DataTableCustomField.png new file mode 100644 index 00000000000..73b00d3b81e Binary files /dev/null and b/docs/img/DataTableCustomField.png differ diff --git a/docs/img/DataTableFooter.png b/docs/img/DataTableFooter.png new file mode 100644 index 00000000000..112081c08b4 Binary files /dev/null and b/docs/img/DataTableFooter.png differ diff --git a/docs/img/DataTableHeader.png b/docs/img/DataTableHeader.png new file mode 100644 index 00000000000..04271135bce Binary files /dev/null and b/docs/img/DataTableHeader.png differ diff --git a/docs/img/DataTableInput-dialog.png b/docs/img/DataTableInput-dialog.png new file mode 100644 index 00000000000..a84feecf6bf Binary files /dev/null and b/docs/img/DataTableInput-dialog.png differ diff --git a/docs/img/DataTableInput-select.png b/docs/img/DataTableInput-select.png new file mode 100644 index 00000000000..6d5a31314a0 Binary files /dev/null and b/docs/img/DataTableInput-select.png differ diff --git a/docs/img/DataTableNumberCol.png b/docs/img/DataTableNumberCol.png new file mode 100644 index 00000000000..50cac3719a6 Binary files /dev/null and b/docs/img/DataTableNumberCol.png differ diff --git a/docs/img/DataTableRowSx.png b/docs/img/DataTableRowSx.png new file mode 100644 index 00000000000..3cfb4ae6c44 Binary files /dev/null and b/docs/img/DataTableRowSx.png differ diff --git a/docs/img/Datagrid.jpg b/docs/img/Datagrid.jpg new file mode 100644 index 00000000000..e57d230fba9 Binary files /dev/null and b/docs/img/Datagrid.jpg differ diff --git a/docs/img/DatagridAG-MasterDetail.png b/docs/img/DatagridAG-MasterDetail.png new file mode 100644 index 00000000000..9a478288989 Binary files /dev/null and b/docs/img/DatagridAG-MasterDetail.png differ diff --git a/docs/img/DatagridAG-PostList.png b/docs/img/DatagridAG-PostList.png new file mode 100644 index 00000000000..79bade0d691 Binary files /dev/null and b/docs/img/DatagridAG-PostList.png differ diff --git a/docs/img/DatagridAG-auto-size.png b/docs/img/DatagridAG-auto-size.png new file mode 100644 index 00000000000..246bcafda45 Binary files /dev/null and b/docs/img/DatagridAG-auto-size.png differ diff --git a/docs/img/DatagridAG-dark.png b/docs/img/DatagridAG-dark.png new file mode 100644 index 00000000000..417ecdc9e41 Binary files /dev/null and b/docs/img/DatagridAG-dark.png differ diff --git a/docs/img/DatagridAG-edit-cell.png b/docs/img/DatagridAG-edit-cell.png new file mode 100644 index 00000000000..d72efe0c4f1 Binary files /dev/null and b/docs/img/DatagridAG-edit-cell.png differ diff --git a/docs/img/DatagridAG-edit-row.png b/docs/img/DatagridAG-edit-row.png new file mode 100644 index 00000000000..7c49cb89f34 Binary files /dev/null and b/docs/img/DatagridAG-edit-row.png differ diff --git a/docs/img/DatagridAG-flex.png b/docs/img/DatagridAG-flex.png new file mode 100644 index 00000000000..fbff6cb27a4 Binary files /dev/null and b/docs/img/DatagridAG-flex.png differ diff --git a/docs/img/DatagridAG-ra-fields.png b/docs/img/DatagridAG-ra-fields.png new file mode 100644 index 00000000000..7f124fa9e2d Binary files /dev/null and b/docs/img/DatagridAG-ra-fields.png differ diff --git a/docs/img/DatagridAG-select-rows.png b/docs/img/DatagridAG-select-rows.png new file mode 100644 index 00000000000..f66b9f05449 Binary files /dev/null and b/docs/img/DatagridAG-select-rows.png differ diff --git a/docs/img/DatagridAG-selected-rows.png b/docs/img/DatagridAG-selected-rows.png new file mode 100644 index 00000000000..66cfbed8dcb Binary files /dev/null and b/docs/img/DatagridAG-selected-rows.png differ diff --git a/docs/img/DatagridAG-status-bar.png b/docs/img/DatagridAG-status-bar.png new file mode 100644 index 00000000000..b5c6fcfec88 Binary files /dev/null and b/docs/img/DatagridAG-status-bar.png differ diff --git a/docs/img/DatagridAG-sx-height.png b/docs/img/DatagridAG-sx-height.png new file mode 100644 index 00000000000..53a9bb12f52 Binary files /dev/null and b/docs/img/DatagridAG-sx-height.png differ diff --git a/docs/img/DatagridAG-sx.png b/docs/img/DatagridAG-sx.png new file mode 100644 index 00000000000..11245b1604d Binary files /dev/null and b/docs/img/DatagridAG-sx.png differ diff --git a/docs/img/DatagridAG.jpg b/docs/img/DatagridAG.jpg new file mode 100644 index 00000000000..ff0d4766028 Binary files /dev/null and b/docs/img/DatagridAG.jpg differ diff --git a/docs/img/DatagridAGClient.png b/docs/img/DatagridAGClient.png new file mode 100644 index 00000000000..1ed19099a01 Binary files /dev/null and b/docs/img/DatagridAGClient.png differ diff --git a/docs/img/DatagridConfigurable.gif b/docs/img/DatagridConfigurable.gif new file mode 100644 index 00000000000..ca1f3dfd87b Binary files /dev/null and b/docs/img/DatagridConfigurable.gif differ diff --git a/docs/img/DatagridConfigurable.mp4 b/docs/img/DatagridConfigurable.mp4 new file mode 100644 index 00000000000..9eae26338f8 Binary files /dev/null and b/docs/img/DatagridConfigurable.mp4 differ diff --git a/docs/img/DatagridConfigurable.webm b/docs/img/DatagridConfigurable.webm new file mode 100644 index 00000000000..0fa5a40fa6a Binary files /dev/null and b/docs/img/DatagridConfigurable.webm differ diff --git a/docs/img/DateField.png b/docs/img/DateField.png new file mode 100644 index 00000000000..9ba0c0c2bda Binary files /dev/null and b/docs/img/DateField.png differ diff --git a/docs/img/DateInput-MUI.png b/docs/img/DateInput-MUI.png new file mode 100644 index 00000000000..29730d47676 Binary files /dev/null and b/docs/img/DateInput-MUI.png differ diff --git a/docs/img/DateRangeInput.png b/docs/img/DateRangeInput.png new file mode 100644 index 00000000000..5ff3ca39999 Binary files /dev/null and b/docs/img/DateRangeInput.png differ diff --git a/docs/img/DateTimeInput-MUI.png b/docs/img/DateTimeInput-MUI.png new file mode 100644 index 00000000000..6347f06b9dd Binary files /dev/null and b/docs/img/DateTimeInput-MUI.png differ diff --git a/docs/img/DeleteButton.png b/docs/img/DeleteButton.png new file mode 100644 index 00000000000..7f9b5a5c931 Binary files /dev/null and b/docs/img/DeleteButton.png differ diff --git a/docs/img/DeleteButton_success.png b/docs/img/DeleteButton_success.png new file mode 100644 index 00000000000..8cd80df9dd7 Binary files /dev/null and b/docs/img/DeleteButton_success.png differ diff --git a/docs/img/Deploy-Cloudflare-Pages.png b/docs/img/Deploy-Cloudflare-Pages.png new file mode 100644 index 00000000000..148f202be9b Binary files /dev/null and b/docs/img/Deploy-Cloudflare-Pages.png differ diff --git a/docs/img/EditLive.png b/docs/img/EditLive.png new file mode 100644 index 00000000000..886cbfb11e4 Binary files /dev/null and b/docs/img/EditLive.png differ diff --git a/docs/img/EditSuccess.png b/docs/img/EditSuccess.png new file mode 100644 index 00000000000..425f1fcfb3f Binary files /dev/null and b/docs/img/EditSuccess.png differ diff --git a/docs/img/FilterButtonFormCombo.jpg b/docs/img/FilterButtonFormCombo.jpg new file mode 100644 index 00000000000..f2ecf8838d1 Binary files /dev/null and b/docs/img/FilterButtonFormCombo.jpg differ diff --git a/docs/img/FilterList.jpg b/docs/img/FilterList.jpg new file mode 100644 index 00000000000..b064a82c6a8 Binary files /dev/null and b/docs/img/FilterList.jpg differ diff --git a/docs/img/FilterLiveForm.mp4 b/docs/img/FilterLiveForm.mp4 new file mode 100644 index 00000000000..3bafe501489 Binary files /dev/null and b/docs/img/FilterLiveForm.mp4 differ diff --git a/docs/img/FilterLiveForm.png b/docs/img/FilterLiveForm.png new file mode 100644 index 00000000000..183ffc81b7f Binary files /dev/null and b/docs/img/FilterLiveForm.png differ diff --git a/docs/img/FormTab-dynamic-label.png b/docs/img/FormTab-dynamic-label.png new file mode 100644 index 00000000000..73d29e8390c Binary files /dev/null and b/docs/img/FormTab-dynamic-label.png differ diff --git a/docs/img/Forms.png b/docs/img/Forms.png new file mode 100644 index 00000000000..50cc99cee47 Binary files /dev/null and b/docs/img/Forms.png differ diff --git a/docs/img/HorizontalMenu.png b/docs/img/HorizontalMenu.png new file mode 100644 index 00000000000..41970c8bfdc Binary files /dev/null and b/docs/img/HorizontalMenu.png differ diff --git a/docs/img/InPlaceEditor.mp4 b/docs/img/InPlaceEditor.mp4 new file mode 100644 index 00000000000..f7544e70bdc Binary files /dev/null and b/docs/img/InPlaceEditor.mp4 differ diff --git a/docs/img/InPlaceEditorChildren.png b/docs/img/InPlaceEditorChildren.png new file mode 100644 index 00000000000..419324f7e98 Binary files /dev/null and b/docs/img/InPlaceEditorChildren.png differ diff --git a/docs/img/InPlaceEditorField.mp4 b/docs/img/InPlaceEditorField.mp4 new file mode 100644 index 00000000000..3b219bc4f8d Binary files /dev/null and b/docs/img/InPlaceEditorField.mp4 differ diff --git a/docs/img/InPlaceEditorNotifyOnSuccess.png b/docs/img/InPlaceEditorNotifyOnSuccess.png new file mode 100644 index 00000000000..c847404c598 Binary files /dev/null and b/docs/img/InPlaceEditorNotifyOnSuccess.png differ diff --git a/docs/img/InPlaceEditorShowButtons.png b/docs/img/InPlaceEditorShowButtons.png new file mode 100644 index 00000000000..799959d529c Binary files /dev/null and b/docs/img/InPlaceEditorShowButtons.png differ diff --git a/docs/img/Labeled.png b/docs/img/Labeled.png new file mode 100644 index 00000000000..4406e172195 Binary files /dev/null and b/docs/img/Labeled.png differ diff --git a/docs/img/List-facets.png b/docs/img/List-facets.png new file mode 100644 index 00000000000..d04b6485274 Binary files /dev/null and b/docs/img/List-facets.png differ diff --git a/docs/img/ListLive.png b/docs/img/ListLive.png new file mode 100644 index 00000000000..663513ea878 Binary files /dev/null and b/docs/img/ListLive.png differ diff --git a/docs/img/LocalesMenuButton.gif b/docs/img/LocalesMenuButton.gif new file mode 100644 index 00000000000..93b239321cc Binary files /dev/null and b/docs/img/LocalesMenuButton.gif differ diff --git a/docs/img/LocalesMenuButton.mp4 b/docs/img/LocalesMenuButton.mp4 new file mode 100644 index 00000000000..19e92905e9f Binary files /dev/null and b/docs/img/LocalesMenuButton.mp4 differ diff --git a/docs/img/LocalesMenuButton.webm b/docs/img/LocalesMenuButton.webm new file mode 100644 index 00000000000..e2a53a23fd1 Binary files /dev/null and b/docs/img/LocalesMenuButton.webm differ diff --git a/docs/img/LoginCustomBackground.jpg b/docs/img/LoginCustomBackground.jpg new file mode 100644 index 00000000000..4b0dc36783d Binary files /dev/null and b/docs/img/LoginCustomBackground.jpg differ diff --git a/docs/img/LoginWithContent.jpg b/docs/img/LoginWithContent.jpg new file mode 100644 index 00000000000..b4c162b106f Binary files /dev/null and b/docs/img/LoginWithContent.jpg differ diff --git a/docs/img/LoginWithEmail.jpg b/docs/img/LoginWithEmail.jpg new file mode 100644 index 00000000000..3bfb1379dc7 Binary files /dev/null and b/docs/img/LoginWithEmail.jpg differ diff --git a/docs/img/MenuLive.png b/docs/img/MenuLive.png new file mode 100644 index 00000000000..2bd98ff979d Binary files /dev/null and b/docs/img/MenuLive.png differ diff --git a/docs/img/PredictiveTextInput-multiline.png b/docs/img/PredictiveTextInput-multiline.png new file mode 100644 index 00000000000..426286142c4 Binary files /dev/null and b/docs/img/PredictiveTextInput-multiline.png differ diff --git a/docs/img/PredictiveTextInput.mp4 b/docs/img/PredictiveTextInput.mp4 new file mode 100644 index 00000000000..67b8502edbc Binary files /dev/null and b/docs/img/PredictiveTextInput.mp4 differ diff --git a/docs/img/RealtimeMenu.png b/docs/img/RealtimeMenu.png new file mode 100644 index 00000000000..2bd98ff979d Binary files /dev/null and b/docs/img/RealtimeMenu.png differ diff --git a/docs/img/RecordField.png b/docs/img/RecordField.png new file mode 100644 index 00000000000..450cb8a038b Binary files /dev/null and b/docs/img/RecordField.png differ diff --git a/docs/img/ReferenceArrayField-default-child.png b/docs/img/ReferenceArrayField-default-child.png new file mode 100644 index 00000000000..7051ce79bdf Binary files /dev/null and b/docs/img/ReferenceArrayField-default-child.png differ diff --git a/docs/img/ReferenceManyFieldFilterInput.mp4 b/docs/img/ReferenceManyFieldFilterInput.mp4 new file mode 100644 index 00000000000..8f83e4c98ec Binary files /dev/null and b/docs/img/ReferenceManyFieldFilterInput.mp4 differ diff --git a/docs/img/SPA-lifecycle.png b/docs/img/SPA-lifecycle.png new file mode 100644 index 00000000000..fe6b89f070b Binary files /dev/null and b/docs/img/SPA-lifecycle.png differ diff --git a/docs/img/SaveButton.png b/docs/img/SaveButton.png new file mode 100644 index 00000000000..386087c4350 Binary files /dev/null and b/docs/img/SaveButton.png differ diff --git a/docs/img/SavedQueriesList.gif b/docs/img/SavedQueriesList.gif new file mode 100644 index 00000000000..d6cc13bb9bf Binary files /dev/null and b/docs/img/SavedQueriesList.gif differ diff --git a/docs/img/SavedQueriesList.mp4 b/docs/img/SavedQueriesList.mp4 new file mode 100644 index 00000000000..11c504afc1c Binary files /dev/null and b/docs/img/SavedQueriesList.mp4 differ diff --git a/docs/img/SavedQueriesList.webm b/docs/img/SavedQueriesList.webm new file mode 100644 index 00000000000..8bd40207734 Binary files /dev/null and b/docs/img/SavedQueriesList.webm differ diff --git a/docs/img/Search.jpg b/docs/img/Search.jpg new file mode 100644 index 00000000000..6e267b70c3a Binary files /dev/null and b/docs/img/Search.jpg differ diff --git a/docs/img/SelectAllButton.png b/docs/img/SelectAllButton.png new file mode 100644 index 00000000000..769ddd8dd22 Binary files /dev/null and b/docs/img/SelectAllButton.png differ diff --git a/docs/img/SelectColumnsButton.gif b/docs/img/SelectColumnsButton.gif new file mode 100644 index 00000000000..31e54589a10 Binary files /dev/null and b/docs/img/SelectColumnsButton.gif differ diff --git a/docs/img/SelectColumnsButton.mp4 b/docs/img/SelectColumnsButton.mp4 new file mode 100644 index 00000000000..326b0b8d9c0 Binary files /dev/null and b/docs/img/SelectColumnsButton.mp4 differ diff --git a/docs/img/SelectColumnsButton.webm b/docs/img/SelectColumnsButton.webm new file mode 100644 index 00000000000..9e6d6c39997 Binary files /dev/null and b/docs/img/SelectColumnsButton.webm differ diff --git a/docs/img/SelectField.png b/docs/img/SelectField.png new file mode 100644 index 00000000000..4d93676ee1a Binary files /dev/null and b/docs/img/SelectField.png differ diff --git a/docs/img/SelectInput-onCreate.mp4 b/docs/img/SelectInput-onCreate.mp4 new file mode 100644 index 00000000000..60c8915a4b6 Binary files /dev/null and b/docs/img/SelectInput-onCreate.mp4 differ diff --git a/docs/img/ShowLive.png b/docs/img/ShowLive.png new file mode 100644 index 00000000000..d0e34e0aa73 Binary files /dev/null and b/docs/img/ShowLive.png differ diff --git a/docs/img/SimpleFormConfigurable.gif b/docs/img/SimpleFormConfigurable.gif new file mode 100644 index 00000000000..46192fe033e Binary files /dev/null and b/docs/img/SimpleFormConfigurable.gif differ diff --git a/docs/img/SimpleFormConfigurable.mp4 b/docs/img/SimpleFormConfigurable.mp4 new file mode 100644 index 00000000000..31910cba7be Binary files /dev/null and b/docs/img/SimpleFormConfigurable.mp4 differ diff --git a/docs/img/SimpleFormConfigurable.webm b/docs/img/SimpleFormConfigurable.webm new file mode 100644 index 00000000000..6d1b9effa5f Binary files /dev/null and b/docs/img/SimpleFormConfigurable.webm differ diff --git a/docs/img/SimpleList.jpg b/docs/img/SimpleList.jpg new file mode 100644 index 00000000000..0a436e3b2a8 Binary files /dev/null and b/docs/img/SimpleList.jpg differ diff --git a/docs/img/SimpleListConfigurable.gif b/docs/img/SimpleListConfigurable.gif new file mode 100644 index 00000000000..d78b57243ad Binary files /dev/null and b/docs/img/SimpleListConfigurable.gif differ diff --git a/docs/img/SimpleListConfigurable.mp4 b/docs/img/SimpleListConfigurable.mp4 new file mode 100644 index 00000000000..f4e6cf9a771 Binary files /dev/null and b/docs/img/SimpleListConfigurable.mp4 differ diff --git a/docs/img/SimpleListConfigurable.webm b/docs/img/SimpleListConfigurable.webm new file mode 100644 index 00000000000..e29abfca9fd Binary files /dev/null and b/docs/img/SimpleListConfigurable.webm differ diff --git a/docs/img/SimpleShowLayout.png b/docs/img/SimpleShowLayout.png new file mode 100644 index 00000000000..34410862509 Binary files /dev/null and b/docs/img/SimpleShowLayout.png differ diff --git a/docs/img/SimpleShowLayout_small.png b/docs/img/SimpleShowLayout_small.png new file mode 100644 index 00000000000..0d069be2d5c Binary files /dev/null and b/docs/img/SimpleShowLayout_small.png differ diff --git a/docs/img/StackedFilters.jpg b/docs/img/StackedFilters.jpg new file mode 100644 index 00000000000..ec612ffae87 Binary files /dev/null and b/docs/img/StackedFilters.jpg differ diff --git a/docs/img/TabbedForm-layout.png b/docs/img/TabbedForm-layout.png new file mode 100644 index 00000000000..f5344209237 Binary files /dev/null and b/docs/img/TabbedForm-layout.png differ diff --git a/docs/img/TabbedFormWithRevision.mp4 b/docs/img/TabbedFormWithRevision.mp4 new file mode 100644 index 00000000000..ce12906fe29 Binary files /dev/null and b/docs/img/TabbedFormWithRevision.mp4 differ diff --git a/docs/img/TabbedShowLayout_small.png b/docs/img/TabbedShowLayout_small.png new file mode 100644 index 00000000000..c447342a730 Binary files /dev/null and b/docs/img/TabbedShowLayout_small.png differ diff --git a/docs/img/TextArrayInput.mp4 b/docs/img/TextArrayInput.mp4 new file mode 100644 index 00000000000..06fc4ed5e2a Binary files /dev/null and b/docs/img/TextArrayInput.mp4 differ diff --git a/docs/img/TimeInput-MUI.png b/docs/img/TimeInput-MUI.png new file mode 100644 index 00000000000..c978634c811 Binary files /dev/null and b/docs/img/TimeInput-MUI.png differ diff --git a/docs/img/Title.png b/docs/img/Title.png new file mode 100644 index 00000000000..3320b810b4a Binary files /dev/null and b/docs/img/Title.png differ diff --git a/docs/img/TitleConfigurable.mp4 b/docs/img/TitleConfigurable.mp4 new file mode 100644 index 00000000000..a16d35f4d0b Binary files /dev/null and b/docs/img/TitleConfigurable.mp4 differ diff --git a/docs/img/TitleConfigurable.webm b/docs/img/TitleConfigurable.webm new file mode 100644 index 00000000000..c6db8c6b12d Binary files /dev/null and b/docs/img/TitleConfigurable.webm differ diff --git a/docs/img/ToggleThemeButton.gif b/docs/img/ToggleThemeButton.gif new file mode 100644 index 00000000000..d92c528d790 Binary files /dev/null and b/docs/img/ToggleThemeButton.gif differ diff --git a/docs/img/ToggleThemeButton.mp4 b/docs/img/ToggleThemeButton.mp4 new file mode 100644 index 00000000000..ac3f20a84e2 Binary files /dev/null and b/docs/img/ToggleThemeButton.mp4 differ diff --git a/docs/img/ToggleThemeButton.webm b/docs/img/ToggleThemeButton.webm new file mode 100644 index 00000000000..21faafe1ae6 Binary files /dev/null and b/docs/img/ToggleThemeButton.webm differ diff --git a/docs/img/Toolbar.png b/docs/img/Toolbar.png new file mode 100644 index 00000000000..d3ac9a4059d Binary files /dev/null and b/docs/img/Toolbar.png differ diff --git a/docs/img/TranslatableFields.png b/docs/img/TranslatableFields.png new file mode 100644 index 00000000000..7dbfa6c143d Binary files /dev/null and b/docs/img/TranslatableFields.png differ diff --git a/docs/img/TranslatableInputs-row.png b/docs/img/TranslatableInputs-row.png new file mode 100644 index 00000000000..3b37749d014 Binary files /dev/null and b/docs/img/TranslatableInputs-row.png differ diff --git a/docs/img/WithListContext-chart.png b/docs/img/WithListContext-chart.png new file mode 100644 index 00000000000..611c623aa9f Binary files /dev/null and b/docs/img/WithListContext-chart.png differ diff --git a/docs/img/accessDenied.png b/docs/img/accessDenied.png new file mode 100644 index 00000000000..f9740c2a20d Binary files /dev/null and b/docs/img/accessDenied.png differ diff --git a/docs/img/accessibility.webp b/docs/img/accessibility.webp new file mode 100644 index 00000000000..0ea935d1304 Binary files /dev/null and b/docs/img/accessibility.webp differ diff --git a/docs/img/actions-toolbar.png b/docs/img/actions-toolbar.png new file mode 100644 index 00000000000..3eca2ca7121 Binary files /dev/null and b/docs/img/actions-toolbar.png differ diff --git a/docs/img/adminError.png b/docs/img/adminError.png new file mode 100644 index 00000000000..e4cbe04eb2a Binary files /dev/null and b/docs/img/adminError.png differ diff --git a/docs/img/array-field.webp b/docs/img/array-field.webp new file mode 100644 index 00000000000..ddeb1228717 Binary files /dev/null and b/docs/img/array-field.webp differ diff --git a/docs/img/array-input-block.webp b/docs/img/array-input-block.webp new file mode 100644 index 00000000000..f7e3de63355 Binary files /dev/null and b/docs/img/array-input-block.webp differ diff --git a/docs/img/array-input-item-label.png b/docs/img/array-input-item-label.png new file mode 100644 index 00000000000..938276f92f3 Binary files /dev/null and b/docs/img/array-input-item-label.png differ diff --git a/docs/img/array-input.gif b/docs/img/array-input.gif new file mode 100644 index 00000000000..b5ed047c6cf Binary files /dev/null and b/docs/img/array-input.gif differ diff --git a/docs/img/array-input.mp4 b/docs/img/array-input.mp4 new file mode 100644 index 00000000000..fdddde02c15 Binary files /dev/null and b/docs/img/array-input.mp4 differ diff --git a/docs/img/array-input.png b/docs/img/array-input.png deleted file mode 100644 index bd4c3565307..00000000000 Binary files a/docs/img/array-input.png and /dev/null differ diff --git a/docs/img/array-input.webm b/docs/img/array-input.webm new file mode 100644 index 00000000000..c384080e702 Binary files /dev/null and b/docs/img/array-input.webm differ diff --git a/docs/img/aside.png b/docs/img/aside.png new file mode 100644 index 00000000000..97929244387 Binary files /dev/null and b/docs/img/aside.png differ diff --git a/docs/img/atomic-crm.png b/docs/img/atomic-crm.png new file mode 100644 index 00000000000..b2aa640df92 Binary files /dev/null and b/docs/img/atomic-crm.png differ diff --git a/docs/img/authProvider-OAuth-flow.png b/docs/img/authProvider-OAuth-flow.png new file mode 100644 index 00000000000..5b5339148b5 Binary files /dev/null and b/docs/img/authProvider-OAuth-flow.png differ diff --git a/docs/img/authenticationError.png b/docs/img/authenticationError.png new file mode 100644 index 00000000000..db1f0a2cd13 Binary files /dev/null and b/docs/img/authenticationError.png differ diff --git a/docs/img/autocomplete-array-input-create.gif b/docs/img/autocomplete-array-input-create.gif new file mode 100644 index 00000000000..8a5061f9c16 Binary files /dev/null and b/docs/img/autocomplete-array-input-create.gif differ diff --git a/docs/img/autocomplete-array-input-create.mp4 b/docs/img/autocomplete-array-input-create.mp4 new file mode 100644 index 00000000000..5360aef6b8b Binary files /dev/null and b/docs/img/autocomplete-array-input-create.mp4 differ diff --git a/docs/img/autocomplete-array-input-create.webm b/docs/img/autocomplete-array-input-create.webm new file mode 100644 index 00000000000..ff1d9e19752 Binary files /dev/null and b/docs/img/autocomplete-array-input-create.webm differ diff --git a/docs/img/autocomplete-array-input.gif b/docs/img/autocomplete-array-input.gif new file mode 100644 index 00000000000..8cf8d5e0173 Binary files /dev/null and b/docs/img/autocomplete-array-input.gif differ diff --git a/docs/img/autocomplete-array-input.mp4 b/docs/img/autocomplete-array-input.mp4 new file mode 100644 index 00000000000..09810b94ad0 Binary files /dev/null and b/docs/img/autocomplete-array-input.mp4 differ diff --git a/docs/img/autocomplete-array-input.webm b/docs/img/autocomplete-array-input.webm new file mode 100644 index 00000000000..a14a8af8973 Binary files /dev/null and b/docs/img/autocomplete-array-input.webm differ diff --git a/docs/img/autocomplete-input-with-create.mp4 b/docs/img/autocomplete-input-with-create.mp4 new file mode 100644 index 00000000000..189450a87b6 Binary files /dev/null and b/docs/img/autocomplete-input-with-create.mp4 differ diff --git a/docs/img/autocomplete-input-with-create.webm b/docs/img/autocomplete-input-with-create.webm new file mode 100644 index 00000000000..611447c42f9 Binary files /dev/null and b/docs/img/autocomplete-input-with-create.webm differ diff --git a/docs/img/autocomplete-input.gif b/docs/img/autocomplete-input.gif new file mode 100644 index 00000000000..d193a1b6866 Binary files /dev/null and b/docs/img/autocomplete-input.gif differ diff --git a/docs/img/autocomplete-input.mp4 b/docs/img/autocomplete-input.mp4 new file mode 100644 index 00000000000..ff7b5a2e022 Binary files /dev/null and b/docs/img/autocomplete-input.mp4 differ diff --git a/docs/img/autocomplete-input.webm b/docs/img/autocomplete-input.webm new file mode 100644 index 00000000000..bd28e01c03c Binary files /dev/null and b/docs/img/autocomplete-input.webm differ diff --git a/docs/img/backend-logos/amplify.svg b/docs/img/backend-logos/amplify.svg new file mode 100644 index 00000000000..5b7aaa8dc07 --- /dev/null +++ b/docs/img/backend-logos/amplify.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/img/backend-logos/apisix.svg b/docs/img/backend-logos/apisix.svg new file mode 100644 index 00000000000..8e99cc539b4 --- /dev/null +++ b/docs/img/backend-logos/apisix.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/docs/img/backend-logos/appwrite.svg b/docs/img/backend-logos/appwrite.svg new file mode 100644 index 00000000000..2034a812a08 --- /dev/null +++ b/docs/img/backend-logos/appwrite.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/docs/img/backend-logos/auth0.svg b/docs/img/backend-logos/auth0.svg new file mode 100644 index 00000000000..42bccbae4b1 --- /dev/null +++ b/docs/img/backend-logos/auth0.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/docs/img/backend-logos/aws.png b/docs/img/backend-logos/aws.png new file mode 100644 index 00000000000..8eb054a557a Binary files /dev/null and b/docs/img/backend-logos/aws.png differ diff --git a/docs/img/backend-logos/blitz.svg b/docs/img/backend-logos/blitz.svg new file mode 100644 index 00000000000..26c398d2a8b --- /dev/null +++ b/docs/img/backend-logos/blitz.svg @@ -0,0 +1,4 @@ + + + + diff --git a/docs/img/backend-logos/casdoor.svg b/docs/img/backend-logos/casdoor.svg new file mode 100644 index 00000000000..1ad813387e9 --- /dev/null +++ b/docs/img/backend-logos/casdoor.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/docs/img/backend-logos/ciprest.svg b/docs/img/backend-logos/ciprest.svg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/img/backend-logos/corebos.png b/docs/img/backend-logos/corebos.png new file mode 100644 index 00000000000..ace4e56b305 Binary files /dev/null and b/docs/img/backend-logos/corebos.png differ diff --git a/docs/img/backend-logos/corebos.svg b/docs/img/backend-logos/corebos.svg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/img/backend-logos/directus.svg b/docs/img/backend-logos/directus.svg new file mode 100644 index 00000000000..2bc3d2376b2 --- /dev/null +++ b/docs/img/backend-logos/directus.svg @@ -0,0 +1,2 @@ + +Directus icon \ No newline at end of file diff --git a/docs/img/backend-logos/django.png b/docs/img/backend-logos/django.png new file mode 100644 index 00000000000..9f17adee618 Binary files /dev/null and b/docs/img/backend-logos/django.png differ diff --git a/docs/img/backend-logos/eicrud.svg b/docs/img/backend-logos/eicrud.svg new file mode 100644 index 00000000000..a91f6666cec --- /dev/null +++ b/docs/img/backend-logos/eicrud.svg @@ -0,0 +1,29 @@ + + + + planet + + + + + + diff --git a/docs/img/backend-logos/eve.png b/docs/img/backend-logos/eve.png new file mode 100644 index 00000000000..db4549792a5 Binary files /dev/null and b/docs/img/backend-logos/eve.png differ diff --git a/docs/img/backend-logos/eve.svg b/docs/img/backend-logos/eve.svg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/img/backend-logos/expressSequelize.svg b/docs/img/backend-logos/expressSequelize.svg new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/img/backend-logos/feathersjs.svg b/docs/img/backend-logos/feathersjs.svg new file mode 100644 index 00000000000..b577149b629 --- /dev/null +++ b/docs/img/backend-logos/feathersjs.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/img/backend-logos/firebase.png b/docs/img/backend-logos/firebase.png new file mode 100644 index 00000000000..0daa11ab1c1 Binary files /dev/null and b/docs/img/backend-logos/firebase.png differ diff --git a/docs/img/backend-logos/genezio.png b/docs/img/backend-logos/genezio.png new file mode 100644 index 00000000000..eb80045c7a0 Binary files /dev/null and b/docs/img/backend-logos/genezio.png differ diff --git a/docs/img/backend-logos/geoserver.png b/docs/img/backend-logos/geoserver.png new file mode 100644 index 00000000000..53aeb960d85 Binary files /dev/null and b/docs/img/backend-logos/geoserver.png differ diff --git a/docs/img/backend-logos/github.svg b/docs/img/backend-logos/github.svg new file mode 100644 index 00000000000..94d03dfb1e6 --- /dev/null +++ b/docs/img/backend-logos/github.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/img/backend-logos/google.svg b/docs/img/backend-logos/google.svg new file mode 100644 index 00000000000..54f54324c7b --- /dev/null +++ b/docs/img/backend-logos/google.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/img/backend-logos/graphql.svg b/docs/img/backend-logos/graphql.svg new file mode 100644 index 00000000000..cbf9d25cbe3 --- /dev/null +++ b/docs/img/backend-logos/graphql.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/hydra.png b/docs/img/backend-logos/hydra.png new file mode 100644 index 00000000000..b5431cedccb Binary files /dev/null and b/docs/img/backend-logos/hydra.png differ diff --git a/docs/img/backend-logos/indexedDB.png b/docs/img/backend-logos/indexedDB.png new file mode 100644 index 00000000000..da6377bc411 Binary files /dev/null and b/docs/img/backend-logos/indexedDB.png differ diff --git a/docs/img/backend-logos/js.png b/docs/img/backend-logos/js.png new file mode 100644 index 00000000000..ff59168ad1e Binary files /dev/null and b/docs/img/backend-logos/js.png differ diff --git a/docs/img/backend-logos/jsonApi.jpg b/docs/img/backend-logos/jsonApi.jpg new file mode 100644 index 00000000000..70cb3fe3c3d Binary files /dev/null and b/docs/img/backend-logos/jsonApi.jpg differ diff --git a/docs/img/backend-logos/keycloak.svg b/docs/img/backend-logos/keycloak.svg new file mode 100644 index 00000000000..44798d21c8b --- /dev/null +++ b/docs/img/backend-logos/keycloak.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/loopback3.svg b/docs/img/backend-logos/loopback3.svg new file mode 100644 index 00000000000..f8f13f658ca --- /dev/null +++ b/docs/img/backend-logos/loopback3.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/docs/img/backend-logos/loopback4.svg b/docs/img/backend-logos/loopback4.svg new file mode 100644 index 00000000000..148285dbe75 --- /dev/null +++ b/docs/img/backend-logos/loopback4.svg @@ -0,0 +1 @@ +LoopBack-Mark-Frame-(#3f5dff) diff --git a/docs/img/backend-logos/marmelab.png b/docs/img/backend-logos/marmelab.png new file mode 100644 index 00000000000..6b56a620930 Binary files /dev/null and b/docs/img/backend-logos/marmelab.png differ diff --git a/docs/img/backend-logos/microsoft.svg b/docs/img/backend-logos/microsoft.svg new file mode 100644 index 00000000000..5334aa7ca68 --- /dev/null +++ b/docs/img/backend-logos/microsoft.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/nestjs-query.svg b/docs/img/backend-logos/nestjs-query.svg new file mode 100644 index 00000000000..8b4d3b027ed --- /dev/null +++ b/docs/img/backend-logos/nestjs-query.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/img/backend-logos/nestjs.png b/docs/img/backend-logos/nestjs.png new file mode 100644 index 00000000000..098f7746dec Binary files /dev/null and b/docs/img/backend-logos/nestjs.png differ diff --git a/docs/img/backend-logos/odata.png b/docs/img/backend-logos/odata.png new file mode 100644 index 00000000000..46237cf9966 Binary files /dev/null and b/docs/img/backend-logos/odata.png differ diff --git a/docs/img/backend-logos/open.png b/docs/img/backend-logos/open.png new file mode 100644 index 00000000000..974caf070f7 Binary files /dev/null and b/docs/img/backend-logos/open.png differ diff --git a/docs/img/backend-logos/openid.svg b/docs/img/backend-logos/openid.svg new file mode 100644 index 00000000000..56d520aeb3f --- /dev/null +++ b/docs/img/backend-logos/openid.svg @@ -0,0 +1,3 @@ + + + diff --git a/docs/img/backend-logos/parse.png b/docs/img/backend-logos/parse.png new file mode 100644 index 00000000000..9ed6c8c7306 Binary files /dev/null and b/docs/img/backend-logos/parse.png differ diff --git a/docs/img/backend-logos/postgRest.png b/docs/img/backend-logos/postgRest.png new file mode 100644 index 00000000000..dbe1da3edb4 Binary files /dev/null and b/docs/img/backend-logos/postgRest.png differ diff --git a/docs/img/backend-logos/postgraphile.svg b/docs/img/backend-logos/postgraphile.svg new file mode 100644 index 00000000000..d58216310a9 --- /dev/null +++ b/docs/img/backend-logos/postgraphile.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/prisma.svg b/docs/img/backend-logos/prisma.svg new file mode 100644 index 00000000000..03232db4b53 --- /dev/null +++ b/docs/img/backend-logos/prisma.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/processMaker.jpeg b/docs/img/backend-logos/processMaker.jpeg new file mode 100644 index 00000000000..4580d58c84a Binary files /dev/null and b/docs/img/backend-logos/processMaker.jpeg differ diff --git a/docs/img/backend-logos/sails.svg b/docs/img/backend-logos/sails.svg new file mode 100644 index 00000000000..2be4249edb2 --- /dev/null +++ b/docs/img/backend-logos/sails.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/docs/img/backend-logos/sheets.svg b/docs/img/backend-logos/sheets.svg new file mode 100644 index 00000000000..30755d4d226 --- /dev/null +++ b/docs/img/backend-logos/sheets.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/backend-logos/soul.png b/docs/img/backend-logos/soul.png new file mode 100644 index 00000000000..e4d7bbcd35c Binary files /dev/null and b/docs/img/backend-logos/soul.png differ diff --git a/docs/img/backend-logos/spring.svg b/docs/img/backend-logos/spring.svg new file mode 100644 index 00000000000..504a22e3b40 --- /dev/null +++ b/docs/img/backend-logos/spring.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/docs/img/backend-logos/sqlite.png b/docs/img/backend-logos/sqlite.png new file mode 100644 index 00000000000..6068724ed15 Binary files /dev/null and b/docs/img/backend-logos/sqlite.png differ diff --git a/docs/img/backend-logos/strapi.png b/docs/img/backend-logos/strapi.png new file mode 100644 index 00000000000..b4a3f538060 Binary files /dev/null and b/docs/img/backend-logos/strapi.png differ diff --git a/docs/img/backend-logos/supabase.svg b/docs/img/backend-logos/supabase.svg new file mode 100644 index 00000000000..246c5fe9f70 --- /dev/null +++ b/docs/img/backend-logos/supabase.svg @@ -0,0 +1,19 @@ + + + supabase + + + + + + + + + + + + + + + + diff --git a/docs/img/backend-logos/surrealdb.svg b/docs/img/backend-logos/surrealdb.svg new file mode 100644 index 00000000000..e4072a76588 --- /dev/null +++ b/docs/img/backend-logos/surrealdb.svg @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/docs/img/backend-logos/treeql.png b/docs/img/backend-logos/treeql.png new file mode 100644 index 00000000000..f19d2fb1af8 Binary files /dev/null and b/docs/img/backend-logos/treeql.png differ diff --git a/docs/img/backend-logos/wooCommerce.png b/docs/img/backend-logos/wooCommerce.png new file mode 100644 index 00000000000..4547fc7738c Binary files /dev/null and b/docs/img/backend-logos/wooCommerce.png differ diff --git a/docs/img/beginner_mode.mp4 b/docs/img/beginner_mode.mp4 new file mode 100644 index 00000000000..25de6983781 Binary files /dev/null and b/docs/img/beginner_mode.mp4 differ diff --git a/docs/img/blog_demo.png b/docs/img/blog_demo.png new file mode 100644 index 00000000000..b8a98023d1a Binary files /dev/null and b/docs/img/blog_demo.png differ diff --git a/docs/img/boolean-input.gif b/docs/img/boolean-input.gif new file mode 100644 index 00000000000..53407a99c35 Binary files /dev/null and b/docs/img/boolean-input.gif differ diff --git a/docs/img/boolean-input.mp4 b/docs/img/boolean-input.mp4 new file mode 100644 index 00000000000..fd4c85543bd Binary files /dev/null and b/docs/img/boolean-input.mp4 differ diff --git a/docs/img/boolean-input.webm b/docs/img/boolean-input.webm new file mode 100644 index 00000000000..64e2bc05fc9 Binary files /dev/null and b/docs/img/boolean-input.webm differ diff --git a/docs/img/box.webp b/docs/img/box.webp new file mode 100644 index 00000000000..5f64787916b Binary files /dev/null and b/docs/img/box.webp differ diff --git a/docs/img/breadcrumb-separator.png b/docs/img/breadcrumb-separator.png new file mode 100644 index 00000000000..b9e10bbc7af Binary files /dev/null and b/docs/img/breadcrumb-separator.png differ diff --git a/docs/img/bulk-actions-toolbar.mp4 b/docs/img/bulk-actions-toolbar.mp4 new file mode 100644 index 00000000000..d8c36829fa0 Binary files /dev/null and b/docs/img/bulk-actions-toolbar.mp4 differ diff --git a/docs/img/bulk-delete-button.png b/docs/img/bulk-delete-button.png new file mode 100644 index 00000000000..aa01e5853fe Binary files /dev/null and b/docs/img/bulk-delete-button.png differ diff --git a/docs/img/bulk-export-button.png b/docs/img/bulk-export-button.png new file mode 100644 index 00000000000..eecbf3f76b6 Binary files /dev/null and b/docs/img/bulk-export-button.png differ diff --git a/docs/img/bulk-update-button.png b/docs/img/bulk-update-button.png new file mode 100644 index 00000000000..634f01115b8 Binary files /dev/null and b/docs/img/bulk-update-button.png differ diff --git a/docs/img/bwDarkTheme1.jpg b/docs/img/bwDarkTheme1.jpg new file mode 100644 index 00000000000..c7c67a01f4a Binary files /dev/null and b/docs/img/bwDarkTheme1.jpg differ diff --git a/docs/img/bwDarkTheme2.jpg b/docs/img/bwDarkTheme2.jpg new file mode 100644 index 00000000000..1b30f2fd4e6 Binary files /dev/null and b/docs/img/bwDarkTheme2.jpg differ diff --git a/docs/img/bwLightTheme1.jpg b/docs/img/bwLightTheme1.jpg new file mode 100644 index 00000000000..b8eac361bb0 Binary files /dev/null and b/docs/img/bwLightTheme1.jpg differ diff --git a/docs/img/bwLightTheme2.jpg b/docs/img/bwLightTheme2.jpg new file mode 100644 index 00000000000..c915d9de3ed Binary files /dev/null and b/docs/img/bwLightTheme2.jpg differ diff --git a/docs/img/calendar.mp4 b/docs/img/calendar.mp4 new file mode 100644 index 00000000000..fd1afd59248 Binary files /dev/null and b/docs/img/calendar.mp4 differ diff --git a/docs/img/checkbox-group-input.gif b/docs/img/checkbox-group-input.gif new file mode 100644 index 00000000000..a1f2e262d9d Binary files /dev/null and b/docs/img/checkbox-group-input.gif differ diff --git a/docs/img/checkbox-group-input.mp4 b/docs/img/checkbox-group-input.mp4 new file mode 100644 index 00000000000..b94f453d5fd Binary files /dev/null and b/docs/img/checkbox-group-input.mp4 differ diff --git a/docs/img/checkbox-group-input.webm b/docs/img/checkbox-group-input.webm new file mode 100644 index 00000000000..58e4004f104 Binary files /dev/null and b/docs/img/checkbox-group-input.webm differ diff --git a/docs/img/components.webp b/docs/img/components.webp new file mode 100644 index 00000000000..0eed896bfa4 Binary files /dev/null and b/docs/img/components.webp differ diff --git a/docs/img/confirm-dialog.png b/docs/img/confirm-dialog.png new file mode 100644 index 00000000000..7feda2d52c0 Binary files /dev/null and b/docs/img/confirm-dialog.png differ diff --git a/docs/img/confirm.webp b/docs/img/confirm.webp new file mode 100644 index 00000000000..cffcf4a50f3 Binary files /dev/null and b/docs/img/confirm.webp differ diff --git a/docs/img/container-layout.png b/docs/img/container-layout.png new file mode 100644 index 00000000000..0569583b50a Binary files /dev/null and b/docs/img/container-layout.png differ diff --git a/docs/img/count.webp b/docs/img/count.webp new file mode 100644 index 00000000000..e54d891df17 Binary files /dev/null and b/docs/img/count.webp differ diff --git a/docs/img/create-button-fab.png b/docs/img/create-button-fab.png new file mode 100644 index 00000000000..d5c32190b2b Binary files /dev/null and b/docs/img/create-button-fab.png differ diff --git a/docs/img/create-button.png b/docs/img/create-button.png new file mode 100644 index 00000000000..3f62e9a9f17 Binary files /dev/null and b/docs/img/create-button.png differ diff --git a/docs/img/create-react-admin.mp4 b/docs/img/create-react-admin.mp4 new file mode 100644 index 00000000000..9d67a2dd7c1 Binary files /dev/null and b/docs/img/create-react-admin.mp4 differ diff --git a/docs/img/create-react-admin.webm b/docs/img/create-react-admin.webm new file mode 100644 index 00000000000..e3381ed92d5 Binary files /dev/null and b/docs/img/create-react-admin.webm differ diff --git a/docs/img/custom-form-layout.png b/docs/img/custom-form-layout.png new file mode 100644 index 00000000000..b75bb9431af Binary files /dev/null and b/docs/img/custom-form-layout.png differ diff --git a/docs/img/custom-menu.gif b/docs/img/custom-menu.gif index a47bc79df69..de5ad9706c0 100644 Binary files a/docs/img/custom-menu.gif and b/docs/img/custom-menu.gif differ diff --git a/docs/img/custom-menu.mp4 b/docs/img/custom-menu.mp4 new file mode 100644 index 00000000000..9d0550d82c0 Binary files /dev/null and b/docs/img/custom-menu.mp4 differ diff --git a/docs/img/custom-menu.webm b/docs/img/custom-menu.webm new file mode 100644 index 00000000000..17e4751c062 Binary files /dev/null and b/docs/img/custom-menu.webm differ diff --git a/docs/img/custom-route-nolayout.png b/docs/img/custom-route-nolayout.png new file mode 100644 index 00000000000..7703635eaf6 Binary files /dev/null and b/docs/img/custom-route-nolayout.png differ diff --git a/docs/img/custom-route-title.png b/docs/img/custom-route-title.png new file mode 100644 index 00000000000..643cb2bcaac Binary files /dev/null and b/docs/img/custom-route-title.png differ diff --git a/docs/img/custom-scheduler.webp b/docs/img/custom-scheduler.webp new file mode 100644 index 00000000000..62143652382 Binary files /dev/null and b/docs/img/custom-scheduler.webp differ diff --git a/docs/img/custom_appbar.png b/docs/img/custom_appbar.png new file mode 100644 index 00000000000..9527203db72 Binary files /dev/null and b/docs/img/custom_appbar.png differ diff --git a/docs/img/dark-theme.png b/docs/img/dark-theme.png index 73ab22e5802..1d1e7a8bd79 100644 Binary files a/docs/img/dark-theme.png and b/docs/img/dark-theme.png differ diff --git a/docs/img/dashboard.png b/docs/img/dashboard.png index 94c67e2f5f8..994cfcf2de7 100644 Binary files a/docs/img/dashboard.png and b/docs/img/dashboard.png differ diff --git a/docs/img/data-provider.png b/docs/img/data-provider.png index 7ac42460c08..3fd7b4d2c24 100644 Binary files a/docs/img/data-provider.png and b/docs/img/data-provider.png differ diff --git a/docs/img/datagrid-headers-pinning.mp4 b/docs/img/datagrid-headers-pinning.mp4 new file mode 100644 index 00000000000..2695279c505 Binary files /dev/null and b/docs/img/datagrid-headers-pinning.mp4 differ diff --git a/docs/img/datagrid-select-range.mp4 b/docs/img/datagrid-select-range.mp4 new file mode 100644 index 00000000000..82ab9b8e1d3 Binary files /dev/null and b/docs/img/datagrid-select-range.mp4 differ diff --git a/docs/img/datagrid-sx-styled.webp b/docs/img/datagrid-sx-styled.webp new file mode 100644 index 00000000000..5def214c950 Binary files /dev/null and b/docs/img/datagrid-sx-styled.webp differ diff --git a/docs/img/datagrid-sx-unstyled.webp b/docs/img/datagrid-sx-unstyled.webp new file mode 100644 index 00000000000..d263029652e Binary files /dev/null and b/docs/img/datagrid-sx-unstyled.webp differ diff --git a/docs/img/datagrid-theme-styled.webp b/docs/img/datagrid-theme-styled.webp new file mode 100644 index 00000000000..c810dcef82a Binary files /dev/null and b/docs/img/datagrid-theme-styled.webp differ diff --git a/docs/img/datagrid-theme-unstyled.webp b/docs/img/datagrid-theme-unstyled.webp new file mode 100644 index 00000000000..93393d9e858 Binary files /dev/null and b/docs/img/datagrid-theme-unstyled.webp differ diff --git a/docs/img/datagrid.mp4 b/docs/img/datagrid.mp4 new file mode 100644 index 00000000000..76c21e29217 Binary files /dev/null and b/docs/img/datagrid.mp4 differ diff --git a/docs/img/datagrid_expand.gif b/docs/img/datagrid_expand.gif new file mode 100644 index 00000000000..108ff7e0347 Binary files /dev/null and b/docs/img/datagrid_expand.gif differ diff --git a/docs/img/datagrid_expand.mp4 b/docs/img/datagrid_expand.mp4 new file mode 100644 index 00000000000..180b4ee3a81 Binary files /dev/null and b/docs/img/datagrid_expand.mp4 differ diff --git a/docs/img/datagrid_expand.webm b/docs/img/datagrid_expand.webm new file mode 100644 index 00000000000..99d6a81406b Binary files /dev/null and b/docs/img/datagrid_expand.webm differ diff --git a/docs/img/date-input.gif b/docs/img/date-input.gif index a0f61ebace5..a94d478f148 100644 Binary files a/docs/img/date-input.gif and b/docs/img/date-input.gif differ diff --git a/docs/img/date-input.mp4 b/docs/img/date-input.mp4 new file mode 100644 index 00000000000..1882bba30af Binary files /dev/null and b/docs/img/date-input.mp4 differ diff --git a/docs/img/date-input.webm b/docs/img/date-input.webm new file mode 100644 index 00000000000..122980444f4 Binary files /dev/null and b/docs/img/date-input.webm differ diff --git a/docs/img/date-picker.gif b/docs/img/date-picker.gif new file mode 100644 index 00000000000..d75abb1ac44 Binary files /dev/null and b/docs/img/date-picker.gif differ diff --git a/docs/img/date-picker.mp4 b/docs/img/date-picker.mp4 new file mode 100644 index 00000000000..e79e5f1a00d Binary files /dev/null and b/docs/img/date-picker.mp4 differ diff --git a/docs/img/date-picker.webm b/docs/img/date-picker.webm new file mode 100644 index 00000000000..920c89339f9 Binary files /dev/null and b/docs/img/date-picker.webm differ diff --git a/docs/img/date-time-input.gif b/docs/img/date-time-input.gif new file mode 100644 index 00000000000..f023fcd234f Binary files /dev/null and b/docs/img/date-time-input.gif differ diff --git a/docs/img/date-time-input.mp4 b/docs/img/date-time-input.mp4 new file mode 100644 index 00000000000..a2c1d19bd28 Binary files /dev/null and b/docs/img/date-time-input.mp4 differ diff --git a/docs/img/date-time-input.webm b/docs/img/date-time-input.webm new file mode 100644 index 00000000000..11841293571 Binary files /dev/null and b/docs/img/date-time-input.webm differ diff --git a/docs/img/defaultDarkTheme1.jpg b/docs/img/defaultDarkTheme1.jpg new file mode 100644 index 00000000000..2279fe194af Binary files /dev/null and b/docs/img/defaultDarkTheme1.jpg differ diff --git a/docs/img/defaultDarkTheme2.jpg b/docs/img/defaultDarkTheme2.jpg new file mode 100644 index 00000000000..5037f70b9cf Binary files /dev/null and b/docs/img/defaultDarkTheme2.jpg differ diff --git a/docs/img/defaultLightTheme1.jpg b/docs/img/defaultLightTheme1.jpg new file mode 100644 index 00000000000..63acbd540d2 Binary files /dev/null and b/docs/img/defaultLightTheme1.jpg differ diff --git a/docs/img/defaultLightTheme2.jpg b/docs/img/defaultLightTheme2.jpg new file mode 100644 index 00000000000..95db234d151 Binary files /dev/null and b/docs/img/defaultLightTheme2.jpg differ diff --git a/docs/img/demo-CRM.png b/docs/img/demo-CRM.png new file mode 100644 index 00000000000..d1aa9803a27 Binary files /dev/null and b/docs/img/demo-CRM.png differ diff --git a/docs/img/demo-ecommerce-ee.png b/docs/img/demo-ecommerce-ee.png new file mode 100644 index 00000000000..b9b387837fe Binary files /dev/null and b/docs/img/demo-ecommerce-ee.png differ diff --git a/docs/img/demo-ecommerce-oss.png b/docs/img/demo-ecommerce-oss.png new file mode 100644 index 00000000000..bdb666bd5d4 Binary files /dev/null and b/docs/img/demo-ecommerce-oss.png differ diff --git a/docs/img/demo-help-desk.png b/docs/img/demo-help-desk.png new file mode 100644 index 00000000000..ac640de8f8e Binary files /dev/null and b/docs/img/demo-help-desk.png differ diff --git a/docs/img/demo-themes.mp4 b/docs/img/demo-themes.mp4 new file mode 100644 index 00000000000..2a615c927ac Binary files /dev/null and b/docs/img/demo-themes.mp4 differ diff --git a/docs/img/dense.webp b/docs/img/dense.webp new file mode 100644 index 00000000000..f7e8a400002 Binary files /dev/null and b/docs/img/dense.webp differ diff --git a/docs/img/developer-portal.png b/docs/img/developer-portal.png new file mode 100644 index 00000000000..823a99d74d5 Binary files /dev/null and b/docs/img/developer-portal.png differ diff --git a/docs/img/edit-button.png b/docs/img/edit-button.png new file mode 100644 index 00000000000..3dcd28279ac Binary files /dev/null and b/docs/img/edit-button.png differ diff --git a/docs/img/edit-from-react-to-react-admin.webp b/docs/img/edit-from-react-to-react-admin.webp new file mode 100644 index 00000000000..a241ded7078 Binary files /dev/null and b/docs/img/edit-from-react-to-react-admin.webp differ diff --git a/docs/img/edit-view-example.png b/docs/img/edit-view-example.png new file mode 100644 index 00000000000..7aae808fc98 Binary files /dev/null and b/docs/img/edit-view-example.png differ diff --git a/docs/img/editableDatagrid-actions.mp4 b/docs/img/editableDatagrid-actions.mp4 new file mode 100644 index 00000000000..5e297e3c0cd Binary files /dev/null and b/docs/img/editableDatagrid-actions.mp4 differ diff --git a/docs/img/editableDatagrid-custom_side_effect.mp4 b/docs/img/editableDatagrid-custom_side_effect.mp4 new file mode 100644 index 00000000000..c790304364a Binary files /dev/null and b/docs/img/editableDatagrid-custom_side_effect.mp4 differ diff --git a/docs/img/editableDatagrid-mutationMode.mp4 b/docs/img/editableDatagrid-mutationMode.mp4 new file mode 100644 index 00000000000..7b52d8b80ab Binary files /dev/null and b/docs/img/editableDatagrid-mutationMode.mp4 differ diff --git a/docs/img/editableDatagrid-noDelete.png b/docs/img/editableDatagrid-noDelete.png new file mode 100644 index 00000000000..51a9cfc0b4a Binary files /dev/null and b/docs/img/editableDatagrid-noDelete.png differ diff --git a/docs/img/editableDatagrid-referenceManyField.mp4 b/docs/img/editableDatagrid-referenceManyField.mp4 new file mode 100644 index 00000000000..ebe8c19c261 Binary files /dev/null and b/docs/img/editableDatagrid-referenceManyField.mp4 differ diff --git a/docs/img/error.webp b/docs/img/error.webp new file mode 100644 index 00000000000..b6737781bbf Binary files /dev/null and b/docs/img/error.webp differ diff --git a/docs/img/export-button.gif b/docs/img/export-button.gif new file mode 100644 index 00000000000..fd92e66a09f Binary files /dev/null and b/docs/img/export-button.gif differ diff --git a/docs/img/export-button.mp4 b/docs/img/export-button.mp4 new file mode 100644 index 00000000000..b3fc7c5cf89 Binary files /dev/null and b/docs/img/export-button.mp4 differ diff --git a/docs/img/export-button.png b/docs/img/export-button.png new file mode 100644 index 00000000000..6d960822505 Binary files /dev/null and b/docs/img/export-button.png differ diff --git a/docs/img/export-button.webm b/docs/img/export-button.webm new file mode 100644 index 00000000000..aaa2ee61325 Binary files /dev/null and b/docs/img/export-button.webm differ diff --git a/docs/img/field-addlabel.png b/docs/img/field-addlabel.png new file mode 100644 index 00000000000..980e94b3612 Binary files /dev/null and b/docs/img/field-addlabel.png differ diff --git a/docs/img/file-input.png b/docs/img/file-input.png index fbd12bee3ae..f71101be9eb 100644 Binary files a/docs/img/file-input.png and b/docs/img/file-input.png differ diff --git a/docs/img/filter-list-cumulative.gif b/docs/img/filter-list-cumulative.gif new file mode 100644 index 00000000000..16494f1b34f Binary files /dev/null and b/docs/img/filter-list-cumulative.gif differ diff --git a/docs/img/filter-list-cumulative.mp4 b/docs/img/filter-list-cumulative.mp4 new file mode 100644 index 00000000000..5da94d8aab1 Binary files /dev/null and b/docs/img/filter-list-cumulative.mp4 differ diff --git a/docs/img/filter-list-cumulative.webm b/docs/img/filter-list-cumulative.webm new file mode 100644 index 00000000000..8a60bb3bedb Binary files /dev/null and b/docs/img/filter-list-cumulative.webm differ diff --git a/docs/img/filter-live-search.gif b/docs/img/filter-live-search.gif new file mode 100644 index 00000000000..3b4bc56c695 Binary files /dev/null and b/docs/img/filter-live-search.gif differ diff --git a/docs/img/filter-live-search.mp4 b/docs/img/filter-live-search.mp4 new file mode 100644 index 00000000000..ea2854be45e Binary files /dev/null and b/docs/img/filter-live-search.mp4 differ diff --git a/docs/img/filter-live-search.webm b/docs/img/filter-live-search.webm new file mode 100644 index 00000000000..a69971258bd Binary files /dev/null and b/docs/img/filter-live-search.webm differ diff --git a/docs/img/filter-sidebar.gif b/docs/img/filter-sidebar.gif new file mode 100644 index 00000000000..4c497327457 Binary files /dev/null and b/docs/img/filter-sidebar.gif differ diff --git a/docs/img/filter-sidebar.mp4 b/docs/img/filter-sidebar.mp4 new file mode 100644 index 00000000000..9d5c6464b77 Binary files /dev/null and b/docs/img/filter-sidebar.mp4 differ diff --git a/docs/img/filter-sidebar.webm b/docs/img/filter-sidebar.webm new file mode 100644 index 00000000000..7507ab1ace1 Binary files /dev/null and b/docs/img/filter-sidebar.webm differ diff --git a/docs/img/filter_with_submit.gif b/docs/img/filter_with_submit.gif new file mode 100644 index 00000000000..80754eda0af Binary files /dev/null and b/docs/img/filter_with_submit.gif differ diff --git a/docs/img/filter_with_submit.mp4 b/docs/img/filter_with_submit.mp4 new file mode 100644 index 00000000000..9f738d333b2 Binary files /dev/null and b/docs/img/filter_with_submit.mp4 differ diff --git a/docs/img/filter_with_submit.webm b/docs/img/filter_with_submit.webm new file mode 100644 index 00000000000..900397ff0f2 Binary files /dev/null and b/docs/img/filter_with_submit.webm differ diff --git a/docs/img/filters.gif b/docs/img/filters.gif index 1e532d67567..495e35a5b27 100644 Binary files a/docs/img/filters.gif and b/docs/img/filters.gif differ diff --git a/docs/img/filters.mp4 b/docs/img/filters.mp4 new file mode 100644 index 00000000000..a8380ca12d5 Binary files /dev/null and b/docs/img/filters.mp4 differ diff --git a/docs/img/filters.webm b/docs/img/filters.webm new file mode 100644 index 00000000000..79f2ffe144e Binary files /dev/null and b/docs/img/filters.webm differ diff --git a/docs/img/form-layouts.png b/docs/img/form-layouts.png new file mode 100644 index 00000000000..d640cbaac8e Binary files /dev/null and b/docs/img/form-layouts.png differ diff --git a/docs/img/grid.webp b/docs/img/grid.webp new file mode 100644 index 00000000000..6f7cd6bb318 Binary files /dev/null and b/docs/img/grid.webp differ diff --git a/docs/img/guessed-edit.png b/docs/img/guessed-edit.png index 6c15ad3dac8..04f73d8cb06 100644 Binary files a/docs/img/guessed-edit.png and b/docs/img/guessed-edit.png differ diff --git a/docs/img/guessed-list.png b/docs/img/guessed-list.png index 5b42654141e..0d0d0a5875d 100644 Binary files a/docs/img/guessed-list.png and b/docs/img/guessed-list.png differ diff --git a/docs/img/houseDarkTheme1.jpg b/docs/img/houseDarkTheme1.jpg new file mode 100644 index 00000000000..d7adb01e811 Binary files /dev/null and b/docs/img/houseDarkTheme1.jpg differ diff --git a/docs/img/houseDarkTheme2.jpg b/docs/img/houseDarkTheme2.jpg new file mode 100644 index 00000000000..e3b843280a4 Binary files /dev/null and b/docs/img/houseDarkTheme2.jpg differ diff --git a/docs/img/houseLightTheme1.jpg b/docs/img/houseLightTheme1.jpg new file mode 100644 index 00000000000..b3a53308880 Binary files /dev/null and b/docs/img/houseLightTheme1.jpg differ diff --git a/docs/img/houseLightTheme2.jpg b/docs/img/houseLightTheme2.jpg new file mode 100644 index 00000000000..b1c4fe95df5 Binary files /dev/null and b/docs/img/houseLightTheme2.jpg differ diff --git a/docs/img/icons/launch.png b/docs/img/icons/launch.png new file mode 100644 index 00000000000..e6a85313b3b Binary files /dev/null and b/docs/img/icons/launch.png differ diff --git a/docs/img/identity.png b/docs/img/identity.png new file mode 100644 index 00000000000..f2502ff2480 Binary files /dev/null and b/docs/img/identity.png differ diff --git a/docs/img/infinite-book-list.mp4 b/docs/img/infinite-book-list.mp4 new file mode 100644 index 00000000000..6fb52652ea3 Binary files /dev/null and b/docs/img/infinite-book-list.mp4 differ diff --git a/docs/img/infinite-book-list.webm b/docs/img/infinite-book-list.webm new file mode 100644 index 00000000000..c2daf3ffca1 Binary files /dev/null and b/docs/img/infinite-book-list.webm differ diff --git a/docs/img/infinite-book-list.webp b/docs/img/infinite-book-list.webp new file mode 100644 index 00000000000..b2438a62f97 Binary files /dev/null and b/docs/img/infinite-book-list.webp differ diff --git a/docs/img/infinite-pagination-count.webp b/docs/img/infinite-pagination-count.webp new file mode 100644 index 00000000000..46abeff2706 Binary files /dev/null and b/docs/img/infinite-pagination-count.webp differ diff --git a/docs/img/infinite-pagination-load-more.webp b/docs/img/infinite-pagination-load-more.webp new file mode 100644 index 00000000000..6de605985dd Binary files /dev/null and b/docs/img/infinite-pagination-load-more.webp differ diff --git a/docs/img/input-full-width.png b/docs/img/input-full-width.png new file mode 100644 index 00000000000..365d4cb0e84 Binary files /dev/null and b/docs/img/input-full-width.png differ diff --git a/docs/img/input-grid.webp b/docs/img/input-grid.webp new file mode 100644 index 00000000000..ba9092608e4 Binary files /dev/null and b/docs/img/input-grid.webp differ diff --git a/docs/img/input-helper-text.png b/docs/img/input-helper-text.png new file mode 100644 index 00000000000..e326789117d Binary files /dev/null and b/docs/img/input-helper-text.png differ diff --git a/docs/img/inputs.webp b/docs/img/inputs.webp new file mode 100644 index 00000000000..e01a58309ba Binary files /dev/null and b/docs/img/inputs.webp differ diff --git a/docs/img/install-next-js-command-line.png b/docs/img/install-next-js-command-line.png new file mode 100644 index 00000000000..5f2edf91160 Binary files /dev/null and b/docs/img/install-next-js-command-line.png differ diff --git a/docs/img/kanban-board.png b/docs/img/kanban-board.png new file mode 100644 index 00000000000..1cd56909e15 Binary files /dev/null and b/docs/img/kanban-board.png differ diff --git a/docs/img/layout-component.gif b/docs/img/layout-component.gif new file mode 100644 index 00000000000..53c50460c6b Binary files /dev/null and b/docs/img/layout-component.gif differ diff --git a/docs/img/layout-component.mp4 b/docs/img/layout-component.mp4 new file mode 100644 index 00000000000..cafb5d8b146 Binary files /dev/null and b/docs/img/layout-component.mp4 differ diff --git a/docs/img/layout-component.webm b/docs/img/layout-component.webm new file mode 100644 index 00000000000..25db0238b30 Binary files /dev/null and b/docs/img/layout-component.webm differ diff --git a/docs/img/layout-responsive.gif b/docs/img/layout-responsive.gif new file mode 100644 index 00000000000..913dbd8b774 Binary files /dev/null and b/docs/img/layout-responsive.gif differ diff --git a/docs/img/layout-responsive.mp4 b/docs/img/layout-responsive.mp4 new file mode 100644 index 00000000000..6abef9810f7 Binary files /dev/null and b/docs/img/layout-responsive.mp4 differ diff --git a/docs/img/layout-responsive.webm b/docs/img/layout-responsive.webm new file mode 100644 index 00000000000..b9efbaf68e9 Binary files /dev/null and b/docs/img/layout-responsive.webm differ diff --git a/docs/img/layouts.png b/docs/img/layouts.png new file mode 100644 index 00000000000..1f0489c8ed1 Binary files /dev/null and b/docs/img/layouts.png differ diff --git a/docs/img/lazy-resource.png b/docs/img/lazy-resource.png new file mode 100644 index 00000000000..794f3209573 Binary files /dev/null and b/docs/img/lazy-resource.png differ diff --git a/docs/img/list-button.png b/docs/img/list-button.png new file mode 100644 index 00000000000..2623fcd9ca1 Binary files /dev/null and b/docs/img/list-button.png differ diff --git a/docs/img/list-children.webp b/docs/img/list-children.webp new file mode 100644 index 00000000000..1a7199c1eec Binary files /dev/null and b/docs/img/list-children.webp differ diff --git a/docs/img/list-empty.png b/docs/img/list-empty.png new file mode 100644 index 00000000000..87cda30b815 Binary files /dev/null and b/docs/img/list-empty.png differ diff --git a/docs/img/list-from-react-to-react-admin.webp b/docs/img/list-from-react-to-react-admin.webp new file mode 100644 index 00000000000..fa1be0b09c0 Binary files /dev/null and b/docs/img/list-from-react-to-react-admin.webp differ diff --git a/docs/img/list-pagination.webp b/docs/img/list-pagination.webp new file mode 100644 index 00000000000..2cfc6209f4c Binary files /dev/null and b/docs/img/list-pagination.webp differ diff --git a/docs/img/list-title.png b/docs/img/list-title.png new file mode 100644 index 00000000000..05908c1e823 Binary files /dev/null and b/docs/img/list-title.png differ diff --git a/docs/img/list-view.jpg b/docs/img/list-view.jpg new file mode 100644 index 00000000000..2adc7dd1577 Binary files /dev/null and b/docs/img/list-view.jpg differ diff --git a/docs/img/list-view.png b/docs/img/list-view.png deleted file mode 100644 index 5a9a3017ca1..00000000000 Binary files a/docs/img/list-view.png and /dev/null differ diff --git a/docs/img/list_ant_design.png b/docs/img/list_ant_design.png new file mode 100644 index 00000000000..68123387224 Binary files /dev/null and b/docs/img/list_ant_design.png differ diff --git a/docs/img/list_aside.webp b/docs/img/list_aside.webp new file mode 100644 index 00000000000..7d7c94c4197 Binary files /dev/null and b/docs/img/list_aside.webp differ diff --git a/docs/img/list_filter.mp4 b/docs/img/list_filter.mp4 new file mode 100644 index 00000000000..be1d621de3d Binary files /dev/null and b/docs/img/list_filter.mp4 differ diff --git a/docs/img/list_with_customized_css.png b/docs/img/list_with_customized_css.png index b46c06e398f..ab3c85eb627 100644 Binary files a/docs/img/list_with_customized_css.png and b/docs/img/list_with_customized_css.png differ diff --git a/docs/img/locks-demo.gif b/docs/img/locks-demo.gif new file mode 100644 index 00000000000..33e69d774f4 Binary files /dev/null and b/docs/img/locks-demo.gif differ diff --git a/docs/img/locks-demo.mp4 b/docs/img/locks-demo.mp4 new file mode 100644 index 00000000000..035f6e98c8d Binary files /dev/null and b/docs/img/locks-demo.mp4 differ diff --git a/docs/img/locks-demo.webm b/docs/img/locks-demo.webm new file mode 100644 index 00000000000..3250160e834 Binary files /dev/null and b/docs/img/locks-demo.webm differ diff --git a/docs/img/login-form.png b/docs/img/login-form.png index 2a8f9142765..21a2424e301 100644 Binary files a/docs/img/login-form.png and b/docs/img/login-form.png differ diff --git a/docs/img/login.gif b/docs/img/login.gif index 81915a67053..f617184502b 100644 Binary files a/docs/img/login.gif and b/docs/img/login.gif differ diff --git a/docs/img/login.mp4 b/docs/img/login.mp4 new file mode 100644 index 00000000000..721b5937b5c Binary files /dev/null and b/docs/img/login.mp4 differ diff --git a/docs/img/login.webm b/docs/img/login.webm new file mode 100644 index 00000000000..0f19fe582d9 Binary files /dev/null and b/docs/img/login.webm differ diff --git a/docs/img/logout.mp4 b/docs/img/logout.mp4 new file mode 100644 index 00000000000..9abc35e8f5b Binary files /dev/null and b/docs/img/logout.mp4 differ diff --git a/docs/img/logout.webm b/docs/img/logout.webm new file mode 100644 index 00000000000..94c67fe40e9 Binary files /dev/null and b/docs/img/logout.webm differ diff --git a/docs/img/markdown-input.gif b/docs/img/markdown-input.gif new file mode 100644 index 00000000000..059c4c3e748 Binary files /dev/null and b/docs/img/markdown-input.gif differ diff --git a/docs/img/markdown-input.mp4 b/docs/img/markdown-input.mp4 new file mode 100644 index 00000000000..f9082cd460b Binary files /dev/null and b/docs/img/markdown-input.mp4 differ diff --git a/docs/img/markdown-input.webm b/docs/img/markdown-input.webm new file mode 100644 index 00000000000..5cc17bcc7b9 Binary files /dev/null and b/docs/img/markdown-input.webm differ diff --git a/docs/img/menu-custom-shortcuts.png b/docs/img/menu-custom-shortcuts.png new file mode 100644 index 00000000000..a62b130fe51 Binary files /dev/null and b/docs/img/menu-custom-shortcuts.png differ diff --git a/docs/img/menu-shortcuts.png b/docs/img/menu-shortcuts.png new file mode 100644 index 00000000000..93f83aee9fb Binary files /dev/null and b/docs/img/menu-shortcuts.png differ diff --git a/docs/img/menu-with-children.png b/docs/img/menu-with-children.png new file mode 100644 index 00000000000..18109868d2d Binary files /dev/null and b/docs/img/menu-with-children.png differ diff --git a/docs/img/menu-with-dashboard.webp b/docs/img/menu-with-dashboard.webp new file mode 100644 index 00000000000..d5bc507cd15 Binary files /dev/null and b/docs/img/menu-with-dashboard.webp differ diff --git a/docs/img/menu.webp b/docs/img/menu.webp new file mode 100644 index 00000000000..258ce69310d Binary files /dev/null and b/docs/img/menu.webp differ diff --git a/docs/img/multilevelmenu.png b/docs/img/multilevelmenu.png new file mode 100644 index 00000000000..0dba8129253 Binary files /dev/null and b/docs/img/multilevelmenu.png differ diff --git a/docs/img/nanoDarkTheme1.jpg b/docs/img/nanoDarkTheme1.jpg new file mode 100644 index 00000000000..6874e55d9cf Binary files /dev/null and b/docs/img/nanoDarkTheme1.jpg differ diff --git a/docs/img/nanoDarkTheme2.jpg b/docs/img/nanoDarkTheme2.jpg new file mode 100644 index 00000000000..1509576038b Binary files /dev/null and b/docs/img/nanoDarkTheme2.jpg differ diff --git a/docs/img/nanoLightTheme1.jpg b/docs/img/nanoLightTheme1.jpg new file mode 100644 index 00000000000..f0aa5a98d24 Binary files /dev/null and b/docs/img/nanoLightTheme1.jpg differ diff --git a/docs/img/nanoLightTheme2.jpg b/docs/img/nanoLightTheme2.jpg new file mode 100644 index 00000000000..36f1f653f4a Binary files /dev/null and b/docs/img/nanoLightTheme2.jpg differ diff --git a/docs/img/navidrome.png b/docs/img/navidrome.png new file mode 100644 index 00000000000..b8a5e1ae45b Binary files /dev/null and b/docs/img/navidrome.png differ diff --git a/docs/img/next-admin-with-app-router-folder-structure.png b/docs/img/next-admin-with-app-router-folder-structure.png new file mode 100644 index 00000000000..10f73e1a60d Binary files /dev/null and b/docs/img/next-admin-with-app-router-folder-structure.png differ diff --git a/docs/img/next-admin-with-page-router-folder-structure.png b/docs/img/next-admin-with-page-router-folder-structure.png new file mode 100644 index 00000000000..baa4be32b44 Binary files /dev/null and b/docs/img/next-admin-with-page-router-folder-structure.png differ diff --git a/docs/img/nextjs-file-structure-app-router.png b/docs/img/nextjs-file-structure-app-router.png new file mode 100644 index 00000000000..4b7442fc57f Binary files /dev/null and b/docs/img/nextjs-file-structure-app-router.png differ diff --git a/docs/img/nextjs-file-structure.png b/docs/img/nextjs-file-structure.png new file mode 100644 index 00000000000..f84e065f6b3 Binary files /dev/null and b/docs/img/nextjs-file-structure.png differ diff --git a/docs/img/nextjs-react-admin.webp b/docs/img/nextjs-react-admin.webp new file mode 100644 index 00000000000..8b9a1bfe344 Binary files /dev/null and b/docs/img/nextjs-react-admin.webp differ diff --git a/docs/img/nextjs-setup.webp b/docs/img/nextjs-setup.webp new file mode 100644 index 00000000000..de9cc3d3205 Binary files /dev/null and b/docs/img/nextjs-setup.webp differ diff --git a/docs/img/not-found.png b/docs/img/not-found.png index c2149730d62..c934e9dbd47 100644 Binary files a/docs/img/not-found.png and b/docs/img/not-found.png differ diff --git a/docs/img/notification.webp b/docs/img/notification.webp new file mode 100644 index 00000000000..aa83af60c32 Binary files /dev/null and b/docs/img/notification.webp differ diff --git a/docs/img/nullable-boolean-input-null-label.png b/docs/img/nullable-boolean-input-null-label.png new file mode 100644 index 00000000000..6cc1c78098a Binary files /dev/null and b/docs/img/nullable-boolean-input-null-label.png differ diff --git a/docs/img/nullable-boolean-input.gif b/docs/img/nullable-boolean-input.gif new file mode 100644 index 00000000000..af0f4367073 Binary files /dev/null and b/docs/img/nullable-boolean-input.gif differ diff --git a/docs/img/nullable-boolean-input.mp4 b/docs/img/nullable-boolean-input.mp4 new file mode 100644 index 00000000000..ff323f8784a Binary files /dev/null and b/docs/img/nullable-boolean-input.mp4 differ diff --git a/docs/img/nullable-boolean-input.png b/docs/img/nullable-boolean-input.png deleted file mode 100644 index f140712a205..00000000000 Binary files a/docs/img/nullable-boolean-input.png and /dev/null differ diff --git a/docs/img/nullable-boolean-input.webm b/docs/img/nullable-boolean-input.webm new file mode 100644 index 00000000000..632f9f1ae21 Binary files /dev/null and b/docs/img/nullable-boolean-input.webm differ diff --git a/docs/img/number-field.webp b/docs/img/number-field.webp new file mode 100644 index 00000000000..bc8b78a776b Binary files /dev/null and b/docs/img/number-field.webp differ diff --git a/docs/img/number-input.gif b/docs/img/number-input.gif new file mode 100644 index 00000000000..156d86fc6a9 Binary files /dev/null and b/docs/img/number-input.gif differ diff --git a/docs/img/number-input.mp4 b/docs/img/number-input.mp4 new file mode 100644 index 00000000000..34f3adedabb Binary files /dev/null and b/docs/img/number-input.mp4 differ diff --git a/docs/img/number-input.webm b/docs/img/number-input.webm new file mode 100644 index 00000000000..edeab96fa2d Binary files /dev/null and b/docs/img/number-input.webm differ diff --git a/docs/img/openid-connect-example.png b/docs/img/openid-connect-example.png new file mode 100644 index 00000000000..132215ea002 Binary files /dev/null and b/docs/img/openid-connect-example.png differ diff --git a/docs/img/pagination-buttons.gif b/docs/img/pagination-buttons.gif new file mode 100644 index 00000000000..5cfe139bc9e Binary files /dev/null and b/docs/img/pagination-buttons.gif differ diff --git a/docs/img/pagination-buttons.mp4 b/docs/img/pagination-buttons.mp4 new file mode 100644 index 00000000000..212d97ec223 Binary files /dev/null and b/docs/img/pagination-buttons.mp4 differ diff --git a/docs/img/pagination-buttons.webm b/docs/img/pagination-buttons.webm new file mode 100644 index 00000000000..1a0f1898e97 Binary files /dev/null and b/docs/img/pagination-buttons.webm differ diff --git a/docs/img/password-input-visible.png b/docs/img/password-input-visible.png new file mode 100644 index 00000000000..6833f836714 Binary files /dev/null and b/docs/img/password-input-visible.png differ diff --git a/docs/img/password-input.png b/docs/img/password-input.png new file mode 100644 index 00000000000..8133f0e324e Binary files /dev/null and b/docs/img/password-input.png differ diff --git a/docs/img/post-edition.png b/docs/img/post-edition.png index 517df15a213..c965048b8c1 100644 Binary files a/docs/img/post-edition.png and b/docs/img/post-edition.png differ diff --git a/docs/img/post-show.png b/docs/img/post-show.png index c3dfd40fa7d..bdb9ccca5e1 100644 Binary files a/docs/img/post-show.png and b/docs/img/post-show.png differ diff --git a/docs/img/premium.svg b/docs/img/premium.svg new file mode 100644 index 00000000000..324bd67bcba --- /dev/null +++ b/docs/img/premium.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/img/prev-next-buttons-edit.mp4 b/docs/img/prev-next-buttons-edit.mp4 new file mode 100644 index 00000000000..09d2afc31b0 Binary files /dev/null and b/docs/img/prev-next-buttons-edit.mp4 differ diff --git a/docs/img/prev-next-buttons-edit.webm b/docs/img/prev-next-buttons-edit.webm new file mode 100644 index 00000000000..54a7783903d Binary files /dev/null and b/docs/img/prev-next-buttons-edit.webm differ diff --git a/docs/img/prev-next-buttons-show.mp4 b/docs/img/prev-next-buttons-show.mp4 new file mode 100644 index 00000000000..d270a4ae3a4 Binary files /dev/null and b/docs/img/prev-next-buttons-show.mp4 differ diff --git a/docs/img/prev-next-buttons-show.webm b/docs/img/prev-next-buttons-show.webm new file mode 100644 index 00000000000..caeffc1ca65 Binary files /dev/null and b/docs/img/prev-next-buttons-show.webm differ diff --git a/docs/img/prev-next-buttons.mp4 b/docs/img/prev-next-buttons.mp4 new file mode 100644 index 00000000000..20c25e677cc Binary files /dev/null and b/docs/img/prev-next-buttons.mp4 differ diff --git a/docs/img/prev-next-buttons.webm b/docs/img/prev-next-buttons.webm new file mode 100644 index 00000000000..b14575193f3 Binary files /dev/null and b/docs/img/prev-next-buttons.webm differ diff --git a/docs/img/providers.png b/docs/img/providers.png new file mode 100644 index 00000000000..d8fb881cc5e Binary files /dev/null and b/docs/img/providers.png differ diff --git a/docs/img/quick_filters.gif b/docs/img/quick_filters.gif new file mode 100644 index 00000000000..7276a41ed88 Binary files /dev/null and b/docs/img/quick_filters.gif differ diff --git a/docs/img/quick_filters.mp4 b/docs/img/quick_filters.mp4 new file mode 100644 index 00000000000..6f7802652c9 Binary files /dev/null and b/docs/img/quick_filters.mp4 differ diff --git a/docs/img/quick_filters.webm b/docs/img/quick_filters.webm new file mode 100644 index 00000000000..bb7a4298841 Binary files /dev/null and b/docs/img/quick_filters.webm differ diff --git a/docs/img/ra-longform-cardinality.png b/docs/img/ra-longform-cardinality.png new file mode 100644 index 00000000000..b16610470ec Binary files /dev/null and b/docs/img/ra-longform-cardinality.png differ diff --git a/docs/img/ra-longform-overview.gif b/docs/img/ra-longform-overview.gif new file mode 100644 index 00000000000..44287270d68 Binary files /dev/null and b/docs/img/ra-longform-overview.gif differ diff --git a/docs/img/ra-longform-overview.mp4 b/docs/img/ra-longform-overview.mp4 new file mode 100644 index 00000000000..9400280dfc8 Binary files /dev/null and b/docs/img/ra-longform-overview.mp4 differ diff --git a/docs/img/ra-longform-overview.webm b/docs/img/ra-longform-overview.webm new file mode 100644 index 00000000000..306800146c2 Binary files /dev/null and b/docs/img/ra-longform-overview.webm differ diff --git a/docs/img/ra-rbac.mp4 b/docs/img/ra-rbac.mp4 new file mode 100644 index 00000000000..be50c1b9c96 Binary files /dev/null and b/docs/img/ra-rbac.mp4 differ diff --git a/docs/img/ra-search-keyboard-shortcut-icon.png b/docs/img/ra-search-keyboard-shortcut-icon.png new file mode 100644 index 00000000000..fda7f5efab3 Binary files /dev/null and b/docs/img/ra-search-keyboard-shortcut-icon.png differ diff --git a/docs/img/ra-tree-lazy.mp4 b/docs/img/ra-tree-lazy.mp4 new file mode 100644 index 00000000000..60eb6ce9ef4 Binary files /dev/null and b/docs/img/ra-tree-lazy.mp4 differ diff --git a/docs/img/ra-tree-lazy.webm b/docs/img/ra-tree-lazy.webm new file mode 100644 index 00000000000..f5eb59fb367 Binary files /dev/null and b/docs/img/ra-tree-lazy.webm differ diff --git a/docs/img/ra-tree.gif b/docs/img/ra-tree.gif index 9e09996ebef..1bcbc78d39a 100644 Binary files a/docs/img/ra-tree.gif and b/docs/img/ra-tree.gif differ diff --git a/docs/img/ra-tree.mp4 b/docs/img/ra-tree.mp4 new file mode 100644 index 00000000000..99475ed8f0a Binary files /dev/null and b/docs/img/ra-tree.mp4 differ diff --git a/docs/img/ra-tree.webm b/docs/img/ra-tree.webm new file mode 100644 index 00000000000..c88e3652a69 Binary files /dev/null and b/docs/img/ra-tree.webm differ diff --git a/docs/img/radiantDarkTheme1.jpg b/docs/img/radiantDarkTheme1.jpg new file mode 100644 index 00000000000..ef9afcdec20 Binary files /dev/null and b/docs/img/radiantDarkTheme1.jpg differ diff --git a/docs/img/radiantDarkTheme2.jpg b/docs/img/radiantDarkTheme2.jpg new file mode 100644 index 00000000000..ed9d25c459b Binary files /dev/null and b/docs/img/radiantDarkTheme2.jpg differ diff --git a/docs/img/radiantLightTheme1.jpg b/docs/img/radiantLightTheme1.jpg new file mode 100644 index 00000000000..09fd9e3923f Binary files /dev/null and b/docs/img/radiantLightTheme1.jpg differ diff --git a/docs/img/radiantLightTheme2.jpg b/docs/img/radiantLightTheme2.jpg new file mode 100644 index 00000000000..228f29bb8a2 Binary files /dev/null and b/docs/img/radiantLightTheme2.jpg differ diff --git a/docs/img/radio-button-group-input-row.gif b/docs/img/radio-button-group-input-row.gif new file mode 100644 index 00000000000..3a00fa7df9f Binary files /dev/null and b/docs/img/radio-button-group-input-row.gif differ diff --git a/docs/img/radio-button-group-input-row.mp4 b/docs/img/radio-button-group-input-row.mp4 new file mode 100644 index 00000000000..e037c202452 Binary files /dev/null and b/docs/img/radio-button-group-input-row.mp4 differ diff --git a/docs/img/radio-button-group-input-row.webm b/docs/img/radio-button-group-input-row.webm new file mode 100644 index 00000000000..ac0e9a439b9 Binary files /dev/null and b/docs/img/radio-button-group-input-row.webm differ diff --git a/docs/img/radio-button-group-input.gif b/docs/img/radio-button-group-input.gif new file mode 100644 index 00000000000..6235e064e7e Binary files /dev/null and b/docs/img/radio-button-group-input.gif differ diff --git a/docs/img/radio-button-group-input.mp4 b/docs/img/radio-button-group-input.mp4 new file mode 100644 index 00000000000..63a181d7aff Binary files /dev/null and b/docs/img/radio-button-group-input.mp4 differ diff --git a/docs/img/radio-button-group-input.png b/docs/img/radio-button-group-input.png deleted file mode 100644 index ce39f6d562d..00000000000 Binary files a/docs/img/radio-button-group-input.png and /dev/null differ diff --git a/docs/img/radio-button-group-input.webm b/docs/img/radio-button-group-input.webm new file mode 100644 index 00000000000..0d715eaad43 Binary files /dev/null and b/docs/img/radio-button-group-input.webm differ diff --git a/docs/img/react-admin-demo-still.png b/docs/img/react-admin-demo-still.png index 02aa8edfbd3..d7f1987f9df 100644 Binary files a/docs/img/react-admin-demo-still.png and b/docs/img/react-admin-demo-still.png differ diff --git a/docs/img/react-query-devtools.png b/docs/img/react-query-devtools.png new file mode 100644 index 00000000000..189ac2179d1 Binary files /dev/null and b/docs/img/react-query-devtools.png differ diff --git a/docs/img/reference-array-field.png b/docs/img/reference-array-field.png new file mode 100644 index 00000000000..795afde4e24 Binary files /dev/null and b/docs/img/reference-array-field.png differ diff --git a/docs/img/reference-array-input-datatable-input-dialog.png b/docs/img/reference-array-input-datatable-input-dialog.png new file mode 100644 index 00000000000..a911c6ccc66 Binary files /dev/null and b/docs/img/reference-array-input-datatable-input-dialog.png differ diff --git a/docs/img/reference-array-input.gif b/docs/img/reference-array-input.gif new file mode 100644 index 00000000000..6ff2d9c35bc Binary files /dev/null and b/docs/img/reference-array-input.gif differ diff --git a/docs/img/reference-array-input.mp4 b/docs/img/reference-array-input.mp4 new file mode 100644 index 00000000000..75d04f86e7d Binary files /dev/null and b/docs/img/reference-array-input.mp4 differ diff --git a/docs/img/reference-array-input.webm b/docs/img/reference-array-input.webm new file mode 100644 index 00000000000..e0c3d68d995 Binary files /dev/null and b/docs/img/reference-array-input.webm differ diff --git a/docs/img/reference-field-link.png b/docs/img/reference-field-link.png new file mode 100644 index 00000000000..7b362e491a5 Binary files /dev/null and b/docs/img/reference-field-link.png differ diff --git a/docs/img/reference-field.png b/docs/img/reference-field.png index 45a495fe23e..55d06e6b47e 100644 Binary files a/docs/img/reference-field.png and b/docs/img/reference-field.png differ diff --git a/docs/img/reference-input-datatable-input-dialog.png b/docs/img/reference-input-datatable-input-dialog.png new file mode 100644 index 00000000000..f0e0fdb6338 Binary files /dev/null and b/docs/img/reference-input-datatable-input-dialog.png differ diff --git a/docs/img/reference-input-filter.mp4 b/docs/img/reference-input-filter.mp4 new file mode 100644 index 00000000000..72e66fab1b8 Binary files /dev/null and b/docs/img/reference-input-filter.mp4 differ diff --git a/docs/img/reference-input-filter.webm b/docs/img/reference-input-filter.webm new file mode 100644 index 00000000000..610ea152049 Binary files /dev/null and b/docs/img/reference-input-filter.webm differ diff --git a/docs/img/reference-input.gif b/docs/img/reference-input.gif index 271e3b356bc..d4843e4b7bb 100644 Binary files a/docs/img/reference-input.gif and b/docs/img/reference-input.gif differ diff --git a/docs/img/reference-input.mp4 b/docs/img/reference-input.mp4 new file mode 100644 index 00000000000..e9b5cf2b840 Binary files /dev/null and b/docs/img/reference-input.mp4 differ diff --git a/docs/img/reference-input.webm b/docs/img/reference-input.webm new file mode 100644 index 00000000000..27a1db3a25c Binary files /dev/null and b/docs/img/reference-input.webm differ diff --git a/docs/img/reference-many-field-datagrid.png b/docs/img/reference-many-field-datagrid.png index 8dba280f236..2fc89a9d060 100644 Binary files a/docs/img/reference-many-field-datagrid.png and b/docs/img/reference-many-field-datagrid.png differ diff --git a/docs/img/reference-many-field-single-field-list.png b/docs/img/reference-many-field-single-field-list.png index e9fa7d153a9..e7a49e1a40f 100644 Binary files a/docs/img/reference-many-field-single-field-list.png and b/docs/img/reference-many-field-single-field-list.png differ diff --git a/docs/img/reference-many-input-band-edit.png b/docs/img/reference-many-input-band-edit.png new file mode 100644 index 00000000000..68abb3cb891 Binary files /dev/null and b/docs/img/reference-many-input-band-edit.png differ diff --git a/docs/img/reference-many-input.gif b/docs/img/reference-many-input.gif new file mode 100644 index 00000000000..dca0ce15716 Binary files /dev/null and b/docs/img/reference-many-input.gif differ diff --git a/docs/img/reference-many-input.mp4 b/docs/img/reference-many-input.mp4 new file mode 100644 index 00000000000..05eec7c8860 Binary files /dev/null and b/docs/img/reference-many-input.mp4 differ diff --git a/docs/img/reference-many-input.webm b/docs/img/reference-many-input.webm new file mode 100644 index 00000000000..5dd77bb23cf Binary files /dev/null and b/docs/img/reference-many-input.webm differ diff --git a/docs/img/reference-many-to-many-field.png b/docs/img/reference-many-to-many-field.png new file mode 100644 index 00000000000..ca0b7b96847 Binary files /dev/null and b/docs/img/reference-many-to-many-field.png differ diff --git a/docs/img/reference-one-field-many.png b/docs/img/reference-one-field-many.png new file mode 100644 index 00000000000..452cb793e18 Binary files /dev/null and b/docs/img/reference-one-field-many.png differ diff --git a/docs/img/reference-one-field.png b/docs/img/reference-one-field.png new file mode 100644 index 00000000000..3c5aadc1cfe Binary files /dev/null and b/docs/img/reference-one-field.png differ diff --git a/docs/img/reference-one-input.mp4 b/docs/img/reference-one-input.mp4 new file mode 100644 index 00000000000..121660dad60 Binary files /dev/null and b/docs/img/reference-one-input.mp4 differ diff --git a/docs/img/reference-one-input.webm b/docs/img/reference-one-input.webm new file mode 100644 index 00000000000..5d83f543dcc Binary files /dev/null and b/docs/img/reference-one-input.webm differ diff --git a/docs/img/reference_field_show.png b/docs/img/reference_field_show.png new file mode 100644 index 00000000000..c38e2f03918 Binary files /dev/null and b/docs/img/reference_field_show.png differ diff --git a/docs/img/reference_many_count.webp b/docs/img/reference_many_count.webp new file mode 100644 index 00000000000..b0602b14429 Binary files /dev/null and b/docs/img/reference_many_count.webp differ diff --git a/docs/img/reference_many_field.png b/docs/img/reference_many_field.png new file mode 100644 index 00000000000..161d239f194 Binary files /dev/null and b/docs/img/reference_many_field.png differ diff --git a/docs/img/remix-structure.png b/docs/img/remix-structure.png new file mode 100644 index 00000000000..9dad90537e5 Binary files /dev/null and b/docs/img/remix-structure.png differ diff --git a/docs/img/resettable-text-input.gif b/docs/img/resettable-text-input.gif new file mode 100644 index 00000000000..0112726104d Binary files /dev/null and b/docs/img/resettable-text-input.gif differ diff --git a/docs/img/resettable-text-input.mp4 b/docs/img/resettable-text-input.mp4 new file mode 100644 index 00000000000..427d9b19b0e Binary files /dev/null and b/docs/img/resettable-text-input.mp4 differ diff --git a/docs/img/resettable-text-input.png b/docs/img/resettable-text-input.png deleted file mode 100644 index c697a2817eb..00000000000 Binary files a/docs/img/resettable-text-input.png and /dev/null differ diff --git a/docs/img/resettable-text-input.webm b/docs/img/resettable-text-input.webm new file mode 100644 index 00000000000..5818e58f799 Binary files /dev/null and b/docs/img/resettable-text-input.webm differ diff --git a/docs/img/responsive-list.gif b/docs/img/responsive-list.gif index a1661e4f409..ee0d6b8391c 100644 Binary files a/docs/img/responsive-list.gif and b/docs/img/responsive-list.gif differ diff --git a/docs/img/responsive-list.mp4 b/docs/img/responsive-list.mp4 new file mode 100644 index 00000000000..f7bb4707a04 Binary files /dev/null and b/docs/img/responsive-list.mp4 differ diff --git a/docs/img/responsive-list.webm b/docs/img/responsive-list.webm new file mode 100644 index 00000000000..db863c0ad4a Binary files /dev/null and b/docs/img/responsive-list.webm differ diff --git a/docs/img/responsive.mp4 b/docs/img/responsive.mp4 new file mode 100644 index 00000000000..494941596cf Binary files /dev/null and b/docs/img/responsive.mp4 differ diff --git a/docs/img/responsive.webm b/docs/img/responsive.webm new file mode 100644 index 00000000000..f0eebe3e89d Binary files /dev/null and b/docs/img/responsive.webm differ diff --git a/docs/img/rich-text-field.png b/docs/img/rich-text-field.png index dbee62c9b70..99833d0a4fe 100644 Binary files a/docs/img/rich-text-field.png and b/docs/img/rich-text-field.png differ diff --git a/docs/img/rich-text-input.gif b/docs/img/rich-text-input.gif new file mode 100644 index 00000000000..13d2a776eef Binary files /dev/null and b/docs/img/rich-text-input.gif differ diff --git a/docs/img/rich-text-input.mp4 b/docs/img/rich-text-input.mp4 new file mode 100644 index 00000000000..29bba3bf3f3 Binary files /dev/null and b/docs/img/rich-text-input.mp4 differ diff --git a/docs/img/rich-text-input.png b/docs/img/rich-text-input.png deleted file mode 100644 index 6557dc44d69..00000000000 Binary files a/docs/img/rich-text-input.png and /dev/null differ diff --git a/docs/img/search_input.gif b/docs/img/search_input.gif new file mode 100644 index 00000000000..26568e3fd61 Binary files /dev/null and b/docs/img/search_input.gif differ diff --git a/docs/img/search_input.mp4 b/docs/img/search_input.mp4 new file mode 100644 index 00000000000..c32bf161ee9 Binary files /dev/null and b/docs/img/search_input.mp4 differ diff --git a/docs/img/search_input.webm b/docs/img/search_input.webm new file mode 100644 index 00000000000..a08d7cc3a0f Binary files /dev/null and b/docs/img/search_input.webm differ diff --git a/docs/img/select-array-input-create.gif b/docs/img/select-array-input-create.gif new file mode 100644 index 00000000000..786496057d4 Binary files /dev/null and b/docs/img/select-array-input-create.gif differ diff --git a/docs/img/select-array-input-create.mp4 b/docs/img/select-array-input-create.mp4 new file mode 100644 index 00000000000..319342b29e3 Binary files /dev/null and b/docs/img/select-array-input-create.mp4 differ diff --git a/docs/img/select-array-input-create.webm b/docs/img/select-array-input-create.webm new file mode 100644 index 00000000000..1ae9d4ef62c Binary files /dev/null and b/docs/img/select-array-input-create.webm differ diff --git a/docs/img/select-array-input.gif b/docs/img/select-array-input.gif index 1f809a20701..f71fbc005c2 100644 Binary files a/docs/img/select-array-input.gif and b/docs/img/select-array-input.gif differ diff --git a/docs/img/select-array-input.mp4 b/docs/img/select-array-input.mp4 new file mode 100644 index 00000000000..dc8cd1cb740 Binary files /dev/null and b/docs/img/select-array-input.mp4 differ diff --git a/docs/img/select-array-input.webm b/docs/img/select-array-input.webm new file mode 100644 index 00000000000..3f7225cc6d0 Binary files /dev/null and b/docs/img/select-array-input.webm differ diff --git a/docs/img/select-input.gif b/docs/img/select-input.gif index 520020e8b53..cc1397e138b 100644 Binary files a/docs/img/select-input.gif and b/docs/img/select-input.gif differ diff --git a/docs/img/select-input.mp4 b/docs/img/select-input.mp4 new file mode 100644 index 00000000000..ea9fd905743 Binary files /dev/null and b/docs/img/select-input.mp4 differ diff --git a/docs/img/select-input.webm b/docs/img/select-input.webm new file mode 100644 index 00000000000..7e8073eb749 Binary files /dev/null and b/docs/img/select-input.webm differ diff --git a/docs/img/show-button.png b/docs/img/show-button.png new file mode 100644 index 00000000000..feb746b93b4 Binary files /dev/null and b/docs/img/show-button.png differ diff --git a/docs/img/show-line-tree.png b/docs/img/show-line-tree.png new file mode 100644 index 00000000000..98221599bdf Binary files /dev/null and b/docs/img/show-line-tree.png differ diff --git a/docs/img/simple-form-iterator-fullWidth-false.png b/docs/img/simple-form-iterator-fullWidth-false.png new file mode 100644 index 00000000000..fe193b9d103 Binary files /dev/null and b/docs/img/simple-form-iterator-fullWidth-false.png differ diff --git a/docs/img/simple-form-iterator-fullWidth.png b/docs/img/simple-form-iterator-fullWidth.png new file mode 100644 index 00000000000..3201c312319 Binary files /dev/null and b/docs/img/simple-form-iterator-fullWidth.png differ diff --git a/docs/img/simple-form-iterator-inline.webp b/docs/img/simple-form-iterator-inline.webp new file mode 100644 index 00000000000..639a2799932 Binary files /dev/null and b/docs/img/simple-form-iterator-inline.webp differ diff --git a/docs/img/simple-form-iterator-not-inline.webp b/docs/img/simple-form-iterator-not-inline.webp new file mode 100644 index 00000000000..8f2e0ca0129 Binary files /dev/null and b/docs/img/simple-form-iterator-not-inline.webp differ diff --git a/docs/img/simple-form.webp b/docs/img/simple-form.webp new file mode 100644 index 00000000000..2c578109aa3 Binary files /dev/null and b/docs/img/simple-form.webp differ diff --git a/docs/img/simple-list.gif b/docs/img/simple-list.gif new file mode 100644 index 00000000000..b78a5d38efe Binary files /dev/null and b/docs/img/simple-list.gif differ diff --git a/docs/img/simple-list.mp4 b/docs/img/simple-list.mp4 new file mode 100644 index 00000000000..9f36910b100 Binary files /dev/null and b/docs/img/simple-list.mp4 differ diff --git a/docs/img/simple-list.webm b/docs/img/simple-list.webm new file mode 100644 index 00000000000..ebb3a127e24 Binary files /dev/null and b/docs/img/simple-list.webm differ diff --git a/docs/img/simple-post-list.png b/docs/img/simple-post-list.png index 789341fd596..0472d54df88 100644 Binary files a/docs/img/simple-post-list.png and b/docs/img/simple-post-list.png differ diff --git a/docs/img/simpleform-layout.png b/docs/img/simpleform-layout.png new file mode 100644 index 00000000000..96325cabd2b Binary files /dev/null and b/docs/img/simpleform-layout.png differ diff --git a/docs/img/singlefieldlist-datagrid.png b/docs/img/singlefieldlist-datagrid.png new file mode 100644 index 00000000000..b0651489ae6 Binary files /dev/null and b/docs/img/singlefieldlist-datagrid.png differ diff --git a/docs/img/singlefieldlist.png b/docs/img/singlefieldlist.png new file mode 100644 index 00000000000..16a380c50ea Binary files /dev/null and b/docs/img/singlefieldlist.png differ diff --git a/docs/img/sort-button.gif b/docs/img/sort-button.gif new file mode 100644 index 00000000000..52df8c1ce30 Binary files /dev/null and b/docs/img/sort-button.gif differ diff --git a/docs/img/sort-button.mp4 b/docs/img/sort-button.mp4 new file mode 100644 index 00000000000..fc6f2fb154b Binary files /dev/null and b/docs/img/sort-button.mp4 differ diff --git a/docs/img/sort-button.webm b/docs/img/sort-button.webm new file mode 100644 index 00000000000..775562565d5 Binary files /dev/null and b/docs/img/sort-button.webm differ diff --git a/docs/img/sort-column-header.gif b/docs/img/sort-column-header.gif new file mode 100644 index 00000000000..3c199c766aa Binary files /dev/null and b/docs/img/sort-column-header.gif differ diff --git a/docs/img/sort-column-header.mp4 b/docs/img/sort-column-header.mp4 new file mode 100644 index 00000000000..15ac41d86bc Binary files /dev/null and b/docs/img/sort-column-header.mp4 differ diff --git a/docs/img/sort-column-header.webm b/docs/img/sort-column-header.webm new file mode 100644 index 00000000000..5b361a6fc9c Binary files /dev/null and b/docs/img/sort-column-header.webm differ diff --git a/docs/img/stack-row.webp b/docs/img/stack-row.webp new file mode 100644 index 00000000000..c514bae251b Binary files /dev/null and b/docs/img/stack-row.webp differ diff --git a/docs/img/stack.webp b/docs/img/stack.webp new file mode 100644 index 00000000000..e2fbb11fb7a Binary files /dev/null and b/docs/img/stack.webp differ diff --git a/docs/img/sx-class-name.png b/docs/img/sx-class-name.png new file mode 100644 index 00000000000..161dd46428a Binary files /dev/null and b/docs/img/sx-class-name.png differ diff --git a/docs/img/sx-documentation.png b/docs/img/sx-documentation.png new file mode 100644 index 00000000000..51945b1f867 Binary files /dev/null and b/docs/img/sx-documentation.png differ diff --git a/docs/img/tabbed-form.gif b/docs/img/tabbed-form.gif index 13ecb9905c1..e2dd1ec5bd9 100644 Binary files a/docs/img/tabbed-form.gif and b/docs/img/tabbed-form.gif differ diff --git a/docs/img/tabbed-form.mp4 b/docs/img/tabbed-form.mp4 new file mode 100644 index 00000000000..38c466d95fd Binary files /dev/null and b/docs/img/tabbed-form.mp4 differ diff --git a/docs/img/tabbed-form.webm b/docs/img/tabbed-form.webm new file mode 100644 index 00000000000..5588a24efba Binary files /dev/null and b/docs/img/tabbed-form.webm differ diff --git a/docs/img/tabbed-show.mp4 b/docs/img/tabbed-show.mp4 new file mode 100644 index 00000000000..cd736be4540 Binary files /dev/null and b/docs/img/tabbed-show.mp4 differ diff --git a/docs/img/tabbed-show.webm b/docs/img/tabbed-show.webm new file mode 100644 index 00000000000..28ebe8cbc76 Binary files /dev/null and b/docs/img/tabbed-show.webm differ diff --git a/docs/img/tanstack-admin.png b/docs/img/tanstack-admin.png new file mode 100644 index 00000000000..dbac3711140 Binary files /dev/null and b/docs/img/tanstack-admin.png differ diff --git a/docs/img/tanstack-structure.png b/docs/img/tanstack-structure.png new file mode 100644 index 00000000000..b9cbb47ee7e Binary files /dev/null and b/docs/img/tanstack-structure.png differ diff --git a/docs/img/team-wiki.jpg b/docs/img/team-wiki.jpg new file mode 100644 index 00000000000..544ee234917 Binary files /dev/null and b/docs/img/team-wiki.jpg differ diff --git a/docs/img/text-array-field.png b/docs/img/text-array-field.png new file mode 100644 index 00000000000..15990b50fa5 Binary files /dev/null and b/docs/img/text-array-field.png differ diff --git a/docs/img/text-input.gif b/docs/img/text-input.gif new file mode 100644 index 00000000000..112d4ee875a Binary files /dev/null and b/docs/img/text-input.gif differ diff --git a/docs/img/text-input.mp4 b/docs/img/text-input.mp4 new file mode 100644 index 00000000000..4ce22fedc9d Binary files /dev/null and b/docs/img/text-input.mp4 differ diff --git a/docs/img/text-input.png b/docs/img/text-input.png deleted file mode 100644 index b1ac3a81c5d..00000000000 Binary files a/docs/img/text-input.png and /dev/null differ diff --git a/docs/img/text-input.webm b/docs/img/text-input.webm new file mode 100644 index 00000000000..fb03b97ac88 Binary files /dev/null and b/docs/img/text-input.webm differ diff --git a/docs/img/time-input-edge.gif b/docs/img/time-input-edge.gif new file mode 100644 index 00000000000..2f2ad58f0e6 Binary files /dev/null and b/docs/img/time-input-edge.gif differ diff --git a/docs/img/time-input-edge.mp4 b/docs/img/time-input-edge.mp4 new file mode 100644 index 00000000000..d5aa0dde9ec Binary files /dev/null and b/docs/img/time-input-edge.mp4 differ diff --git a/docs/img/time-input-edge.webm b/docs/img/time-input-edge.webm new file mode 100644 index 00000000000..c9caf05654a Binary files /dev/null and b/docs/img/time-input-edge.webm differ diff --git a/docs/img/time-input-firefox.gif b/docs/img/time-input-firefox.gif new file mode 100644 index 00000000000..24d9c8bfbb5 Binary files /dev/null and b/docs/img/time-input-firefox.gif differ diff --git a/docs/img/time-input-firefox.mp4 b/docs/img/time-input-firefox.mp4 new file mode 100644 index 00000000000..12387196ed4 Binary files /dev/null and b/docs/img/time-input-firefox.mp4 differ diff --git a/docs/img/time-input-firefox.webm b/docs/img/time-input-firefox.webm new file mode 100644 index 00000000000..1745fec8028 Binary files /dev/null and b/docs/img/time-input-firefox.webm differ diff --git a/docs/img/todos.jpg b/docs/img/todos.jpg new file mode 100644 index 00000000000..3c7d3cf7e4f Binary files /dev/null and b/docs/img/todos.jpg differ diff --git a/docs/img/translatable-fields-basic.mp4 b/docs/img/translatable-fields-basic.mp4 new file mode 100644 index 00000000000..c3fa6744c46 Binary files /dev/null and b/docs/img/translatable-fields-basic.mp4 differ diff --git a/docs/img/translatable-fields-basic.webm b/docs/img/translatable-fields-basic.webm new file mode 100644 index 00000000000..dc25275544c Binary files /dev/null and b/docs/img/translatable-fields-basic.webm differ diff --git a/docs/img/translatable-fields-with-custom-selector.mp4 b/docs/img/translatable-fields-with-custom-selector.mp4 new file mode 100644 index 00000000000..80c1f334dd6 Binary files /dev/null and b/docs/img/translatable-fields-with-custom-selector.mp4 differ diff --git a/docs/img/translatable-fields-with-custom-selector.webm b/docs/img/translatable-fields-with-custom-selector.webm new file mode 100644 index 00000000000..db7c36d545b Binary files /dev/null and b/docs/img/translatable-fields-with-custom-selector.webm differ diff --git a/docs/img/translatable-input.gif b/docs/img/translatable-input.gif new file mode 100644 index 00000000000..11589d10431 Binary files /dev/null and b/docs/img/translatable-input.gif differ diff --git a/docs/img/translatable-input.mp4 b/docs/img/translatable-input.mp4 new file mode 100644 index 00000000000..a87d771da0c Binary files /dev/null and b/docs/img/translatable-input.mp4 differ diff --git a/docs/img/translatable-input.webm b/docs/img/translatable-input.webm new file mode 100644 index 00000000000..5ca01b05e51 Binary files /dev/null and b/docs/img/translatable-input.webm differ diff --git a/docs/img/translation.gif b/docs/img/translation.gif new file mode 100644 index 00000000000..7531704408d Binary files /dev/null and b/docs/img/translation.gif differ diff --git a/docs/img/translation.mp4 b/docs/img/translation.mp4 new file mode 100644 index 00000000000..547d8948e6d Binary files /dev/null and b/docs/img/translation.mp4 differ diff --git a/docs/img/translation.webm b/docs/img/translation.webm new file mode 100644 index 00000000000..fe8d975ad99 Binary files /dev/null and b/docs/img/translation.webm differ diff --git a/docs/img/tree.png b/docs/img/tree.png new file mode 100644 index 00000000000..7508a016dbc Binary files /dev/null and b/docs/img/tree.png differ diff --git a/docs/img/treewithdetails.gif b/docs/img/treewithdetails.gif new file mode 100644 index 00000000000..dafd4da39a0 Binary files /dev/null and b/docs/img/treewithdetails.gif differ diff --git a/docs/img/treewithdetails.mp4 b/docs/img/treewithdetails.mp4 new file mode 100644 index 00000000000..56bb3094533 Binary files /dev/null and b/docs/img/treewithdetails.mp4 differ diff --git a/docs/img/treewithdetails.webm b/docs/img/treewithdetails.webm new file mode 100644 index 00000000000..d71132698ff Binary files /dev/null and b/docs/img/treewithdetails.webm differ diff --git a/docs/img/tutorial_custom_styles.png b/docs/img/tutorial_custom_styles.png index a1dbbc4e803..2deec6d2746 100644 Binary files a/docs/img/tutorial_custom_styles.png and b/docs/img/tutorial_custom_styles.png differ diff --git a/docs/img/tutorial_edit_guesser.gif b/docs/img/tutorial_edit_guesser.gif index 8f6d9b6cc07..dfc89dcf10e 100644 Binary files a/docs/img/tutorial_edit_guesser.gif and b/docs/img/tutorial_edit_guesser.gif differ diff --git a/docs/img/tutorial_edit_guesser.mp4 b/docs/img/tutorial_edit_guesser.mp4 new file mode 100644 index 00000000000..c2eb50fe136 Binary files /dev/null and b/docs/img/tutorial_edit_guesser.mp4 differ diff --git a/docs/img/tutorial_edit_guesser.webm b/docs/img/tutorial_edit_guesser.webm new file mode 100644 index 00000000000..b5935371d49 Binary files /dev/null and b/docs/img/tutorial_edit_guesser.webm differ diff --git a/docs/img/tutorial_empty.png b/docs/img/tutorial_empty.png index 0138df9140a..b3cfb7e815d 100644 Binary files a/docs/img/tutorial_empty.png and b/docs/img/tutorial_empty.png differ diff --git a/docs/img/tutorial_guessed_list.png b/docs/img/tutorial_guessed_list.png index 7ae0f537075..86ecda525a6 100644 Binary files a/docs/img/tutorial_guessed_list.png and b/docs/img/tutorial_guessed_list.png differ diff --git a/docs/img/tutorial_guessed_post_list.png b/docs/img/tutorial_guessed_post_list.png index f2051c680be..f8aa440cfb2 100644 Binary files a/docs/img/tutorial_guessed_post_list.png and b/docs/img/tutorial_guessed_post_list.png differ diff --git a/docs/img/tutorial_list_user_name.png b/docs/img/tutorial_list_user_name.png index bb8c381310d..d61a70f9d54 100644 Binary files a/docs/img/tutorial_list_user_name.png and b/docs/img/tutorial_list_user_name.png differ diff --git a/docs/img/tutorial_list_user_name_link.png b/docs/img/tutorial_list_user_name_link.png new file mode 100644 index 00000000000..a16b4445ae0 Binary files /dev/null and b/docs/img/tutorial_list_user_name_link.png differ diff --git a/docs/img/tutorial_mobile_post_list.gif b/docs/img/tutorial_mobile_post_list.gif index be44564cef6..a8ddc59d6bd 100644 Binary files a/docs/img/tutorial_mobile_post_list.gif and b/docs/img/tutorial_mobile_post_list.gif differ diff --git a/docs/img/tutorial_mobile_post_list.mp4 b/docs/img/tutorial_mobile_post_list.mp4 new file mode 100644 index 00000000000..a16517ffb22 Binary files /dev/null and b/docs/img/tutorial_mobile_post_list.mp4 differ diff --git a/docs/img/tutorial_mobile_post_list.webm b/docs/img/tutorial_mobile_post_list.webm new file mode 100644 index 00000000000..5087339199a Binary files /dev/null and b/docs/img/tutorial_mobile_post_list.webm differ diff --git a/docs/img/tutorial_mobile_user_list.gif b/docs/img/tutorial_mobile_user_list.gif new file mode 100644 index 00000000000..be309fa6848 Binary files /dev/null and b/docs/img/tutorial_mobile_user_list.gif differ diff --git a/docs/img/tutorial_mobile_user_list.mp4 b/docs/img/tutorial_mobile_user_list.mp4 new file mode 100644 index 00000000000..c324286a148 Binary files /dev/null and b/docs/img/tutorial_mobile_user_list.mp4 differ diff --git a/docs/img/tutorial_mobile_user_list.webm b/docs/img/tutorial_mobile_user_list.webm new file mode 100644 index 00000000000..d1d4f734aad Binary files /dev/null and b/docs/img/tutorial_mobile_user_list.webm differ diff --git a/docs/img/tutorial_overview.mp4 b/docs/img/tutorial_overview.mp4 new file mode 100644 index 00000000000..672a691f6ca Binary files /dev/null and b/docs/img/tutorial_overview.mp4 differ diff --git a/docs/img/tutorial_overview.png b/docs/img/tutorial_overview.png new file mode 100644 index 00000000000..334b19b8e16 Binary files /dev/null and b/docs/img/tutorial_overview.png differ diff --git a/docs/img/tutorial_post_create.gif b/docs/img/tutorial_post_create.gif index a77a5d5a367..63d50b959a3 100644 Binary files a/docs/img/tutorial_post_create.gif and b/docs/img/tutorial_post_create.gif differ diff --git a/docs/img/tutorial_post_create.mp4 b/docs/img/tutorial_post_create.mp4 new file mode 100644 index 00000000000..3917e349679 Binary files /dev/null and b/docs/img/tutorial_post_create.mp4 differ diff --git a/docs/img/tutorial_post_create.webm b/docs/img/tutorial_post_create.webm new file mode 100644 index 00000000000..a2d262e55be Binary files /dev/null and b/docs/img/tutorial_post_create.webm differ diff --git a/docs/img/tutorial_post_edit_undo.gif b/docs/img/tutorial_post_edit_undo.gif index e3e96dc8f8d..d23223c47d7 100644 Binary files a/docs/img/tutorial_post_edit_undo.gif and b/docs/img/tutorial_post_edit_undo.gif differ diff --git a/docs/img/tutorial_post_edit_undo.mp4 b/docs/img/tutorial_post_edit_undo.mp4 new file mode 100644 index 00000000000..856f8f63404 Binary files /dev/null and b/docs/img/tutorial_post_edit_undo.mp4 differ diff --git a/docs/img/tutorial_post_edit_undo.webm b/docs/img/tutorial_post_edit_undo.webm new file mode 100644 index 00000000000..b38540c83a7 Binary files /dev/null and b/docs/img/tutorial_post_edit_undo.webm differ diff --git a/docs/img/tutorial_post_list_less_columns.png b/docs/img/tutorial_post_list_less_columns.png index b996096e94c..9b7c6160376 100644 Binary files a/docs/img/tutorial_post_list_less_columns.png and b/docs/img/tutorial_post_list_less_columns.png differ diff --git a/docs/img/tutorial_post_title.png b/docs/img/tutorial_post_title.png index a78aee72486..bde27bff645 100644 Binary files a/docs/img/tutorial_post_title.png and b/docs/img/tutorial_post_title.png differ diff --git a/docs/img/tutorial_show_user.mp4 b/docs/img/tutorial_show_user.mp4 new file mode 100644 index 00000000000..87e496fa918 Binary files /dev/null and b/docs/img/tutorial_show_user.mp4 differ diff --git a/docs/img/tutorial_simple_list.webp b/docs/img/tutorial_simple_list.webp new file mode 100644 index 00000000000..baf57553a7b Binary files /dev/null and b/docs/img/tutorial_simple_list.webp differ diff --git a/docs/img/tutorial_url_field.png b/docs/img/tutorial_url_field.png index 46f7b04d015..abd63896577 100644 Binary files a/docs/img/tutorial_url_field.png and b/docs/img/tutorial_url_field.png differ diff --git a/docs/img/tutorial_user_list_responsive.gif b/docs/img/tutorial_user_list_responsive.gif new file mode 100644 index 00000000000..fd4cbf09cc1 Binary files /dev/null and b/docs/img/tutorial_user_list_responsive.gif differ diff --git a/docs/img/tutorial_user_list_responsive.mp4 b/docs/img/tutorial_user_list_responsive.mp4 new file mode 100644 index 00000000000..3ee00072712 Binary files /dev/null and b/docs/img/tutorial_user_list_responsive.mp4 differ diff --git a/docs/img/tutorial_user_list_responsive.webm b/docs/img/tutorial_user_list_responsive.webm new file mode 100644 index 00000000000..bf2168edfef Binary files /dev/null and b/docs/img/tutorial_user_list_responsive.webm differ diff --git a/docs/img/tutorial_users_list.png b/docs/img/tutorial_users_list.png index 6c84686f854..f910f5c240e 100644 Binary files a/docs/img/tutorial_users_list.png and b/docs/img/tutorial_users_list.png differ diff --git a/docs/img/tutorial_users_list_selected_columns.png b/docs/img/tutorial_users_list_selected_columns.png index 1eefb698e5d..5d7d4fa2c86 100644 Binary files a/docs/img/tutorial_users_list_selected_columns.png and b/docs/img/tutorial_users_list_selected_columns.png differ diff --git a/docs/img/typescript.mp4 b/docs/img/typescript.mp4 new file mode 100644 index 00000000000..4c47a24539f Binary files /dev/null and b/docs/img/typescript.mp4 differ diff --git a/docs/img/typescript.webm b/docs/img/typescript.webm new file mode 100644 index 00000000000..2764621cc18 Binary files /dev/null and b/docs/img/typescript.webm differ diff --git a/docs/img/updatebutton.mp4 b/docs/img/updatebutton.mp4 new file mode 100644 index 00000000000..f152e11e33b Binary files /dev/null and b/docs/img/updatebutton.mp4 differ diff --git a/docs/img/updatebutton.png b/docs/img/updatebutton.png new file mode 100644 index 00000000000..add9fa9f05d Binary files /dev/null and b/docs/img/updatebutton.png differ diff --git a/docs/img/updatebutton.webm b/docs/img/updatebutton.webm new file mode 100644 index 00000000000..11f69e8152f Binary files /dev/null and b/docs/img/updatebutton.webm differ diff --git a/docs/img/use-notify-node.png b/docs/img/use-notify-node.png new file mode 100644 index 00000000000..ecd51e4c534 Binary files /dev/null and b/docs/img/use-notify-node.png differ diff --git a/docs/img/useInfiniteGetList.gif b/docs/img/useInfiniteGetList.gif new file mode 100644 index 00000000000..6a009471f5e Binary files /dev/null and b/docs/img/useInfiniteGetList.gif differ diff --git a/docs/img/useInfiniteGetList.mp4 b/docs/img/useInfiniteGetList.mp4 new file mode 100644 index 00000000000..7e770e0d573 Binary files /dev/null and b/docs/img/useInfiniteGetList.mp4 differ diff --git a/docs/img/useInfiniteGetList.webm b/docs/img/useInfiniteGetList.webm new file mode 100644 index 00000000000..29e5534f4e4 Binary files /dev/null and b/docs/img/useInfiniteGetList.webm differ diff --git a/docs/img/useLockOnCall.gif b/docs/img/useLockOnCall.gif new file mode 100644 index 00000000000..01d60b3ccbb Binary files /dev/null and b/docs/img/useLockOnCall.gif differ diff --git a/docs/img/useLockOnCall.mp4 b/docs/img/useLockOnCall.mp4 new file mode 100644 index 00000000000..2cc03374e76 Binary files /dev/null and b/docs/img/useLockOnCall.mp4 differ diff --git a/docs/img/useLockOnCall.webm b/docs/img/useLockOnCall.webm new file mode 100644 index 00000000000..52d629be808 Binary files /dev/null and b/docs/img/useLockOnCall.webm differ diff --git a/docs/img/useLockOnMount.gif b/docs/img/useLockOnMount.gif new file mode 100644 index 00000000000..f4831280863 Binary files /dev/null and b/docs/img/useLockOnMount.gif differ diff --git a/docs/img/useLockOnMount.mp4 b/docs/img/useLockOnMount.mp4 new file mode 100644 index 00000000000..bd2cf4b9ddf Binary files /dev/null and b/docs/img/useLockOnMount.mp4 differ diff --git a/docs/img/useLockOnMount.webm b/docs/img/useLockOnMount.webm new file mode 100644 index 00000000000..5604c70ce65 Binary files /dev/null and b/docs/img/useLockOnMount.webm differ diff --git a/docs/img/useSubscribe.gif b/docs/img/useSubscribe.gif new file mode 100644 index 00000000000..50ee364a866 Binary files /dev/null and b/docs/img/useSubscribe.gif differ diff --git a/docs/img/useSubscribe.mp4 b/docs/img/useSubscribe.mp4 new file mode 100644 index 00000000000..fc8421d8fde Binary files /dev/null and b/docs/img/useSubscribe.mp4 differ diff --git a/docs/img/useSubscribe.webm b/docs/img/useSubscribe.webm new file mode 100644 index 00000000000..923318d2985 Binary files /dev/null and b/docs/img/useSubscribe.webm differ diff --git a/docs/img/useSubscribeCallback.gif b/docs/img/useSubscribeCallback.gif new file mode 100644 index 00000000000..1b4e613b0f1 Binary files /dev/null and b/docs/img/useSubscribeCallback.gif differ diff --git a/docs/img/useSubscribeCallback.mp4 b/docs/img/useSubscribeCallback.mp4 new file mode 100644 index 00000000000..eca30f67c95 Binary files /dev/null and b/docs/img/useSubscribeCallback.mp4 differ diff --git a/docs/img/useSubscribeCallback.webm b/docs/img/useSubscribeCallback.webm new file mode 100644 index 00000000000..1944ddd5f68 Binary files /dev/null and b/docs/img/useSubscribeCallback.webm differ diff --git a/docs/img/useSubscribeOnce.gif b/docs/img/useSubscribeOnce.gif new file mode 100644 index 00000000000..1ad2159126e Binary files /dev/null and b/docs/img/useSubscribeOnce.gif differ diff --git a/docs/img/useSubscribeOnce.mp4 b/docs/img/useSubscribeOnce.mp4 new file mode 100644 index 00000000000..826cd7d683b Binary files /dev/null and b/docs/img/useSubscribeOnce.mp4 differ diff --git a/docs/img/useSubscribeOnce.webm b/docs/img/useSubscribeOnce.webm new file mode 100644 index 00000000000..c88b5d1ec54 Binary files /dev/null and b/docs/img/useSubscribeOnce.webm differ diff --git a/docs/img/useSubscribeOnceCallback.gif b/docs/img/useSubscribeOnceCallback.gif new file mode 100644 index 00000000000..a2878a3cf28 Binary files /dev/null and b/docs/img/useSubscribeOnceCallback.gif differ diff --git a/docs/img/useSubscribeOnceCallback.mp4 b/docs/img/useSubscribeOnceCallback.mp4 new file mode 100644 index 00000000000..c5d6637d2f6 Binary files /dev/null and b/docs/img/useSubscribeOnceCallback.mp4 differ diff --git a/docs/img/useSubscribeOnceCallback.webm b/docs/img/useSubscribeOnceCallback.webm new file mode 100644 index 00000000000..56cc54ab930 Binary files /dev/null and b/docs/img/useSubscribeOnceCallback.webm differ diff --git a/docs/img/useSubscribeToRecord.gif b/docs/img/useSubscribeToRecord.gif new file mode 100644 index 00000000000..aa5f615ff5c Binary files /dev/null and b/docs/img/useSubscribeToRecord.gif differ diff --git a/docs/img/useSubscribeToRecord.mp4 b/docs/img/useSubscribeToRecord.mp4 new file mode 100644 index 00000000000..b35e78455f0 Binary files /dev/null and b/docs/img/useSubscribeToRecord.mp4 differ diff --git a/docs/img/useSubscribeToRecord.webm b/docs/img/useSubscribeToRecord.webm new file mode 100644 index 00000000000..1ec2311e82c Binary files /dev/null and b/docs/img/useSubscribeToRecord.webm differ diff --git a/docs/img/useSubscribeToRecordList.gif b/docs/img/useSubscribeToRecordList.gif new file mode 100644 index 00000000000..2a99d29e633 Binary files /dev/null and b/docs/img/useSubscribeToRecordList.gif differ diff --git a/docs/img/useSubscribeToRecordList.mp4 b/docs/img/useSubscribeToRecordList.mp4 new file mode 100644 index 00000000000..6b694fa000d Binary files /dev/null and b/docs/img/useSubscribeToRecordList.mp4 differ diff --git a/docs/img/useSubscribeToRecordList.webm b/docs/img/useSubscribeToRecordList.webm new file mode 100644 index 00000000000..190a4d8c289 Binary files /dev/null and b/docs/img/useSubscribeToRecordList.webm differ diff --git a/docs/img/useSubscribeUnsubscribe.gif b/docs/img/useSubscribeUnsubscribe.gif new file mode 100644 index 00000000000..9565984069f Binary files /dev/null and b/docs/img/useSubscribeUnsubscribe.gif differ diff --git a/docs/img/useSubscribeUnsubscribe.mp4 b/docs/img/useSubscribeUnsubscribe.mp4 new file mode 100644 index 00000000000..4fd160dd9d0 Binary files /dev/null and b/docs/img/useSubscribeUnsubscribe.mp4 differ diff --git a/docs/img/useSubscribeUnsubscribe.webm b/docs/img/useSubscribeUnsubscribe.webm new file mode 100644 index 00000000000..29c7ef0e126 Binary files /dev/null and b/docs/img/useSubscribeUnsubscribe.webm differ diff --git a/docs/img/useUnique.mp4 b/docs/img/useUnique.mp4 new file mode 100644 index 00000000000..73a9592b2a2 Binary files /dev/null and b/docs/img/useUnique.mp4 differ diff --git a/docs/img/useUnique.webm b/docs/img/useUnique.webm new file mode 100644 index 00000000000..18da26e652b Binary files /dev/null and b/docs/img/useUnique.webm differ diff --git a/docs/img/validation.png b/docs/img/validation.png new file mode 100644 index 00000000000..f801d7c3802 Binary files /dev/null and b/docs/img/validation.png differ diff --git a/docs/img/warn_when_unsaved_changes.png b/docs/img/warn_when_unsaved_changes.png new file mode 100644 index 00000000000..64a3fc3aeaa Binary files /dev/null and b/docs/img/warn_when_unsaved_changes.png differ diff --git a/docs/img/writers-delight.png b/docs/img/writers-delight.png new file mode 100644 index 00000000000..0f2aafb066c Binary files /dev/null and b/docs/img/writers-delight.png differ diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 330f1f4002e..00000000000 --- a/docs/index.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -layout: default -title: "Documentation" ---- -# react-admin - -A frontend Framework for building admin applications running in the browser on top of REST/GraphQL APIs, using ES6, [React](https://facebook.github.io/react/) and [Material Design](https://material.io/). Previously named [admin-on-rest](https://github.com/marmelab/admin-on-rest). Open sourced and maintained by [marmelab](https://marmelab.com/). - -
- [Demo](https://marmelab.com/react-admin-demo/) - - [Source](https://github.com/marmelab/react-admin) - - [News](https://marmelab.com/en/blog/#react-admin) - - [Releases](https://github.com/marmelab/react-admin/releases) - - [Support](http://stackoverflow.com/questions/tagged/react-admin) -
- - - -## Features - -* Adapts to any backend (REST, GraphQL, SOAP, etc.) -* Complete documentation -* Super-fast UI thanks to optimistic rendering (renders before the server returns) -* Undo updates and deletes for a few seconds -* Supports relationships (many to one, one to many) -* Internationalization (i18n) -* Conditional formatting -* Themeable -* Supports any authentication provider (REST API, OAuth, Basic Auth, ...) -* Full-featured Datagrid (sort, pagination, filters) -* Filter-as-you-type -* Supports any form layout (simple, tabbed, etc.) -* Data Validation -* Custom actions -* Large library of components for various data types: boolean, number, rich text, etc. -* WYSIWYG editor -* Customize dashboard, menu, layout -* Super easy to extend and override (it's just React components) -* Highly customizable interface -* Can connect to multiple backends -* Leverages the best libraries in the React ecosystem (Redux, redux-form, redux-saga, material-ui, recompose) -* Can be included in another React app -* Inspired by the popular [ng-admin](https://github.com/marmelab/ng-admin) library (also by marmelab) - -## Installation - -React-admin is available from npm. You can install it (and its required dependencies) -using: - -```sh -npm install react-admin -``` - -## Usage - -Read the [Tutorial](./Tutorial.md) for a 15 minutes introduction. After that, head to the [Documentation](./index.md), or checkout the [source code of the demo](https://github.com/marmelab/react-admin/tree/master/examples/demo) for an example usage. - -## At a Glance - -```jsx -// in app.js -import React from 'react'; -import { render } from 'react-dom'; -import { Admin, Resource } from 'react-admin'; -import simpleRestProvider from 'ra-data-simple-rest'; - -import { PostList, PostEdit, PostCreate, PostIcon } from './posts'; - -render( - - - , - document.getElementById('root') -); -``` - -The `` component is a configuration component that allows to define sub components for each of the admin view: `list`, `edit`, and `create`. These components use Material UI and custom components from react-admin: - -{% raw %} -```jsx -// in posts.js -import React from 'react'; -import { List, Datagrid, Edit, Create, SimpleForm, DateField, TextField, EditButton, DisabledInput, TextInput, LongTextInput, DateInput } from 'react-admin'; -import BookIcon from '@material-ui/icons/Book'; -export const PostIcon = BookIcon; - -export const PostList = (props) => ( - - - - - - - - - - -); - -const PostTitle = ({ record }) => { - return Post {record ? `"${record.title}"` : ''}; -}; - -export const PostEdit = (props) => ( - } {...props}> - - - - - - - - - - -); - -export const PostCreate = (props) => ( - - - - - - - - - -); -``` -{% endraw %} - -## Does It Work With My API? - -Yes. - -React-admin uses an adapter approach, with a concept called *Data Providers*. Existing providers can be used as a blueprint to design your API, or you can write your own Data Provider to query an existing API. Writing a custom Data Provider is a matter of hours. - -![Data Provider architecture](./img/data-provider.png) - -See the [Data Providers documentation](./DataProviders.md) for details. - -## Batteries Included But Removable - -React-admin is designed as a library of loosely coupled React components built on top of [material-ui](http://www.material-ui.com/#/), in addition to controller functions implemented the Redux way. It is very easy to replace one part of react-admin with your own, e.g. to use a custom datagrid, GraphQL instead of REST, or bootstrap instead of Material Design. - -## Contributing - -Pull requests are welcome on the [GitHub repository](https://github.com/marmelab/react-admin). Try to follow the coding style of the existing files, and include unit tests and documentation. Be prepared for a thorough code review, and be patient for the merge - this is an open-source initiative. - -You can run the example app by calling: - -```sh -make run -``` - -And then browse to [http://localhost:8080/](http://localhost:8080/). - -If you want to contribute to the documentation, install jekyll, then call - -```sh -make doc -``` - -And then browse to [http://localhost:4000/](http://localhost:4000/) - -You can run the unit tests by calling - -```sh -make test -``` - -If you are using react-admin as a dependency, and if you want to try and hack it, here is the advised process: - -```sh -# in myapp -# install react-admin from GitHub in another directory -$ cd .. -$ git clone git@github.com:marmelab/react-admin.git && cd react-admin && make install -# replace your node_modules/react-admin by a symbolic link to the github checkout -$ cd ../myapp -$ npm link ../react-admin -# go back to the checkout, and replace the version of react by the one in your app -$ cd ../react-admin -$ npm link ../myapp/node_modules/react -$ make watch -# in another terminal, go back to your app, and start it as usual -$ cd ../myapp -$ npm run -``` - -## License - -React-admin is licensed under the [MIT Licence](https://github.com/marmelab/react-admin/blob/master/LICENSE.md), sponsored and supported by [marmelab](http://marmelab.com). - -## Donate - -This library is free to use, even for commercial purpose. If you want to give back, please talk about it, help newcomers, or contribute code. But the best way to give back is to **donate to a charity**. We recommend [Doctors Without Borders](http://www.doctorswithoutborders.org/). diff --git a/docs/js/materialize.min.js b/docs/js/materialize.min.js new file mode 100644 index 00000000000..7d80c9375b2 --- /dev/null +++ b/docs/js/materialize.min.js @@ -0,0 +1,6 @@ +/*! + * Materialize v1.0.0 (http://materializecss.com) + * Copyright 2014-2017 Materialize + * MIT License (https://raw.githubusercontent.com/Dogfalo/materialize/master/LICENSE) + */ +var _get=function t(e,i,n){null===e&&(e=Function.prototype);var s=Object.getOwnPropertyDescriptor(e,i);if(void 0===s){var o=Object.getPrototypeOf(e);return null===o?void 0:t(o,i,n)}if("value"in s)return s.value;var a=s.get;return void 0!==a?a.call(n):void 0},_createClass=function(){function n(t,e){for(var i=0;i/,p=/^\w+$/;function v(t,e){e=e||o;var i=u.test(t)?e.getElementsByClassName(t.slice(1)):p.test(t)?e.getElementsByTagName(t):e.querySelectorAll(t);return i}function f(t){if(!i){var e=(i=o.implementation.createHTMLDocument(null)).createElement("base");e.href=o.location.href,i.head.appendChild(e)}return i.body.innerHTML=t,i.body.childNodes}function m(t){"loading"!==o.readyState?t():o.addEventListener("DOMContentLoaded",t)}function g(t,e){if(!t)return this;if(t.cash&&t!==a)return t;var i,n=t,s=0;if(d(t))n=l.test(t)?o.getElementById(t.slice(1)):c.test(t)?f(t):v(t,e);else if(h(t))return m(t),this;if(!n)return this;if(n.nodeType||n===a)this[0]=n,this.length=1;else for(i=this.length=n.length;ss.right-i||l+e.width>window.innerWidth-i)&&(n.right=!0),(ho-i||h+e.height>window.innerHeight-i)&&(n.bottom=!0),n},M.checkPossibleAlignments=function(t,e,i,n){var s={top:!0,right:!0,bottom:!0,left:!0,spaceOnTop:null,spaceOnRight:null,spaceOnBottom:null,spaceOnLeft:null},o="visible"===getComputedStyle(e).overflow,a=e.getBoundingClientRect(),r=Math.min(a.height,window.innerHeight),l=Math.min(a.width,window.innerWidth),h=t.getBoundingClientRect(),d=e.scrollLeft,u=e.scrollTop,c=i.left-d,p=i.top-u,v=i.top+h.height-u;return s.spaceOnRight=o?window.innerWidth-(h.left+i.width):l-(c+i.width),s.spaceOnRight<0&&(s.left=!1),s.spaceOnLeft=o?h.right-i.width:c-i.width+h.width,s.spaceOnLeft<0&&(s.right=!1),s.spaceOnBottom=o?window.innerHeight-(h.top+i.height+n):r-(p+i.height+n),s.spaceOnBottom<0&&(s.top=!1),s.spaceOnTop=o?h.bottom-(i.height+n):v-(i.height-n),s.spaceOnTop<0&&(s.bottom=!1),s},M.getOverflowParent=function(t){return null==t?null:t===document.body||"visible"!==getComputedStyle(t).overflow?t:M.getOverflowParent(t.parentElement)},M.getIdFromTrigger=function(t){var e=t.getAttribute("data-target");return e||(e=(e=t.getAttribute("href"))?e.slice(1):""),e},M.getDocumentScrollTop=function(){return window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},M.getDocumentScrollLeft=function(){return window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0};var getTime=Date.now||function(){return(new Date).getTime()};M.throttle=function(i,n,s){var o=void 0,a=void 0,r=void 0,l=null,h=0;s||(s={});var d=function(){h=!1===s.leading?0:getTime(),l=null,r=i.apply(o,a),o=a=null};return function(){var t=getTime();h||!1!==s.leading||(h=t);var e=n-(t-h);return o=this,a=arguments,e<=0?(clearTimeout(l),l=null,h=t,r=i.apply(o,a),o=a=null):l||!1===s.trailing||(l=setTimeout(d,e)),r}};var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(t,e,i){if(i.get||i.set)throw new TypeError("ES3 does not support getters and setters.");t!=Array.prototype&&t!=Object.prototype&&(t[e]=i.value)},$jscomp.getGlobal=function(t){return"undefined"!=typeof window&&window===t?t:"undefined"!=typeof global&&null!=global?global:t},$jscomp.global=$jscomp.getGlobal(this),$jscomp.SYMBOL_PREFIX="jscomp_symbol_",$jscomp.initSymbol=function(){$jscomp.initSymbol=function(){},$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)},$jscomp.symbolCounter_=0,$jscomp.Symbol=function(t){return $jscomp.SYMBOL_PREFIX+(t||"")+$jscomp.symbolCounter_++},$jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var t=$jscomp.global.Symbol.iterator;t||(t=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator")),"function"!=typeof Array.prototype[t]&&$jscomp.defineProperty(Array.prototype,t,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}}),$jscomp.initSymbolIterator=function(){}},$jscomp.arrayIterator=function(t){var e=0;return $jscomp.iteratorPrototype(function(){return e=k.currentTime)for(var h=0;ht&&(s.duration=e.duration),s.children.push(e)}),s.seek(0),s.reset(),s.autoplay&&s.restart(),s},s},O.random=function(t,e){return Math.floor(Math.random()*(e-t+1))+t},O}(),function(r,l){"use strict";var e={accordion:!0,onOpenStart:void 0,onOpenEnd:void 0,onCloseStart:void 0,onCloseEnd:void 0,inDuration:300,outDuration:300},t=function(t){function s(t,e){_classCallCheck(this,s);var i=_possibleConstructorReturn(this,(s.__proto__||Object.getPrototypeOf(s)).call(this,s,t,e));(i.el.M_Collapsible=i).options=r.extend({},s.defaults,e),i.$headers=i.$el.children("li").children(".collapsible-header"),i.$headers.attr("tabindex",0),i._setupEventHandlers();var n=i.$el.children("li.active").children(".collapsible-body");return i.options.accordion?n.first().css("display","block"):n.css("display","block"),i}return _inherits(s,Component),_createClass(s,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Collapsible=void 0}},{key:"_setupEventHandlers",value:function(){var e=this;this._handleCollapsibleClickBound=this._handleCollapsibleClick.bind(this),this._handleCollapsibleKeydownBound=this._handleCollapsibleKeydown.bind(this),this.el.addEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.addEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_removeEventHandlers",value:function(){var e=this;this.el.removeEventListener("click",this._handleCollapsibleClickBound),this.$headers.each(function(t){t.removeEventListener("keydown",e._handleCollapsibleKeydownBound)})}},{key:"_handleCollapsibleClick",value:function(t){var e=r(t.target).closest(".collapsible-header");if(t.target&&e.length){var i=e.closest(".collapsible");if(i[0]===this.el){var n=e.closest("li"),s=i.children("li"),o=n[0].classList.contains("active"),a=s.index(n);o?this.close(a):this.open(a)}}}},{key:"_handleCollapsibleKeydown",value:function(t){13===t.keyCode&&this._handleCollapsibleClickBound(t)}},{key:"_animateIn",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css({display:"block",overflow:"hidden",height:0,paddingTop:"",paddingBottom:""});var s=n.css("padding-top"),o=n.css("padding-bottom"),a=n[0].scrollHeight;n.css({paddingTop:0,paddingBottom:0}),l({targets:n[0],height:a,paddingTop:s,paddingBottom:o,duration:this.options.inDuration,easing:"easeInOutCubic",complete:function(t){n.css({overflow:"",paddingTop:"",paddingBottom:"",height:""}),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,i[0])}})}}},{key:"_animateOut",value:function(t){var e=this,i=this.$el.children("li").eq(t);if(i.length){var n=i.children(".collapsible-body");l.remove(n[0]),n.css("overflow","hidden"),l({targets:n[0],height:0,paddingTop:0,paddingBottom:0,duration:this.options.outDuration,easing:"easeInOutCubic",complete:function(){n.css({height:"",overflow:"",padding:"",display:""}),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,i[0])}})}}},{key:"open",value:function(t){var i=this,e=this.$el.children("li").eq(t);if(e.length&&!e[0].classList.contains("active")){if("function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,e[0]),this.options.accordion){var n=this.$el.children("li");this.$el.children("li.active").each(function(t){var e=n.index(r(t));i.close(e)})}e[0].classList.add("active"),this._animateIn(t)}}},{key:"close",value:function(t){var e=this.$el.children("li").eq(t);e.length&&e[0].classList.contains("active")&&("function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,e[0]),e[0].classList.remove("active"),this._animateOut(t))}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Collapsible}},{key:"defaults",get:function(){return e}}]),s}();M.Collapsible=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"collapsible","M_Collapsible")}(cash,M.anime),function(h,i){"use strict";var e={alignment:"left",autoFocus:!0,constrainWidth:!0,container:null,coverTrigger:!0,closeOnClick:!0,hover:!1,inDuration:150,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onItemClick:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return i.el.M_Dropdown=i,n._dropdowns.push(i),i.id=M.getIdFromTrigger(t),i.dropdownEl=document.getElementById(i.id),i.$dropdownEl=h(i.dropdownEl),i.options=h.extend({},n.defaults,e),i.isOpen=!1,i.isScrollable=!1,i.isTouchMoving=!1,i.focusedIndex=-1,i.filterQuery=[],i.options.container?h(i.options.container).append(i.dropdownEl):i.$el.after(i.dropdownEl),i._makeDropdownFocusable(),i._resetFilterQueryBound=i._resetFilterQuery.bind(i),i._handleDocumentClickBound=i._handleDocumentClick.bind(i),i._handleDocumentTouchmoveBound=i._handleDocumentTouchmove.bind(i),i._handleDropdownClickBound=i._handleDropdownClick.bind(i),i._handleDropdownKeydownBound=i._handleDropdownKeydown.bind(i),i._handleTriggerKeydownBound=i._handleTriggerKeydown.bind(i),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._resetDropdownStyles(),this._removeEventHandlers(),n._dropdowns.splice(n._dropdowns.indexOf(this),1),this.el.M_Dropdown=void 0}},{key:"_setupEventHandlers",value:function(){this.el.addEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.addEventListener("click",this._handleDropdownClickBound),this.options.hover?(this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.addEventListener("mouseleave",this._handleMouseLeaveBound)):(this._handleClickBound=this._handleClick.bind(this),this.el.addEventListener("click",this._handleClickBound))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("keydown",this._handleTriggerKeydownBound),this.dropdownEl.removeEventListener("click",this._handleDropdownClickBound),this.options.hover?(this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.dropdownEl.removeEventListener("mouseleave",this._handleMouseLeaveBound)):this.el.removeEventListener("click",this._handleClickBound)}},{key:"_setupTemporaryEventHandlers",value:function(){document.body.addEventListener("click",this._handleDocumentClickBound,!0),document.body.addEventListener("touchend",this._handleDocumentClickBound),document.body.addEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.addEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_removeTemporaryEventHandlers",value:function(){document.body.removeEventListener("click",this._handleDocumentClickBound,!0),document.body.removeEventListener("touchend",this._handleDocumentClickBound),document.body.removeEventListener("touchmove",this._handleDocumentTouchmoveBound),this.dropdownEl.removeEventListener("keydown",this._handleDropdownKeydownBound)}},{key:"_handleClick",value:function(t){t.preventDefault(),this.open()}},{key:"_handleMouseEnter",value:function(){this.open()}},{key:"_handleMouseLeave",value:function(t){var e=t.toElement||t.relatedTarget,i=!!h(e).closest(".dropdown-content").length,n=!1,s=h(e).closest(".dropdown-trigger");s.length&&s[0].M_Dropdown&&s[0].M_Dropdown.isOpen&&(n=!0),n||i||this.close()}},{key:"_handleDocumentClick",value:function(t){var e=this,i=h(t.target);this.options.closeOnClick&&i.closest(".dropdown-content").length&&!this.isTouchMoving?setTimeout(function(){e.close()},0):!i.closest(".dropdown-trigger").length&&i.closest(".dropdown-content").length||setTimeout(function(){e.close()},0),this.isTouchMoving=!1}},{key:"_handleTriggerKeydown",value:function(t){t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ENTER||this.isOpen||(t.preventDefault(),this.open())}},{key:"_handleDocumentTouchmove",value:function(t){h(t.target).closest(".dropdown-content").length&&(this.isTouchMoving=!0)}},{key:"_handleDropdownClick",value:function(t){if("function"==typeof this.options.onItemClick){var e=h(t.target).closest("li")[0];this.options.onItemClick.call(this,e)}}},{key:"_handleDropdownKeydown",value:function(t){if(t.which===M.keys.TAB)t.preventDefault(),this.close();else if(t.which!==M.keys.ARROW_DOWN&&t.which!==M.keys.ARROW_UP||!this.isOpen)if(t.which===M.keys.ENTER&&this.isOpen){var e=this.dropdownEl.children[this.focusedIndex],i=h(e).find("a, button").first();i.length?i[0].click():e&&e.click()}else t.which===M.keys.ESC&&this.isOpen&&(t.preventDefault(),this.close());else{t.preventDefault();var n=t.which===M.keys.ARROW_DOWN?1:-1,s=this.focusedIndex,o=!1;do{if(s+=n,this.dropdownEl.children[s]&&-1!==this.dropdownEl.children[s].tabIndex){o=!0;break}}while(sl.spaceOnBottom?(h="bottom",i+=l.spaceOnTop,o-=l.spaceOnTop):i+=l.spaceOnBottom)),!l[d]){var u="left"===d?"right":"left";l[u]?d=u:l.spaceOnLeft>l.spaceOnRight?(d="right",n+=l.spaceOnLeft,s-=l.spaceOnLeft):(d="left",n+=l.spaceOnRight)}return"bottom"===h&&(o=o-e.height+(this.options.coverTrigger?t.height:0)),"right"===d&&(s=s-e.width+t.width),{x:s,y:o,verticalAlignment:h,horizontalAlignment:d,height:i,width:n}}},{key:"_animateIn",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:[0,1],easing:"easeOutQuad"},scaleX:[.3,1],scaleY:[.3,1],duration:this.options.inDuration,easing:"easeOutQuint",complete:function(t){e.options.autoFocus&&e.dropdownEl.focus(),"function"==typeof e.options.onOpenEnd&&e.options.onOpenEnd.call(e,e.el)}})}},{key:"_animateOut",value:function(){var e=this;i.remove(this.dropdownEl),i({targets:this.dropdownEl,opacity:{value:0,easing:"easeOutQuint"},scaleX:.3,scaleY:.3,duration:this.options.outDuration,easing:"easeOutQuint",complete:function(t){e._resetDropdownStyles(),"function"==typeof e.options.onCloseEnd&&e.options.onCloseEnd.call(e,e.el)}})}},{key:"_placeDropdown",value:function(){var t=this.options.constrainWidth?this.el.getBoundingClientRect().width:this.dropdownEl.getBoundingClientRect().width;this.dropdownEl.style.width=t+"px";var e=this._getDropdownPosition();this.dropdownEl.style.left=e.x+"px",this.dropdownEl.style.top=e.y+"px",this.dropdownEl.style.height=e.height+"px",this.dropdownEl.style.width=e.width+"px",this.dropdownEl.style.transformOrigin=("left"===e.horizontalAlignment?"0":"100%")+" "+("top"===e.verticalAlignment?"0":"100%")}},{key:"open",value:function(){this.isOpen||(this.isOpen=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this._resetDropdownStyles(),this.dropdownEl.style.display="block",this._placeDropdown(),this._animateIn(),this._setupTemporaryEventHandlers())}},{key:"close",value:function(){this.isOpen&&(this.isOpen=!1,this.focusedIndex=-1,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this._animateOut(),this._removeTemporaryEventHandlers(),this.options.autoFocus&&this.el.focus())}},{key:"recalculateDimensions",value:function(){this.isOpen&&(this.$dropdownEl.css({width:"",height:"",left:"",top:"","transform-origin":""}),this._placeDropdown())}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Dropdown}},{key:"defaults",get:function(){return e}}]),n}();t._dropdowns=[],M.Dropdown=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"dropdown","M_Dropdown")}(cash,M.anime),function(s,i){"use strict";var e={opacity:.5,inDuration:250,outDuration:250,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,preventScrolling:!0,dismissible:!0,startingTop:"4%",endingTop:"10%"},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Modal=i).options=s.extend({},n.defaults,e),i.isOpen=!1,i.id=i.$el.attr("id"),i._openingTrigger=void 0,i.$overlay=s(''),i.el.tabIndex=0,i._nthModalOpened=0,n._count++,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._count--,this._removeEventHandlers(),this.el.removeAttribute("style"),this.$overlay.remove(),this.el.M_Modal=void 0}},{key:"_setupEventHandlers",value:function(){this._handleOverlayClickBound=this._handleOverlayClick.bind(this),this._handleModalCloseClickBound=this._handleModalCloseClick.bind(this),1===n._count&&document.body.addEventListener("click",this._handleTriggerClick),this.$overlay[0].addEventListener("click",this._handleOverlayClickBound),this.el.addEventListener("click",this._handleModalCloseClickBound)}},{key:"_removeEventHandlers",value:function(){0===n._count&&document.body.removeEventListener("click",this._handleTriggerClick),this.$overlay[0].removeEventListener("click",this._handleOverlayClickBound),this.el.removeEventListener("click",this._handleModalCloseClickBound)}},{key:"_handleTriggerClick",value:function(t){var e=s(t.target).closest(".modal-trigger");if(e.length){var i=M.getIdFromTrigger(e[0]),n=document.getElementById(i).M_Modal;n&&n.open(e),t.preventDefault()}}},{key:"_handleOverlayClick",value:function(){this.options.dismissible&&this.close()}},{key:"_handleModalCloseClick",value:function(t){s(t.target).closest(".modal-close").length&&this.close()}},{key:"_handleKeydown",value:function(t){27===t.keyCode&&this.options.dismissible&&this.close()}},{key:"_handleFocus",value:function(t){this.el.contains(t.target)||this._nthModalOpened!==n._modalsOpen||this.el.focus()}},{key:"_animateIn",value:function(){var t=this;s.extend(this.el.style,{display:"block",opacity:0}),s.extend(this.$overlay[0].style,{display:"block",opacity:0}),i({targets:this.$overlay[0],opacity:this.options.opacity,duration:this.options.inDuration,easing:"easeOutQuad"});var e={targets:this.el,duration:this.options.inDuration,easing:"easeOutCubic",complete:function(){"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el,t._openingTrigger)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:0,opacity:1}):s.extend(e,{top:[this.options.startingTop,this.options.endingTop],opacity:1,scaleX:[.8,1],scaleY:[.8,1]}),i(e)}},{key:"_animateOut",value:function(){var t=this;i({targets:this.$overlay[0],opacity:0,duration:this.options.outDuration,easing:"easeOutQuart"});var e={targets:this.el,duration:this.options.outDuration,easing:"easeOutCubic",complete:function(){t.el.style.display="none",t.$overlay.remove(),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};this.el.classList.contains("bottom-sheet")?s.extend(e,{bottom:"-100%",opacity:0}):s.extend(e,{top:[this.options.endingTop,this.options.startingTop],opacity:0,scaleX:.8,scaleY:.8}),i(e)}},{key:"open",value:function(t){if(!this.isOpen)return this.isOpen=!0,n._modalsOpen++,this._nthModalOpened=n._modalsOpen,this.$overlay[0].style.zIndex=1e3+2*n._modalsOpen,this.el.style.zIndex=1e3+2*n._modalsOpen+1,this._openingTrigger=t?t[0]:void 0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el,this._openingTrigger),this.options.preventScrolling&&(document.body.style.overflow="hidden"),this.el.classList.add("open"),this.el.insertAdjacentElement("afterend",this.$overlay[0]),this.options.dismissible&&(this._handleKeydownBound=this._handleKeydown.bind(this),this._handleFocusBound=this._handleFocus.bind(this),document.addEventListener("keydown",this._handleKeydownBound),document.addEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateIn(),this.el.focus(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,n._modalsOpen--,this._nthModalOpened=0,"function"==typeof this.options.onCloseStart&&this.options.onCloseStart.call(this,this.el),this.el.classList.remove("open"),0===n._modalsOpen&&(document.body.style.overflow=""),this.options.dismissible&&(document.removeEventListener("keydown",this._handleKeydownBound),document.removeEventListener("focus",this._handleFocusBound,!0)),i.remove(this.el),i.remove(this.$overlay[0]),this._animateOut(),this}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Modal}},{key:"defaults",get:function(){return e}}]),n}();t._modalsOpen=0,t._count=0,M.Modal=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"modal","M_Modal")}(cash,M.anime),function(o,a){"use strict";var e={inDuration:275,outDuration:200,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Materialbox=i).options=o.extend({},n.defaults,e),i.overlayActive=!1,i.doneAnimating=!0,i.placeholder=o("
").addClass("material-placeholder"),i.originalWidth=0,i.originalHeight=0,i.originInlineStyles=i.$el.attr("style"),i.caption=i.el.getAttribute("data-caption")||"",i.$el.before(i.placeholder),i.placeholder.append(i.$el),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_Materialbox=void 0,o(this.placeholder).after(this.el).remove(),this.$el.removeAttr("style")}},{key:"_setupEventHandlers",value:function(){this._handleMaterialboxClickBound=this._handleMaterialboxClick.bind(this),this.el.addEventListener("click",this._handleMaterialboxClickBound)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleMaterialboxClickBound)}},{key:"_handleMaterialboxClick",value:function(t){!1===this.doneAnimating||this.overlayActive&&this.doneAnimating?this.close():this.open()}},{key:"_handleWindowScroll",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowResize",value:function(){this.overlayActive&&this.close()}},{key:"_handleWindowEscape",value:function(t){27===t.keyCode&&this.doneAnimating&&this.overlayActive&&this.close()}},{key:"_makeAncestorsOverflowVisible",value:function(){this.ancestorsChanged=o();for(var t=this.placeholder[0].parentNode;null!==t&&!o(t).is(document);){var e=o(t);"visible"!==e.css("overflow")&&(e.css("overflow","visible"),void 0===this.ancestorsChanged?this.ancestorsChanged=e:this.ancestorsChanged=this.ancestorsChanged.add(e)),t=t.parentNode}}},{key:"_animateImageIn",value:function(){var t=this,e={targets:this.el,height:[this.originalHeight,this.newHeight],width:[this.originalWidth,this.newWidth],left:M.getDocumentScrollLeft()+this.windowWidth/2-this.placeholder.offset().left-this.newWidth/2,top:M.getDocumentScrollTop()+this.windowHeight/2-this.placeholder.offset().top-this.newHeight/2,duration:this.options.inDuration,easing:"easeOutQuad",complete:function(){t.doneAnimating=!0,"function"==typeof t.options.onOpenEnd&&t.options.onOpenEnd.call(t,t.el)}};this.maxWidth=this.$el.css("max-width"),this.maxHeight=this.$el.css("max-height"),"none"!==this.maxWidth&&(e.maxWidth=this.newWidth),"none"!==this.maxHeight&&(e.maxHeight=this.newHeight),a(e)}},{key:"_animateImageOut",value:function(){var t=this,e={targets:this.el,width:this.originalWidth,height:this.originalHeight,left:0,top:0,duration:this.options.outDuration,easing:"easeOutQuad",complete:function(){t.placeholder.css({height:"",width:"",position:"",top:"",left:""}),t.attrWidth&&t.$el.attr("width",t.attrWidth),t.attrHeight&&t.$el.attr("height",t.attrHeight),t.$el.removeAttr("style"),t.originInlineStyles&&t.$el.attr("style",t.originInlineStyles),t.$el.removeClass("active"),t.doneAnimating=!0,t.ancestorsChanged.length&&t.ancestorsChanged.css("overflow",""),"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t,t.el)}};a(e)}},{key:"_updateVars",value:function(){this.windowWidth=window.innerWidth,this.windowHeight=window.innerHeight,this.caption=this.el.getAttribute("data-caption")||""}},{key:"open",value:function(){var t=this;this._updateVars(),this.originalWidth=this.el.getBoundingClientRect().width,this.originalHeight=this.el.getBoundingClientRect().height,this.doneAnimating=!1,this.$el.addClass("active"),this.overlayActive=!0,"function"==typeof this.options.onOpenStart&&this.options.onOpenStart.call(this,this.el),this.placeholder.css({width:this.placeholder[0].getBoundingClientRect().width+"px",height:this.placeholder[0].getBoundingClientRect().height+"px",position:"relative",top:0,left:0}),this._makeAncestorsOverflowVisible(),this.$el.css({position:"absolute","z-index":1e3,"will-change":"left, top, width, height"}),this.attrWidth=this.$el.attr("width"),this.attrHeight=this.$el.attr("height"),this.attrWidth&&(this.$el.css("width",this.attrWidth+"px"),this.$el.removeAttr("width")),this.attrHeight&&(this.$el.css("width",this.attrHeight+"px"),this.$el.removeAttr("height")),this.$overlay=o('
').css({opacity:0}).one("click",function(){t.doneAnimating&&t.close()}),this.$el.before(this.$overlay);var e=this.$overlay[0].getBoundingClientRect();this.$overlay.css({width:this.windowWidth+"px",height:this.windowHeight+"px",left:-1*e.left+"px",top:-1*e.top+"px"}),a.remove(this.el),a.remove(this.$overlay[0]),a({targets:this.$overlay[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}),""!==this.caption&&(this.$photocaption&&a.remove(this.$photoCaption[0]),this.$photoCaption=o('
'),this.$photoCaption.text(this.caption),o("body").append(this.$photoCaption),this.$photoCaption.css({display:"inline"}),a({targets:this.$photoCaption[0],opacity:1,duration:this.options.inDuration,easing:"easeOutQuad"}));var i=0,n=this.originalWidth/this.windowWidth,s=this.originalHeight/this.windowHeight;this.newWidth=0,this.newHeight=0,si.options.responsiveThreshold,i.$img=i.$el.find("img").first(),i.$img.each(function(){this.complete&&s(this).trigger("load")}),i._updateParallax(),i._setupEventHandlers(),i._setupStyles(),n._parallaxes.push(i),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){n._parallaxes.splice(n._parallaxes.indexOf(this),1),this.$img[0].style.transform="",this._removeEventHandlers(),this.$el[0].M_Parallax=void 0}},{key:"_setupEventHandlers",value:function(){this._handleImageLoadBound=this._handleImageLoad.bind(this),this.$img[0].addEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(n._handleScrollThrottled=M.throttle(n._handleScroll,5),window.addEventListener("scroll",n._handleScrollThrottled),n._handleWindowResizeThrottled=M.throttle(n._handleWindowResize,5),window.addEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_removeEventHandlers",value:function(){this.$img[0].removeEventListener("load",this._handleImageLoadBound),0===n._parallaxes.length&&(window.removeEventListener("scroll",n._handleScrollThrottled),window.removeEventListener("resize",n._handleWindowResizeThrottled))}},{key:"_setupStyles",value:function(){this.$img[0].style.opacity=1}},{key:"_handleImageLoad",value:function(){this._updateParallax()}},{key:"_updateParallax",value:function(){var t=0e.options.responsiveThreshold}}},{key:"defaults",get:function(){return e}}]),n}();t._parallaxes=[],M.Parallax=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"parallax","M_Parallax")}(cash),function(a,s){"use strict";var e={duration:300,onShow:null,swipeable:!1,responsiveThreshold:1/0},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tabs=i).options=a.extend({},n.defaults,e),i.$tabLinks=i.$el.children("li.tab").children("a"),i.index=0,i._setupActiveTabLink(),i.options.swipeable?i._setupSwipeableTabs():i._setupNormalTabs(),i._setTabsAndTabWidth(),i._createIndicator(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this._indicator.parentNode.removeChild(this._indicator),this.options.swipeable?this._teardownSwipeableTabs():this._teardownNormalTabs(),this.$el[0].M_Tabs=void 0}},{key:"_setupEventHandlers",value:function(){this._handleWindowResizeBound=this._handleWindowResize.bind(this),window.addEventListener("resize",this._handleWindowResizeBound),this._handleTabClickBound=this._handleTabClick.bind(this),this.el.addEventListener("click",this._handleTabClickBound)}},{key:"_removeEventHandlers",value:function(){window.removeEventListener("resize",this._handleWindowResizeBound),this.el.removeEventListener("click",this._handleTabClickBound)}},{key:"_handleWindowResize",value:function(){this._setTabsAndTabWidth(),0!==this.tabWidth&&0!==this.tabsWidth&&(this._indicator.style.left=this._calcLeftPos(this.$activeTabLink)+"px",this._indicator.style.right=this._calcRightPos(this.$activeTabLink)+"px")}},{key:"_handleTabClick",value:function(t){var e=this,i=a(t.target).closest("li.tab"),n=a(t.target).closest("a");if(n.length&&n.parent().hasClass("tab"))if(i.hasClass("disabled"))t.preventDefault();else if(!n.attr("target")){this.$activeTabLink.removeClass("active");var s=this.$content;this.$activeTabLink=n,this.$content=a(M.escapeHash(n[0].hash)),this.$tabLinks=this.$el.children("li.tab").children("a"),this.$activeTabLink.addClass("active");var o=this.index;this.index=Math.max(this.$tabLinks.index(n),0),this.options.swipeable?this._tabsCarousel&&this._tabsCarousel.set(this.index,function(){"function"==typeof e.options.onShow&&e.options.onShow.call(e,e.$content[0])}):this.$content.length&&(this.$content[0].style.display="block",this.$content.addClass("active"),"function"==typeof this.options.onShow&&this.options.onShow.call(this,this.$content[0]),s.length&&!s.is(this.$content)&&(s[0].style.display="none",s.removeClass("active"))),this._setTabsAndTabWidth(),this._animateIndicator(o),t.preventDefault()}}},{key:"_createIndicator",value:function(){var t=this,e=document.createElement("li");e.classList.add("indicator"),this.el.appendChild(e),this._indicator=e,setTimeout(function(){t._indicator.style.left=t._calcLeftPos(t.$activeTabLink)+"px",t._indicator.style.right=t._calcRightPos(t.$activeTabLink)+"px"},0)}},{key:"_setupActiveTabLink",value:function(){this.$activeTabLink=a(this.$tabLinks.filter('[href="'+location.hash+'"]')),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a.active").first()),0===this.$activeTabLink.length&&(this.$activeTabLink=this.$el.children("li.tab").children("a").first()),this.$tabLinks.removeClass("active"),this.$activeTabLink[0].classList.add("active"),this.index=Math.max(this.$tabLinks.index(this.$activeTabLink),0),this.$activeTabLink.length&&(this.$content=a(M.escapeHash(this.$activeTabLink[0].hash)),this.$content.addClass("active"))}},{key:"_setupSwipeableTabs",value:function(){var i=this;window.innerWidth>this.options.responsiveThreshold&&(this.options.swipeable=!1);var n=a();this.$tabLinks.each(function(t){var e=a(M.escapeHash(t.hash));e.addClass("carousel-item"),n=n.add(e)});var t=a('');n.first().before(t),t.append(n),n[0].style.display="";var e=this.$activeTabLink.closest(".tab").index();this._tabsCarousel=M.Carousel.init(t[0],{fullWidth:!0,noWrap:!0,onCycleTo:function(t){var e=i.index;i.index=a(t).index(),i.$activeTabLink.removeClass("active"),i.$activeTabLink=i.$tabLinks.eq(i.index),i.$activeTabLink.addClass("active"),i._animateIndicator(e),"function"==typeof i.options.onShow&&i.options.onShow.call(i,i.$content[0])}}),this._tabsCarousel.set(e)}},{key:"_teardownSwipeableTabs",value:function(){var t=this._tabsCarousel.$el;this._tabsCarousel.destroy(),t.after(t.children()),t.remove()}},{key:"_setupNormalTabs",value:function(){this.$tabLinks.not(this.$activeTabLink).each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="none")}})}},{key:"_teardownNormalTabs",value:function(){this.$tabLinks.each(function(t){if(t.hash){var e=a(M.escapeHash(t.hash));e.length&&(e[0].style.display="")}})}},{key:"_setTabsAndTabWidth",value:function(){this.tabsWidth=this.$el.width(),this.tabWidth=Math.max(this.tabsWidth,this.el.scrollWidth)/this.$tabLinks.length}},{key:"_calcRightPos",value:function(t){return Math.ceil(this.tabsWidth-t.position().left-t[0].getBoundingClientRect().width)}},{key:"_calcLeftPos",value:function(t){return Math.floor(t.position().left)}},{key:"updateTabIndicator",value:function(){this._setTabsAndTabWidth(),this._animateIndicator(this.index)}},{key:"_animateIndicator",value:function(t){var e=0,i=0;0<=this.index-t?e=90:i=90;var n={targets:this._indicator,left:{value:this._calcLeftPos(this.$activeTabLink),delay:e},right:{value:this._calcRightPos(this.$activeTabLink),delay:i},duration:this.options.duration,easing:"easeOutQuad"};s.remove(this._indicator),s(n)}},{key:"select",value:function(t){var e=this.$tabLinks.filter('[href="#'+t+'"]');e.length&&e.trigger("click")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tabs}},{key:"defaults",get:function(){return e}}]),n}();M.Tabs=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tabs","M_Tabs")}(cash,M.anime),function(d,e){"use strict";var i={exitDelay:200,enterDelay:0,html:null,margin:5,inDuration:250,outDuration:200,position:"bottom",transitionMovement:10},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Tooltip=i).options=d.extend({},n.defaults,e),i.isOpen=!1,i.isHovered=!1,i.isFocused=!1,i._appendTooltipEl(),i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){d(this.tooltipEl).remove(),this._removeEventHandlers(),this.el.M_Tooltip=void 0}},{key:"_appendTooltipEl",value:function(){var t=document.createElement("div");t.classList.add("material-tooltip"),this.tooltipEl=t;var e=document.createElement("div");e.classList.add("tooltip-content"),e.innerHTML=this.options.html,t.appendChild(e),document.body.appendChild(t)}},{key:"_updateTooltipContent",value:function(){this.tooltipEl.querySelector(".tooltip-content").innerHTML=this.options.html}},{key:"_setupEventHandlers",value:function(){this._handleMouseEnterBound=this._handleMouseEnter.bind(this),this._handleMouseLeaveBound=this._handleMouseLeave.bind(this),this._handleFocusBound=this._handleFocus.bind(this),this._handleBlurBound=this._handleBlur.bind(this),this.el.addEventListener("mouseenter",this._handleMouseEnterBound),this.el.addEventListener("mouseleave",this._handleMouseLeaveBound),this.el.addEventListener("focus",this._handleFocusBound,!0),this.el.addEventListener("blur",this._handleBlurBound,!0)}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("mouseenter",this._handleMouseEnterBound),this.el.removeEventListener("mouseleave",this._handleMouseLeaveBound),this.el.removeEventListener("focus",this._handleFocusBound,!0),this.el.removeEventListener("blur",this._handleBlurBound,!0)}},{key:"open",value:function(t){this.isOpen||(t=void 0===t||void 0,this.isOpen=!0,this.options=d.extend({},this.options,this._getAttributeOptions()),this._updateTooltipContent(),this._setEnterDelayTimeout(t))}},{key:"close",value:function(){this.isOpen&&(this.isHovered=!1,this.isFocused=!1,this.isOpen=!1,this._setExitDelayTimeout())}},{key:"_setExitDelayTimeout",value:function(){var t=this;clearTimeout(this._exitDelayTimeout),this._exitDelayTimeout=setTimeout(function(){t.isHovered||t.isFocused||t._animateOut()},this.options.exitDelay)}},{key:"_setEnterDelayTimeout",value:function(t){var e=this;clearTimeout(this._enterDelayTimeout),this._enterDelayTimeout=setTimeout(function(){(e.isHovered||e.isFocused||t)&&e._animateIn()},this.options.enterDelay)}},{key:"_positionTooltip",value:function(){var t,e=this.el,i=this.tooltipEl,n=e.offsetHeight,s=e.offsetWidth,o=i.offsetHeight,a=i.offsetWidth,r=this.options.margin,l=void 0,h=void 0;this.xMovement=0,this.yMovement=0,l=e.getBoundingClientRect().top+M.getDocumentScrollTop(),h=e.getBoundingClientRect().left+M.getDocumentScrollLeft(),"top"===this.options.position?(l+=-o-r,h+=s/2-a/2,this.yMovement=-this.options.transitionMovement):"right"===this.options.position?(l+=n/2-o/2,h+=s+r,this.xMovement=this.options.transitionMovement):"left"===this.options.position?(l+=n/2-o/2,h+=-a-r,this.xMovement=-this.options.transitionMovement):(l+=n+r,h+=s/2-a/2,this.yMovement=this.options.transitionMovement),t=this._repositionWithinScreen(h,l,a,o),d(i).css({top:t.y+"px",left:t.x+"px"})}},{key:"_repositionWithinScreen",value:function(t,e,i,n){var s=M.getDocumentScrollLeft(),o=M.getDocumentScrollTop(),a=t-s,r=e-o,l={left:a,top:r,width:i,height:n},h=this.options.margin+this.options.transitionMovement,d=M.checkWithinContainer(document.body,l,h);return d.left?a=h:d.right&&(a-=a+i-window.innerWidth),d.top?r=h:d.bottom&&(r-=r+n-window.innerHeight),{x:a+s,y:r+o}}},{key:"_animateIn",value:function(){this._positionTooltip(),this.tooltipEl.style.visibility="visible",e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:1,translateX:this.xMovement,translateY:this.yMovement,duration:this.options.inDuration,easing:"easeOutCubic"})}},{key:"_animateOut",value:function(){e.remove(this.tooltipEl),e({targets:this.tooltipEl,opacity:0,translateX:0,translateY:0,duration:this.options.outDuration,easing:"easeOutCubic"})}},{key:"_handleMouseEnter",value:function(){this.isHovered=!0,this.isFocused=!1,this.open(!1)}},{key:"_handleMouseLeave",value:function(){this.isHovered=!1,this.isFocused=!1,this.close()}},{key:"_handleFocus",value:function(){M.tabPressed&&(this.isFocused=!0,this.open(!1))}},{key:"_handleBlur",value:function(){this.isFocused=!1,this.close()}},{key:"_getAttributeOptions",value:function(){var t={},e=this.el.getAttribute("data-tooltip"),i=this.el.getAttribute("data-position");return e&&(t.html=e),i&&(t.position=i),t}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Tooltip}},{key:"defaults",get:function(){return i}}]),n}();M.Tooltip=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"tooltip","M_Tooltip")}(cash,M.anime),function(i){"use strict";var t=t||{},e=document.querySelectorAll.bind(document);function m(t){var e="";for(var i in t)t.hasOwnProperty(i)&&(e+=i+":"+t[i]+";");return e}var g={duration:750,show:function(t,e){if(2===t.button)return!1;var i=e||this,n=document.createElement("div");n.className="waves-ripple",i.appendChild(n);var s,o,a,r,l,h,d,u=(h={top:0,left:0},d=(s=i)&&s.ownerDocument,o=d.documentElement,void 0!==s.getBoundingClientRect&&(h=s.getBoundingClientRect()),a=null!==(l=r=d)&&l===l.window?r:9===r.nodeType&&r.defaultView,{top:h.top+a.pageYOffset-o.clientTop,left:h.left+a.pageXOffset-o.clientLeft}),c=t.pageY-u.top,p=t.pageX-u.left,v="scale("+i.clientWidth/100*10+")";"touches"in t&&(c=t.touches[0].pageY-u.top,p=t.touches[0].pageX-u.left),n.setAttribute("data-hold",Date.now()),n.setAttribute("data-scale",v),n.setAttribute("data-x",p),n.setAttribute("data-y",c);var f={top:c+"px",left:p+"px"};n.className=n.className+" waves-notransition",n.setAttribute("style",m(f)),n.className=n.className.replace("waves-notransition",""),f["-webkit-transform"]=v,f["-moz-transform"]=v,f["-ms-transform"]=v,f["-o-transform"]=v,f.transform=v,f.opacity="1",f["-webkit-transition-duration"]=g.duration+"ms",f["-moz-transition-duration"]=g.duration+"ms",f["-o-transition-duration"]=g.duration+"ms",f["transition-duration"]=g.duration+"ms",f["-webkit-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-moz-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["-o-transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",f["transition-timing-function"]="cubic-bezier(0.250, 0.460, 0.450, 0.940)",n.setAttribute("style",m(f))},hide:function(t){l.touchup(t);var e=this,i=(e.clientWidth,null),n=e.getElementsByClassName("waves-ripple");if(!(0i||1"+o+""+a+""+r+""),i.length&&e.prepend(i)}},{key:"_resetCurrentElement",value:function(){this.activeIndex=-1,this.$active.removeClass("active")}},{key:"_resetAutocomplete",value:function(){h(this.container).empty(),this._resetCurrentElement(),this.oldVal=null,this.isOpen=!1,this._mousedown=!1}},{key:"selectOption",value:function(t){var e=t.text().trim();this.el.value=e,this.$el.trigger("change"),this._resetAutocomplete(),this.close(),"function"==typeof this.options.onAutocomplete&&this.options.onAutocomplete.call(this,e)}},{key:"_renderDropdown",value:function(t,i){var n=this;this._resetAutocomplete();var e=[];for(var s in t)if(t.hasOwnProperty(s)&&-1!==s.toLowerCase().indexOf(i)){if(this.count>=this.options.limit)break;var o={data:t[s],key:s};e.push(o),this.count++}if(this.options.sortFunction){e.sort(function(t,e){return n.options.sortFunction(t.key.toLowerCase(),e.key.toLowerCase(),i.toLowerCase())})}for(var a=0;a");r.data?l.append(''+r.key+""):l.append(""+r.key+""),h(this.container).append(l),this._highlight(i,l)}}},{key:"open",value:function(){var t=this.el.value.toLowerCase();this._resetAutocomplete(),t.length>=this.options.minLength&&(this.isOpen=!0,this._renderDropdown(this.options.data,t)),this.dropdown.isOpen?this.dropdown.recalculateDimensions():this.dropdown.open()}},{key:"close",value:function(){this.dropdown.close()}},{key:"updateData",value:function(t){var e=this.el.value.toLowerCase();this.options.data=t,this.isOpen&&this._renderDropdown(t,e)}}],[{key:"init",value:function(t,e){return _get(s.__proto__||Object.getPrototypeOf(s),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Autocomplete}},{key:"defaults",get:function(){return e}}]),s}();t._keydown=!1,M.Autocomplete=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"autocomplete","M_Autocomplete")}(cash),function(d){M.updateTextFields=function(){d("input[type=text], input[type=password], input[type=email], input[type=url], input[type=tel], input[type=number], input[type=search], input[type=date], input[type=time], textarea").each(function(t,e){var i=d(this);0
'),d("body").append(e));var i=t.css("font-family"),n=t.css("font-size"),s=t.css("line-height"),o=t.css("padding-top"),a=t.css("padding-right"),r=t.css("padding-bottom"),l=t.css("padding-left");n&&e.css("font-size",n),i&&e.css("font-family",i),s&&e.css("line-height",s),o&&e.css("padding-top",o),a&&e.css("padding-right",a),r&&e.css("padding-bottom",r),l&&e.css("padding-left",l),t.data("original-height")||t.data("original-height",t.height()),"off"===t.attr("wrap")&&e.css("overflow-wrap","normal").css("white-space","pre"),e.text(t[0].value+"\n");var h=e.html().replace(/\n/g,"
");e.html(h),0'),this.$slides.each(function(t,e){var i=s('
  • ');n.$indicators.append(i[0])}),this.$el.append(this.$indicators[0]),this.$indicators=this.$indicators.children("li.indicator-item"))}},{key:"_removeIndicators",value:function(){this.$el.find("ul.indicators").remove()}},{key:"set",value:function(t){var e=this;if(t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.activeIndex!=t){this.$active=this.$slides.eq(this.activeIndex);var i=this.$active.find(".caption");this.$active.removeClass("active"),o({targets:this.$active[0],opacity:0,duration:this.options.duration,easing:"easeOutQuad",complete:function(){e.$slides.not(".active").each(function(t){o({targets:t,opacity:0,translateX:0,translateY:0,duration:0,easing:"easeOutQuad"})})}}),this._animateCaptionIn(i[0],this.options.duration),this.options.indicators&&(this.$indicators.eq(this.activeIndex).removeClass("active"),this.$indicators.eq(t).addClass("active")),o({targets:this.$slides.eq(t)[0],opacity:1,duration:this.options.duration,easing:"easeOutQuad"}),o({targets:this.$slides.eq(t).find(".caption")[0],opacity:1,translateX:0,translateY:0,duration:this.options.duration,delay:this.options.duration,easing:"easeOutQuad"}),this.$slides.eq(t).addClass("active"),this.activeIndex=t,this.start()}}},{key:"pause",value:function(){clearInterval(this.interval)}},{key:"start",value:function(){clearInterval(this.interval),this.interval=setInterval(this._handleIntervalBound,this.options.duration+this.options.interval)}},{key:"next",value:function(){var t=this.activeIndex+1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}},{key:"prev",value:function(){var t=this.activeIndex-1;t>=this.$slides.length?t=0:t<0&&(t=this.$slides.length-1),this.set(t)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Slider}},{key:"defaults",get:function(){return e}}]),n}();M.Slider=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"slider","M_Slider")}(cash,M.anime),function(n,s){n(document).on("click",".card",function(t){if(n(this).children(".card-reveal").length){var i=n(t.target).closest(".card");void 0===i.data("initialOverflow")&&i.data("initialOverflow",void 0===i.css("overflow")?"":i.css("overflow"));var e=n(this).find(".card-reveal");n(t.target).is(n(".card-reveal .card-title"))||n(t.target).is(n(".card-reveal .card-title i"))?s({targets:e[0],translateY:0,duration:225,easing:"easeInOutQuad",complete:function(t){var e=t.animatables[0].target;n(e).css({display:"none"}),i.css("overflow",i.data("initialOverflow"))}}):(n(t.target).is(n(".card .activator"))||n(t.target).is(n(".card .activator i")))&&(i.css("overflow","hidden"),e.css({display:"block"}),s({targets:e[0],translateY:"-100%",duration:300,easing:"easeInOutQuad"}))}})}(cash,M.anime),function(h){"use strict";var e={data:[],placeholder:"",secondaryPlaceholder:"",autocompleteOptions:{},limit:1/0,onChipAdd:null,onChipSelect:null,onChipDelete:null},t=function(t){function l(t,e){_classCallCheck(this,l);var i=_possibleConstructorReturn(this,(l.__proto__||Object.getPrototypeOf(l)).call(this,l,t,e));return(i.el.M_Chips=i).options=h.extend({},l.defaults,e),i.$el.addClass("chips input-field"),i.chipsData=[],i.$chips=h(),i._setupInput(),i.hasAutocomplete=0"),this.$el.append(this.$input)),this.$input.addClass("input")}},{key:"_setupLabel",value:function(){this.$label=this.$el.find("label"),this.$label.length&&this.$label.setAttribute("for",this.$input.attr("id"))}},{key:"_setPlaceholder",value:function(){void 0!==this.chipsData&&!this.chipsData.length&&this.options.placeholder?h(this.$input).prop("placeholder",this.options.placeholder):(void 0===this.chipsData||this.chipsData.length)&&this.options.secondaryPlaceholder&&h(this.$input).prop("placeholder",this.options.secondaryPlaceholder)}},{key:"_isValid",value:function(t){if(t.hasOwnProperty("tag")&&""!==t.tag){for(var e=!1,i=0;i=this.options.limit)){var e=this._renderChip(t);this.$chips.add(e),this.chipsData.push(t),h(this.$input).before(e),this._setPlaceholder(),"function"==typeof this.options.onChipAdd&&this.options.onChipAdd.call(this,this.$el,e)}}},{key:"deleteChip",value:function(t){var e=this.$chips.eq(t);this.$chips.eq(t).remove(),this.$chips=this.$chips.filter(function(t){return 0<=h(t).index()}),this.chipsData.splice(t,1),this._setPlaceholder(),"function"==typeof this.options.onChipDelete&&this.options.onChipDelete.call(this,this.$el,e[0])}},{key:"selectChip",value:function(t){var e=this.$chips.eq(t);(this._selectedChip=e)[0].focus(),"function"==typeof this.options.onChipSelect&&this.options.onChipSelect.call(this,this.$el,e[0])}}],[{key:"init",value:function(t,e){return _get(l.__proto__||Object.getPrototypeOf(l),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Chips}},{key:"_handleChipsKeydown",value:function(t){l._keydown=!0;var e=h(t.target).closest(".chips"),i=t.target&&e.length;if(!h(t.target).is("input, textarea")&&i){var n=e[0].M_Chips;if(8===t.keyCode||46===t.keyCode){t.preventDefault();var s=n.chipsData.length;if(n._selectedChip){var o=n._selectedChip.index();n.deleteChip(o),n._selectedChip=null,s=Math.max(o-1,0)}n.chipsData.length&&n.selectChip(s)}else if(37===t.keyCode){if(n._selectedChip){var a=n._selectedChip.index()-1;if(a<0)return;n.selectChip(a)}}else if(39===t.keyCode&&n._selectedChip){var r=n._selectedChip.index()+1;r>=n.chipsData.length?n.$input[0].focus():n.selectChip(r)}}}},{key:"_handleChipsKeyup",value:function(t){l._keydown=!1}},{key:"_handleChipsBlur",value:function(t){l._keydown||(h(t.target).closest(".chips")[0].M_Chips._selectedChip=null)}},{key:"defaults",get:function(){return e}}]),l}();t._keydown=!1,M.Chips=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"chips","M_Chips"),h(document).ready(function(){h(document.body).on("click",".chip .close",function(){var t=h(this).closest(".chips");t.length&&t[0].M_Chips||h(this).closest(".chip").remove()})})}(cash),function(s){"use strict";var e={top:0,bottom:1/0,offset:0,onPositionChange:null},t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_Pushpin=i).options=s.extend({},n.defaults,e),i.originalOffset=i.el.offsetTop,n._pushpins.push(i),i._setupEventHandlers(),i._updatePosition(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this.el.style.top=null,this._removePinClasses(),this._removeEventHandlers();var t=n._pushpins.indexOf(this);n._pushpins.splice(t,1)}},{key:"_setupEventHandlers",value:function(){document.addEventListener("scroll",n._updateElements)}},{key:"_removeEventHandlers",value:function(){document.removeEventListener("scroll",n._updateElements)}},{key:"_updatePosition",value:function(){var t=M.getDocumentScrollTop()+this.options.offset;this.options.top<=t&&this.options.bottom>=t&&!this.el.classList.contains("pinned")&&(this._removePinClasses(),this.el.style.top=this.options.offset+"px",this.el.classList.add("pinned"),"function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pinned")),tthis.options.bottom&&!this.el.classList.contains("pin-bottom")&&(this._removePinClasses(),this.el.classList.add("pin-bottom"),this.el.style.top=this.options.bottom-this.originalOffset+"px","function"==typeof this.options.onPositionChange&&this.options.onPositionChange.call(this,"pin-bottom"))}},{key:"_removePinClasses",value:function(){this.el.classList.remove("pin-top"),this.el.classList.remove("pinned"),this.el.classList.remove("pin-bottom")}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Pushpin}},{key:"_updateElements",value:function(){for(var t in n._pushpins){n._pushpins[t]._updatePosition()}}},{key:"defaults",get:function(){return e}}]),n}();t._pushpins=[],M.Pushpin=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"pushpin","M_Pushpin")}(cash),function(r,s){"use strict";var e={direction:"top",hoverEnabled:!0,toolbarEnabled:!1};r.fn.reverse=[].reverse;var t=function(t){function n(t,e){_classCallCheck(this,n);var i=_possibleConstructorReturn(this,(n.__proto__||Object.getPrototypeOf(n)).call(this,n,t,e));return(i.el.M_FloatingActionButton=i).options=r.extend({},n.defaults,e),i.isOpen=!1,i.$anchor=i.$el.children("a").first(),i.$menu=i.$el.children("ul").first(),i.$floatingBtns=i.$el.find("ul .btn-floating"),i.$floatingBtnsReverse=i.$el.find("ul .btn-floating").reverse(),i.offsetY=0,i.offsetX=0,i.$el.addClass("direction-"+i.options.direction),"top"===i.options.direction?i.offsetY=40:"right"===i.options.direction?i.offsetX=-40:"bottom"===i.options.direction?i.offsetY=-40:i.offsetX=40,i._setupEventHandlers(),i}return _inherits(n,Component),_createClass(n,[{key:"destroy",value:function(){this._removeEventHandlers(),this.el.M_FloatingActionButton=void 0}},{key:"_setupEventHandlers",value:function(){this._handleFABClickBound=this._handleFABClick.bind(this),this._handleOpenBound=this.open.bind(this),this._handleCloseBound=this.close.bind(this),this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.addEventListener("mouseenter",this._handleOpenBound),this.el.addEventListener("mouseleave",this._handleCloseBound)):this.el.addEventListener("click",this._handleFABClickBound)}},{key:"_removeEventHandlers",value:function(){this.options.hoverEnabled&&!this.options.toolbarEnabled?(this.el.removeEventListener("mouseenter",this._handleOpenBound),this.el.removeEventListener("mouseleave",this._handleCloseBound)):this.el.removeEventListener("click",this._handleFABClickBound)}},{key:"_handleFABClick",value:function(){this.isOpen?this.close():this.open()}},{key:"_handleDocumentClick",value:function(t){r(t.target).closest(this.$menu).length||this.close()}},{key:"open",value:function(){this.isOpen||(this.options.toolbarEnabled?this._animateInToolbar():this._animateInFAB(),this.isOpen=!0)}},{key:"close",value:function(){this.isOpen&&(this.options.toolbarEnabled?(window.removeEventListener("scroll",this._handleCloseBound,!0),document.body.removeEventListener("click",this._handleDocumentClickBound,!0),this._animateOutToolbar()):this._animateOutFAB(),this.isOpen=!1)}},{key:"_animateInFAB",value:function(){var e=this;this.$el.addClass("active");var i=0;this.$floatingBtnsReverse.each(function(t){s({targets:t,opacity:1,scale:[.4,1],translateY:[e.offsetY,0],translateX:[e.offsetX,0],duration:275,delay:i,easing:"easeInOutQuad"}),i+=40})}},{key:"_animateOutFAB",value:function(){var e=this;this.$floatingBtnsReverse.each(function(t){s.remove(t),s({targets:t,opacity:0,scale:.4,translateY:e.offsetY,translateX:e.offsetX,duration:175,easing:"easeOutQuad",complete:function(){e.$el.removeClass("active")}})})}},{key:"_animateInToolbar",value:function(){var t,e=this,i=window.innerWidth,n=window.innerHeight,s=this.el.getBoundingClientRect(),o=r('
    '),a=this.$anchor.css("background-color");this.$anchor.append(o),this.offsetX=s.left-i/2+s.width/2,this.offsetY=n-s.bottom,t=i/o[0].clientWidth,this.btnBottom=s.bottom,this.btnLeft=s.left,this.btnWidth=s.width,this.$el.addClass("active"),this.$el.css({"text-align":"center",width:"100%",bottom:0,left:0,transform:"translateX("+this.offsetX+"px)",transition:"none"}),this.$anchor.css({transform:"translateY("+-this.offsetY+"px)",transition:"none"}),o.css({"background-color":a}),setTimeout(function(){e.$el.css({transform:"",transition:"transform .2s cubic-bezier(0.550, 0.085, 0.680, 0.530), background-color 0s linear .2s"}),e.$anchor.css({overflow:"visible",transform:"",transition:"transform .2s"}),setTimeout(function(){e.$el.css({overflow:"hidden","background-color":a}),o.css({transform:"scale("+t+")",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"}),e.$menu.children("li").children("a").css({opacity:1}),e._handleDocumentClickBound=e._handleDocumentClick.bind(e),window.addEventListener("scroll",e._handleCloseBound,!0),document.body.addEventListener("click",e._handleDocumentClickBound,!0)},100)},0)}},{key:"_animateOutToolbar",value:function(){var t=this,e=window.innerWidth,i=window.innerHeight,n=this.$el.find(".fab-backdrop"),s=this.$anchor.css("background-color");this.offsetX=this.btnLeft-e/2+this.btnWidth/2,this.offsetY=i-this.btnBottom,this.$el.removeClass("active"),this.$el.css({"background-color":"transparent",transition:"none"}),this.$anchor.css({transition:"none"}),n.css({transform:"scale(0)","background-color":s}),this.$menu.children("li").children("a").css({opacity:""}),setTimeout(function(){n.remove(),t.$el.css({"text-align":"",width:"",bottom:"",left:"",overflow:"","background-color":"",transform:"translate3d("+-t.offsetX+"px,0,0)"}),t.$anchor.css({overflow:"",transform:"translate3d(0,"+t.offsetY+"px,0)"}),setTimeout(function(){t.$el.css({transform:"translate3d(0,0,0)",transition:"transform .2s"}),t.$anchor.css({transform:"translate3d(0,0,0)",transition:"transform .2s cubic-bezier(0.550, 0.055, 0.675, 0.190)"})},20)},200)}}],[{key:"init",value:function(t,e){return _get(n.__proto__||Object.getPrototypeOf(n),"init",this).call(this,this,t,e)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_FloatingActionButton}},{key:"defaults",get:function(){return e}}]),n}();M.FloatingActionButton=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"floatingActionButton","M_FloatingActionButton")}(cash,M.anime),function(g){"use strict";var e={autoClose:!1,format:"mmm dd, yyyy",parse:null,defaultDate:null,setDefaultDate:!1,disableWeekends:!1,disableDayFn:null,firstDay:0,minDate:null,maxDate:null,yearRange:10,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,container:null,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok",previousMonth:"‹",nextMonth:"›",months:["January","February","March","April","May","June","July","August","September","October","November","December"],monthsShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],weekdaysAbbrev:["S","M","T","W","T","F","S"]},events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null},t=function(t){function B(t,e){_classCallCheck(this,B);var i=_possibleConstructorReturn(this,(B.__proto__||Object.getPrototypeOf(B)).call(this,B,t,e));(i.el.M_Datepicker=i).options=g.extend({},B.defaults,e),e&&e.hasOwnProperty("i18n")&&"object"==typeof e.i18n&&(i.options.i18n=g.extend({},B.defaults.i18n,e.i18n)),i.options.minDate&&i.options.minDate.setHours(0,0,0,0),i.options.maxDate&&i.options.maxDate.setHours(0,0,0,0),i.id=M.guid(),i._setupVariables(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupEventHandlers(),i.options.defaultDate||(i.options.defaultDate=new Date(Date.parse(i.el.value)));var n=i.options.defaultDate;return B._isDate(n)?i.options.setDefaultDate?(i.setDate(n,!0),i.setInputValue()):i.gotoDate(n):i.gotoDate(new Date),i.isOpen=!1,i}return _inherits(B,Component),_createClass(B,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),g(this.modalEl).remove(),this.destroySelects(),this.el.M_Datepicker=void 0}},{key:"destroySelects",value:function(){var t=this.calendarEl.querySelector(".orig-select-year");t&&M.FormSelect.getInstance(t).destroy();var e=this.calendarEl.querySelector(".orig-select-month");e&&M.FormSelect.getInstance(e).destroy()}},{key:"_insertHTMLIntoDOM",value:function(){this.options.showClearBtn&&(g(this.clearBtn).css({visibility:""}),this.clearBtn.innerHTML=this.options.i18n.clear),this.doneBtn.innerHTML=this.options.i18n.done,this.cancelBtn.innerHTML=this.options.i18n.cancel,this.options.container?this.$modalEl.appendTo(this.options.container):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modalEl.id="modal-"+this.id,this.modal=M.Modal.init(this.modalEl,{onCloseEnd:function(){t.isOpen=!1}})}},{key:"toString",value:function(t){var e=this;return t=t||this.options.format,B._isDate(this.date)?t.split(/(d{1,4}|m{1,4}|y{4}|yy|!.)/g).map(function(t){return e.formats[t]?e.formats[t]():t}).join(""):""}},{key:"setDate",value:function(t,e){if(!t)return this.date=null,this._renderDateDisplay(),this.draw();if("string"==typeof t&&(t=new Date(Date.parse(t))),B._isDate(t)){var i=this.options.minDate,n=this.options.maxDate;B._isDate(i)&&tn.maxDate||n.disableWeekends&&B._isWeekend(y)||n.disableDayFn&&n.disableDayFn(y),isEmpty:C,isStartRange:x,isEndRange:L,isInRange:T,showDaysInNextAndPreviousMonths:n.showDaysInNextAndPreviousMonths};l.push(this.renderDay($)),7==++_&&(r.push(this.renderRow(l,n.isRTL,m)),_=0,m=!(l=[]))}return this.renderTable(n,r,i)}},{key:"renderDay",value:function(t){var e=[],i="false";if(t.isEmpty){if(!t.showDaysInNextAndPreviousMonths)return'';e.push("is-outside-current-month"),e.push("is-selection-disabled")}return t.isDisabled&&e.push("is-disabled"),t.isToday&&e.push("is-today"),t.isSelected&&(e.push("is-selected"),i="true"),t.hasEvent&&e.push("has-event"),t.isInRange&&e.push("is-inrange"),t.isStartRange&&e.push("is-startrange"),t.isEndRange&&e.push("is-endrange"),'"}},{key:"renderRow",value:function(t,e,i){return''+(e?t.reverse():t).join("")+""}},{key:"renderTable",value:function(t,e,i){return'
    '+this.renderHead(t)+this.renderBody(e)+"
    "}},{key:"renderHead",value:function(t){var e=void 0,i=[];for(e=0;e<7;e++)i.push(''+this.renderDayName(t,e,!0)+"");return""+(t.isRTL?i.reverse():i).join("")+""}},{key:"renderBody",value:function(t){return""+t.join("")+""}},{key:"renderTitle",value:function(t,e,i,n,s,o){var a,r,l=void 0,h=void 0,d=void 0,u=this.options,c=i===u.minYear,p=i===u.maxYear,v='
    ',f=!0,m=!0;for(d=[],l=0;l<12;l++)d.push('");for(a='",g.isArray(u.yearRange)?(l=u.yearRange[0],h=u.yearRange[1]+1):(l=i-u.yearRange,h=1+i+u.yearRange),d=[];l=u.minYear&&d.push('");r='";v+='',v+='
    ',u.showMonthAfterYear?v+=r+a:v+=a+r,v+="
    ",c&&(0===n||u.minMonth>=n)&&(f=!1),p&&(11===n||u.maxMonth<=n)&&(m=!1);return(v+='')+"
    "}},{key:"draw",value:function(t){if(this.isOpen||t){var e,i=this.options,n=i.minYear,s=i.maxYear,o=i.minMonth,a=i.maxMonth,r="";this._y<=n&&(this._y=n,!isNaN(o)&&this._m=s&&(this._y=s,!isNaN(a)&&this._m>a&&(this._m=a)),e="datepicker-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2);for(var l=0;l<1;l++)this._renderDateDisplay(),r+=this.renderTitle(this,l,this.calendars[l].year,this.calendars[l].month,this.calendars[0].year,e)+this.render(this.calendars[l].year,this.calendars[l].month,e);this.destroySelects(),this.calendarEl.innerHTML=r;var h=this.calendarEl.querySelector(".orig-select-year"),d=this.calendarEl.querySelector(".orig-select-month");M.FormSelect.init(h,{classes:"select-year",dropdownOptions:{container:document.body,constrainWidth:!1}}),M.FormSelect.init(d,{classes:"select-month",dropdownOptions:{container:document.body,constrainWidth:!1}}),h.addEventListener("change",this._handleYearChange.bind(this)),d.addEventListener("change",this._handleMonthChange.bind(this)),"function"==typeof this.options.onDraw&&this.options.onDraw(this)}}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleInputChangeBound=this._handleInputChange.bind(this),this._handleCalendarClickBound=this._handleCalendarClick.bind(this),this._finishSelectionBound=this._finishSelection.bind(this),this._handleMonthChange=this._handleMonthChange.bind(this),this._closeBound=this.close.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.el.addEventListener("change",this._handleInputChangeBound),this.calendarEl.addEventListener("click",this._handleCalendarClickBound),this.doneBtn.addEventListener("click",this._finishSelectionBound),this.cancelBtn.addEventListener("click",this._closeBound),this.options.showClearBtn&&(this._handleClearClickBound=this._handleClearClick.bind(this),this.clearBtn.addEventListener("click",this._handleClearClickBound))}},{key:"_setupVariables",value:function(){var e=this;this.$modalEl=g(B._template),this.modalEl=this.$modalEl[0],this.calendarEl=this.modalEl.querySelector(".datepicker-calendar"),this.yearTextEl=this.modalEl.querySelector(".year-text"),this.dateTextEl=this.modalEl.querySelector(".date-text"),this.options.showClearBtn&&(this.clearBtn=this.modalEl.querySelector(".datepicker-clear")),this.doneBtn=this.modalEl.querySelector(".datepicker-done"),this.cancelBtn=this.modalEl.querySelector(".datepicker-cancel"),this.formats={d:function(){return e.date.getDate()},dd:function(){var t=e.date.getDate();return(t<10?"0":"")+t},ddd:function(){return e.options.i18n.weekdaysShort[e.date.getDay()]},dddd:function(){return e.options.i18n.weekdays[e.date.getDay()]},m:function(){return e.date.getMonth()+1},mm:function(){var t=e.date.getMonth()+1;return(t<10?"0":"")+t},mmm:function(){return e.options.i18n.monthsShort[e.date.getMonth()]},mmmm:function(){return e.options.i18n.months[e.date.getMonth()]},yy:function(){return(""+e.date.getFullYear()).slice(2)},yyyy:function(){return e.date.getFullYear()}}}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound),this.el.removeEventListener("change",this._handleInputChangeBound),this.calendarEl.removeEventListener("click",this._handleCalendarClickBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleCalendarClick",value:function(t){if(this.isOpen){var e=g(t.target);e.hasClass("is-disabled")||(!e.hasClass("datepicker-day-button")||e.hasClass("is-empty")||e.parent().hasClass("is-disabled")?e.closest(".month-prev").length?this.prevMonth():e.closest(".month-next").length&&this.nextMonth():(this.setDate(new Date(t.target.getAttribute("data-year"),t.target.getAttribute("data-month"),t.target.getAttribute("data-day"))),this.options.autoClose&&this._finishSelection()))}}},{key:"_handleClearClick",value:function(){this.date=null,this.setInputValue(),this.close()}},{key:"_handleMonthChange",value:function(t){this.gotoMonth(t.target.value)}},{key:"_handleYearChange",value:function(t){this.gotoYear(t.target.value)}},{key:"gotoMonth",value:function(t){isNaN(t)||(this.calendars[0].month=parseInt(t,10),this.adjustCalendars())}},{key:"gotoYear",value:function(t){isNaN(t)||(this.calendars[0].year=parseInt(t,10),this.adjustCalendars())}},{key:"_handleInputChange",value:function(t){var e=void 0;t.firedBy!==this&&(e=this.options.parse?this.options.parse(this.el.value,this.options.format):new Date(Date.parse(this.el.value)),B._isDate(e)&&this.setDate(e))}},{key:"renderDayName",value:function(t,e,i){for(e+=t.firstDay;7<=e;)e-=7;return i?t.i18n.weekdaysAbbrev[e]:t.i18n.weekdays[e]}},{key:"_finishSelection",value:function(){this.setInputValue(),this.close()}},{key:"open",value:function(){if(!this.isOpen)return this.isOpen=!0,"function"==typeof this.options.onOpen&&this.options.onOpen.call(this),this.draw(),this.modal.open(),this}},{key:"close",value:function(){if(this.isOpen)return this.isOpen=!1,"function"==typeof this.options.onClose&&this.options.onClose.call(this),this.modal.close(),this}}],[{key:"init",value:function(t,e){return _get(B.__proto__||Object.getPrototypeOf(B),"init",this).call(this,this,t,e)}},{key:"_isDate",value:function(t){return/Date/.test(Object.prototype.toString.call(t))&&!isNaN(t.getTime())}},{key:"_isWeekend",value:function(t){var e=t.getDay();return 0===e||6===e}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"_getDaysInMonth",value:function(t,e){return[31,B._isLeapYear(t)?29:28,31,30,31,30,31,31,30,31,30,31][e]}},{key:"_isLeapYear",value:function(t){return t%4==0&&t%100!=0||t%400==0}},{key:"_compareDates",value:function(t,e){return t.getTime()===e.getTime()}},{key:"_setToStartOfDay",value:function(t){B._isDate(t)&&t.setHours(0,0,0,0)}},{key:"getInstance",value:function(t){return(t.jquery?t[0]:t).M_Datepicker}},{key:"defaults",get:function(){return e}}]),B}();t._template=['"].join(""),M.Datepicker=t,M.jQueryLoaded&&M.initializeJqueryWrapper(t,"datepicker","M_Datepicker")}(cash),function(h){"use strict";var e={dialRadius:135,outerRadius:105,innerRadius:70,tickRadius:20,duration:350,container:null,defaultTime:"now",fromNow:0,showClearBtn:!1,i18n:{cancel:"Cancel",clear:"Clear",done:"Ok"},autoClose:!1,twelveHour:!0,vibrate:!0,onOpenStart:null,onOpenEnd:null,onCloseStart:null,onCloseEnd:null,onSelect:null},t=function(t){function f(t,e){_classCallCheck(this,f);var i=_possibleConstructorReturn(this,(f.__proto__||Object.getPrototypeOf(f)).call(this,f,t,e));return(i.el.M_Timepicker=i).options=h.extend({},f.defaults,e),i.id=M.guid(),i._insertHTMLIntoDOM(),i._setupModal(),i._setupVariables(),i._setupEventHandlers(),i._clockSetup(),i._pickerSetup(),i}return _inherits(f,Component),_createClass(f,[{key:"destroy",value:function(){this._removeEventHandlers(),this.modal.destroy(),h(this.modalEl).remove(),this.el.M_Timepicker=void 0}},{key:"_setupEventHandlers",value:function(){this._handleInputKeydownBound=this._handleInputKeydown.bind(this),this._handleInputClickBound=this._handleInputClick.bind(this),this._handleClockClickStartBound=this._handleClockClickStart.bind(this),this._handleDocumentClickMoveBound=this._handleDocumentClickMove.bind(this),this._handleDocumentClickEndBound=this._handleDocumentClickEnd.bind(this),this.el.addEventListener("click",this._handleInputClickBound),this.el.addEventListener("keydown",this._handleInputKeydownBound),this.plate.addEventListener("mousedown",this._handleClockClickStartBound),this.plate.addEventListener("touchstart",this._handleClockClickStartBound),h(this.spanHours).on("click",this.showView.bind(this,"hours")),h(this.spanMinutes).on("click",this.showView.bind(this,"minutes"))}},{key:"_removeEventHandlers",value:function(){this.el.removeEventListener("click",this._handleInputClickBound),this.el.removeEventListener("keydown",this._handleInputKeydownBound)}},{key:"_handleInputClick",value:function(){this.open()}},{key:"_handleInputKeydown",value:function(t){t.which===M.keys.ENTER&&(t.preventDefault(),this.open())}},{key:"_handleClockClickStart",value:function(t){t.preventDefault();var e=this.plate.getBoundingClientRect(),i=e.left,n=e.top;this.x0=i+this.options.dialRadius,this.y0=n+this.options.dialRadius,this.moved=!1;var s=f._Pos(t);this.dx=s.x-this.x0,this.dy=s.y-this.y0,this.setHand(this.dx,this.dy,!1),document.addEventListener("mousemove",this._handleDocumentClickMoveBound),document.addEventListener("touchmove",this._handleDocumentClickMoveBound),document.addEventListener("mouseup",this._handleDocumentClickEndBound),document.addEventListener("touchend",this._handleDocumentClickEndBound)}},{key:"_handleDocumentClickMove",value:function(t){t.preventDefault();var e=f._Pos(t),i=e.x-this.x0,n=e.y-this.y0;this.moved=!0,this.setHand(i,n,!1,!0)}},{key:"_handleDocumentClickEnd",value:function(t){var e=this;t.preventDefault(),document.removeEventListener("mouseup",this._handleDocumentClickEndBound),document.removeEventListener("touchend",this._handleDocumentClickEndBound);var i=f._Pos(t),n=i.x-this.x0,s=i.y-this.y0;this.moved&&n===this.dx&&s===this.dy&&this.setHand(n,s),"hours"===this.currentView?this.showView("minutes",this.options.duration/2):this.options.autoClose&&(h(this.minutesView).addClass("timepicker-dial-out"),setTimeout(function(){e.done()},this.options.duration/2)),"function"==typeof this.options.onSelect&&this.options.onSelect.call(this,this.hours,this.minutes),document.removeEventListener("mousemove",this._handleDocumentClickMoveBound),document.removeEventListener("touchmove",this._handleDocumentClickMoveBound)}},{key:"_insertHTMLIntoDOM",value:function(){this.$modalEl=h(f._template),this.modalEl=this.$modalEl[0],this.modalEl.id="modal-"+this.id;var t=document.querySelector(this.options.container);this.options.container&&t?this.$modalEl.appendTo(t):this.$modalEl.insertBefore(this.el)}},{key:"_setupModal",value:function(){var t=this;this.modal=M.Modal.init(this.modalEl,{onOpenStart:this.options.onOpenStart,onOpenEnd:this.options.onOpenEnd,onCloseStart:this.options.onCloseStart,onCloseEnd:function(){"function"==typeof t.options.onCloseEnd&&t.options.onCloseEnd.call(t),t.isOpen=!1}})}},{key:"_setupVariables",value:function(){this.currentView="hours",this.vibrate=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null,this._canvas=this.modalEl.querySelector(".timepicker-canvas"),this.plate=this.modalEl.querySelector(".timepicker-plate"),this.hoursView=this.modalEl.querySelector(".timepicker-hours"),this.minutesView=this.modalEl.querySelector(".timepicker-minutes"),this.spanHours=this.modalEl.querySelector(".timepicker-span-hours"),this.spanMinutes=this.modalEl.querySelector(".timepicker-span-minutes"),this.spanAmPm=this.modalEl.querySelector(".timepicker-span-am-pm"),this.footer=this.modalEl.querySelector(".timepicker-footer"),this.amOrPm="PM"}},{key:"_pickerSetup",value:function(){var t=h('").appendTo(this.footer).on("click",this.clear.bind(this));this.options.showClearBtn&&t.css({visibility:""});var e=h('
    ');h('").appendTo(e).on("click",this.close.bind(this)),h('").appendTo(e).on("click",this.done.bind(this)),e.appendTo(this.footer)}},{key:"_clockSetup",value:function(){this.options.twelveHour&&(this.$amBtn=h('
    AM
    '),this.$pmBtn=h('
    PM
    '),this.$amBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm),this.$pmBtn.on("click",this._handleAmPmClick.bind(this)).appendTo(this.spanAmPm)),this._buildHoursView(),this._buildMinutesView(),this._buildSVGClock()}},{key:"_buildSVGClock",value:function(){var t=this.options.dialRadius,e=this.options.tickRadius,i=2*t,n=f._createSVGEl("svg");n.setAttribute("class","timepicker-svg"),n.setAttribute("width",i),n.setAttribute("height",i);var s=f._createSVGEl("g");s.setAttribute("transform","translate("+t+","+t+")");var o=f._createSVGEl("circle");o.setAttribute("class","timepicker-canvas-bearing"),o.setAttribute("cx",0),o.setAttribute("cy",0),o.setAttribute("r",4);var a=f._createSVGEl("line");a.setAttribute("x1",0),a.setAttribute("y1",0);var r=f._createSVGEl("circle");r.setAttribute("class","timepicker-canvas-bg"),r.setAttribute("r",e),s.appendChild(a),s.appendChild(r),s.appendChild(o),n.appendChild(s),this._canvas.appendChild(n),this.hand=a,this.bg=r,this.bearing=o,this.g=s}},{key:"_buildHoursView",value:function(){var t=h('
    ');if(this.options.twelveHour)for(var e=1;e<13;e+=1){var i=t.clone(),n=e/6*Math.PI,s=this.options.outerRadius;i.css({left:this.options.dialRadius+Math.sin(n)*s-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*s-this.options.tickRadius+"px"}),i.html(0===e?"00":e),this.hoursView.appendChild(i[0])}else for(var o=0;o<24;o+=1){var a=t.clone(),r=o/6*Math.PI,l=0
    '),e=0;e<60;e+=5){var i=t.clone(),n=e/30*Math.PI;i.css({left:this.options.dialRadius+Math.sin(n)*this.options.outerRadius-this.options.tickRadius+"px",top:this.options.dialRadius-Math.cos(n)*this.options.outerRadius-this.options.tickRadius+"px"}),i.html(f._addLeadingZero(e)),this.minutesView.appendChild(i[0])}}},{key:"_handleAmPmClick",value:function(t){var e=h(t.target);this.amOrPm=e.hasClass("am-btn")?"AM":"PM",this._updateAmPmView()}},{key:"_updateAmPmView",value:function(){this.options.twelveHour&&(this.$amBtn.toggleClass("text-primary","AM"===this.amOrPm),this.$pmBtn.toggleClass("text-primary","PM"===this.amOrPm))}},{key:"_updateTimeFromInput",value:function(){var t=((this.el.value||this.options.defaultTime||"")+"").split(":");if(this.options.twelveHour&&void 0!==t[1]&&(0','","