├── .babelrc ├── .eslintignore ├── .eslintrc ├── .gitignore ├── LICENSE ├── README.md ├── __mocks__ ├── fileMock.js └── styleMock.js ├── __tests__ ├── __snapshots__ │ └── snapshotTests.js.snap └── snapshotTests.js ├── circle.yml ├── docs ├── README.md ├── js_patterns.md ├── open_dash.png ├── react_patterns.md ├── react_style_guide.md └── syncano_patterns.md ├── jest.json ├── nightwatch.conf.js ├── nightwatch.json ├── package-lock.json ├── package.json ├── s3ListKeys.js ├── snapshotTestConfig.js ├── src ├── Root.js ├── app.js ├── app.sass ├── apps │ ├── Account │ │ ├── AccountActivate.jsx │ │ ├── AccountContainer.jsx │ │ ├── AccountContainer.sass │ │ ├── AccountLogin.jsx │ │ ├── AccountPasswordReset.jsx │ │ ├── AccountPasswordResetConfirm.jsx │ │ ├── AccountPasswordUpdate.jsx │ │ ├── AccountSignup.jsx │ │ ├── AuthActions.js │ │ ├── AuthConstants.js │ │ ├── AuthStore.js │ │ ├── Hello.js │ │ ├── auth.js │ │ └── index.js │ ├── Admins │ │ ├── AdminDialog.jsx │ │ ├── AdminDialogStore.js │ │ ├── Admins.jsx │ │ ├── AdminsActions.js │ │ ├── AdminsInvitationsActions.js │ │ ├── AdminsInvitationsList.jsx │ │ ├── AdminsInvitationsListItem.jsx │ │ ├── AdminsInvitationsStore.js │ │ ├── AdminsList.jsx │ │ ├── AdminsListItem.jsx │ │ ├── AdminsStore.js │ │ └── index.js │ ├── ApiKeys │ │ ├── ApiKeyDialog.jsx │ │ ├── ApiKeyDialogStore.js │ │ ├── ApiKeys.jsx │ │ ├── ApiKeysActions.js │ │ ├── ApiKeysList.jsx │ │ ├── ApiKeysListItem.jsx │ │ ├── ApiKeysStore.js │ │ └── index.js │ ├── Channels │ │ ├── ChannelsActions.js │ │ ├── ChannelsStore.js │ │ └── index.js │ ├── Classes │ │ ├── Classes.jsx │ │ ├── ClassesActions.js │ │ ├── ClassesList.jsx │ │ ├── ClassesListItem.jsx │ │ ├── ClassesStore.js │ │ └── index.js │ ├── CustomSockets │ │ ├── CustomSockets.js │ │ ├── CustomSocketsActions.js │ │ ├── CustomSocketsEndpoints.js │ │ ├── CustomSocketsEndpointsActions.js │ │ ├── CustomSocketsEndpointsList.js │ │ ├── CustomSocketsEndpointsListItem.js │ │ ├── CustomSocketsEndpointsStore.js │ │ ├── CustomSocketsList.js │ │ ├── CustomSocketsListItem.js │ │ ├── CustomSocketsStore.js │ │ └── index.js │ ├── DataObjects │ │ ├── CheckAvatar.jsx │ │ ├── DataObjectDialog.jsx │ │ ├── DataObjectDialogStore.js │ │ ├── DataObjectSearchForm.js │ │ ├── DataObjects.jsx │ │ ├── DataObjectsActions.js │ │ ├── DataObjectsStore.js │ │ ├── DataObjectsTable │ │ │ ├── ColumnsFilterMenu.js │ │ │ ├── ColumnsFilterMenuListItem.js │ │ │ ├── DataObjectsTable.js │ │ │ ├── DataObjectsTableCell.js │ │ │ ├── DataObjectsTableDateCell.js │ │ │ ├── DataObjectsTableFileCell.js │ │ │ ├── DataObjectsTableJSONCell.js │ │ │ ├── DataObjectsTableReferenceCell.js │ │ │ ├── DataObjectsTableTextCell.js │ │ │ └── index.js │ │ ├── DataObjectsTableInitialColumns.js │ │ ├── ReadOnlyTooltip.js │ │ └── index.js │ ├── GlobalConfig │ │ ├── GlobalConfigDialog.js │ │ ├── GlobalConfigDialogActions.js │ │ ├── GlobalConfigDialogStore.js │ │ └── index.js │ ├── Groups │ │ ├── GroupDialog.jsx │ │ ├── GroupDialogStore.js │ │ ├── GroupSummary.js │ │ ├── GroupsActions.js │ │ ├── GroupsDropdown.js │ │ ├── GroupsList.jsx │ │ ├── GroupsListItem.jsx │ │ ├── GroupsStore.js │ │ └── index.js │ ├── Hosting │ │ ├── DotsListItem.js │ │ ├── Files.js │ │ ├── Hosting.js │ │ ├── HostingActions.js │ │ ├── HostingFilesActions.js │ │ ├── HostingFilesEmptyView.js │ │ ├── HostingFilesFolderForm.js │ │ ├── HostingFilesList.js │ │ ├── HostingFilesListItem.js │ │ ├── HostingFilesStore.js │ │ ├── HostingList.js │ │ ├── HostingListItem.js │ │ ├── HostingListItemLinks.js │ │ ├── HostingPublishDialog.js │ │ ├── HostingPublishDialogActions.js │ │ ├── HostingPublishDialogStore.js │ │ ├── HostingStore.js │ │ ├── HostingUploadDialog.js │ │ ├── HostingUploadDialogActions.js │ │ ├── HostingUploadDialogStore.js │ │ ├── UploadFilesButton.js │ │ └── index.js │ ├── Instances │ │ ├── InstanceDialog.jsx │ │ ├── InstanceDialogActions.js │ │ ├── InstanceDialogStore.js │ │ ├── InstanceEdit.jsx │ │ ├── Instances.jsx │ │ ├── Instances.sass │ │ ├── InstancesActions.js │ │ ├── InstancesList.jsx │ │ ├── InstancesListItem.jsx │ │ ├── InstancesStore.js │ │ ├── SharedInstancesList.jsx │ │ └── index.js │ ├── Profile │ │ ├── ProfileActions.js │ │ ├── ProfileAuthentication.jsx │ │ ├── ProfileAuthenticationStore.js │ │ ├── ProfileBillingAddress.jsx │ │ ├── ProfileBillingAddressStore.js │ │ ├── ProfileBillingChart.css │ │ ├── ProfileBillingChart.js │ │ ├── ProfileBillingChartActions.js │ │ ├── ProfileBillingChartStore.js │ │ ├── ProfileBillingInvoices.jsx │ │ ├── ProfileBillingInvoicesStore.js │ │ ├── ProfileBillingPayment.jsx │ │ ├── ProfileBillingPaymentStore.js │ │ ├── ProfileBillingPlan.jsx │ │ ├── ProfileBillingPlanActions.js │ │ ├── ProfileBillingPlanCancel.js │ │ ├── ProfileBillingPlanCancelForm.js │ │ ├── ProfileBillingPlanDialog.jsx │ │ ├── ProfileBillingPlanDialogActions.js │ │ ├── ProfileBillingPlanDialogStore.js │ │ ├── ProfileBillingPlanReceiptDialog.jsx │ │ ├── ProfileBillingPlanReceiptDialogActions.js │ │ ├── ProfileBillingPlanReceiptDialogStore.js │ │ ├── ProfileBillingPlanStore.js │ │ ├── ProfileSettings.jsx │ │ ├── ProfileSettingsStore.js │ │ └── index.js │ ├── ProfileInvitations │ │ ├── ProfileInvitations.js │ │ ├── ProfileInvitationsActions.js │ │ ├── ProfileInvitationsList.js │ │ ├── ProfileInvitationsListItem.js │ │ ├── ProfileInvitationsStore.js │ │ └── index.js │ ├── Session │ │ ├── NewLibConnection.js │ │ ├── SessionActions.js │ │ ├── SessionStore.js │ │ └── index.js │ ├── SnackbarNotification │ │ ├── SnackbarNotification.jsx │ │ ├── SnackbarNotificationActions.js │ │ ├── SnackbarNotificationStore.js │ │ └── index.js │ ├── Sockets │ │ ├── DetailsView │ │ │ ├── SocketAuthorInfo.js │ │ │ ├── SocketCodeExample.js │ │ │ ├── SocketDependenciesList.js │ │ │ ├── SocketDetailContentSection.js │ │ │ ├── SocketDetailInfoBar.js │ │ │ ├── SocketDetailsView.js │ │ │ ├── SocketMethodDescription.js │ │ │ └── SocketParametersList.js │ │ ├── Sockets.jsx │ │ ├── SocketsActions.js │ │ ├── SocketsDialog.js │ │ ├── SocketsDialogSidebar.js │ │ ├── SocketsDialogStore.js │ │ ├── SocketsList.js │ │ ├── SocketsListItem.js │ │ ├── SocketsStore.js │ │ ├── SocketsSummary.js │ │ └── index.js │ ├── SocketsRegistry │ │ ├── DetailsView │ │ │ ├── SocketAuthorInfo.js │ │ │ ├── SocketCodeExample.js │ │ │ ├── SocketDependenciesList.js │ │ │ ├── SocketDetailContentSection.js │ │ │ ├── SocketDetailInfoBar.js │ │ │ ├── SocketDetailsView.js │ │ │ ├── SocketMethodDescription.js │ │ │ └── SocketParametersList.js │ │ ├── SocketsRegistry.js │ │ ├── SocketsRegistryActions.js │ │ ├── SocketsRegistryDialogSidebar.js │ │ ├── SocketsRegistryDialogStore.js │ │ ├── SocketsRegistryInnerToolbar.js │ │ ├── SocketsRegistryList.js │ │ ├── SocketsRegistryListItem.js │ │ ├── SocketsRegistryStore.js │ │ ├── SocketsRegistrySummary.js │ │ ├── SocketsSearchBar.js │ │ └── index.js │ ├── Syncano │ │ ├── Actions │ │ │ ├── Account.js │ │ │ ├── AccountInvitations.js │ │ │ ├── Admins.js │ │ │ ├── ApiKeys.js │ │ │ ├── Billing.js │ │ │ ├── Channels.js │ │ │ ├── Classes.js │ │ │ ├── CustomSockets.js │ │ │ ├── DataEndpoints.js │ │ │ ├── DataObjects.js │ │ │ ├── GlobalConfig.js │ │ │ ├── Groups.js │ │ │ ├── Hosting.js │ │ │ ├── Instances.js │ │ │ ├── Invitations.js │ │ │ ├── Profile.js │ │ │ ├── PushDevices.js │ │ │ ├── PushNotifications.js │ │ │ ├── Sockets.js │ │ │ ├── SocketsRegistry.js │ │ │ ├── Usage.js │ │ │ ├── Users.js │ │ │ └── index.js │ │ └── index.js │ ├── Traces │ │ ├── Traces.jsx │ │ ├── TracesActions.js │ │ ├── TracesEmptyView.js │ │ ├── TracesList.jsx │ │ ├── TracesListItem.js │ │ ├── TracesStore.js │ │ └── index.js │ ├── Usage │ │ ├── Usage.js │ │ ├── UsageChart.js │ │ └── index.js │ ├── Users │ │ ├── UserDialog.jsx │ │ ├── UserDialogStore.js │ │ ├── UserInfo.jsx │ │ ├── Users.jsx │ │ ├── UsersActions.js │ │ ├── UsersList.jsx │ │ ├── UsersListItem.jsx │ │ ├── UsersStore.js │ │ └── index.js │ └── index.js ├── assets │ ├── fonts │ │ ├── avenir │ │ │ ├── 0078f486-8e52-42c0-ad81-3c8d3d43f48e.woff2 │ │ │ ├── 04801919-17ee-4c6b-8b17-eb1965cb3ed6.woff │ │ │ ├── 04d1bf6c-070d-4b7e-9498-6051c9f0c349.ttf │ │ │ ├── 065a6b14-b2cc-446e-9428-271c570df0d9.woff2 │ │ │ ├── 0979215b-3a1b-4356-9c76-e90fa4551f1d.svg │ │ │ ├── 15281d0d-e3c2-46e1-94db-cb681e00bfaa.svg │ │ │ ├── 17b90ef5-b63f-457b-a981-503bb7afe3c0.woff2 │ │ │ ├── 19d12bba-92b1-43ad-9bab-cd36a4195c2a.woff │ │ │ ├── 1a7173fa-062b-49ad-9915-bc57d3bfc1f5.woff2 │ │ │ ├── 1e9b2738-9316-4b0c-97c0-5423b69ea147.eot │ │ │ ├── 20577853-40a7-4ada-a3fb-dd6e9392f401.svg │ │ │ ├── 2315df7a-8bc2-433d-bf0a-162fc0063de0.ttf │ │ │ ├── 25f994de-d13f-4a5d-a82b-bf925a1e054d.ttf │ │ │ ├── 33fac8ae-e7a5-4903-9ac1-c09a59b4c61d.svg │ │ │ ├── 3604edbd-784e-4ca7-b978-18836469c62d.svg │ │ │ ├── 38a556e4-b6e5-48c6-aece-b1d470af124e.svg │ │ │ ├── 3c210c80-960f-4684-850b-25390b4d08af.woff2 │ │ │ ├── 4030caeb-d266-4d36-ac58-a3bb7a5b1bfa.eot │ │ │ ├── 4577388c-510f-4366-addb-8b663bcc762a.ttf │ │ │ ├── 476612d9-282d-4f76-95cd-b4dd31e7ed21.woff2 │ │ │ ├── 4b978f72-bb48-46c3-909a-2a8cd2f8819c.woff │ │ │ ├── 57bf7902-79ee-4b31-a327-1bbf59a3d155.eot │ │ │ ├── 5ba5a010-7470-4d9d-8a49-2920dc1be1f8.ttf │ │ │ ├── 61bd362e-7162-46bd-b67e-28f366c4afbe.woff │ │ │ ├── 63a166cb-be60-435c-a056-75172e43efa5.eot │ │ │ ├── 65d75eb0-2601-4da5-a9a4-9ee67a470a59.woff │ │ │ ├── 6af9989e-235b-4c75-8c08-a83bdaef3f66.eot │ │ │ ├── 6d1ce413-19e7-4b43-b328-6cdedc58b35a.ttf │ │ │ ├── 6d4a6a8c-ef50-422f-8456-88d479e0b23d.svg │ │ │ ├── 6dc0e7d8-9284-44e1-8f05-984a41daa3a4.woff │ │ │ ├── 710789a0-1557-48a1-8cec-03d52d663d74.eot │ │ │ ├── 75b36c58-2a02-4057-a537-09af0832ae46.woff │ │ │ ├── 7b1e5b2a-b6a6-43da-9021-ada6d1d797f2.svg │ │ │ ├── 908c4810-64db-4b46-bb8e-823eb41f68c0.woff │ │ │ ├── 93603a74-2be0-436c-83e1-68f9ef616eaf.svg │ │ │ ├── 9bdf0737-f98c-477a-9365-ffc41b9d1285.ttf │ │ │ ├── 9ced8e96-4602-4507-8c20-4ff381949a9a.ttf │ │ │ ├── a2477e08-09d9-4d4b-97a9-23a1e22cb44c.woff2 │ │ │ ├── a59168c1-917d-4de9-a244-0316c057c357.woff2 │ │ │ ├── a7c1d112-7546-459d-a153-1467481298bd.svg │ │ │ ├── avenir.css │ │ │ ├── b0268c31-e450-4159-bfea-e0d20e2b5c0c.svg │ │ │ ├── b290e775-e0f9-4980-914b-a4c32a5e3e36.woff2 │ │ │ ├── b5c44a82-eeb8-41de-9c3f-a8db50b24b8a.ttf │ │ │ ├── c70e90bc-3c94-41dc-bf14-caa727c76301.ttf │ │ │ ├── c78eb7af-a1c8-4892-974b-52379646fef4.woff2 │ │ │ ├── c9aeeabd-dd65-491d-b4be-3e0db9ae47a0.woff │ │ │ ├── cb5c71ad-e582-4d00-929c-67fbfaeb1c27.woff │ │ │ ├── ccd17c6b-e7ed-4b73-b0d2-76712a4ef46b.ttf │ │ │ ├── cdda031e-26e9-4269-83d1-5a218caa10db.woff │ │ │ ├── cebcf56a-ea7e-4f5c-8110-a7ee367c1f91.eot │ │ │ ├── cee053ec-4b41-4506-a1fe-796261690610.ttf │ │ │ ├── d0a3e813-1257-4b66-812a-36101faa0fb3.svg │ │ │ ├── d513e15e-8f35-4129-ad05-481815e52625.woff2 │ │ │ ├── d8c50fcc-bc32-4f31-8c24-b170c64e2254.eot │ │ │ ├── deb5e718-7abb-4df3-9365-edfa95317090.woff2 │ │ │ ├── e0542193-b2e6-4273-bc45-39d4dfd3c15b.eot │ │ │ ├── e6b412d9-d1ed-4b17-bb93-a6911df8640d.eot │ │ │ ├── edefe737-dc78-4aa3-ad03-3c6f908330ed.eot │ │ │ ├── f1ebae2b-5296-4244-8771-5f40e60a564a.woff │ │ │ └── f55e4498-ad48-4577-93a0-c614de5cbbb8.eot │ │ └── icons │ │ │ ├── Syncano-Icons.css │ │ │ ├── Syncano-Icons.css.njk │ │ │ ├── Syncano-Icons.eot │ │ │ ├── Syncano-Icons.svg │ │ │ ├── Syncano-Icons.ttf │ │ │ ├── Syncano-Icons.woff │ │ │ └── Syncano-Icons.woff2 │ ├── icons │ │ ├── account-alert.svg │ │ ├── account-box-outline.svg │ │ ├── account-box.svg │ │ ├── account-check.svg │ │ ├── account-circle.svg │ │ ├── account-key.svg │ │ ├── account-location.svg │ │ ├── account-minus.svg │ │ ├── account-multiple-outline.svg │ │ ├── account-multiple-plus.svg │ │ ├── account-multiple.svg │ │ ├── account-network.svg │ │ ├── account-outline.svg │ │ ├── account-plus.svg │ │ ├── account-remove.svg │ │ ├── account-search.svg │ │ ├── account-star-variant.svg │ │ ├── account-switch.svg │ │ ├── account.svg │ │ ├── airballoon.svg │ │ ├── airplane-off.svg │ │ ├── airplane.svg │ │ ├── alarm-check.svg │ │ ├── alarm-multiple.svg │ │ ├── alarm-off.svg │ │ ├── alarm-plus.svg │ │ ├── alarm.svg │ │ ├── album.svg │ │ ├── alert-box.svg │ │ ├── alert-circle-outline.svg │ │ ├── alert-circle.svg │ │ ├── alert-octagon.svg │ │ ├── alert.svg │ │ ├── alpha.svg │ │ ├── alphabetical.svg │ │ ├── amazon-clouddrive.svg │ │ ├── amazon.svg │ │ ├── ambulance.svg │ │ ├── android-debug-bridge.svg │ │ ├── android-studio.svg │ │ ├── android.svg │ │ ├── apple-finder.svg │ │ ├── apple-mobileme.svg │ │ ├── apple-safari.svg │ │ ├── apple.svg │ │ ├── appnet.svg │ │ ├── apps.svg │ │ ├── archive.svg │ │ ├── arrange-bring-forward.svg │ │ ├── arrange-bring-to-front.svg │ │ ├── arrange-send-backward.svg │ │ ├── arrange-send-to-back.svg │ │ ├── arrow-all.svg │ │ ├── arrow-collapse.svg │ │ ├── arrow-down-bold-circle-outline.svg │ │ ├── arrow-down-bold-circle.svg │ │ ├── arrow-down-bold-hexagon-outline.svg │ │ ├── arrow-down-bold.svg │ │ ├── arrow-down.svg │ │ ├── arrow-expand.svg │ │ ├── arrow-left-bold-circle-outline.svg │ │ ├── arrow-left-bold-circle.svg │ │ ├── arrow-left-bold-hexagon-outline.svg │ │ ├── arrow-left-bold.svg │ │ ├── arrow-left-drop-circle-outline.svg │ │ ├── arrow-left.svg │ │ ├── arrow-right-bold-circle-outline.svg │ │ ├── arrow-right-bold-circle.svg │ │ ├── arrow-right-bold-hexagon-outline.svg │ │ ├── arrow-right-bold.svg │ │ ├── arrow-right-drop-circle-outline.svg │ │ ├── arrow-right.svg │ │ ├── arrow-up-bold-circle-outline.svg │ │ ├── arrow-up-bold-circle.svg │ │ ├── arrow-up-bold-hexagon-outline.svg │ │ ├── arrow-up-bold.svg │ │ ├── arrow-up.svg │ │ ├── at.svg │ │ ├── attachment.svg │ │ ├── auto-fix.svg │ │ ├── auto-upload.svg │ │ ├── backup-restore.svg │ │ ├── bank.svg │ │ ├── barcode.svg │ │ ├── barley.svg │ │ ├── barrel.svg │ │ ├── basecamp.svg │ │ ├── basket-fill.svg │ │ ├── basket-unfill.svg │ │ ├── basket.svg │ │ ├── battery-20.svg │ │ ├── battery-30.svg │ │ ├── battery-40.svg │ │ ├── battery-60.svg │ │ ├── battery-80.svg │ │ ├── battery-90.svg │ │ ├── battery-alert.svg │ │ ├── battery-charging-100.svg │ │ ├── battery-charging-20.svg │ │ ├── battery-charging-30.svg │ │ ├── battery-charging-40.svg │ │ ├── battery-charging-60.svg │ │ ├── battery-charging-80.svg │ │ ├── battery-charging-90.svg │ │ ├── battery-minus.svg │ │ ├── battery-negative.svg │ │ ├── battery-outline.svg │ │ ├── battery-plus.svg │ │ ├── battery-positive.svg │ │ ├── battery-standard.svg │ │ ├── battery-unknown.svg │ │ ├── battery.svg │ │ ├── beach.svg │ │ ├── beaker-empty-outline.svg │ │ ├── beaker-empty.svg │ │ ├── beaker-outline.svg │ │ ├── beaker.svg │ │ ├── beats.svg │ │ ├── beer.svg │ │ ├── behance.svg │ │ ├── bell-off.svg │ │ ├── bell-outline.svg │ │ ├── bell-ring-outline.svg │ │ ├── bell-ring.svg │ │ ├── bell-sleep.svg │ │ ├── bell.svg │ │ ├── beta.svg │ │ ├── bike.svg │ │ ├── bing.svg │ │ ├── bio.svg │ │ ├── black-mesa.svg │ │ ├── blackberry.svg │ │ ├── blinds.svg │ │ ├── block-helper.svg │ │ ├── blogger.svg │ │ ├── bluetooth-audio.svg │ │ ├── bluetooth-connect.svg │ │ ├── bluetooth-settings.svg │ │ ├── bluetooth.svg │ │ ├── blur-linear.svg │ │ ├── blur-off.svg │ │ ├── blur-radial.svg │ │ ├── blur.svg │ │ ├── bone.svg │ │ ├── book-multiple-variant.svg │ │ ├── book-multiple.svg │ │ ├── book-open-page-variant.svg │ │ ├── book-open.svg │ │ ├── book-variant.svg │ │ ├── book.svg │ │ ├── bookmark-check.svg │ │ ├── bookmark-outline-plus.svg │ │ ├── bookmark-outline.svg │ │ ├── bookmark-plus.svg │ │ ├── bookmark-remove.svg │ │ ├── bookmark.svg │ │ ├── border-all.svg │ │ ├── border-bottom.svg │ │ ├── border-color.svg │ │ ├── border-horizontal.svg │ │ ├── border-inside.svg │ │ ├── border-left.svg │ │ ├── border-none.svg │ │ ├── border-outside.svg │ │ ├── border-right.svg │ │ ├── border-top.svg │ │ ├── border-vertical.svg │ │ ├── bowling.svg │ │ ├── box-download.svg │ │ ├── box-upload.svg │ │ ├── box.svg │ │ ├── briefcase-checked.svg │ │ ├── briefcase-download.svg │ │ ├── briefcase-upload.svg │ │ ├── briefcase.svg │ │ ├── brightness-1.svg │ │ ├── brightness-2.svg │ │ ├── brightness-3.svg │ │ ├── brightness-4.svg │ │ ├── brightness-5.svg │ │ ├── brightness-6.svg │ │ ├── brightness-7.svg │ │ ├── brightness-auto.svg │ │ ├── brightness.svg │ │ ├── broom.svg │ │ ├── brush.svg │ │ ├── bug.svg │ │ ├── bullhorn.svg │ │ ├── bus.svg │ │ ├── cake-variant.svg │ │ ├── cake.svg │ │ ├── calculator.svg │ │ ├── calendar-blank.svg │ │ ├── calendar-check-multiple.svg │ │ ├── calendar-check.svg │ │ ├── calendar-clock.svg │ │ ├── calendar-multiple.svg │ │ ├── calendar-plus.svg │ │ ├── calendar-remove.svg │ │ ├── calendar-select.svg │ │ ├── calendar-text.svg │ │ ├── calendar-today.svg │ │ ├── calendar.svg │ │ ├── camcorder-box-off.svg │ │ ├── camcorder-box.svg │ │ ├── camcorder-off.svg │ │ ├── camcorder.svg │ │ ├── camera-iris.svg │ │ ├── camera-party-mode.svg │ │ ├── camera-switch.svg │ │ ├── camera-timer.svg │ │ ├── camera.svg │ │ ├── cancel.svg │ │ ├── candycane.svg │ │ ├── car-wash.svg │ │ ├── car.svg │ │ ├── carrot.svg │ │ ├── cart-outline.svg │ │ ├── cart.svg │ │ ├── cash-multiple.svg │ │ ├── cash-usd.svg │ │ ├── cash.svg │ │ ├── cast-connected.svg │ │ ├── cast.svg │ │ ├── castle.svg │ │ ├── cellphone-android.svg │ │ ├── cellphone-dock.svg │ │ ├── cellphone-iphone.svg │ │ ├── cellphone-link-off.svg │ │ ├── cellphone-link.svg │ │ ├── cellphone-settings.svg │ │ ├── cellphone.svg │ │ ├── certificate.svg │ │ ├── chair-school.svg │ │ ├── chart-arc.svg │ │ ├── chart-bar.svg │ │ ├── chart-histogram.svg │ │ ├── chart-line.svg │ │ ├── chart-pie.svg │ │ ├── check-all.svg │ │ ├── check-bookmark.svg │ │ ├── check-circle.svg │ │ ├── check.svg │ │ ├── checkbox-blank-circle-outline.svg │ │ ├── checkbox-blank-circle.svg │ │ ├── checkbox-blank-outline.svg │ │ ├── checkbox-blank.svg │ │ ├── checkbox-marked-circle-outline.svg │ │ ├── checkbox-marked-circle.svg │ │ ├── checkbox-marked-outline.svg │ │ ├── checkbox-marked.svg │ │ ├── checkbox-multiple-blank-outline.svg │ │ ├── checkbox-multiple-blank.svg │ │ ├── checkbox-multiple-marked-outline.svg │ │ ├── checkbox-multiple-marked.svg │ │ ├── checkerboard.svg │ │ ├── chevron-double-down.svg │ │ ├── chevron-double-left.svg │ │ ├── chevron-double-right.svg │ │ ├── chevron-double-up.svg │ │ ├── chevron-down.svg │ │ ├── chevron-left.svg │ │ ├── chevron-right.svg │ │ ├── chevron-up.svg │ │ ├── church.svg │ │ ├── circle-checkbox-blank.svg │ │ ├── circle-checkbox-marked.svg │ │ ├── cisco-webex.svg │ │ ├── city.svg │ │ ├── clapperboard.svg │ │ ├── clipboard-account.svg │ │ ├── clipboard-alert.svg │ │ ├── clipboard-arrow-down.svg │ │ ├── clipboard-arrow-left.svg │ │ ├── clipboard-check.svg │ │ ├── clipboard-outline.svg │ │ ├── clipboard-text.svg │ │ ├── clipboard.svg │ │ ├── clippy.svg │ │ ├── clock-fast.svg │ │ ├── clock.svg │ │ ├── close-box-outline.svg │ │ ├── close-circle-outline.svg │ │ ├── close-circle.svg │ │ ├── close-network.svg │ │ ├── close.svg │ │ ├── closed-caption.svg │ │ ├── cloud-check.svg │ │ ├── cloud-circle.svg │ │ ├── cloud-download.svg │ │ ├── cloud-outline-off.svg │ │ ├── cloud-outline.svg │ │ ├── cloud-upload.svg │ │ ├── cloud.svg │ │ ├── code-array.svg │ │ ├── code-braces.svg │ │ ├── code-string.svg │ │ ├── code-tags.svg │ │ ├── coffee-to-go.svg │ │ ├── coffee.svg │ │ ├── cog-box.svg │ │ ├── cog.svg │ │ ├── coin.svg │ │ ├── color-helper.svg │ │ ├── comment-account-outline.svg │ │ ├── comment-account.svg │ │ ├── comment-alert-outline.svg │ │ ├── comment-alert.svg │ │ ├── comment-check-outline.svg │ │ ├── comment-check.svg │ │ ├── comment-multipe-outline.svg │ │ ├── comment-outline.svg │ │ ├── comment-plus-outline.svg │ │ ├── comment-processing-outline.svg │ │ ├── comment-processing.svg │ │ ├── comment-remove-outline.svg │ │ ├── comment-text-outline.svg │ │ ├── comment-text.svg │ │ ├── comment.svg │ │ ├── compare.svg │ │ ├── compass-outline.svg │ │ ├── compass.svg │ │ ├── console.svg │ │ ├── content-copy.svg │ │ ├── content-cut.svg │ │ ├── content-paste.svg │ │ ├── content-save-all.svg │ │ ├── content-save.svg │ │ ├── contrast-box.svg │ │ ├── contrast-circle.svg │ │ ├── contrast.svg │ │ ├── controller-xbox.svg │ │ ├── cow.svg │ │ ├── credit-card-multiple.svg │ │ ├── credit-card.svg │ │ ├── crop-free.svg │ │ ├── crop-landscape.svg │ │ ├── crop-portrait.svg │ │ ├── crop-square.svg │ │ ├── crop.svg │ │ ├── crosshairs-gps.svg │ │ ├── crosshairs.svg │ │ ├── cube-outline.svg │ │ ├── cube-unfolded.svg │ │ ├── cube.svg │ │ ├── cup-water.svg │ │ ├── cup.svg │ │ ├── currency-btc.svg │ │ ├── currency-eur.svg │ │ ├── currency-gbp.svg │ │ ├── currency-try.svg │ │ ├── currency-usd.svg │ │ ├── cursor-default-outline.svg │ │ ├── cursor-default.svg │ │ ├── cursor-move.svg │ │ ├── cursor-pointer.svg │ │ ├── custom-socket.svg │ │ ├── data.svg │ │ ├── debug-step-into.svg │ │ ├── debug-step-out.svg │ │ ├── debug-step-over.svg │ │ ├── delete-variant.svg │ │ ├── delete.svg │ │ ├── deskphone.svg │ │ ├── desktop-mac.svg │ │ ├── desktop-tower.svg │ │ ├── details.svg │ │ ├── deviantart.svg │ │ ├── dice-1.svg │ │ ├── dice-2.svg │ │ ├── dice-3.svg │ │ ├── dice-4.svg │ │ ├── dice-5.svg │ │ ├── dice-6.svg │ │ ├── dice.svg │ │ ├── directions.svg │ │ ├── disk-alert.svg │ │ ├── disqus-outline.svg │ │ ├── disqus.svg │ │ ├── division-box.svg │ │ ├── division.svg │ │ ├── dns.svg │ │ ├── document.svg │ │ ├── domain.svg │ │ ├── dots-horizontal.svg │ │ ├── dots-vertical.svg │ │ ├── download.svg │ │ ├── drag-horizontal.svg │ │ ├── drag-vertical.svg │ │ ├── drag.svg │ │ ├── drawing-box.svg │ │ ├── drawing.svg │ │ ├── dribbble-box.svg │ │ ├── dribbble.svg │ │ ├── drone.svg │ │ ├── dropbox.svg │ │ ├── duck.svg │ │ ├── dumbbell.svg │ │ ├── earth-off.svg │ │ ├── earth.svg │ │ ├── ebay.svg │ │ ├── edge.svg │ │ ├── elevation-decline.svg │ │ ├── elevation-rise.svg │ │ ├── email-open.svg │ │ ├── email-outline.svg │ │ ├── email.svg │ │ ├── emoticon-cool.svg │ │ ├── emoticon-devil.svg │ │ ├── emoticon-happy.svg │ │ ├── emoticon-neutral.svg │ │ ├── emoticon-poop.svg │ │ ├── emoticon-sad.svg │ │ ├── emoticon-tongue.svg │ │ ├── emoticon.svg │ │ ├── equal-box.svg │ │ ├── equal.svg │ │ ├── eraser.svg │ │ ├── escalator.svg │ │ ├── etsy.svg │ │ ├── evernote.svg │ │ ├── exclamation.svg │ │ ├── exit-to-app.svg │ │ ├── eye-off.svg │ │ ├── eye.svg │ │ ├── eyedropper-variant.svg │ │ ├── eyedropper.svg │ │ ├── facebook-box.svg │ │ ├── facebook.svg │ │ ├── factory.svg │ │ ├── fan.svg │ │ ├── fast-forward.svg │ │ ├── ferry.svg │ │ ├── file-cloud.svg │ │ ├── file-css-outline.svg │ │ ├── file-delimited.svg │ │ ├── file-document-box.svg │ │ ├── file-document-outline.svg │ │ ├── file-document.svg │ │ ├── file-excel-box.svg │ │ ├── file-excel.svg │ │ ├── file-find.svg │ │ ├── file-hidden.svg │ │ ├── file-html-outline.svg │ │ ├── file-image-box.svg │ │ ├── file-image.svg │ │ ├── file-js-outline.svg │ │ ├── file-music.svg │ │ ├── file-outline.svg │ │ ├── file-pdf-box.svg │ │ ├── file-pdf.svg │ │ ├── file-powerpoint-box.svg │ │ ├── file-powerpoint.svg │ │ ├── file-presentation-box.svg │ │ ├── file-restore.svg │ │ ├── file-video.svg │ │ ├── file-word-box.svg │ │ ├── file-word.svg │ │ ├── file-xml.svg │ │ ├── file.svg │ │ ├── fill.svg │ │ ├── film.svg │ │ ├── filmstrip-off.svg │ │ ├── filmstrip.svg │ │ ├── filter-outline.svg │ │ ├── filter-remove-outline.svg │ │ ├── filter-remove.svg │ │ ├── filter-variant.svg │ │ ├── filter.svg │ │ ├── fire.svg │ │ ├── fish.svg │ │ ├── flag-checkered-variant.svg │ │ ├── flag-checkered.svg │ │ ├── flag-outline-variant.svg │ │ ├── flag-outline.svg │ │ ├── flag-variant.svg │ │ ├── flag.svg │ │ ├── flash-auto.svg │ │ ├── flash-off.svg │ │ ├── flash.svg │ │ ├── flashlight-off.svg │ │ ├── flashlight.svg │ │ ├── flip-to-back.svg │ │ ├── flip-to-front.svg │ │ ├── floppy.svg │ │ ├── flower.svg │ │ ├── folder-account.svg │ │ ├── folder-download.svg │ │ ├── folder-google-drive.svg │ │ ├── folder-image.svg │ │ ├── folder-lock-open.svg │ │ ├── folder-lock.svg │ │ ├── folder-move.svg │ │ ├── folder-multiple-image.svg │ │ ├── folder-multiple-outline.svg │ │ ├── folder-multiple.svg │ │ ├── folder-outline-lock.svg │ │ ├── folder-outline.svg │ │ ├── folder-plus.svg │ │ ├── folder-remove.svg │ │ ├── folder-upload.svg │ │ ├── folder.svg │ │ ├── food-apple.svg │ │ ├── food-variant.svg │ │ ├── food.svg │ │ ├── football-helmet.svg │ │ ├── football.svg │ │ ├── format-align-center.svg │ │ ├── format-align-justify.svg │ │ ├── format-align-left.svg │ │ ├── format-align-right.svg │ │ ├── format-bold.svg │ │ ├── format-clear.svg │ │ ├── format-color-fill.svg │ │ ├── format-color.svg │ │ ├── format-header-1.svg │ │ ├── format-header-2.svg │ │ ├── format-header-3.svg │ │ ├── format-header-4.svg │ │ ├── format-header-5.svg │ │ ├── format-header-6.svg │ │ ├── format-header-pound.svg │ │ ├── format-indent-decrease.svg │ │ ├── format-indent-increase.svg │ │ ├── format-italic.svg │ │ ├── format-line-spacing.svg │ │ ├── format-list-bulleted.svg │ │ ├── format-list-numbers.svg │ │ ├── format-paint.svg │ │ ├── format-paragraph.svg │ │ ├── format-quote.svg │ │ ├── format-size.svg │ │ ├── format-strikethrough.svg │ │ ├── format-subscript.svg │ │ ├── format-superscript.svg │ │ ├── format-textdirection-l-to-r.svg │ │ ├── format-textdirection-r-to-l.svg │ │ ├── format-underline.svg │ │ ├── forum.svg │ │ ├── forward.svg │ │ ├── foursquare.svg │ │ ├── fridge.svg │ │ ├── fullscreen-exit.svg │ │ ├── fullscreen.svg │ │ ├── function.svg │ │ ├── gamepad-variant.svg │ │ ├── gamepad.svg │ │ ├── gas-station.svg │ │ ├── gavel.svg │ │ ├── gender-female.svg │ │ ├── gender-male.svg │ │ ├── gender-transgender.svg │ │ ├── gift.svg │ │ ├── github-box.svg │ │ ├── github.svg │ │ ├── glass-flute.svg │ │ ├── glass-mug.svg │ │ ├── glass-stange.svg │ │ ├── glass-tulip.svg │ │ ├── gmail.svg │ │ ├── google-chrome.svg │ │ ├── google-circles-communities.svg │ │ ├── google-circles-extended.svg │ │ ├── google-circles-invite.svg │ │ ├── google-circles.svg │ │ ├── google-controller-off.svg │ │ ├── google-controller.svg │ │ ├── google-drive.svg │ │ ├── google-earth.svg │ │ ├── google-glass.svg │ │ ├── google-maps.svg │ │ ├── google-pages.svg │ │ ├── google-play.svg │ │ ├── google-plus-box.svg │ │ ├── google-plus.svg │ │ ├── google.svg │ │ ├── hand-pointing-right.svg │ │ ├── hanger.svg │ │ ├── hangouts.svg │ │ ├── harddisk.svg │ │ ├── headphones-box.svg │ │ ├── headphones-dots.svg │ │ ├── headphones.svg │ │ ├── headset-dock.svg │ │ ├── headset-off.svg │ │ ├── headset.svg │ │ ├── heart-box-outline.svg │ │ ├── heart-box.svg │ │ ├── heart-broken.svg │ │ ├── heart-outline.svg │ │ ├── heart.svg │ │ ├── help-circle.svg │ │ ├── help.svg │ │ ├── hexagon-outline.svg │ │ ├── hexagon.svg │ │ ├── history.svg │ │ ├── home-modern.svg │ │ ├── home-variant.svg │ │ ├── home.svg │ │ ├── hops.svg │ │ ├── hospital-building.svg │ │ ├── hospital-marker.svg │ │ ├── hospital.svg │ │ ├── hosting-files-types.svg │ │ ├── hotel.svg │ │ ├── human-child.svg │ │ ├── human-male-female.svg │ │ ├── human.svg │ │ ├── image-album.svg │ │ ├── image-area-close.svg │ │ ├── image-area.svg │ │ ├── image-broken.svg │ │ ├── image-filter-black-white.svg │ │ ├── image-filter-center-focus.svg │ │ ├── image-filter-drama.svg │ │ ├── image-filter-frames.svg │ │ ├── image-filter-hdr.svg │ │ ├── image-filter-none.svg │ │ ├── image-filter-tilt-shift.svg │ │ ├── image-filter-vintage.svg │ │ ├── image-filter.svg │ │ ├── image.svg │ │ ├── inbox.svg │ │ ├── indent.svg │ │ ├── information-outline.svg │ │ ├── information.svg │ │ ├── instagram.svg │ │ ├── instapaper.svg │ │ ├── internet-explorer.svg │ │ ├── invert-colors.svg │ │ ├── jira.svg │ │ ├── keg.svg │ │ ├── key-change.svg │ │ ├── key-minus.svg │ │ ├── key-plus.svg │ │ ├── key-remove.svg │ │ ├── key-variant.svg │ │ ├── key.svg │ │ ├── keyboard-backspace.svg │ │ ├── keyboard-caps.svg │ │ ├── keyboard-close.svg │ │ ├── keyboard-off.svg │ │ ├── keyboard-return.svg │ │ ├── keyboard-tab.svg │ │ ├── keyboard.svg │ │ ├── label-outline.svg │ │ ├── label.svg │ │ ├── language-csharp.svg │ │ ├── language-css3.svg │ │ ├── language-golang.svg │ │ ├── language-html5.svg │ │ ├── language-javascript.svg │ │ ├── language-nodejs.svg │ │ ├── language-php.svg │ │ ├── language-python-text.svg │ │ ├── language-python.svg │ │ ├── language-ruby.svg │ │ ├── language-swift.svg │ │ ├── laptop-chromebook.svg │ │ ├── laptop-mac.svg │ │ ├── laptop-windows.svg │ │ ├── laptop.svg │ │ ├── lastfm.svg │ │ ├── launch.svg │ │ ├── layers-off.svg │ │ ├── layers.svg │ │ ├── leaf.svg │ │ ├── library-books.svg │ │ ├── library-music.svg │ │ ├── library-plus.svg │ │ ├── library.svg │ │ ├── lightbulb-outline.svg │ │ ├── lightbulb.svg │ │ ├── link-variant.svg │ │ ├── link.svg │ │ ├── linkedin-box.svg │ │ ├── linkedin.svg │ │ ├── linode.svg │ │ ├── linux.svg │ │ ├── lock-outline.svg │ │ ├── lock-unlocked-outline.svg │ │ ├── lock-unlocked.svg │ │ ├── lock.svg │ │ ├── login.svg │ │ ├── logout.svg │ │ ├── looks.svg │ │ ├── loupe.svg │ │ ├── lumx.svg │ │ ├── magnify-minus.svg │ │ ├── magnify-plus.svg │ │ ├── magnify.svg │ │ ├── map-marker-circle.svg │ │ ├── map-marker-multiple.svg │ │ ├── map-marker-off.svg │ │ ├── map-marker-radius.svg │ │ ├── map-marker.svg │ │ ├── map.svg │ │ ├── margin.svg │ │ ├── markdown.svg │ │ ├── marker-check.svg │ │ ├── martini.svg │ │ ├── material-ui.svg │ │ ├── memory.svg │ │ ├── menu-down.svg │ │ ├── menu-left.svg │ │ ├── menu-right.svg │ │ ├── menu-up.svg │ │ ├── menu.svg │ │ ├── message-alert.svg │ │ ├── message-draw.svg │ │ ├── message-image.svg │ │ ├── message-processing.svg │ │ ├── message-reply.svg │ │ ├── message-text-outline.svg │ │ ├── message-text.svg │ │ ├── message-video.svg │ │ ├── message.svg │ │ ├── microphone-dots.svg │ │ ├── microphone-off.svg │ │ ├── microphone-outline.svg │ │ ├── microphone-settings.svg │ │ ├── microphone-variant-off.svg │ │ ├── microphone-variant.svg │ │ ├── microphone.svg │ │ ├── minus-box.svg │ │ ├── minus-circle-outline.svg │ │ ├── minus-circle.svg │ │ ├── minus-network.svg │ │ ├── minus.svg │ │ ├── monitor-multiple.svg │ │ ├── monitor.svg │ │ ├── more.svg │ │ ├── mouse-off.svg │ │ ├── mouse-variant-off.svg │ │ ├── mouse-variant.svg │ │ ├── mouse.svg │ │ ├── movie.svg │ │ ├── multiplication-box.svg │ │ ├── multiplication.svg │ │ ├── music-box-outline.svg │ │ ├── music-box.svg │ │ ├── music-circle.svg │ │ ├── music-note-eighth.svg │ │ ├── music-note-half.svg │ │ ├── music-note-off.svg │ │ ├── music-note-quarter.svg │ │ ├── music-note-sixteenth.svg │ │ ├── music-note-whole.svg │ │ ├── music-note.svg │ │ ├── nature-people.svg │ │ ├── nature.svg │ │ ├── navigation.svg │ │ ├── needle.svg │ │ ├── nest-protect.svg │ │ ├── nest-thermostat.svg │ │ ├── newspaper.svg │ │ ├── nfc-tap.svg │ │ ├── nfc-variant.svg │ │ ├── nfc.svg │ │ ├── no.svg │ │ ├── not-equal.svg │ │ ├── numeric-0-box-multiple-outline.svg │ │ ├── numeric-0-box-outline.svg │ │ ├── numeric-0-box.svg │ │ ├── numeric-1-box-multiple-outline.svg │ │ ├── numeric-1-box-outline.svg │ │ ├── numeric-1-box.svg │ │ ├── numeric-2-box-multiple-outline.svg │ │ ├── numeric-2-box-outline.svg │ │ ├── numeric-2-box.svg │ │ ├── numeric-3-box-multiple-outline.svg │ │ ├── numeric-3-box-outline.svg │ │ ├── numeric-3-box.svg │ │ ├── numeric-4-box-multiple-outline.svg │ │ ├── numeric-4-box-outline.svg │ │ ├── numeric-4-box.svg │ │ ├── numeric-5-box-multiple-outline.svg │ │ ├── numeric-5-box-outline.svg │ │ ├── numeric-5-box.svg │ │ ├── numeric-6-box-multiple-outline.svg │ │ ├── numeric-6-box-outline.svg │ │ ├── numeric-6-box.svg │ │ ├── numeric-7-box-multiple-outline.svg │ │ ├── numeric-7-box-outline.svg │ │ ├── numeric-7-box.svg │ │ ├── numeric-8-box-multiple-outline.svg │ │ ├── numeric-8-box-outline.svg │ │ ├── numeric-8-box.svg │ │ ├── numeric-9-box-multiple-outline.svg │ │ ├── numeric-9-box-outline.svg │ │ ├── numeric-9-box.svg │ │ ├── numeric-9-plus-box-multiple-outline.svg │ │ ├── numeric-9-plus-box-outline.svg │ │ ├── numeric-9-plus-box.svg │ │ ├── numeric.svg │ │ ├── nutriton.svg │ │ ├── office.svg │ │ ├── oil.svg │ │ ├── omega.svg │ │ ├── onedrive.svg │ │ ├── open-in-app.svg │ │ ├── open-in-new.svg │ │ ├── ornament-variant.svg │ │ ├── ornament.svg │ │ ├── outbox.svg │ │ ├── outdent.svg │ │ ├── package-down.svg │ │ ├── package-up.svg │ │ ├── package-variant-closed.svg │ │ ├── package-variant.svg │ │ ├── package.svg │ │ ├── palette-advanced.svg │ │ ├── palette.svg │ │ ├── panda.svg │ │ ├── pandora.svg │ │ ├── panorama-fisheye.svg │ │ ├── panorama-horizontal.svg │ │ ├── panorama-vertical.svg │ │ ├── panorama-wide-angle.svg │ │ ├── panorama.svg │ │ ├── paper-cut-vertical.svg │ │ ├── paperclip.svg │ │ ├── parking.svg │ │ ├── pause-circle-outline.svg │ │ ├── pause-circle.svg │ │ ├── pause-octagon-outline.svg │ │ ├── pause-octagon.svg │ │ ├── pause.svg │ │ ├── pen.svg │ │ ├── pencil-box-outline.svg │ │ ├── pencil-box.svg │ │ ├── pencil.svg │ │ ├── people.svg │ │ ├── person-box.svg │ │ ├── person-minus.svg │ │ ├── person-plus.svg │ │ ├── pharmacy.svg │ │ ├── phone-bluetooth.svg │ │ ├── phone-dots.svg │ │ ├── phone-forward.svg │ │ ├── phone-hangup.svg │ │ ├── phone-in-talk.svg │ │ ├── phone-locked.svg │ │ ├── phone-missed.svg │ │ ├── phone-paused.svg │ │ ├── phone.svg │ │ ├── picture.svg │ │ ├── pig.svg │ │ ├── pill.svg │ │ ├── pin-off.svg │ │ ├── pin.svg │ │ ├── pine-tree-box.svg │ │ ├── pine-tree.svg │ │ ├── pinterest-box.svg │ │ ├── pinterest.svg │ │ ├── pizza.svg │ │ ├── plane.svg │ │ ├── play-box-outline.svg │ │ ├── play-circle-outline.svg │ │ ├── play-circle.svg │ │ ├── play.svg │ │ ├── playlist-plus.svg │ │ ├── plus-box.svg │ │ ├── plus-circle-outline.svg │ │ ├── plus-circle.svg │ │ ├── plus-network.svg │ │ ├── plus-one.svg │ │ ├── plus.svg │ │ ├── pocket.svg │ │ ├── poll-box.svg │ │ ├── poll.svg │ │ ├── polymer.svg │ │ ├── popcorn.svg │ │ ├── pound-box.svg │ │ ├── pound.svg │ │ ├── power-settings.svg │ │ ├── power.svg │ │ ├── presentation-play.svg │ │ ├── presentation.svg │ │ ├── printer-3d.svg │ │ ├── printer.svg │ │ ├── pulse.svg │ │ ├── puzzle.svg │ │ ├── qrcode.svg │ │ ├── quadcopter.svg │ │ ├── quality-high.svg │ │ ├── question-mark-circle.svg │ │ ├── quick-reply.svg │ │ ├── quicktime.svg │ │ ├── rabbit.svg │ │ ├── radiator.svg │ │ ├── radioactive.svg │ │ ├── radiobox-blank.svg │ │ ├── radiobox-marked.svg │ │ ├── rdio.svg │ │ ├── read.svg │ │ ├── readability.svg │ │ ├── receipt.svg │ │ ├── recycle.svg │ │ ├── reddit.svg │ │ ├── redo-variant.svg │ │ ├── redo.svg │ │ ├── refresh.svg │ │ ├── relative-scale.svg │ │ ├── reload.svg │ │ ├── remote.svg │ │ ├── rename-box.svg │ │ ├── repeat-off.svg │ │ ├── repeat-once.svg │ │ ├── repeat.svg │ │ ├── replay.svg │ │ ├── reply-all.svg │ │ ├── reply.svg │ │ ├── reproduction.svg │ │ ├── resize-bottom-right.svg │ │ ├── responsive.svg │ │ ├── restore.svg │ │ ├── rewind.svg │ │ ├── ribbon.svg │ │ ├── rocket.svg │ │ ├── rotate-3d.svg │ │ ├── rotate-left-variant.svg │ │ ├── rotate-left.svg │ │ ├── rotate-right-variant.svg │ │ ├── rotate-right.svg │ │ ├── routes.svg │ │ ├── rss-box.svg │ │ ├── ruler.svg │ │ ├── run.svg │ │ ├── satellite-variant.svg │ │ ├── satellite.svg │ │ ├── scale-bathroom.svg │ │ ├── scale.svg │ │ ├── school.svg │ │ ├── screen-rotation-lock.svg │ │ ├── screen-rotation.svg │ │ ├── script.svg │ │ ├── security-network.svg │ │ ├── security.svg │ │ ├── select-all.svg │ │ ├── select-inverse.svg │ │ ├── select-off.svg │ │ ├── select.svg │ │ ├── send.svg │ │ ├── server-minus.svg │ │ ├── server-network-off.svg │ │ ├── server-network.svg │ │ ├── server-off.svg │ │ ├── server-plus.svg │ │ ├── server-remove.svg │ │ ├── server-security.svg │ │ ├── server.svg │ │ ├── settings.svg │ │ ├── shape-plus.svg │ │ ├── share-variant.svg │ │ ├── share.svg │ │ ├── shopping-music.svg │ │ ├── shopping.svg │ │ ├── shuffle.svg │ │ ├── sigma.svg │ │ ├── sign-caution.svg │ │ ├── silverware-fork.svg │ │ ├── silverware-spoon.svg │ │ ├── silverware-variant.svg │ │ ├── silverware.svg │ │ ├── sim-alert.svg │ │ ├── sim.svg │ │ ├── skip-next.svg │ │ ├── skip-previous.svg │ │ ├── snowman.svg │ │ ├── socket-channel.svg │ │ ├── socket-checkbox-blank.svg │ │ ├── socket-checkbox-marked.svg │ │ ├── socket-custom-socket.svg │ │ ├── socket-data.svg │ │ ├── socket-hosting.svg │ │ ├── socket-push.svg │ │ ├── socket-schedule.svg │ │ ├── socket-script-endpoint.svg │ │ ├── socket-trigger.svg │ │ ├── socket-user.svg │ │ ├── socket-users.svg │ │ ├── sort-alphabetical.svg │ │ ├── sort-ascending.svg │ │ ├── sort-descending.svg │ │ ├── sort-numeric.svg │ │ ├── sort-variant.svg │ │ ├── sort.svg │ │ ├── sound.svg │ │ ├── soundcloud.svg │ │ ├── source-fork.svg │ │ ├── source-pull.svg │ │ ├── speaker-off.svg │ │ ├── speaker.svg │ │ ├── speedometer.svg │ │ ├── spellcheck.svg │ │ ├── spotify.svg │ │ ├── spotlight-beam.svg │ │ ├── spotlight.svg │ │ ├── spreadsheet.svg │ │ ├── stackoverflow.svg │ │ ├── star-circle.svg │ │ ├── star-half.svg │ │ ├── star-of-david.svg │ │ ├── star-outline.svg │ │ ├── star.svg │ │ ├── stocking.svg │ │ ├── stop.svg │ │ ├── store-24-hour.svg │ │ ├── store.svg │ │ ├── stove.svg │ │ ├── subway.svg │ │ ├── swap-horizontal.svg │ │ ├── swap-vertical.svg │ │ ├── swim.svg │ │ ├── sword.svg │ │ ├── sync-alert.svg │ │ ├── sync-off.svg │ │ ├── sync.svg │ │ ├── tab-unselected.svg │ │ ├── tab.svg │ │ ├── table-column-plus-after.svg │ │ ├── table-column-plus-before.svg │ │ ├── table-column-remove.svg │ │ ├── table-column-width.svg │ │ ├── table-edit.svg │ │ ├── table-large.svg │ │ ├── table-row-height.svg │ │ ├── table-row-plus-after.svg │ │ ├── table-row-plus-before.svg │ │ ├── table-row-remove.svg │ │ ├── table.svg │ │ ├── tablet-android.svg │ │ ├── tablet-ipad.svg │ │ ├── tablet.svg │ │ ├── tag-faces.svg │ │ ├── tag-outline.svg │ │ ├── tag-text-outline.svg │ │ ├── tag.svg │ │ ├── taxi.svg │ │ ├── television-guide.svg │ │ ├── television.svg │ │ ├── temperature-celsius.svg │ │ ├── temperature-fahrenheit.svg │ │ ├── temperature-kelvin.svg │ │ ├── tent.svg │ │ ├── terrain.svg │ │ ├── text-to-speech-off.svg │ │ ├── text-to-speech.svg │ │ ├── texture.svg │ │ ├── theater.svg │ │ ├── theme-light-dark.svg │ │ ├── thermometer-lines.svg │ │ ├── thermometer.svg │ │ ├── thumb-down-outline.svg │ │ ├── thumb-down.svg │ │ ├── thumb-up-outline.svg │ │ ├── thumb-up.svg │ │ ├── thumbs-up-down.svg │ │ ├── ticket-account.svg │ │ ├── ticket.svg │ │ ├── tie.svg │ │ ├── tile-four.svg │ │ ├── timelapse.svg │ │ ├── timer-10.svg │ │ ├── timer-3.svg │ │ ├── timer-off.svg │ │ ├── timer-sand.svg │ │ ├── timer.svg │ │ ├── timetable.svg │ │ ├── toggle-switch-off.svg │ │ ├── toggle-switch-on.svg │ │ ├── tooltip-edit.svg │ │ ├── tooltip-image.svg │ │ ├── tooltip-outline-plus.svg │ │ ├── tooltip-outline.svg │ │ ├── tooltip-text.svg │ │ ├── tooltip.svg │ │ ├── tor.svg │ │ ├── traffic-light.svg │ │ ├── train.svg │ │ ├── tram.svg │ │ ├── transcribe-close.svg │ │ ├── transcribe.svg │ │ ├── transfer.svg │ │ ├── trash.svg │ │ ├── tree.svg │ │ ├── trello.svg │ │ ├── trending-down.svg │ │ ├── trending-neutral.svg │ │ ├── trending-up.svg │ │ ├── truck.svg │ │ ├── tshirt-crew.svg │ │ ├── tshirt-v.svg │ │ ├── tumblr-reblog.svg │ │ ├── tumblr.svg │ │ ├── twitch.svg │ │ ├── twitter-box.svg │ │ ├── twitter-retweet.svg │ │ ├── twitter.svg │ │ ├── ubuntu.svg │ │ ├── undo-variant.svg │ │ ├── undo.svg │ │ ├── unfold-less.svg │ │ ├── unfold-more.svg │ │ ├── untappd.svg │ │ ├── upload.svg │ │ ├── usb.svg │ │ ├── vector-curve.svg │ │ ├── vector-point.svg │ │ ├── vector-square.svg │ │ ├── verified.svg │ │ ├── vibration.svg │ │ ├── video-off.svg │ │ ├── video-switch.svg │ │ ├── video.svg │ │ ├── view-agenda.svg │ │ ├── view-array.svg │ │ ├── view-carousel.svg │ │ ├── view-column.svg │ │ ├── view-dashboard.svg │ │ ├── view-day.svg │ │ ├── view-headline.svg │ │ ├── view-list.svg │ │ ├── view-module.svg │ │ ├── view-quilt.svg │ │ ├── view-stream.svg │ │ ├── view-week.svg │ │ ├── vimeo.svg │ │ ├── vk.svg │ │ ├── voicemail.svg │ │ ├── volume-high.svg │ │ ├── volume-low.svg │ │ ├── volume-medium.svg │ │ ├── volume-off.svg │ │ ├── walk.svg │ │ ├── wallet-giftcard.svg │ │ ├── wallet-membership.svg │ │ ├── wallet-travel.svg │ │ ├── wallet.svg │ │ ├── washing-machine.svg │ │ ├── watch-export.svg │ │ ├── watch-import.svg │ │ ├── watch.svg │ │ ├── water-off.svg │ │ ├── water-pump.svg │ │ ├── water.svg │ │ ├── weather-cloudy.svg │ │ ├── weather-hail.svg │ │ ├── weather-lightning.svg │ │ ├── weather-night.svg │ │ ├── weather-partlycloudy.svg │ │ ├── weather-pouring.svg │ │ ├── weather-rainy.svg │ │ ├── weather-snowy.svg │ │ ├── weather-sunny.svg │ │ ├── weather-sunset-down.svg │ │ ├── weather-sunset-up.svg │ │ ├── weather-sunset.svg │ │ ├── weather-windy-variant.svg │ │ ├── weather-windy.svg │ │ ├── web.svg │ │ ├── webcam.svg │ │ ├── weight-kilogram.svg │ │ ├── weight.svg │ │ ├── whatsapp.svg │ │ ├── wheelchair-accessibility.svg │ │ ├── white-balance-auto.svg │ │ ├── white-balance-incandescent.svg │ │ ├── white-balance-irradescent.svg │ │ ├── white-balance-sunny.svg │ │ ├── wifi.svg │ │ ├── wikipedia.svg │ │ ├── window-close.svg │ │ ├── window-closed.svg │ │ ├── window-maximize.svg │ │ ├── window-minimize.svg │ │ ├── window-open.svg │ │ ├── window-restore.svg │ │ ├── windows.svg │ │ ├── wordpress.svg │ │ ├── wrap-text.svg │ │ ├── xbox-controller-off.svg │ │ ├── xbox-controller.svg │ │ ├── xbox.svg │ │ ├── xda.svg │ │ ├── xml.svg │ │ ├── yeast.svg │ │ ├── youtube-play.svg │ │ ├── youtube.svg │ │ └── zip-box.svg │ ├── img │ │ ├── check.svg │ │ ├── fox.png │ │ ├── illustrations │ │ │ ├── assemble-your-backend-with-building-blocks.svg │ │ │ ├── build-powerful-apps-in-half-the-time.svg │ │ │ ├── hosting-files-types.svg │ │ │ ├── no-active-plan.svg │ │ │ ├── syncano-slack.svg │ │ │ ├── undergoing-maintenance.svg │ │ │ ├── we-cant-process-your-payment.svg │ │ │ └── what-is-syncano.png │ │ ├── socket-assemble.svg │ │ ├── socket-logo.svg │ │ ├── stripe-badge@3x.png │ │ ├── syncano-logo.svg │ │ └── syncano-symbol.svg │ ├── index.html │ └── sass │ │ ├── _base.sass │ │ ├── _config.sass │ │ ├── _grid.sass │ │ ├── _lists.sass │ │ ├── _mobile.sass │ │ ├── _scaffold.sass │ │ ├── _spacings.sass │ │ ├── _text.sass │ │ ├── config │ │ └── _typeplate-config.scss │ │ ├── main.sass │ │ └── vendor │ │ └── typeplate │ │ ├── _typeplate-extends.scss │ │ ├── _typeplate-fonts.scss │ │ ├── _typeplate-functions.scss │ │ ├── _typeplate-helpers.scss │ │ ├── _typeplate-mixins.scss │ │ ├── _typeplate-styles.scss │ │ ├── _typeplate-vars.scss │ │ └── _typeplate.scss ├── common │ ├── AlertPageContent │ │ ├── AlertPageContent.js │ │ └── index.js │ ├── AutoCompleteWrapper │ │ ├── AutoCompleteWrapper.js │ │ └── index.js │ ├── BashSnippet │ │ ├── BashSnippet.js │ │ └── index.js │ ├── Billing │ │ ├── ChartLegend.js │ │ ├── PlanExplorerButton.js │ │ ├── SwitchSection.js │ │ └── index.js │ ├── CheckIcon │ │ ├── CheckIcon.jsx │ │ ├── CircleCheckIcon.jsx │ │ ├── SocketCheckIcon.jsx │ │ └── index.js │ ├── Clipboard │ │ ├── Clipboard.js │ │ └── index.js │ ├── CloseButton │ │ ├── CloseButton.js │ │ └── index.js │ ├── CodePreview │ │ ├── CodePreview.js │ │ ├── CodePreviewItem.js │ │ ├── code-preview.sass │ │ └── index.js │ ├── Color │ │ ├── ColorStore.js │ │ └── index.js │ ├── ColorIconPicker │ │ ├── ColorIconPicker.js │ │ ├── ColorPicker.js │ │ ├── IconPicker.js │ │ ├── PreviewCircle.js │ │ ├── PreviewHexagon.js │ │ └── index.js │ ├── ColumnList │ │ ├── ColName.js │ │ ├── ColNameDesc.js │ │ ├── Column │ │ │ ├── CheckIcon.js │ │ │ ├── CircleCheckIcon.jsx │ │ │ ├── ColumnHeader.js │ │ │ ├── Date.js │ │ │ ├── Desc.js │ │ │ ├── ID.js │ │ │ ├── IconName.js │ │ │ ├── Key.js │ │ │ ├── Menu.js │ │ │ ├── Name.js │ │ │ ├── SocketCheckIcon.jsx │ │ │ ├── Text.js │ │ │ └── index.js │ │ ├── ColumnListConstans.js │ │ ├── EmptyListItem.js │ │ ├── Header.js │ │ ├── Item.js │ │ ├── ItemColumn.js │ │ └── index.js │ ├── Container │ │ ├── Container.js │ │ ├── EmptyContainer.js │ │ ├── LoadingContainer.js │ │ ├── TabsContainer.js │ │ └── index.js │ ├── CreditCard │ │ ├── CreditCard.js │ │ └── index.js │ ├── CreditCardForm │ │ ├── CreditCardForm.js │ │ ├── CreditCardFormNumberInput.js │ │ └── index.js │ ├── CustomTitle │ │ ├── CustomTitle.js │ │ └── index.js │ ├── DataObjectsAmount │ │ ├── DataObjectsAmount.js │ │ └── index.js │ ├── Dialog │ │ ├── DeleteDialog.jsx │ │ ├── Dialog.jsx │ │ ├── DialogBindShortcutsHOC.js │ │ ├── DialogContent.js │ │ ├── DialogContentSection.js │ │ ├── DialogSidebar.js │ │ ├── DialogSidebarBox.js │ │ ├── DialogSidebarLink.js │ │ ├── DialogSidebarSection.js │ │ ├── DialogStandardButtons.js │ │ ├── DialogSummaryRedirect.js │ │ ├── DialogTitleWithIcon.jsx │ │ ├── FullPageDialog.js │ │ └── index.js │ ├── DialogRefreshButton │ │ ├── DialogRefreshButton.js │ │ └── index.js │ ├── DirectoryNavigation │ │ ├── DirectoryNavigation.js │ │ ├── DirectoryNavigationLink.js │ │ └── index.js │ ├── DropZone │ │ ├── DropZone.jsx │ │ ├── UploadFileButton.jsx │ │ └── index.js │ ├── Dropdown │ │ ├── DropdownNotifiItem.jsx │ │ └── index.js │ ├── Editor │ │ ├── Editor.js │ │ └── index.js │ ├── EmptyView │ │ ├── EmptyView.js │ │ ├── EmptyViewCLI.js │ │ ├── EmptyViewDouble.js │ │ ├── EmptyViewSmall.js │ │ └── index.js │ ├── Header │ │ ├── Header.jsx │ │ ├── Header.sass │ │ ├── HeaderGettingStartedDropdown.js │ │ ├── HeaderInstancesDropdown.jsx │ │ ├── HeaderNotificationsDropdown.jsx │ │ ├── InvitationItem.js │ │ └── index.js │ ├── HeaderButton.js │ ├── Icon │ │ ├── Icon.css │ │ ├── IconStore.js │ │ ├── RoundIcon.jsx │ │ ├── index.js │ │ └── svg │ │ │ ├── accessibility.svg │ │ │ ├── account-child.svg │ │ │ ├── account-circle.svg │ │ │ ├── airplanemode-on.svg │ │ │ ├── arrow-back.svg │ │ │ ├── arrow_down.svg │ │ │ ├── arrow_up.svg │ │ │ ├── autorenew.svg │ │ │ ├── av-timer.svg │ │ │ ├── bug-report.svg │ │ │ ├── cached.svg │ │ │ ├── call-split.svg │ │ │ ├── call.svg │ │ │ ├── cart.svg │ │ │ ├── checkbox-blank.svg │ │ │ ├── checkbox-marked.svg │ │ │ ├── close.svg │ │ │ ├── cloud.svg │ │ │ ├── color-lens.svg │ │ │ ├── credit-card.svg │ │ │ ├── devices.svg │ │ │ ├── directions-car.svg │ │ │ ├── directions-subway.svg │ │ │ ├── done.svg │ │ │ ├── email.svg │ │ │ ├── error.svg │ │ │ ├── event.svg │ │ │ ├── facebook.svg │ │ │ ├── favorite.svg │ │ │ ├── flag.svg │ │ │ ├── folder.svg │ │ │ ├── get-app.svg │ │ │ ├── github.svg │ │ │ ├── golang.svg │ │ │ ├── google.svg │ │ │ ├── grade.svg │ │ │ ├── group-add.svg │ │ │ ├── home.svg │ │ │ ├── inbox.svg │ │ │ ├── info.svg │ │ │ ├── keyboard-arrow-down.svg │ │ │ ├── keyboard-arrow-left.svg │ │ │ ├── keyboard-arrow-right.svg │ │ │ ├── keyboard-arrow-up.svg │ │ │ ├── label.svg │ │ │ ├── layers.svg │ │ │ ├── local-bar.svg │ │ │ ├── local-offer.svg │ │ │ ├── location-on.svg │ │ │ ├── lock.svg │ │ │ ├── map.svg │ │ │ ├── menu-down.svg │ │ │ ├── menu.svg │ │ │ ├── more-horiz.svg │ │ │ ├── more-vert.svg │ │ │ ├── navigate_after.svg │ │ │ ├── navigate_before.svg │ │ │ ├── nodejs.svg │ │ │ ├── notifications-none.svg │ │ │ ├── notifications.svg │ │ │ ├── person-add.svg │ │ │ ├── phone-android.svg │ │ │ ├── play-arrow.svg │ │ │ ├── playlist-add.svg │ │ │ ├── plus.svg │ │ │ ├── publ.svg │ │ │ ├── python.svg │ │ │ ├── query-builder.svg │ │ │ ├── question-answer.svg │ │ │ ├── room.svg │ │ │ ├── ruby.svg │ │ │ ├── school.svg │ │ │ ├── search.svg │ │ │ ├── settings-backup-restore.svg │ │ │ ├── share.svg │ │ │ ├── shopping-cart.svg │ │ │ ├── sync-problem.svg │ │ │ ├── sync.svg │ │ │ ├── system-update-tv.svg │ │ │ ├── terminal.svg │ │ │ ├── theaters.svg │ │ │ ├── twitter.svg │ │ │ ├── unfold-less.svg │ │ │ ├── unfold-more.svg │ │ │ ├── videocam.svg │ │ │ ├── view-module.svg │ │ │ ├── view-stream.svg │ │ │ ├── vpn-key.svg │ │ │ ├── warning.svg │ │ │ ├── webhooks.svg │ │ │ ├── whatshot.svg │ │ │ └── work.svg │ ├── InnerToolbar │ │ ├── InnerToolbar.js │ │ ├── InnerToolbarDropdown.js │ │ └── index.js │ ├── LinkWithIcon │ │ ├── LinkWithIcon.js │ │ └── index.js │ ├── LinkWrapper │ │ ├── LinkWrapper.js │ │ └── index.js │ ├── Lists │ │ ├── List.jsx │ │ ├── ListContainer.jsx │ │ ├── Menu.js │ │ ├── MenuItem.jsx │ │ └── index.js │ ├── Loading │ │ ├── Loading.js │ │ └── index.js │ ├── Logo │ │ ├── Logo.js │ │ ├── Logo.sass │ │ └── index.js │ ├── MethodLabel │ │ ├── MethodLabel.js │ │ └── index.js │ ├── MobileOnboarding │ │ ├── MobileOnboarding.js │ │ ├── MobileOnboardingSlide.js │ │ └── index.js │ ├── NoMobileInfo │ │ ├── NoMobileInfo.js │ │ ├── illustration-mobile.svg │ │ └── index.js │ ├── Notification │ │ ├── Notification.jsx │ │ ├── NotificationCloseButton.js │ │ └── index.js │ ├── Onboarding │ │ ├── Onboarding.js │ │ ├── OnboardingTerminal.js │ │ └── index.js │ ├── PageIntro │ │ ├── PageIntro.js │ │ ├── PageIntroHOC.js │ │ └── index.js │ ├── Pagination │ │ ├── Pagination.js │ │ ├── Pagination.sass │ │ └── index.js │ ├── PaymentIcon │ │ ├── AmericanExpress.js │ │ ├── DinersClub.js │ │ ├── Discover.js │ │ ├── Jcb.js │ │ ├── MasterCard.js │ │ ├── PaymentIcon.js │ │ ├── Visa.js │ │ └── index.js │ ├── PaymentIcons │ │ ├── PaymentIcons.js │ │ └── index.js │ ├── Popover │ │ ├── Popover.js │ │ └── index.js │ ├── PricingPlans │ │ ├── PricingPlans.js │ │ ├── PricingPlansPlan.js │ │ └── index.js │ ├── RegistryEmptyView │ │ ├── RegistryEmptyView.js │ │ └── index.js │ ├── SearchResultsCountBox │ │ ├── SearchResultsCountBox.js │ │ └── index.js │ ├── SelectFieldWrapper │ │ ├── SelectFieldWrapper.js │ │ ├── SelectFieldWrapperItem.js │ │ └── index.js │ ├── SelectWrapper │ │ ├── SelectWrapper.css │ │ ├── SelectWrapper.js │ │ └── index.js │ ├── Show │ │ ├── Show.js │ │ └── index.js │ ├── ShowMore │ │ ├── ShowMore.js │ │ └── index.js │ ├── Sidebar │ │ ├── LinkListItem.jsx │ │ ├── List.js │ │ ├── ListItem.js │ │ ├── ListSubheader.js │ │ ├── NestedLinkListItem.js │ │ ├── Sidebar.jsx │ │ ├── SidebarContent.js │ │ └── index.js │ ├── Slider │ │ ├── Slider.js │ │ ├── SliderSection.js │ │ └── index.js │ ├── SocialAuthButtonsList │ │ ├── SocialAuthButtonsList.js │ │ ├── SocialAuthButtonsListItem.js │ │ ├── SocialAuthButtonsListItemDivider.js │ │ └── index.js │ ├── Socket │ │ ├── Channel.js │ │ ├── CustomSocket.js │ │ ├── DataEndpoint.js │ │ ├── Default.js │ │ ├── EmptyListItem.js │ │ ├── Hosting.js │ │ ├── Push.js │ │ ├── Schedule.js │ │ ├── ScriptEndpoint.js │ │ ├── SocketWrapper.js │ │ ├── Trigger.js │ │ ├── User.js │ │ ├── Users.js │ │ └── index.js │ ├── Spacing.js │ ├── StatusLabel │ │ ├── ActiveStatusLabel.js │ │ ├── InactiveStatusLabel.js │ │ ├── StatusLabel.js │ │ └── index.js │ ├── Stepper │ │ ├── StepLabel.js │ │ ├── Stepper.js │ │ └── index.js │ ├── SyncanoTheme.js │ ├── TableHeaderSortableColumn │ │ ├── TableHeaderSortableColumn.js │ │ └── index.js │ ├── Tags │ │ ├── List.js │ │ └── index.js │ ├── TogglePanel │ │ ├── TogglePanel.js │ │ └── index.js │ ├── Tooltip │ │ ├── Tooltip.js │ │ └── index.js │ ├── TraceResult │ │ ├── TraceBigResult.js │ │ ├── TraceResult.js │ │ └── index.js │ ├── Truncate │ │ ├── Truncate.js │ │ └── index.js │ ├── UpgradeNowToolbar │ │ ├── UpgradeNowToolbar.js │ │ └── index.js │ └── index.js ├── constants │ ├── BillingPlans.json │ └── Constants.js ├── index.html ├── mixins │ ├── CheckListStoreMixin.js │ ├── DialogMixin.js │ ├── DialogStoreMixin.js │ ├── DialogsMixin.jsx │ ├── FormMixin.jsx │ ├── HostingMixin.js │ ├── MousetrapMixin.js │ ├── ScrollLockMixin.js │ ├── SnackbarNotificationMixin.js │ ├── StoreFormMixin.js │ ├── StoreHelpersMixin.js │ ├── StoreLoadingMixin.js │ ├── WaitForStoreMixin.js │ └── index.js ├── pages │ ├── app │ │ ├── AppMobileOnboarding.js │ │ ├── app.jsx │ │ └── index.js │ ├── classes.js │ ├── dashboard.jsx │ ├── expiredAccount.js │ ├── failedPayment.js │ ├── freeLimitsExceeded.js │ ├── hardLimitReached.js │ ├── instance.jsx │ ├── maintenance.js │ ├── notfound.jsx │ └── profile.jsx ├── raven.js ├── routes.js ├── segment.js ├── stripe.js └── utils │ ├── ActionsConstructor.js │ ├── JSONUtil.js │ ├── PricingPlansUtil.js │ ├── RoutesUtil.js │ └── index.js ├── test.sh ├── test ├── e2e │ ├── commands │ │ ├── assertSelectedCount.js │ │ ├── changeWindow.js │ │ ├── clearInput.js │ │ ├── clickDropdown.js │ │ ├── clickElement.js │ │ ├── clickListItemDropdown.js │ │ ├── fillInput.js │ │ ├── getChromeLogs.js │ │ ├── goToUrl.js │ │ ├── loginUsingLocalStorage.js │ │ ├── multipleItems.js │ │ ├── runScriptAndClickReloadButton.js │ │ ├── selectDropdownValue.js │ │ ├── setResolution.js │ │ └── singleItemSelectUnselect.js │ ├── globals.js │ ├── pages │ │ ├── adminsPage.js │ │ ├── apiKeysPage.js │ │ ├── authenticationPage.js │ │ ├── billingAddressPage.js │ │ ├── billingPaymentPage.js │ │ ├── billingPlanPage.js │ │ ├── classesPage.js │ │ ├── commonElementsPage.js │ │ ├── customSocketsPage.js │ │ ├── dataObjectsPage.js │ │ ├── docsPage.js │ │ ├── generalPage.js │ │ ├── globalsViewerPage.js │ │ ├── instancesPage.js │ │ ├── invitationsPage.js │ │ ├── invoicesPage.js │ │ ├── leftMenuPage.js │ │ ├── listsPage.js │ │ ├── loginPage.js │ │ ├── planUsagePage.js │ │ ├── profilePage.js │ │ ├── pushDevicesPage.js │ │ ├── pushMessagesPage.js │ │ ├── signupPage.js │ │ ├── socketsPage.js │ │ ├── termsPage.js │ │ ├── topNavigationPage.js │ │ └── usersPage.js │ ├── tests │ │ ├── billing │ │ │ ├── testBillingAddress.js │ │ │ ├── testPaymentMethods.js │ │ │ ├── testPlanUsage.js │ │ │ ├── testPlansAndPricing.js │ │ │ └── testPlansInvoicesList.js │ │ ├── components │ │ │ ├── testClasses.js │ │ │ ├── testDataObjects.js │ │ │ ├── testDemoApp.js │ │ │ ├── testGroups.js │ │ │ └── testUsers.js │ │ ├── instances │ │ │ ├── testAdministrators.js │ │ │ ├── testApiKeys.js │ │ │ ├── testInstance.js │ │ │ └── testInstances.js │ │ ├── navigation │ │ │ └── testTopNavigation.js │ │ ├── settings │ │ │ ├── testAuthSettings.js │ │ │ ├── testGlobalViewer.js │ │ │ ├── testPasswordChange.js │ │ │ └── testProfileChange.js │ │ └── signup_logins │ │ │ ├── testSignup.js │ │ │ ├── testSocialLogins.js │ │ │ └── testTermsOfUse.js │ └── utils.js └── setup │ ├── create │ ├── apiKey.js │ ├── apnsDevices.js │ ├── apnsSocket.js │ ├── classes.js │ ├── connection.js │ ├── gcmDevices.js │ ├── gcmSocket.js │ ├── hostingSocket.js │ ├── instance.js │ └── user.js │ ├── createTestInstances.js │ ├── delete │ └── instance.js │ ├── deleteTestInstances.js │ ├── files │ ├── exportTestInstances.js │ ├── getCertificate.js │ └── removeCertificate.js │ ├── helpers │ ├── checkAccountLimits.js │ ├── checkAvailableSlots.js │ └── generateCiCredentials.js │ └── profile │ ├── firstInstance.js │ ├── secondInstance.js │ └── thirdInstance.js ├── webpack-helpers.js ├── webpack.config.babel.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015", "react", "stage-0"], 3 | "plugins": ["react-hot-loader/babel", "add-module-exports", "lodash"], 4 | "env": { 5 | "testing": { 6 | "presets": [] 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | src/lib 2 | src/assets/js 3 | src/segment.js 4 | src/stripe.js 5 | src/raven.js 6 | 7 | test/e2e/tempInstances.js 8 | -------------------------------------------------------------------------------- /__mocks__/fileMock.js: -------------------------------------------------------------------------------- 1 | module.exports = 'test-file-stub'; 2 | -------------------------------------------------------------------------------- /__mocks__/styleMock.js: -------------------------------------------------------------------------------- 1 | module.exports = {}; 2 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/docs/README.md -------------------------------------------------------------------------------- /docs/js_patterns.md: -------------------------------------------------------------------------------- 1 | JS patterns 2 | =========== 3 | 4 | ## Useful links 5 | 6 | * [Learning JavaScript Design Patterns](http://addyosmani.com/resources/essentialjsdesignpatterns/book/) 7 | * [JavaScript The Right Way](http://jstherightway.org/) 8 | * [Superhero.js](http://superherojs.com/) -------------------------------------------------------------------------------- /docs/open_dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/docs/open_dash.png -------------------------------------------------------------------------------- /nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-core/register'); 2 | 3 | module.exports = require('./nightwatch.json'); 4 | -------------------------------------------------------------------------------- /src/Root.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Router, useRouterHistory } from 'react-router'; 3 | import createHistory from 'history/lib/createHashHistory'; 4 | import routes from './routes'; 5 | import useNamedRoutes from 'use-named-routes'; 6 | 7 | const history = useNamedRoutes(useRouterHistory(createHistory))({ routes }); 8 | 9 | const Root = () => ( 10 | 11 | ); 12 | 13 | export default Root; 14 | -------------------------------------------------------------------------------- /src/app.sass: -------------------------------------------------------------------------------- 1 | @import "assets/sass/main" 2 | -------------------------------------------------------------------------------- /src/apps/Account/AuthConstants.js: -------------------------------------------------------------------------------- 1 | export default { 2 | LOGIN_URL: '/login', 3 | LOGIN_REDIRECT_PATH: '/instances', 4 | SOCIAL_NETWORKS_LOGIN: ['facebook', 'google', 'github'], 5 | SOCIAL_NETWORKS_SIGNUP: ['google', 'github'] 6 | }; 7 | -------------------------------------------------------------------------------- /src/apps/Account/Hello.js: -------------------------------------------------------------------------------- 1 | import hello from 'hellojs'; 2 | 3 | const credentials = {}; 4 | const options = {}; 5 | 6 | credentials.facebook = APP_CONFIG.FACEBOOK_ID; 7 | credentials.google = APP_CONFIG.GOOGLE_ID; 8 | credentials.github = APP_CONFIG.GITHUB_ID; 9 | 10 | options.redirect_uri = `${location.protocol}//${location.host}`; 11 | options.scope = 'email'; 12 | 13 | hello.init(credentials, options); 14 | 15 | export default hello; 16 | -------------------------------------------------------------------------------- /src/apps/Account/auth.js: -------------------------------------------------------------------------------- 1 | import localStorage from 'local-storage-fallback'; 2 | 3 | module.exports = { 4 | loggedIn() { 5 | return Boolean(localStorage.getItem('token')); 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /src/apps/ApiKeys/index.js: -------------------------------------------------------------------------------- 1 | import ApiKeys from './ApiKeys'; 2 | import ApiKeysStore from './ApiKeysStore'; 3 | import ApiKeysList from './ApiKeysList'; 4 | import ApiKeysActions from './ApiKeysActions'; 5 | import ApiKeyDialog from './ApiKeyDialog'; 6 | import ApiKeyDialogStore from './ApiKeyDialogStore'; 7 | 8 | ApiKeys.Actions = ApiKeysActions; 9 | ApiKeys.Store = ApiKeysStore; 10 | ApiKeys.List = ApiKeysList; 11 | ApiKeys.Dialog = ApiKeyDialog; 12 | ApiKeys.DialogStore = ApiKeyDialogStore; 13 | 14 | export default ApiKeys; 15 | -------------------------------------------------------------------------------- /src/apps/Channels/ChannelsActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | { 5 | fetch: {}, 6 | setChannels: {}, 7 | fetchChannels: { 8 | asyncResult: true, 9 | loading: true, 10 | children: ['completed', 'failure'], 11 | method: 'Syncano.Actions.Channels.list' 12 | } 13 | } 14 | ); 15 | -------------------------------------------------------------------------------- /src/apps/Channels/index.js: -------------------------------------------------------------------------------- 1 | import ChannelsStore from './ChannelsStore'; 2 | import ChannelsActions from './ChannelsActions'; 3 | 4 | export default { ChannelsActions, ChannelsStore }; 5 | -------------------------------------------------------------------------------- /src/apps/Classes/ClassesActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | { 5 | setClasses: {}, 6 | setClickedClass: {}, 7 | setStepIndex: {}, 8 | fetch: {}, 9 | getClassByName: {}, 10 | fetchClasses: { 11 | asyncResult: true, 12 | loading: true, 13 | children: ['completed', 'failure'], 14 | method: 'Syncano.Actions.Classes.list' 15 | } 16 | } 17 | ); 18 | -------------------------------------------------------------------------------- /src/apps/Classes/index.js: -------------------------------------------------------------------------------- 1 | import Classes from './Classes'; 2 | import ClassesStore from './ClassesStore'; 3 | import ClassesList from './ClassesList'; 4 | import ClassesActions from './ClassesActions'; 5 | 6 | Classes.Actions = ClassesActions; 7 | Classes.Store = ClassesStore; 8 | Classes.List = ClassesList; 9 | 10 | export default Classes; 11 | -------------------------------------------------------------------------------- /src/apps/CustomSockets/CustomSocketsEndpointsActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | { 5 | fetch: {}, 6 | setCurrentCustomSocketName: {}, 7 | listSocketEndpoints: { 8 | asyncResult: true, 9 | loading: true, 10 | asyncForm: true, 11 | children: ['completed', 'failure'], 12 | method: 'Syncano.Actions.CustomSockets.listSocketEndpoints' 13 | } 14 | } 15 | ); 16 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/DataObjectsTableDateCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Moment from 'moment'; 3 | 4 | const DataObjectsTableDateCell = ({ content }) => { 5 | const date = Moment(content.value).format('DD/MM/YYYY'); 6 | const time = Moment(content.value).format('LTS'); 7 | const title = `${date} ${time}`; 8 | 9 | return ( 10 |
11 | {date} 12 |
13 | ); 14 | }; 15 | 16 | export default DataObjectsTableDateCell; 17 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/DataObjectsTableFileCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FontIcon } from 'material-ui'; 3 | 4 | const DataObjectsTableFileCell = ({ content }) => { 5 | const handleClick = (event) => { 6 | event.preventDefault(); 7 | event.stopPropagation(); 8 | window.open(content.value, '_blank'); 9 | }; 10 | 11 | return ( 12 |
13 | 14 |
15 | ); 16 | }; 17 | 18 | export default DataObjectsTableFileCell; 19 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/DataObjectsTableJSONCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Truncate from '../../../common/Truncate'; 3 | 4 | const DataObjectsTableJSONCell = ({ content }) => { 5 | const textContent = JSON.stringify(content); 6 | 7 | return ( 8 | 12 | ); 13 | }; 14 | 15 | export default DataObjectsTableJSONCell; 16 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/DataObjectsTableReferenceCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const DataObjectsTableReferenceCell = ({ content }) => ( 4 |
{`${content.target}: ${content.value}`}
5 | ); 6 | 7 | export default DataObjectsTableReferenceCell; 8 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/DataObjectsTableTextCell.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Truncate from '../../../common/Truncate'; 3 | 4 | const DataObjectsTableTextCell = ({ content }) => ( 5 | 9 | ); 10 | 11 | export default DataObjectsTableTextCell; 12 | -------------------------------------------------------------------------------- /src/apps/DataObjects/DataObjectsTable/index.js: -------------------------------------------------------------------------------- 1 | import DataObjectsTable from './DataObjectsTable'; 2 | 3 | export default DataObjectsTable; 4 | -------------------------------------------------------------------------------- /src/apps/DataObjects/index.js: -------------------------------------------------------------------------------- 1 | import DataObjects from './DataObjects'; 2 | import DataObjectsStore from './DataObjectsStore'; 3 | import DataObjectsActions from './DataObjectsActions'; 4 | import DataObjectDialog from './DataObjectDialog'; 5 | import DataObjectDialogStore from './DataObjectDialogStore'; 6 | import CheckAvatar from './CheckAvatar'; 7 | 8 | DataObjects.Actions = DataObjectsActions; 9 | DataObjects.Store = DataObjectsStore; 10 | DataObjects.Dialog = DataObjectDialog; 11 | DataObjects.DialogStore = DataObjectDialogStore; 12 | DataObjects.CheckAvatar = CheckAvatar; 13 | 14 | export default DataObjects; 15 | -------------------------------------------------------------------------------- /src/apps/GlobalConfig/index.js: -------------------------------------------------------------------------------- 1 | import GlobalConfigDialog from './GlobalConfigDialog'; 2 | 3 | export default GlobalConfigDialog; 4 | -------------------------------------------------------------------------------- /src/apps/Groups/index.js: -------------------------------------------------------------------------------- 1 | import GroupsActions from './../Groups/GroupsActions'; 2 | import GroupsStore from './../Groups/GroupsStore'; 3 | import GroupDialog from './../Groups/GroupDialog'; 4 | import GroupDialogStore from './../Groups/GroupDialogStore'; 5 | import GroupsList from './../Groups/GroupsList'; 6 | import GroupsListItem from './../Groups/GroupsListItem'; 7 | import GroupsDropdown from './../Groups/GroupsDropdown'; 8 | 9 | export default { 10 | GroupsActions, 11 | GroupsStore, 12 | GroupDialog, 13 | GroupDialogStore, 14 | GroupsList, 15 | GroupsListItem, 16 | GroupsDropdown 17 | }; 18 | -------------------------------------------------------------------------------- /src/apps/Hosting/HostingActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | { 5 | fetch: {}, 6 | setHosting: {}, 7 | fetchHostings: { 8 | asyncResult: true, 9 | loading: true, 10 | children: ['completed', 'failure'], 11 | method: 'Syncano.Actions.Hosting.list' 12 | } 13 | } 14 | ); 15 | -------------------------------------------------------------------------------- /src/apps/Hosting/HostingPublishDialogActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | { 5 | publishHosting: { 6 | asyncResult: true, 7 | loading: true, 8 | children: ['completed', 'failure'], 9 | method: 'Syncano.Actions.Hosting.publish' 10 | } 11 | }, 12 | { 13 | withDialog: true 14 | } 15 | ); 16 | -------------------------------------------------------------------------------- /src/apps/Hosting/HostingUploadDialogActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | {}, 5 | { 6 | withDialog: true 7 | } 8 | ); 9 | -------------------------------------------------------------------------------- /src/apps/Hosting/HostingUploadDialogStore.js: -------------------------------------------------------------------------------- 1 | import Reflux from 'reflux'; 2 | 3 | import { DialogStoreMixin, StoreLoadingMixin } from '../../mixins'; 4 | 5 | import HostingUploadDialogActions from './HostingUploadDialogActions'; 6 | 7 | export default Reflux.createStore({ 8 | listenables: HostingUploadDialogActions, 9 | 10 | mixins: [ 11 | DialogStoreMixin, 12 | StoreLoadingMixin 13 | ], 14 | 15 | init() { 16 | this.data = this.getInitialState(); 17 | this.setLoadingStates(); 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /src/apps/Hosting/index.js: -------------------------------------------------------------------------------- 1 | import Hosting from './Hosting'; 2 | import HostingList from './HostingList'; 3 | import Files from './Files'; 4 | import HostingFilesList from './HostingFilesList'; 5 | 6 | Hosting.HostingList = HostingList; 7 | Hosting.Files = Files; 8 | Hosting.FilesList = HostingFilesList; 9 | 10 | export default Hosting; 11 | -------------------------------------------------------------------------------- /src/apps/Instances/Instances.sass: -------------------------------------------------------------------------------- 1 | .instances-dropdown > div:first-child > div:nth-child(3) 2 | max-width: 100% 3 | -------------------------------------------------------------------------------- /src/apps/Instances/index.js: -------------------------------------------------------------------------------- 1 | import Instances from './Instances'; 2 | import InstancesStore from './InstancesStore'; 3 | import InstancesList from './InstancesList'; 4 | import InstancesActions from './InstancesActions'; 5 | import InstanceDialog from './InstanceDialog'; 6 | import InstanceDialogStore from './InstanceDialogStore'; 7 | 8 | Instances.Actions = InstancesActions; 9 | Instances.Store = InstancesStore; 10 | Instances.List = InstancesList; 11 | Instances.Dialog = InstanceDialog; 12 | Instances.DialogStore = InstanceDialogStore; 13 | 14 | export default Instances; 15 | -------------------------------------------------------------------------------- /src/apps/Profile/ProfileBillingChart.css: -------------------------------------------------------------------------------- 1 | .c3-axis { 2 | opacity: .5 !important; 3 | } 4 | -------------------------------------------------------------------------------- /src/apps/Profile/ProfileBillingChartActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions({ 4 | fetch: {}, 5 | fetchTotalDailyUsage: { 6 | children: ['completed', 'failure'], 7 | method: 'Syncano.Actions.Usage.listTotalDailyUsage' 8 | }, 9 | fetchBillingProfile: { 10 | children: ['completed', 'failure'], 11 | method: 'Syncano.Actions.Billing.getProfile' 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /src/apps/Profile/ProfileBillingPlanReceiptDialogActions.js: -------------------------------------------------------------------------------- 1 | import CreateActions from '../../utils/ActionsConstructor'; 2 | 3 | export default CreateActions( 4 | {}, 5 | { 6 | withDialog: true 7 | } 8 | ); 9 | -------------------------------------------------------------------------------- /src/apps/Profile/ProfileBillingPlanReceiptDialogStore.js: -------------------------------------------------------------------------------- 1 | import Reflux from 'reflux'; 2 | 3 | import { DialogStoreMixin } from '../../mixins'; 4 | 5 | import ProfileBillingPlanReceiptDialogActions from './ProfileBillingPlanReceiptDialogActions'; 6 | 7 | export default Reflux.createStore({ 8 | listenables: ProfileBillingPlanReceiptDialogActions, 9 | 10 | mixins: [DialogStoreMixin], 11 | 12 | init() { 13 | this.data = {}; 14 | } 15 | }); 16 | -------------------------------------------------------------------------------- /src/apps/ProfileInvitations/index.js: -------------------------------------------------------------------------------- 1 | import ProfileInvitations from './ProfileInvitations'; 2 | import ProfileInvitationsStore from './ProfileInvitationsStore'; 3 | import ProfileInvitationsList from './ProfileInvitationsList'; 4 | import ProfileInvitationsActions from './ProfileInvitationsActions'; 5 | 6 | ProfileInvitations.Actions = ProfileInvitationsActions; 7 | ProfileInvitations.Store = ProfileInvitationsStore; 8 | ProfileInvitations.List = ProfileInvitationsList; 9 | 10 | export default ProfileInvitations; 11 | -------------------------------------------------------------------------------- /src/apps/Session/NewLibConnection.js: -------------------------------------------------------------------------------- 1 | import Syncano from 'syncano'; 2 | 3 | let connection = new Syncano({ baseUrl: APP_CONFIG.SYNCANO_BASE_URL }); 4 | 5 | export default { 6 | Syncano, 7 | 8 | get() { 9 | return connection; 10 | }, 11 | 12 | set(_connection) { 13 | connection = _connection; 14 | }, 15 | 16 | reset() { 17 | connection.setAccountKey(null); 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /src/apps/Session/index.js: -------------------------------------------------------------------------------- 1 | import Actions from './SessionActions'; 2 | import Store from './SessionStore'; 3 | 4 | export { 5 | Actions, 6 | Store 7 | }; 8 | -------------------------------------------------------------------------------- /src/apps/SnackbarNotification/SnackbarNotificationActions.js: -------------------------------------------------------------------------------- 1 | import Reflux from 'reflux'; 2 | 3 | export default Reflux.createActions(['set', 'dismiss']); 4 | -------------------------------------------------------------------------------- /src/apps/SnackbarNotification/index.js: -------------------------------------------------------------------------------- 1 | import SnackbarNotification from './SnackbarNotification'; 2 | import Actions from './SnackbarNotificationActions'; 3 | import Store from './SnackbarNotificationStore'; 4 | 5 | SnackbarNotification.Actions = Actions; 6 | SnackbarNotification.Store = Store; 7 | 8 | export default SnackbarNotification; 9 | -------------------------------------------------------------------------------- /src/apps/Syncano/Actions/Channels.js: -------------------------------------------------------------------------------- 1 | export default { 2 | list() { 3 | this.NewLibConnection 4 | .Channel 5 | .please() 6 | .list() 7 | .ordering('desc') 8 | .then(this.completed) 9 | .catch(this.failure); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /src/apps/Syncano/Actions/Classes.js: -------------------------------------------------------------------------------- 1 | export default { 2 | list() { 3 | this.NewLibConnection 4 | .Class 5 | .please() 6 | .list() 7 | .ordering('desc') 8 | .then((classes) => { 9 | const classesList = classes.filter((item) => item.name !== 'user_profile'); 10 | 11 | this.completed(classesList); 12 | }) 13 | .catch(this.failure); 14 | }, 15 | 16 | get(name) { 17 | this.NewLibConnection 18 | .Class 19 | .please() 20 | .get({ name }) 21 | .then(this.completed) 22 | .catch(this.failure); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /src/apps/Syncano/Actions/CustomSockets.js: -------------------------------------------------------------------------------- 1 | export default { 2 | get(name) { 3 | return this.apiV2Request().get(`/sockets/${name}/`) 4 | .then(this.completed) 5 | .catch(this.failure); 6 | }, 7 | 8 | list() { 9 | return this.apiV2Request().get('/sockets/') 10 | .then(this.completed) 11 | .catch(this.failure); 12 | }, 13 | 14 | listSocketEndpoints(name) { 15 | return this.apiV2Request().get(`/endpoints/sockets/${name}/`) 16 | .then(this.completed) 17 | .catch(this.failure); 18 | } 19 | }; 20 | -------------------------------------------------------------------------------- /src/apps/Syncano/Actions/GlobalConfig.js: -------------------------------------------------------------------------------- 1 | export default { 2 | get() { 3 | const name = this.NewLibConnection.getInstanceName(); 4 | 5 | this.NewLibConnection 6 | .Instance 7 | .please() 8 | .getGlobalConfig({ name }) 9 | .then(this.completed) 10 | .catch(this.failure); 11 | }, 12 | 13 | update(config) { 14 | const name = this.NewLibConnection.getInstanceName(); 15 | 16 | this.NewLibConnection 17 | .Instance 18 | .please() 19 | .setGlobalConfig({ name }, config) 20 | .then(this.completed) 21 | .catch(this.failure); 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/apps/Syncano/Actions/Usage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | listTotalDailyUsage(instanceName) { 3 | const params = instanceName !== 'all' ? { instance: instanceName } : { total: true }; 4 | 5 | this.NewLibConnection 6 | .DailyUsage 7 | .please() 8 | .list({}, params) 9 | .currentMonth() 10 | .then(this.completed) 11 | .catch(this.failure); 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/apps/Syncano/index.js: -------------------------------------------------------------------------------- 1 | import Actions from './Actions'; 2 | 3 | export default { Actions }; 4 | -------------------------------------------------------------------------------- /src/apps/Traces/index.js: -------------------------------------------------------------------------------- 1 | import Traces from './Traces'; 2 | import TracesStore from './TracesStore'; 3 | import TracesList from './TracesList'; 4 | import TracesActions from './TracesActions'; 5 | 6 | Traces.Actions = TracesActions; 7 | Traces.Store = TracesStore; 8 | Traces.List = TracesList; 9 | 10 | export default Traces; 11 | -------------------------------------------------------------------------------- /src/apps/Usage/UsageChart.js: -------------------------------------------------------------------------------- 1 | import { asyncComponent } from 'react-async-loading'; 2 | 3 | export default asyncComponent(() => System.import('../Profile/ProfileBillingChart.js')); 4 | -------------------------------------------------------------------------------- /src/apps/Usage/index.js: -------------------------------------------------------------------------------- 1 | import Usage from './Usage'; 2 | 3 | export default Usage; 4 | -------------------------------------------------------------------------------- /src/apps/Users/index.js: -------------------------------------------------------------------------------- 1 | import Users from './Users'; 2 | import UsersStore from './UsersStore'; 3 | import UsersList from './UsersList'; 4 | import UsersActions from './UsersActions'; 5 | import UserDialog from './UserDialog'; 6 | import UserDialogStore from './UserDialogStore'; 7 | import UserInfo from './UserInfo'; 8 | 9 | Users.Actions = UsersActions; 10 | Users.Store = UsersStore; 11 | Users.List = UsersList; 12 | Users.Dialog = UserDialog; 13 | Users.DialogStore = UserDialogStore; 14 | Users.Info = UserInfo; 15 | 16 | export default Users; 17 | -------------------------------------------------------------------------------- /src/assets/fonts/avenir/0078f486-8e52-42c0-ad81-3c8d3d43f48e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/0078f486-8e52-42c0-ad81-3c8d3d43f48e.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/04801919-17ee-4c6b-8b17-eb1965cb3ed6.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/04801919-17ee-4c6b-8b17-eb1965cb3ed6.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/04d1bf6c-070d-4b7e-9498-6051c9f0c349.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/04d1bf6c-070d-4b7e-9498-6051c9f0c349.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/065a6b14-b2cc-446e-9428-271c570df0d9.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/065a6b14-b2cc-446e-9428-271c570df0d9.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/17b90ef5-b63f-457b-a981-503bb7afe3c0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/17b90ef5-b63f-457b-a981-503bb7afe3c0.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/19d12bba-92b1-43ad-9bab-cd36a4195c2a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/19d12bba-92b1-43ad-9bab-cd36a4195c2a.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/1a7173fa-062b-49ad-9915-bc57d3bfc1f5.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/1a7173fa-062b-49ad-9915-bc57d3bfc1f5.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/1e9b2738-9316-4b0c-97c0-5423b69ea147.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/1e9b2738-9316-4b0c-97c0-5423b69ea147.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/2315df7a-8bc2-433d-bf0a-162fc0063de0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/2315df7a-8bc2-433d-bf0a-162fc0063de0.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/25f994de-d13f-4a5d-a82b-bf925a1e054d.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/25f994de-d13f-4a5d-a82b-bf925a1e054d.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/3c210c80-960f-4684-850b-25390b4d08af.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/3c210c80-960f-4684-850b-25390b4d08af.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/4030caeb-d266-4d36-ac58-a3bb7a5b1bfa.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/4030caeb-d266-4d36-ac58-a3bb7a5b1bfa.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/4577388c-510f-4366-addb-8b663bcc762a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/4577388c-510f-4366-addb-8b663bcc762a.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/476612d9-282d-4f76-95cd-b4dd31e7ed21.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/476612d9-282d-4f76-95cd-b4dd31e7ed21.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/4b978f72-bb48-46c3-909a-2a8cd2f8819c.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/4b978f72-bb48-46c3-909a-2a8cd2f8819c.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/57bf7902-79ee-4b31-a327-1bbf59a3d155.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/57bf7902-79ee-4b31-a327-1bbf59a3d155.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/5ba5a010-7470-4d9d-8a49-2920dc1be1f8.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/5ba5a010-7470-4d9d-8a49-2920dc1be1f8.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/61bd362e-7162-46bd-b67e-28f366c4afbe.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/61bd362e-7162-46bd-b67e-28f366c4afbe.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/63a166cb-be60-435c-a056-75172e43efa5.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/63a166cb-be60-435c-a056-75172e43efa5.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/65d75eb0-2601-4da5-a9a4-9ee67a470a59.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/65d75eb0-2601-4da5-a9a4-9ee67a470a59.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/6af9989e-235b-4c75-8c08-a83bdaef3f66.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/6af9989e-235b-4c75-8c08-a83bdaef3f66.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/6d1ce413-19e7-4b43-b328-6cdedc58b35a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/6d1ce413-19e7-4b43-b328-6cdedc58b35a.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/6dc0e7d8-9284-44e1-8f05-984a41daa3a4.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/6dc0e7d8-9284-44e1-8f05-984a41daa3a4.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/710789a0-1557-48a1-8cec-03d52d663d74.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/710789a0-1557-48a1-8cec-03d52d663d74.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/75b36c58-2a02-4057-a537-09af0832ae46.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/75b36c58-2a02-4057-a537-09af0832ae46.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/908c4810-64db-4b46-bb8e-823eb41f68c0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/908c4810-64db-4b46-bb8e-823eb41f68c0.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/9bdf0737-f98c-477a-9365-ffc41b9d1285.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/9bdf0737-f98c-477a-9365-ffc41b9d1285.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/9ced8e96-4602-4507-8c20-4ff381949a9a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/9ced8e96-4602-4507-8c20-4ff381949a9a.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/a2477e08-09d9-4d4b-97a9-23a1e22cb44c.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/a2477e08-09d9-4d4b-97a9-23a1e22cb44c.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/a59168c1-917d-4de9-a244-0316c057c357.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/a59168c1-917d-4de9-a244-0316c057c357.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/b290e775-e0f9-4980-914b-a4c32a5e3e36.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/b290e775-e0f9-4980-914b-a4c32a5e3e36.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/b5c44a82-eeb8-41de-9c3f-a8db50b24b8a.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/b5c44a82-eeb8-41de-9c3f-a8db50b24b8a.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/c70e90bc-3c94-41dc-bf14-caa727c76301.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/c70e90bc-3c94-41dc-bf14-caa727c76301.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/c78eb7af-a1c8-4892-974b-52379646fef4.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/c78eb7af-a1c8-4892-974b-52379646fef4.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/c9aeeabd-dd65-491d-b4be-3e0db9ae47a0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/c9aeeabd-dd65-491d-b4be-3e0db9ae47a0.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/cb5c71ad-e582-4d00-929c-67fbfaeb1c27.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/cb5c71ad-e582-4d00-929c-67fbfaeb1c27.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/ccd17c6b-e7ed-4b73-b0d2-76712a4ef46b.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/ccd17c6b-e7ed-4b73-b0d2-76712a4ef46b.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/cdda031e-26e9-4269-83d1-5a218caa10db.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/cdda031e-26e9-4269-83d1-5a218caa10db.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/cebcf56a-ea7e-4f5c-8110-a7ee367c1f91.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/cebcf56a-ea7e-4f5c-8110-a7ee367c1f91.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/cee053ec-4b41-4506-a1fe-796261690610.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/cee053ec-4b41-4506-a1fe-796261690610.ttf -------------------------------------------------------------------------------- /src/assets/fonts/avenir/d513e15e-8f35-4129-ad05-481815e52625.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/d513e15e-8f35-4129-ad05-481815e52625.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/d8c50fcc-bc32-4f31-8c24-b170c64e2254.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/d8c50fcc-bc32-4f31-8c24-b170c64e2254.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/deb5e718-7abb-4df3-9365-edfa95317090.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/deb5e718-7abb-4df3-9365-edfa95317090.woff2 -------------------------------------------------------------------------------- /src/assets/fonts/avenir/e0542193-b2e6-4273-bc45-39d4dfd3c15b.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/e0542193-b2e6-4273-bc45-39d4dfd3c15b.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/e6b412d9-d1ed-4b17-bb93-a6911df8640d.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/e6b412d9-d1ed-4b17-bb93-a6911df8640d.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/edefe737-dc78-4aa3-ad03-3c6f908330ed.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/edefe737-dc78-4aa3-ad03-3c6f908330ed.eot -------------------------------------------------------------------------------- /src/assets/fonts/avenir/f1ebae2b-5296-4244-8771-5f40e60a564a.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/f1ebae2b-5296-4244-8771-5f40e60a564a.woff -------------------------------------------------------------------------------- /src/assets/fonts/avenir/f55e4498-ad48-4577-93a0-c614de5cbbb8.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/avenir/f55e4498-ad48-4577-93a0-c614de5cbbb8.eot -------------------------------------------------------------------------------- /src/assets/fonts/icons/Syncano-Icons.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/icons/Syncano-Icons.eot -------------------------------------------------------------------------------- /src/assets/fonts/icons/Syncano-Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/icons/Syncano-Icons.ttf -------------------------------------------------------------------------------- /src/assets/fonts/icons/Syncano-Icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/icons/Syncano-Icons.woff -------------------------------------------------------------------------------- /src/assets/fonts/icons/Syncano-Icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/fonts/icons/Syncano-Icons.woff2 -------------------------------------------------------------------------------- /src/assets/icons/account-star-variant.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/alert-circle-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/alert.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrange-bring-forward.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrange-send-backward.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-down-bold.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-down.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-left-bold.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-left-drop-circle-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-left.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-right-bold.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-right-drop-circle-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-right.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-up-bold.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/arrow-up.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/bank.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/bing.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/book-variant.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/brightness-1.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/certificate.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/icons/chart-bar.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chart-histogram.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chart-line.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/check.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/checkerboard.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chevron-down.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chevron-left.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chevron-right.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/chevron-up.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/close-box-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/close.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/code-braces.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/code-tags.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/color-helper.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/custom-socket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/delete.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/details.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/deviantart.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/email-outline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/equal.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/exclamation.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/fast-forward.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/file-restore.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/icons/filter-variant.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/filter.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/flag.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/flash-auto.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/flash-off.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/flash.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-align-right.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-indent-decrease.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-indent-increase.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-italic.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-quote.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-size.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/format-strikethrough.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/forward.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/glass-stange.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/image-filter-hdr.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/layers.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/menu-down.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/menu-left.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/menu-right.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/menu-up.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/menu.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/minus.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/movie.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/navigation.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/not-equal.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/numeric-1-box.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/panorama.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/pause.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/pine-tree.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/plane.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/play.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/poll.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/pulse.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/quick-reply.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/repeat.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/reply-all.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/reply.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/rewind.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/send.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/sigma.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/skip-next.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/sort-variant.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/stop.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/tie.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/tile-four.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/transfer.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/trending-down.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/trending-neutral.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/trending-up.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/undo.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/unfold-less.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/unfold-more.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/verified.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-array.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-carousel.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-column.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-dashboard.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-headline.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-list.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-module.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-quilt.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/view-stream.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/volume-low.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/water.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/window-maximize.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/window-minimize.svg: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/assets/icons/wrap-text.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/img/check.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/img/fox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/img/fox.png -------------------------------------------------------------------------------- /src/assets/img/illustrations/what-is-syncano.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/img/illustrations/what-is-syncano.png -------------------------------------------------------------------------------- /src/assets/img/stripe-badge@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Syncano/syncano-dashboard/1db0b4bb20e6fbae3d33a2b575ba3db5c6cee6b5/src/assets/img/stripe-badge@3x.png -------------------------------------------------------------------------------- /src/assets/sass/_config.sass: -------------------------------------------------------------------------------- 1 | @import "config/typeplate-config.scss" 2 | 3 | $blue: #2196F3 //blue500 4 | $gray: rgba(0, 0, 0, .54) 5 | 6 | $base-font-size: 14px 7 | $base-line-height: 8px 8 | $rhythm-unit: "rem" 9 | -------------------------------------------------------------------------------- /src/assets/sass/_lists.sass: -------------------------------------------------------------------------------- 1 | .list--flex 2 | +display-flex 3 | +justify-content(space-between) 4 | +flex-direction(column) 5 | padding: 0 6 | margin: 0 7 | 8 | > li 9 | display: inline-block 10 | 11 | .list--horizontal 12 | +flex-direction(row) 13 | -------------------------------------------------------------------------------- /src/assets/sass/_mobile.sass: -------------------------------------------------------------------------------- 1 | @media screen and (max-width: 767px) 2 | body 3 | #elevio-widget, 4 | #intercom-container 5 | display: none !important 6 | -------------------------------------------------------------------------------- /src/assets/sass/_text.sass: -------------------------------------------------------------------------------- 1 | @each $align in (left right center) 2 | $selector: ".text--#{$align}" 3 | 4 | #{$selector} 5 | text-align: $align 6 | -------------------------------------------------------------------------------- /src/assets/sass/main.sass: -------------------------------------------------------------------------------- 1 | @import 'config' 2 | @import 'vendor/typeplate/typeplate.scss' 3 | @import 'spacings' 4 | @import 'scaffold' 5 | @import 'grid' 6 | @import 'compass.scss' 7 | @import 'base' 8 | @import 'lists' 9 | @import 'text' 10 | @import 'mobile' 11 | -------------------------------------------------------------------------------- /src/common/AlertPageContent/index.js: -------------------------------------------------------------------------------- 1 | import AlertPageContent from './AlertPageContent'; 2 | 3 | export default AlertPageContent; 4 | -------------------------------------------------------------------------------- /src/common/AutoCompleteWrapper/index.js: -------------------------------------------------------------------------------- 1 | import AutoCompleteWrapper from './AutoCompleteWrapper'; 2 | 3 | export default AutoCompleteWrapper; 4 | -------------------------------------------------------------------------------- /src/common/BashSnippet/index.js: -------------------------------------------------------------------------------- 1 | import BashSnippet from './BashSnippet'; 2 | 3 | export default BashSnippet; 4 | -------------------------------------------------------------------------------- /src/common/Billing/index.js: -------------------------------------------------------------------------------- 1 | import ChartLegend from './ChartLegend'; 2 | import SwitchSection from './SwitchSection'; 3 | import PlanExplorerButton from './PlanExplorerButton'; 4 | 5 | export default { 6 | SwitchSection, 7 | PlanExplorerButton, 8 | ChartLegend 9 | }; 10 | -------------------------------------------------------------------------------- /src/common/CheckIcon/CircleCheckIcon.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import CheckIcon from './CheckIcon'; 4 | 5 | export default (props) => { 6 | const icon = { 7 | className: props.iconClassName, 8 | color: '#FFF', 9 | circleColor: props.background 10 | }; 11 | 12 | return ( 13 | 17 | ); 18 | }; 19 | -------------------------------------------------------------------------------- /src/common/CheckIcon/index.js: -------------------------------------------------------------------------------- 1 | import CheckIcon from './CheckIcon'; 2 | import CircleCheckIcon from './CircleCheckIcon'; 3 | import SocketCheckIcon from './SocketCheckIcon'; 4 | 5 | CheckIcon.Socket = SocketCheckIcon; 6 | CheckIcon.Circle = CircleCheckIcon; 7 | 8 | export default CheckIcon; 9 | -------------------------------------------------------------------------------- /src/common/Clipboard/index.js: -------------------------------------------------------------------------------- 1 | import Clipboard from './Clipboard'; 2 | 3 | export default Clipboard; 4 | -------------------------------------------------------------------------------- /src/common/CloseButton/index.js: -------------------------------------------------------------------------------- 1 | import CloseButton from './CloseButton'; 2 | 3 | export default CloseButton; 4 | -------------------------------------------------------------------------------- /src/common/CodePreview/index.js: -------------------------------------------------------------------------------- 1 | import CodePreview from './CodePreview'; 2 | import CodePreviewItem from './CodePreviewItem'; 3 | 4 | CodePreview.Item = CodePreviewItem; 5 | 6 | export default CodePreview; 7 | -------------------------------------------------------------------------------- /src/common/Color/index.js: -------------------------------------------------------------------------------- 1 | import ColorStore from './ColorStore'; 2 | 3 | export default ColorStore; 4 | -------------------------------------------------------------------------------- /src/common/ColorIconPicker/index.js: -------------------------------------------------------------------------------- 1 | import ColorIconPicker from './ColorIconPicker'; 2 | import PreviewCircle from './PreviewCircle'; 3 | import PreviewHexagon from './PreviewHexagon'; 4 | import ColorPicker from './ColorPicker'; 5 | import IconPicker from './IconPicker'; 6 | 7 | ColorIconPicker.IconPicker = IconPicker; 8 | ColorIconPicker.ColorPicker = ColorPicker; 9 | ColorIconPicker.PreviewCircle = PreviewCircle; 10 | ColorIconPicker.PreviewHexagon = PreviewHexagon; 11 | 12 | export default ColorIconPicker; 13 | -------------------------------------------------------------------------------- /src/common/ColumnList/Column/CircleCheckIcon.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import CheckIcon from './CheckIcon'; 3 | import CircleCheckIcon from '../../CheckIcon/CircleCheckIcon'; 4 | 5 | const ColumnCircleCheckIcon = (props) => ( 6 | 10 | ); 11 | 12 | export default ColumnCircleCheckIcon; 13 | -------------------------------------------------------------------------------- /src/common/ColumnList/Column/SocketCheckIcon.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import CheckIcon from './CheckIcon'; 4 | import SocketCheckIcon from '../../CheckIcon/SocketCheckIcon'; 5 | 6 | const ColumnSocketCheckIcon = (props) => ( 7 | 11 | ); 12 | 13 | export default ColumnSocketCheckIcon; 14 | -------------------------------------------------------------------------------- /src/common/ColumnList/ColumnListConstans.js: -------------------------------------------------------------------------------- 1 | export default { 2 | DEFAULT_BACKGROUND: 'indigo', 3 | DEFAULT_ICON: 'cloud', 4 | DEFAULT_CLASSNAME: { 5 | CHECK_ICON: 'col-xs-12', 6 | DATE: 'col-date', 7 | DESC: 'col-flex-1', 8 | ICON_NAME: 'col-xs-10', 9 | ID: 'col-xs-2', 10 | KEY: 'col-flex-1', 11 | MENU: 'col-menu', 12 | NAME: 'col-xs-8', 13 | TEXT: 'col-xs-4' 14 | }, 15 | DEFAULT_CELL_PADDING: '16px 8px', 16 | DEFAULT_ITEM_HEIGHT: 64 17 | }; 18 | -------------------------------------------------------------------------------- /src/common/ColumnList/Header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Radium from 'radium'; 3 | 4 | export default Radium(React.createClass({ 5 | displayName: 'Header', 6 | 7 | getStyles() { 8 | return { 9 | display: 'flex', 10 | alignItems: 'center', 11 | fontSize: 14, 12 | lineHeight: '24px', 13 | color: 'rgba(0,0,0,.54)', 14 | marginBottom: 16 15 | }; 16 | }, 17 | 18 | render() { 19 | const styles = this.getStyles(); 20 | 21 | return ( 22 |
23 | {this.props.children} 24 |
25 | ); 26 | } 27 | })); 28 | -------------------------------------------------------------------------------- /src/common/ColumnList/ItemColumn.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Radium from 'radium'; 3 | 4 | export default Radium(React.createClass({ 5 | 6 | displayName: 'ItemColumn', 7 | 8 | getStyles() { 9 | return { 10 | display: 'flex', 11 | flexDirection: 'column', 12 | justifyContent: 'center' 13 | }; 14 | }, 15 | 16 | render() { 17 | const styles = this.getStyles(); 18 | 19 | return ( 20 |
21 | {this.props.children} 22 |
23 | ); 24 | } 25 | })); 26 | -------------------------------------------------------------------------------- /src/common/ColumnList/index.js: -------------------------------------------------------------------------------- 1 | import Column from './Column'; 2 | import ColName from './ColName'; 3 | import ColNameDesc from './ColNameDesc'; 4 | import ColumnListConstans from './ColumnListConstans'; 5 | import EmptyItem from './EmptyListItem'; 6 | import Header from './Header'; 7 | import Item from './Item'; 8 | import ItemColumn from './ItemColumn'; 9 | 10 | export default { 11 | Column, 12 | ColName, 13 | ColNameDesc, 14 | ColumnListConstans, 15 | EmptyItem, 16 | Header, 17 | Item, 18 | ItemColumn 19 | }; 20 | -------------------------------------------------------------------------------- /src/common/Container/TabsContainer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Container from './Container'; 3 | 4 | export default React.createClass({ 5 | displayName: 'TabsContainer', 6 | 7 | getStyles() { 8 | return { 9 | maxWidth: '1000px', 10 | margin: '0 auto' 11 | }; 12 | }, 13 | 14 | render() { 15 | const styles = this.getStyles(); 16 | const { tabs, children } = this.props; 17 | 18 | return ( 19 | 20 |
21 | {tabs} 22 |
23 | {children} 24 |
25 | ); 26 | } 27 | }); 28 | -------------------------------------------------------------------------------- /src/common/Container/index.js: -------------------------------------------------------------------------------- 1 | import Container from './Container'; 2 | import EmptyContainer from './EmptyContainer'; 3 | import LoadingContainer from './LoadingContainer'; 4 | import TabsContainer from './TabsContainer'; 5 | 6 | Container.Empty = EmptyContainer; 7 | Container.Loading = LoadingContainer; 8 | Container.Tabs = TabsContainer; 9 | 10 | export default Container; 11 | -------------------------------------------------------------------------------- /src/common/CreditCard/index.js: -------------------------------------------------------------------------------- 1 | import CreditCard from './CreditCard'; 2 | 3 | export default CreditCard; 4 | -------------------------------------------------------------------------------- /src/common/CreditCardForm/index.js: -------------------------------------------------------------------------------- 1 | import CreditCardForm from './CreditCardForm'; 2 | 3 | export default CreditCardForm; 4 | -------------------------------------------------------------------------------- /src/common/CustomTitle/index.js: -------------------------------------------------------------------------------- 1 | import CustomTitle from './CustomTitle'; 2 | 3 | export default CustomTitle; 4 | -------------------------------------------------------------------------------- /src/common/DataObjectsAmount/DataObjectsAmount.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { withRouter } from 'react-router'; 3 | 4 | const DataObjectsAmount = ({ dataObjects, ...other }) => { 5 | const itemsAmount = dataObjects < 1000 ? dataObjects : `~ ${dataObjects}`; 6 | const styles = { 7 | display: 'flex', 8 | flexDirection: 'row', 9 | alignItems: 'center' 10 | }; 11 | 12 | 13 | return ( 14 |
15 | {itemsAmount} 16 |
17 |
18 | ); 19 | }; 20 | 21 | export default withRouter(DataObjectsAmount); 22 | -------------------------------------------------------------------------------- /src/common/DataObjectsAmount/index.js: -------------------------------------------------------------------------------- 1 | import DataObjectsAmount from './DataObjectsAmount'; 2 | 3 | export default DataObjectsAmount; 4 | -------------------------------------------------------------------------------- /src/common/Dialog/DialogContent.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default ({ children }) => ( 4 |
5 | {children} 6 |
7 | ); 8 | -------------------------------------------------------------------------------- /src/common/Dialog/DialogSidebarBox.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default ({ children }) => { 4 | const styles = { 5 | root: { 6 | background: 'rgba(184, 192, 201, .1)', 7 | border: '1px solid rgba(184, 192, 201, .3)', 8 | borderRadius: 4, 9 | padding: 15, 10 | color: 'rgba(68, 68, 68, .5)', 11 | fontSize: 13, 12 | lineHeight: 1.5 13 | } 14 | }; 15 | 16 | return ( 17 |
18 | {children} 19 |
20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/common/Dialog/DialogSidebarSection.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const DialogSidebarSection = ({ last, title, children }) => ( 4 |
5 | {title &&
{title}
} 6 | {children} 7 |
8 | ); 9 | 10 | export default DialogSidebarSection; 11 | -------------------------------------------------------------------------------- /src/common/DialogRefreshButton/index.js: -------------------------------------------------------------------------------- 1 | import DialogRefreshButton from './DialogRefreshButton'; 2 | 3 | export default DialogRefreshButton; 4 | -------------------------------------------------------------------------------- /src/common/DirectoryNavigation/index.js: -------------------------------------------------------------------------------- 1 | import DirectoryNavigation from './DirectoryNavigation'; 2 | 3 | export default DirectoryNavigation; 4 | -------------------------------------------------------------------------------- /src/common/DropZone/index.js: -------------------------------------------------------------------------------- 1 | import DropZone from './DropZone'; 2 | import UploadFileButton from './UploadFileButton'; 3 | 4 | DropZone.UploadFileButton = UploadFileButton; 5 | 6 | export default DropZone; 7 | -------------------------------------------------------------------------------- /src/common/Dropdown/index.js: -------------------------------------------------------------------------------- 1 | import DropdownNotifiItem from './DropdownNotifiItem'; 2 | 3 | const Dropdown = {}; 4 | 5 | Dropdown.NotifiItem = DropdownNotifiItem; 6 | 7 | export default Dropdown; 8 | -------------------------------------------------------------------------------- /src/common/Editor/index.js: -------------------------------------------------------------------------------- 1 | import { asyncComponent } from 'react-async-loading'; 2 | 3 | export default asyncComponent(() => System.import('./Editor.js')); 4 | -------------------------------------------------------------------------------- /src/common/EmptyView/index.js: -------------------------------------------------------------------------------- 1 | import EmptyView from './EmptyView'; 2 | import EmptyViewCLI from './EmptyViewCLI'; 3 | import EmptyViewDouble from './EmptyViewDouble'; 4 | import EmptyViewSmall from './EmptyViewSmall'; 5 | 6 | EmptyView.CLI = EmptyViewCLI; 7 | EmptyView.Double = EmptyViewDouble; 8 | EmptyView.Small = EmptyViewSmall; 9 | 10 | export default EmptyView; 11 | -------------------------------------------------------------------------------- /src/common/Header/index.js: -------------------------------------------------------------------------------- 1 | import Header from './Header'; 2 | import HeaderInstancesDropdown from './HeaderInstancesDropdown'; 3 | import InvitationItem from './InvitationItem'; 4 | 5 | Header.InstancesDropdown = HeaderInstancesDropdown; 6 | Header.InvitationItem = InvitationItem; 7 | 8 | export default Header; 9 | -------------------------------------------------------------------------------- /src/common/HeaderButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { FlatButton, FontIcon } from 'material-ui'; 3 | 4 | const iconStyle = { 5 | fontSize: '14px', 6 | color: '#fff', 7 | opacity: '0.5' }; 8 | 9 | 10 | const HeaderButton = (props) => ( 11 | } 16 | hoverColor="#4C38D0" 17 | {...props} 18 | /> 19 | ); 20 | 21 | export default HeaderButton; 22 | -------------------------------------------------------------------------------- /src/common/Icon/index.js: -------------------------------------------------------------------------------- 1 | import IconStore from './IconStore'; 2 | import RoundIcon from './RoundIcon'; 3 | 4 | RoundIcon.Store = IconStore; 5 | 6 | export default RoundIcon; 7 | -------------------------------------------------------------------------------- /src/common/Icon/svg/accessibility.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/account-child.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/account-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/airplanemode-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/arrow-back.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/arrow_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/arrow_up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/autorenew.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/av-timer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/bug-report.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/cached.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/call-split.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/call.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/checkbox-blank.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/checkbox-marked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/cloud.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/color-lens.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/credit-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/devices.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/directions-car.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/directions-subway.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/done.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/email.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/event.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/favorite.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/flag.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/folder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/get-app.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/grade.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/group-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/home.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/inbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/info.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/keyboard-arrow-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/keyboard-arrow-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/keyboard-arrow-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/keyboard-arrow-up.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/label.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/layers.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/local-bar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/local-offer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/location-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/map.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/menu-down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/menu.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/more-horiz.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/more-vert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/navigate_after.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/common/Icon/svg/navigate_before.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /src/common/Icon/svg/notifications-none.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/notifications.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/person-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/phone-android.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/play-arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/playlist-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/publ.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/query-builder.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /src/common/Icon/svg/question-answer.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/room.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/school.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/settings-backup-restore.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/share.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/shopping-cart.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/sync-problem.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/sync.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/system-update-tv.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/common/Icon/svg/terminal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/theaters.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/unfold-less.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/unfold-more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/videocam.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/view-module.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/view-stream.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/vpn-key.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/warning.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/whatshot.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/Icon/svg/work.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/common/InnerToolbar/index.js: -------------------------------------------------------------------------------- 1 | import InnerToolbar from './InnerToolbar'; 2 | import InnerToolbarDropdown from './InnerToolbarDropdown'; 3 | 4 | InnerToolbar.Dropdown = InnerToolbarDropdown; 5 | 6 | export default InnerToolbar; 7 | -------------------------------------------------------------------------------- /src/common/LinkWithIcon/index.js: -------------------------------------------------------------------------------- 1 | import LinkWithIcon from './LinkWithIcon'; 2 | 3 | export default LinkWithIcon; 4 | -------------------------------------------------------------------------------- /src/common/LinkWrapper/LinkWrapper.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'react-router'; 3 | import Radium from 'radium'; 4 | import { colors as Colors } from 'material-ui/styles/'; 5 | 6 | const RadiumLink = Radium(Link); 7 | 8 | export default Radium(({ style, children, ...other }) => { 9 | const styles = { 10 | color: '#444', 11 | cursor: 'pointer', 12 | ':hover': { 13 | color: Colors.blue400 14 | } 15 | }; 16 | 17 | return ( 18 | 22 | {children} 23 | 24 | ); 25 | }); 26 | -------------------------------------------------------------------------------- /src/common/LinkWrapper/index.js: -------------------------------------------------------------------------------- 1 | import LinkWrapper from './LinkWrapper'; 2 | 3 | export default LinkWrapper; 4 | -------------------------------------------------------------------------------- /src/common/Lists/ListContainer.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const ListContainer = ({ children, style, className, ...other }) => ( 4 |
9 | {children} 10 |
11 | ); 12 | 13 | ListContainer.propTypes = { 14 | style: React.PropTypes.object, 15 | className: React.PropTypes.string 16 | }; 17 | 18 | export default ListContainer; 19 | -------------------------------------------------------------------------------- /src/common/Lists/MenuItem.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { MenuItem } from 'material-ui'; 3 | 4 | export default ({ primaryText = 'Delete Selected', checkedItemsCount, disabled, ...other }) => ( 5 | 10 | ); 11 | -------------------------------------------------------------------------------- /src/common/Lists/index.js: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | import Container from './ListContainer'; 3 | import Menu from './Menu'; 4 | import MenuItem from './MenuItem'; 5 | 6 | export default { 7 | Container, 8 | List, 9 | Menu, 10 | MenuItem 11 | }; 12 | -------------------------------------------------------------------------------- /src/common/Loading/index.js: -------------------------------------------------------------------------------- 1 | import Loading from './Loading'; 2 | 3 | export default Loading; 4 | -------------------------------------------------------------------------------- /src/common/Logo/Logo.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Isvg from 'react-inlinesvg'; 3 | 4 | import './Logo.sass'; 5 | 6 | const Logo = ({ style, className }) => ( 7 | 13 | ); 14 | 15 | export default Logo; 16 | -------------------------------------------------------------------------------- /src/common/Logo/Logo.sass: -------------------------------------------------------------------------------- 1 | @import "../../assets/sass/config" 2 | 3 | .logo-blue, 4 | .logo-white 5 | svg 6 | display: block 7 | height: inherit 8 | 9 | .logo-white path 10 | fill: #ffffff !important 11 | 12 | .logo-blue path 13 | fill: #0d65bc 14 | -------------------------------------------------------------------------------- /src/common/Logo/index.js: -------------------------------------------------------------------------------- 1 | import Logo from './Logo'; 2 | 3 | export default Logo; 4 | -------------------------------------------------------------------------------- /src/common/MethodLabel/index.js: -------------------------------------------------------------------------------- 1 | import MethodLabel from './MethodLabel'; 2 | 3 | export default MethodLabel; 4 | -------------------------------------------------------------------------------- /src/common/MobileOnboarding/index.js: -------------------------------------------------------------------------------- 1 | import MobileOnboarding from './MobileOnboarding'; 2 | import MobileOnboardingSlide from './MobileOnboardingSlide'; 3 | 4 | MobileOnboarding.Slide = MobileOnboardingSlide; 5 | 6 | export default MobileOnboarding; 7 | -------------------------------------------------------------------------------- /src/common/NoMobileInfo/index.js: -------------------------------------------------------------------------------- 1 | import { asyncComponent } from 'react-async-loading'; 2 | 3 | export default asyncComponent(() => System.import('./NoMobileInfo.js')); 4 | -------------------------------------------------------------------------------- /src/common/Notification/NotificationCloseButton.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const NotificationCloseButton = ({ isVisible, onClick }) => { 4 | const styles = { 5 | root: { 6 | position: 'absolute', 7 | top: 4, 8 | right: 8, 9 | cursor: 'pointer', 10 | fontWeight: 700 11 | } 12 | }; 13 | 14 | if (isVisible) { 15 | return ( 16 |
20 | x 21 |
22 | ); 23 | } 24 | 25 | return null; 26 | }; 27 | 28 | export default NotificationCloseButton; 29 | -------------------------------------------------------------------------------- /src/common/Notification/index.js: -------------------------------------------------------------------------------- 1 | import Notification from './Notification'; 2 | 3 | export default Notification; 4 | -------------------------------------------------------------------------------- /src/common/Onboarding/index.js: -------------------------------------------------------------------------------- 1 | import Onboarding from './Onboarding'; 2 | 3 | export default Onboarding; 4 | -------------------------------------------------------------------------------- /src/common/PageIntro/index.js: -------------------------------------------------------------------------------- 1 | import PageIntro from './PageIntro'; 2 | import PageIntroHOC from './PageIntroHOC'; 3 | 4 | PageIntro.HOC = PageIntroHOC; 5 | 6 | export default PageIntro; 7 | -------------------------------------------------------------------------------- /src/common/Pagination/index.js: -------------------------------------------------------------------------------- 1 | import Pagination from './Pagination'; 2 | 3 | export default Pagination; 4 | -------------------------------------------------------------------------------- /src/common/PaymentIcon/index.js: -------------------------------------------------------------------------------- 1 | import PaymentIcon from './PaymentIcon'; 2 | import AmericanExpress from './AmericanExpress'; 3 | import DinersClub from './DinersClub'; 4 | import Discover from './Discover'; 5 | import Jcb from './Jcb'; 6 | import MasterCard from './MasterCard'; 7 | import Visa from './Visa'; 8 | 9 | PaymentIcon.AmericanExpress = AmericanExpress; 10 | PaymentIcon.DinersClub = DinersClub; 11 | PaymentIcon.Discover = Discover; 12 | PaymentIcon.Jcb = Jcb; 13 | PaymentIcon.MasterCard = MasterCard; 14 | PaymentIcon.Visa = Visa; 15 | 16 | export default PaymentIcon; 17 | -------------------------------------------------------------------------------- /src/common/PaymentIcons/index.js: -------------------------------------------------------------------------------- 1 | import PaymentIcons from './PaymentIcons'; 2 | 3 | export default PaymentIcons; 4 | -------------------------------------------------------------------------------- /src/common/Popover/index.js: -------------------------------------------------------------------------------- 1 | import Popover from './Popover'; 2 | 3 | export default Popover; 4 | -------------------------------------------------------------------------------- /src/common/PricingPlans/index.js: -------------------------------------------------------------------------------- 1 | import PricingPlans from './PricingPlans'; 2 | 3 | export default PricingPlans; 4 | -------------------------------------------------------------------------------- /src/common/RegistryEmptyView/index.js: -------------------------------------------------------------------------------- 1 | import RegistryEmptyView from './RegistryEmptyView'; 2 | 3 | export default RegistryEmptyView; 4 | -------------------------------------------------------------------------------- /src/common/SearchResultsCountBox/SearchResultsCountBox.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | const SearchResultsCountBox = ({ className, children }) => { 4 | const getStyles = () => ({ 5 | root: { 6 | border: '1px dashed #dedede', 7 | padding: 12, 8 | textAlign: 'center', 9 | lineHeight: 1 10 | } 11 | }); 12 | 13 | const styles = getStyles(); 14 | 15 | return ( 16 |
20 | {children} 21 |
22 | ); 23 | }; 24 | 25 | export default SearchResultsCountBox; 26 | -------------------------------------------------------------------------------- /src/common/SearchResultsCountBox/index.js: -------------------------------------------------------------------------------- 1 | import SearchResultsCountBox from './SearchResultsCountBox'; 2 | 3 | export default SearchResultsCountBox; 4 | -------------------------------------------------------------------------------- /src/common/SelectFieldWrapper/index.js: -------------------------------------------------------------------------------- 1 | import SelectFieldWrapper from './SelectFieldWrapper'; 2 | 3 | export default SelectFieldWrapper; 4 | -------------------------------------------------------------------------------- /src/common/SelectWrapper/SelectWrapper.css: -------------------------------------------------------------------------------- 1 | .select-wrapper-errors > div { 2 | border-color: #F44336; 3 | } 4 | -------------------------------------------------------------------------------- /src/common/SelectWrapper/index.js: -------------------------------------------------------------------------------- 1 | import SelectWrapper from './SelectWrapper'; 2 | 3 | export default SelectWrapper; 4 | -------------------------------------------------------------------------------- /src/common/Show/Show.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default React.createClass({ 4 | displayName: 'Show', 5 | 6 | render() { 7 | if (!this.props.if) { 8 | return null; 9 | } 10 | 11 | if (React.Children.count(this.props.children) > 1) { 12 | return
{this.props.children}
; 13 | } 14 | 15 | return this.props.children; 16 | } 17 | }); 18 | -------------------------------------------------------------------------------- /src/common/Show/index.js: -------------------------------------------------------------------------------- 1 | import Show from './Show'; 2 | 3 | export default Show; 4 | -------------------------------------------------------------------------------- /src/common/ShowMore/ShowMore.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { colors as Colors } from 'material-ui/styles/'; 3 | import { FlatButton } from 'material-ui'; 4 | 5 | const ShowMore = ({ style, label = 'SHOW MORE', visible = true, ...other }) => { 6 | if (visible) { 7 | return ( 8 |
9 | 14 |
15 | ); 16 | } 17 | 18 | return ; 19 | }; 20 | 21 | export default ShowMore; 22 | -------------------------------------------------------------------------------- /src/common/ShowMore/index.js: -------------------------------------------------------------------------------- 1 | import ShowMore from './ShowMore'; 2 | 3 | export default ShowMore; 4 | -------------------------------------------------------------------------------- /src/common/Sidebar/List.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { List } from 'material-ui'; 3 | import ListSubheader from './ListSubheader'; 4 | 5 | export default ({ subheader, children }) => { 6 | const styles = { 7 | list: { 8 | paddingTop: 0, 9 | paddingBottom: 10, 10 | backgroundColor: 'transparent', 11 | borderBottom: '1px solid #D8D8D8' 12 | } 13 | }; 14 | 15 | return ( 16 |
17 | 18 | 19 | {children} 20 | 21 |
22 | ); 23 | }; 24 | -------------------------------------------------------------------------------- /src/common/Sidebar/ListSubheader.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Radium from 'radium'; 3 | 4 | export default Radium(({ text }) => { 5 | const styles = { 6 | root: { 7 | padding: '20px 20px 10px', 8 | display: 'flex', 9 | alignItems: 'center' 10 | }, 11 | text: { 12 | color: '#949CAD', 13 | fontSize: 10, 14 | textTransform: 'uppercase', 15 | paddingRight: 10 16 | } 17 | }; 18 | 19 | return ( 20 |
21 |
{text}
22 |
23 |
24 | ); 25 | }); 26 | -------------------------------------------------------------------------------- /src/common/Sidebar/NestedLinkListItem.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import LinkListItem from './LinkListItem'; 3 | 4 | export default (props) => { 5 | const styles = { 6 | root: { 7 | color: '#9b9b9b', 8 | fontSize: 12, 9 | lineHeight: '16px' 10 | }, 11 | innerDivStyle: { 12 | padding: '8px 20px 8px 48px', 13 | marginLeft: 20 14 | } 15 | }; 16 | 17 | return ( 18 | 23 | ); 24 | }; 25 | -------------------------------------------------------------------------------- /src/common/Sidebar/index.js: -------------------------------------------------------------------------------- 1 | import Sidebar from './Sidebar'; 2 | import List from './List'; 3 | import ListItem from './ListItem'; 4 | import LinkListItem from './LinkListItem'; 5 | import ListSubheader from './ListSubheader'; 6 | import NestedLinkListItem from './NestedLinkListItem'; 7 | 8 | Sidebar.List = List; 9 | Sidebar.ListItem = ListItem; 10 | Sidebar.NestedLinkListItem = NestedLinkListItem; 11 | Sidebar.LinkListItem = LinkListItem; 12 | Sidebar.ListSubheader = ListSubheader; 13 | 14 | export default Sidebar; 15 | -------------------------------------------------------------------------------- /src/common/Slider/index.js: -------------------------------------------------------------------------------- 1 | import Slider from './Slider'; 2 | import SliderSection from './SliderSection'; 3 | 4 | Slider.Section = SliderSection; 5 | 6 | export default Slider; 7 | -------------------------------------------------------------------------------- /src/common/SocialAuthButtonsList/SocialAuthButtonsListItemDivider.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Divider } from 'material-ui'; 3 | import { colors as Colors } from 'material-ui/styles/'; 4 | 5 | export default React.createClass({ 6 | displayName: 'SocialAuthButtonsListItemDivider', 7 | 8 | getStyles() { 9 | return { 10 | backgroundColor: Colors.blue700 11 | }; 12 | }, 13 | 14 | render() { 15 | const styles = this.getStyles(); 16 | 17 | return ( 18 | 19 | ); 20 | } 21 | }); 22 | -------------------------------------------------------------------------------- /src/common/SocialAuthButtonsList/index.js: -------------------------------------------------------------------------------- 1 | import SocialAuthButtonsList from './SocialAuthButtonsList'; 2 | import SocialAuthButtonsListItem from './SocialAuthButtonsListItem'; 3 | import SocialAuthButtonsListItemDivider from './SocialAuthButtonsListItemDivider'; 4 | 5 | SocialAuthButtonsList.Item = SocialAuthButtonsListItem; 6 | SocialAuthButtonsList.ItemDivider = SocialAuthButtonsListItemDivider; 7 | 8 | export default SocialAuthButtonsList; 9 | -------------------------------------------------------------------------------- /src/common/Socket/CustomSocket.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { colors as Colors } from 'material-ui/styles/'; 3 | import SocketWrapper from './SocketWrapper'; 4 | 5 | const CustomSocket = ({ tooltip = 'Create a Socket', iconStyle, ...other }) => ( 6 | 12 | ); 13 | 14 | export default CustomSocket; 15 | -------------------------------------------------------------------------------- /src/common/Socket/Hosting.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { colors as Colors } from 'material-ui/styles/'; 3 | import SocketWrapper from './SocketWrapper'; 4 | 5 | const HostingSocket = ({ tooltip = 'Create a Hosting Socket', iconStyle, ...other }) => ( 6 | 12 | ); 13 | 14 | export default HostingSocket; 15 | -------------------------------------------------------------------------------- /src/common/Socket/SocketWrapper.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { IconButton } from 'material-ui'; 3 | 4 | export default ({ style, iconStyle, ...other }) => { 5 | const styles = { 6 | style: { 7 | padding: 6 8 | }, 9 | iconStyle: { 10 | fontSize: 36 11 | } 12 | }; 13 | 14 | return ( 15 | 20 | ); 21 | }; 22 | -------------------------------------------------------------------------------- /src/common/Spacing.js: -------------------------------------------------------------------------------- 1 | export default { 2 | iconSize: 24, 3 | 4 | desktopGutter: 24, 5 | desktopGutterMore: 32, 6 | desktopGutterLess: 16, 7 | desktopGutterMini: 8, 8 | desktopKeylineIncrement: 64, 9 | desktopDropDownMenuItemHeight: 32, 10 | desktopDropDownMenuFontSize: 15, 11 | desktopLeftNavMenuItemHeight: 48, 12 | desktopSubheaderHeight: 48, 13 | desktopToolbarHeight: 56 14 | }; 15 | -------------------------------------------------------------------------------- /src/common/StatusLabel/ActiveStatusLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { FontIcon } from 'material-ui'; 4 | import { colors as Colors } from 'material-ui/styles'; 5 | 6 | const StatusLabel = ({ style }) => ( 7 | 12 | ); 13 | 14 | export default StatusLabel; 15 | -------------------------------------------------------------------------------- /src/common/StatusLabel/InactiveStatusLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { FontIcon } from 'material-ui'; 4 | import { colors as Colors } from 'material-ui/styles'; 5 | 6 | const InactiveStatusLabel = ({ style }) => ( 7 | 12 | ); 13 | 14 | export default InactiveStatusLabel; 15 | -------------------------------------------------------------------------------- /src/common/StatusLabel/StatusLabel.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import ActiveStatusLabel from './ActiveStatusLabel'; 4 | import InactiveStatusLabel from './InactiveStatusLabel'; 5 | 6 | const StatusLabel = ({ isActive = false, activeStyles, inactiveStyles, withActive = true, withInactive = true }) => { 7 | if (isActive && withActive) { 8 | return ; 9 | } 10 | 11 | if (!isActive && withInactive) { 12 | return ; 13 | } 14 | 15 | return null; 16 | }; 17 | 18 | export default StatusLabel; 19 | -------------------------------------------------------------------------------- /src/common/StatusLabel/index.js: -------------------------------------------------------------------------------- 1 | import StatusLabel from './StatusLabel'; 2 | 3 | export default StatusLabel; 4 | -------------------------------------------------------------------------------- /src/common/Stepper/index.js: -------------------------------------------------------------------------------- 1 | import Stepper from './Stepper'; 2 | import StepLabel from './StepLabel'; 3 | 4 | Stepper.StepLabel = StepLabel; 5 | 6 | export default Stepper; 7 | -------------------------------------------------------------------------------- /src/common/TableHeaderSortableColumn/index.js: -------------------------------------------------------------------------------- 1 | import TableHeaderSortableColumn from './TableHeaderSortableColumn'; 2 | 3 | export default TableHeaderSortableColumn; 4 | -------------------------------------------------------------------------------- /src/common/Tags/index.js: -------------------------------------------------------------------------------- 1 | import List from './List'; 2 | 3 | const Tags = {}; 4 | 5 | Tags.List = List; 6 | 7 | export default Tags; 8 | -------------------------------------------------------------------------------- /src/common/TogglePanel/index.js: -------------------------------------------------------------------------------- 1 | import TogglePanel from './TogglePanel'; 2 | 3 | export default TogglePanel; 4 | -------------------------------------------------------------------------------- /src/common/Tooltip/index.js: -------------------------------------------------------------------------------- 1 | import Tooltip from './Tooltip'; 2 | 3 | export default Tooltip; 4 | -------------------------------------------------------------------------------- /src/common/TraceResult/TraceBigResult.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { colors as Colors } from 'material-ui/styles'; 3 | 4 | const styles = { 5 | link: { 6 | color: Colors.blue300 7 | } 8 | }; 9 | 10 | const TraceBigResult = ({ onClick }) => ( 11 | 12 | {'The result was too large to view instantly. Click '} 13 | 17 | here 18 | 19 | {' to load it.'} 20 | 21 | ); 22 | 23 | export default TraceBigResult; 24 | -------------------------------------------------------------------------------- /src/common/TraceResult/index.js: -------------------------------------------------------------------------------- 1 | import TraceResult from './TraceResult'; 2 | import TraceBigResult from './TraceBigResult'; 3 | 4 | export default { TraceResult, TraceBigResult }; 5 | -------------------------------------------------------------------------------- /src/common/Truncate/index.js: -------------------------------------------------------------------------------- 1 | import Truncate from './Truncate'; 2 | 3 | export default Truncate; 4 | -------------------------------------------------------------------------------- /src/common/UpgradeNowToolbar/index.js: -------------------------------------------------------------------------------- 1 | import UpgradeNowToolbar from './UpgradeNowToolbar'; 2 | 3 | export default UpgradeNowToolbar; 4 | -------------------------------------------------------------------------------- /src/mixins/SnackbarNotificationMixin.js: -------------------------------------------------------------------------------- 1 | import SnackbarNotificationActions from '../apps/SnackbarNotification/SnackbarNotificationActions'; 2 | 3 | export default { 4 | setSnackbarNotification(snackbar) { 5 | SnackbarNotificationActions.set(snackbar); 6 | }, 7 | 8 | dismissSnackbarNotification() { 9 | SnackbarNotificationActions.dismiss(); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /src/pages/app/index.js: -------------------------------------------------------------------------------- 1 | import AppPage from './app'; 2 | 3 | export default AppPage; 4 | -------------------------------------------------------------------------------- /src/pages/classes.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export default React.createClass({ 4 | displayName: 'Classes', 5 | 6 | render() { 7 | return this.props.children; 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /src/pages/expiredAccount.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import AlertPageContent from '../common/AlertPageContent'; 3 | 4 | export default () => ( 5 | 14 | ); 15 | -------------------------------------------------------------------------------- /src/pages/failedPayment.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import AlertPageContent from '../common/AlertPageContent'; 3 | 4 | export default () => ( 5 | 13 | ); 14 | -------------------------------------------------------------------------------- /src/pages/freeLimitsExceeded.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import AlertPageContent from '../common/AlertPageContent'; 3 | 4 | export default () => ( 5 | 14 | ); 15 | -------------------------------------------------------------------------------- /src/pages/hardLimitReached.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import AlertPageContent from '../common/AlertPageContent'; 3 | 4 | export default () => ( 5 | 14 | ); 15 | -------------------------------------------------------------------------------- /src/pages/notfound.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import AlertPageContent from '../common/AlertPageContent'; 3 | 4 | const NotFound = () => ( 5 | 12 | ); 13 | 14 | export default NotFound; 15 | -------------------------------------------------------------------------------- /src/segment.js: -------------------------------------------------------------------------------- 1 | import analytics from 'analyticsjs'; 2 | 3 | if (APP_CONFIG.ANALYTICS_WRITE_KEY) { 4 | analytics.load(APP_CONFIG.ANALYTICS_WRITE_KEY); 5 | analytics.page('Dashboard', { 6 | Init: true 7 | }); 8 | } 9 | 10 | export default analytics; 11 | -------------------------------------------------------------------------------- /src/stripe.js: -------------------------------------------------------------------------------- 1 | var Stripe = require('stripejs'); 2 | 3 | if (APP_CONFIG.STRIPE_PUBLISHABLE_KEY) { 4 | Stripe.setPublishableKey(APP_CONFIG.STRIPE_PUBLISHABLE_KEY); 5 | } 6 | 7 | module.exports = Stripe; 8 | -------------------------------------------------------------------------------- /src/utils/JSONUtil.js: -------------------------------------------------------------------------------- 1 | import _ from 'lodash'; 2 | 3 | const JSONUtil = { 4 | isValidJSONInput: (value) => { 5 | if (typeof value === 'object' || value === '') { 6 | return true; 7 | } 8 | 9 | try { 10 | const parsedValue = JSON.parse(value); 11 | 12 | if (_.isPlainObject(parsedValue)) { 13 | return true; 14 | } 15 | 16 | return false; 17 | } catch (e) { 18 | return false; 19 | } 20 | } 21 | }; 22 | 23 | export default JSONUtil; 24 | -------------------------------------------------------------------------------- /src/utils/index.js: -------------------------------------------------------------------------------- 1 | import JSONUtil from './JSONUtil'; 2 | import PricingPlansUtil from './PricingPlansUtil'; 3 | import RoutesUtil from './RoutesUtil'; 4 | 5 | export default { 6 | JSONUtil, 7 | PricingPlansUtil, 8 | RoutesUtil 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/commands/assertSelectedCount.js: -------------------------------------------------------------------------------- 1 | // Checks if specified selector occurs as many time as specified in count param, 2 | // using locationStrategy "class name", "css selector", "id", "name", 3 | // "link text", "partial link text", "tag name" or "xpath" 4 | // Optional: message => string to displayed for assertion 5 | exports.command = function assertSelectedCount(locationStrategy, selector, count, message = null) { 6 | return this.elements(locationStrategy, selector, (result) => { 7 | this.assert.equal(result.value.length, count, message); 8 | }); 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/commands/changeWindow.js: -------------------------------------------------------------------------------- 1 | exports.command = function changeWindow(windowNumber, expectedWindowCount) { 2 | return this.windowHandles((result) => { 3 | const handle = result.value[windowNumber]; 4 | const message = `There should be ${expectedWindowCount} windows open.`; 5 | 6 | this.assert.equal(result.value.length, expectedWindowCount, message); 7 | this.switchWindow(handle); 8 | }); 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/commands/clearInput.js: -------------------------------------------------------------------------------- 1 | // Custom command that clears specified element by using CTRL+A and then DELETE 2 | // oparation. Created as a workaround for AceEditor clearing. 3 | exports.command = function clearInput(element) { 4 | const mainKey = process.platform === 'darwin' ? this.Keys.COMMAND : this.Keys.CONTROL; 5 | 6 | return this 7 | .click(element) 8 | .pause(100) 9 | .keys(mainKey) 10 | .keys('a') 11 | .keys(this.Keys.NULL) 12 | .pause(200) 13 | .keys(this.Keys.DELETE) 14 | .keys(this.Keys.NULL) 15 | .pause(100); 16 | }; 17 | -------------------------------------------------------------------------------- /test/e2e/commands/clickElement.js: -------------------------------------------------------------------------------- 1 | // Command that will wait for a given element to be visible, then 2 | // will move to it, click and pause for 1sec. Mostly used for buttons or any 3 | // other clickable parts of UI. 4 | exports.command = function clickElement(element) { 5 | return this 6 | .waitForElementPresent(element) 7 | .moveToElement(element, 0, 0) 8 | .click(element) 9 | .pause(1000); 10 | }; 11 | -------------------------------------------------------------------------------- /test/e2e/commands/fillInput.js: -------------------------------------------------------------------------------- 1 | // Command that will clear value of given element 2 | // and then fill with target string. 3 | exports.command = function fillInput(element, string) { 4 | return this 5 | .waitForElementVisible(element) 6 | .clearValue(element) 7 | .pause(300) 8 | .setValue(element, string) 9 | .pause(1000); 10 | }; 11 | -------------------------------------------------------------------------------- /test/e2e/commands/getChromeLogs.js: -------------------------------------------------------------------------------- 1 | // Custom commands that extracts chrome console logs and their level 2 | // In future could save this to file, fail tests or build. 3 | // Using log.message you could get whole message, but for now I will disable it 4 | // as without proper formating it won't be readable. 5 | exports.command = function getChromeLogs() { 6 | return this.getLog('browser', (logEntriesArray) => { 7 | logEntriesArray.forEach((log) => { 8 | console.log(`[${log.level}] Timestamp: ${log.timestamp}\n`); 9 | }); 10 | }); 11 | }; 12 | -------------------------------------------------------------------------------- /test/e2e/commands/goToUrl.js: -------------------------------------------------------------------------------- 1 | // Command that helps to navigate to proper url for given instance and endpoint 2 | // Used as url is not compatible with pageObjects directly, forcing to break 3 | // command chaining. 4 | import utils from '../utils'; 5 | 6 | exports.command = function goToUrl(instanceName, endpoint) { 7 | const baseUrl = utils.testBaseUrl(); 8 | 9 | return this 10 | .url(`${baseUrl}/#/instances/${instanceName}/${endpoint}`) 11 | .pause(2000); 12 | }; 13 | -------------------------------------------------------------------------------- /test/e2e/commands/loginUsingLocalStorage.js: -------------------------------------------------------------------------------- 1 | import utils from '../utils'; 2 | 3 | exports.command = function loginUsingLocalStorage(accountToken) { 4 | const baseUrl = utils.testBaseUrl(); 5 | 6 | return this 7 | .url(`${baseUrl}/#/?token=${accountToken}`) 8 | .pause(1000); 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/commands/multipleItems.js: -------------------------------------------------------------------------------- 1 | // Command that wraps clickListItemDropdown and assertSelectedCount 2 | // thus creating command that can for example select x items and assert that 3 | // proper number of them where selected. 4 | exports.command = function multipleItems(action, assertionCount, optionsMenu, selectedItems) { 5 | return this 6 | .useXpath() 7 | .clickListItemDropdown(optionsMenu, action) 8 | .assertSelectedCount('xpath', selectedItems, assertionCount); 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/commands/runScriptAndClickReloadButton.js: -------------------------------------------------------------------------------- 1 | exports.command = function runScriptAndClickReloadButton(scriptEditPage, connection, query) { 2 | connection 3 | .Script 4 | .please() 5 | .run(query) 6 | .then((resp) => { 7 | scriptEditPage 8 | .clickElement('@tracesRefresh') 9 | .waitForElementPresent('@scriptSuccess'); 10 | return resp; 11 | }) 12 | .catch((err) => console.error(err)); 13 | return this; 14 | }; 15 | -------------------------------------------------------------------------------- /test/e2e/commands/selectDropdownValue.js: -------------------------------------------------------------------------------- 1 | // Command that selects given dropdownValue from targeted element. 2 | exports.command = function selectDropdownValue(element, dropdownValue) { 3 | const value = `//iframe//following-sibling::div//div[text()="${dropdownValue}"]`; 4 | 5 | return this 6 | .waitForElementVisible(element) 7 | .moveToElement(element, 0, 0) 8 | .pause(500) 9 | .mouseButtonClick() 10 | .pause(500) 11 | .waitForElementVisible(value) 12 | .pause(500) 13 | .click(value) 14 | .pause(500); 15 | }; 16 | -------------------------------------------------------------------------------- /test/e2e/commands/setResolution.js: -------------------------------------------------------------------------------- 1 | // Changes resolution of window based on client information that are passed in test_settings. 2 | // Splits string from config by x value and parses it as int. 3 | 4 | exports.command = function setResolution(client) { 5 | const clientInfo = client.globals.test_settings.resolution; 6 | const [horizontal, vertical] = clientInfo.split('x').map((dim) => parseInt(dim, 10)); 7 | 8 | return this.resizeWindow(horizontal, vertical); 9 | }; 10 | -------------------------------------------------------------------------------- /test/e2e/globals.js: -------------------------------------------------------------------------------- 1 | export default { 2 | waitForConditionTimeout: 8000, 3 | retryAssertionTimeout: 2000, 4 | apiBaseUrl: process.env.SYNCANO_BASE_URL 5 | }; 6 | -------------------------------------------------------------------------------- /test/e2e/pages/commonElementsPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | snackBarNotification: { 3 | selector: '[data-e2e="snackbar-notifcation"]' 4 | }, 5 | notificationBar: { 6 | selector: '[data-e2e="notification-bar"]' 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /test/e2e/pages/customSocketsPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | addButtonZeroState: { 4 | selector: 'button[data-e2e="zero-state-add-button"]' 5 | } 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /test/e2e/pages/docsPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | syncanoLogo: { 4 | selector: '//li[@class="active"]/a[text()="Documentation"]', 5 | locateStrategy: 'xpath' 6 | }, 7 | docsTarget: { 8 | selector: '[class="cover-main"]' 9 | }, 10 | gettingStartedTarget: { 11 | selector: '*[data-id="quickstart-guide"]' 12 | }, 13 | instancesTarget: { 14 | selector: '*[data-e2e="instances-page-title"]' 15 | } 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /test/e2e/pages/generalPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | instanceNameField: { 4 | selector: '//input[@name="name"]', 5 | locateStrategy: 'xpath' 6 | } 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /test/e2e/pages/globalsViewerPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | globalConfigViewer: { 4 | selector: '[data-e2e="global-config-viewer"]' 5 | }, 6 | globalConfigCloseButton: { 7 | selector: '[data-e2e="global-config-close"]' 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /test/e2e/pages/invitationsPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | emptyInvitationsView: { 4 | selector: '//span[@class="synicon-email-outline"]', 5 | locateStrategy: 'xpath' 6 | } 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /test/e2e/pages/invoicesPage.js: -------------------------------------------------------------------------------- 1 | import utils from '../utils'; 2 | 3 | export default { 4 | url: `${utils.testBaseUrl()}/#/account/invoices/`, 5 | elements: { 6 | emptyInvoicesView: { 7 | selector: '//span[@class="synicon-file-outline"]', 8 | locateStrategy: 'xpath' 9 | }, 10 | invoicesPageTitle: { 11 | selector: '[data-e2e="invoices-page-title"]' 12 | }, 13 | invoiceAmountColumn: { 14 | selector: '(//div[@class="invoices-list"]//div[@class="description-field col-flex-1"])[3]', 15 | locateStrategy: 'xpath' 16 | } 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /test/e2e/pages/profilePage.js: -------------------------------------------------------------------------------- 1 | import commonElementsPage from './commonElementsPage'; 2 | import utils from '../utils'; 3 | 4 | export default { 5 | url: `${utils.testBaseUrl()}/#/account`, 6 | elements: { 7 | updateButton: { 8 | selector: '[data-e2e="profile-update-button"]' 9 | }, 10 | innerToolbar: { 11 | selector: '[data-e2e="inner-toolbar"]' 12 | }, 13 | firstName: { 14 | selector: 'input[name=firstName]' 15 | }, 16 | lastName: { 17 | selector: 'input[name=lastName]' 18 | }, 19 | ...commonElementsPage 20 | } 21 | }; 22 | -------------------------------------------------------------------------------- /test/e2e/pages/pushDevicesPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | elements: { 3 | androidDevicesHeading: { 4 | selector: '[data-e2e="gcm-devices-list-title"]' 5 | }, 6 | iosDevicesHeading: { 7 | selector: '[data-e2e="apns-devices-list-title"]' 8 | }, 9 | firstDevice: { 10 | selector: '(//div[@class="col-sm-14"]/div/div/div)[1]', 11 | locateStrategy: 'xpath' 12 | }, 13 | APNSDevicesEmptyListItem: { 14 | selector: '[data-e2e="apns-devices-empty-list-item"]' 15 | }, 16 | GCMDevicesEmptyListItem: { 17 | selector: '[data-e2e="gcm-devices-empty-list-item"]' 18 | } 19 | } 20 | }; 21 | -------------------------------------------------------------------------------- /test/e2e/pages/termsPage.js: -------------------------------------------------------------------------------- 1 | export default { 2 | url: 'https://syncano.io/#/terms-of-service', 3 | commands: [], 4 | elements: { 5 | termsOfUseContainer: { 6 | selector: '//h1[text()="Terms of Service"]', 7 | locateStrategy: 'xpath' 8 | } 9 | } 10 | }; 11 | -------------------------------------------------------------------------------- /test/setup/create/apnsSocket.js: -------------------------------------------------------------------------------- 1 | import Syncano from 'syncano'; 2 | import connection from './connection'; 3 | import utils from '../../e2e/utils'; 4 | 5 | const createAPNSSocket = () => { 6 | if (!process.env.CI) return false; 7 | 8 | return connection.get() 9 | .APNSConfig 10 | .please() 11 | .update({}, { 12 | development_certificate: Syncano.file('./cert.p12'), 13 | development_certificate_name: utils.randomString(10), 14 | development_bundle_identifier: utils.randomString(5) 15 | }) 16 | .then((response) => response.development_certificate); 17 | }; 18 | 19 | export default createAPNSSocket; 20 | -------------------------------------------------------------------------------- /test/setup/create/gcmSocket.js: -------------------------------------------------------------------------------- 1 | import connection from './connection'; 2 | import utils from '../../e2e/utils'; 3 | 4 | const createGCMSocket = () => ( 5 | connection.get() 6 | .GCMConfig 7 | .please() 8 | .update({}, { 9 | production_api_key: utils.randomString(32), 10 | development_api_key: utils.randomString(32) 11 | }) 12 | .then((response) => [response.production_api_key, response.development_api_key]) 13 | ); 14 | 15 | export default createGCMSocket; 16 | -------------------------------------------------------------------------------- /test/setup/create/hostingSocket.js: -------------------------------------------------------------------------------- 1 | import connection from './connection'; 2 | 3 | const createHostingSocket = () => { 4 | const hosting = { name: `hosting${Date.now()}`, domains: [] }; 5 | 6 | return connection.get() 7 | .Hosting 8 | .please() 9 | .create(hosting) 10 | .then((response) => response.name) 11 | .catch((error) => console.log(error)); 12 | }; 13 | 14 | export default createHostingSocket; 15 | -------------------------------------------------------------------------------- /test/setup/create/instance.js: -------------------------------------------------------------------------------- 1 | import connection from './connection'; 2 | 3 | const createInstance = () => { 4 | const instance = { 5 | name: `testInstance-${Date.now()}`, 6 | metadata: { 7 | testInstance: true 8 | } 9 | }; 10 | 11 | return connection.get().Instance 12 | .please() 13 | .create(instance) 14 | .then((response) => response.name) 15 | .catch((error) => console.error('Instance error:\n', error.message)); 16 | }; 17 | 18 | export default createInstance; 19 | -------------------------------------------------------------------------------- /test/setup/delete/instance.js: -------------------------------------------------------------------------------- 1 | import connection from '../create/connection'; 2 | import _ from 'lodash'; 3 | 4 | const deleteInstance = (instances) => { 5 | _.forEach(instances, (instance) => { 6 | if (instance.instanceName) { 7 | connection.get().Instance 8 | .please() 9 | .delete({ name: instance.instanceName }) 10 | .then(() => console.log(`deleteInstance::${instance.instanceName} was deleted.`)) 11 | .catch((error) => console.error('Instance delete error:\n', error.message)); 12 | } 13 | }); 14 | 15 | return instances; 16 | }; 17 | 18 | export default deleteInstance; 19 | -------------------------------------------------------------------------------- /test/setup/deleteTestInstances.js: -------------------------------------------------------------------------------- 1 | import createConnection from './create/connection'; 2 | import deleteInstance from './delete/instance'; 3 | import tempInstances from '../e2e/tempInstances'; 4 | 5 | const credentials = { 6 | email: tempInstances.account.email, 7 | password: tempInstances.account.password 8 | }; 9 | 10 | createConnection.login(credentials) 11 | .then(() => deleteInstance(tempInstances)) 12 | .catch((error) => console.error('Cleanup error:\n', error.message)); 13 | -------------------------------------------------------------------------------- /test/setup/files/exportTestInstances.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | const exportTestInstances = (data) => { 4 | const fileName = 'tempInstances.js'; 5 | const path = `${__dirname}/../../e2e/${fileName}`; 6 | const configFile = fs.createWriteStream(path); 7 | const json = JSON.stringify(data); 8 | 9 | configFile.write(`export default ${json};`); 10 | 11 | return console.log(`\n> File saved at ./test/e2e/${fileName}\n`); 12 | }; 13 | 14 | export default exportTestInstances; 15 | -------------------------------------------------------------------------------- /test/setup/files/removeCertificate.js: -------------------------------------------------------------------------------- 1 | import fs from 'fs'; 2 | 3 | const removeCert = () => { 4 | fs.exists('./cert.p12', (exists) => { 5 | exists && fs.unlink('./cert.p12'); 6 | }); 7 | console.log('Deleted file: ./cert.p12'); 8 | }; 9 | 10 | removeCert(); 11 | -------------------------------------------------------------------------------- /test/setup/helpers/checkAccountLimits.js: -------------------------------------------------------------------------------- 1 | import connection from '../create/connection'; 2 | import _ from 'lodash'; 3 | 4 | const plansLimits = { 5 | builder: 4, 6 | 'paid-commitment': 16 7 | }; 8 | 9 | const checkAccountLimits = () => connection.get() 10 | .Subscription 11 | .please() 12 | .list() 13 | .then((response) => { 14 | const plans = []; 15 | 16 | _.forEach(response, (plan) => { 17 | plans.push(plan.plan); 18 | }); 19 | const currentPlan = plans[0]; 20 | const currentLimit = plansLimits[currentPlan]; 21 | 22 | return currentLimit; 23 | }); 24 | 25 | export default checkAccountLimits; 26 | -------------------------------------------------------------------------------- /test/setup/helpers/generateCiCredentials.js: -------------------------------------------------------------------------------- 1 | const generateCiCredentials = () => { 2 | const ciBaseEmail = process.env.CI_BASE_EMAIL; 3 | const ciPassword = Date.now(); 4 | const splittedEmail = {}; 5 | 6 | [splittedEmail.emailName, splittedEmail.emailDomain] = ciBaseEmail.split('@'); 7 | 8 | const credentials = { 9 | email: `${splittedEmail.emailName}+${ciPassword}@${splittedEmail.emailDomain}`, 10 | password: ciPassword 11 | }; 12 | 13 | return credentials; 14 | }; 15 | 16 | export default generateCiCredentials; 17 | --------------------------------------------------------------------------------