├── .nvmrc ├── .husky └── pre-commit ├── packages ├── manager │ ├── .prettierignore │ ├── src │ │ ├── utilities │ │ │ ├── routing │ │ │ │ └── matchPath.ts │ │ │ ├── __mocks__ │ │ │ │ └── getUserTimezone.ts │ │ │ ├── escapeStringForCLI.ts │ │ │ ├── isPast.ts │ │ │ ├── filterCurrentLinodeTypes.ts │ │ │ ├── promoUtils.ts │ │ │ ├── charts.ts │ │ │ ├── getEventsActionLink.test.ts │ │ │ └── sortByUTFDate.ts │ │ ├── components │ │ │ ├── OrderBy.md │ │ │ ├── Paginated.md │ │ │ ├── Currency │ │ │ │ └── index.ts │ │ │ ├── DocumentTitle │ │ │ │ └── index.tsx │ │ │ ├── Tabs │ │ │ │ ├── TabPanel.ts │ │ │ │ ├── TabPanels.ts │ │ │ │ └── Tabs.tsx │ │ │ ├── SupportLink │ │ │ │ └── index.tsx │ │ │ ├── TextTooltip │ │ │ │ └── index.ts │ │ │ ├── AbuseTicketBanner │ │ │ │ └── index.tsx │ │ │ ├── ShowMoreExpansion │ │ │ │ └── index.ts │ │ │ ├── Table │ │ │ │ └── index.ts │ │ │ ├── DebouncedSearchTextField │ │ │ │ └── index.tsx │ │ │ ├── NullComponent.tsx │ │ │ ├── TableRow │ │ │ │ └── index.ts │ │ │ ├── TableCell │ │ │ │ └── index.ts │ │ │ ├── BarPercent │ │ │ │ └── index.ts │ │ │ ├── Menu.ts │ │ │ ├── AppBar.ts │ │ │ ├── LandingHeader │ │ │ │ └── index.tsx │ │ │ ├── SvgIcon.ts │ │ │ ├── TableSortCell │ │ │ │ └── index.ts │ │ │ ├── Toolbar.ts │ │ │ ├── MenuItem.ts │ │ │ ├── MenuList.ts │ │ │ ├── DateTimeDisplay │ │ │ │ └── index.ts │ │ │ ├── DisplayPrice │ │ │ │ └── index.tsx │ │ │ ├── TableBody.tsx │ │ │ ├── TableHead.tsx │ │ │ ├── PaginationFooter │ │ │ │ └── PaginationFooter.constants.ts │ │ │ ├── ListItemText.ts │ │ │ ├── PrimaryNav │ │ │ │ └── constants.ts │ │ │ ├── TableFooter.tsx │ │ │ ├── Skeleton.tsx │ │ │ ├── CheckoutBar │ │ │ │ └── styles.ts │ │ │ ├── FormGroup.tsx │ │ │ ├── AccountActivation │ │ │ │ └── accountActivationLandingLazyRoute.ts │ │ │ └── TransferDisplay │ │ │ │ └── TransferDisplay.styles.ts │ │ ├── features │ │ │ ├── TopMenu │ │ │ │ ├── constants.ts │ │ │ │ └── UserMenu │ │ │ │ │ └── index.ts │ │ │ ├── Volumes │ │ │ │ ├── constants.ts │ │ │ │ ├── volumesLandingLazyRoute.ts │ │ │ │ ├── volumesCreateLazyRoute.ts │ │ │ │ └── VolumeDetails │ │ │ │ │ ├── volumeDetailsLazyRoute.ts │ │ │ │ │ ├── VolumeMetrics │ │ │ │ │ └── volumeMetricsLazyRoute.ts │ │ │ │ │ └── VolumeSummary │ │ │ │ │ └── volumeSummaryLazyRoute.ts │ │ │ ├── Backups │ │ │ │ └── index.tsx │ │ │ ├── Kubernetes │ │ │ │ ├── KubeCheckoutBar │ │ │ │ │ └── index.tsx │ │ │ │ ├── CreateCluster │ │ │ │ │ └── createClusterLazyRoute.ts │ │ │ │ ├── KubernetesLanding │ │ │ │ │ └── kubernetesLandingLazyRoute.ts │ │ │ │ └── KubernetesClusterDetail │ │ │ │ │ ├── NodePoolsDisplay │ │ │ │ │ └── LabelsAndTaints │ │ │ │ │ │ └── LabelTable.styles.tsx │ │ │ │ │ └── kubernetesClusterDetailLazyRoute.ts │ │ │ ├── Managed │ │ │ │ ├── ManagedDashboardCard │ │ │ │ │ └── index.tsx │ │ │ │ ├── SSHAccess │ │ │ │ │ ├── common.ts │ │ │ │ │ └── SSHAccessTable.styles.tsx │ │ │ │ ├── Contacts │ │ │ │ │ └── common.ts │ │ │ │ ├── managedLandingLazyRoute.ts │ │ │ │ └── Monitors │ │ │ │ │ └── MonitorTable.styles.tsx │ │ │ ├── Billing │ │ │ │ ├── BillingPanels │ │ │ │ │ ├── BillingSummary │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── PaymentDrawer │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── PaymentInfoPanel │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── ContactInfoPanel │ │ │ │ │ │ └── UpdateContactInformationForm │ │ │ │ │ │ └── index.ts │ │ │ │ ├── PdfGenerator │ │ │ │ │ ├── LinodeLogo.png │ │ │ │ │ └── akamai-logo.png │ │ │ │ ├── billingDetailLazyRoute.ts │ │ │ │ └── BillingLanding │ │ │ │ │ ├── billingLandingLazyRoute.ts │ │ │ │ │ └── invoiceDetailsLazyRoute.ts │ │ │ ├── Longview │ │ │ │ ├── LongviewDetail │ │ │ │ │ ├── DetailTabs │ │ │ │ │ │ ├── Processes │ │ │ │ │ │ │ ├── types.ts │ │ │ │ │ │ │ └── ProcessesTable.styles.tsx │ │ │ │ │ │ ├── OverviewGraphs │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ └── TopProcesses.styles.ts │ │ │ │ │ ├── LongviewDetail.styles.ts │ │ │ │ │ └── longviewDetailLazyRoute.ts │ │ │ │ ├── LongviewLanding │ │ │ │ │ ├── Gauges │ │ │ │ │ │ └── common.ts │ │ │ │ │ ├── longviewLandingLazyRoute.ts │ │ │ │ │ └── __mocks__ │ │ │ │ │ │ └── LongviewClientRow.tsx │ │ │ │ └── __mocks__ │ │ │ │ │ └── request.ts │ │ │ ├── Databases │ │ │ │ ├── DatabaseDetail │ │ │ │ │ ├── DatabaseSettings │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── databaseSettingsLazyRoute.ts │ │ │ │ │ ├── DatabaseResize │ │ │ │ │ │ └── databaseResizeLazyRoute.ts │ │ │ │ │ ├── databaseDetailLazyRoute.ts │ │ │ │ │ ├── DatabaseBackups │ │ │ │ │ │ └── databaseBackupsLazyRoute.ts │ │ │ │ │ ├── DatabaseMonitor │ │ │ │ │ │ └── databaseMonitorLazyRoute.ts │ │ │ │ │ ├── DatabaseSummary │ │ │ │ │ │ └── databaseSummaryLazyRoute.ts │ │ │ │ │ ├── DatabaseNetworking │ │ │ │ │ │ └── databaseNetworkingLazyRoute.ts │ │ │ │ │ └── DatabaseAdvancedConfiguration │ │ │ │ │ │ └── databaseAdvancedConfigurationLazyRoute.ts │ │ │ │ ├── DatabaseCreate │ │ │ │ │ └── databaseCreateLazyRoute.ts │ │ │ │ └── DatabaseLanding │ │ │ │ │ └── databaseLandingLazyRoute.ts │ │ │ ├── Profile │ │ │ │ ├── AuthenticationSettings │ │ │ │ │ ├── SecurityQuestions │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── authenicationSettingsLazyRoute.ts │ │ │ │ ├── SSHKeys │ │ │ │ │ └── sshKeysLazyRoute.ts │ │ │ │ ├── profileLazyRoute.ts │ │ │ │ ├── APITokens │ │ │ │ │ └── apiTokensLazyRoute.ts │ │ │ │ ├── Referrals │ │ │ │ │ └── referralsLazyRoute.ts │ │ │ │ ├── LishSettings │ │ │ │ │ └── lishSettingsLazyRoute.ts │ │ │ │ ├── OAuthClients │ │ │ │ │ └── oAuthClientsLazyRoute.ts │ │ │ │ └── DisplaySettings │ │ │ │ │ └── displaySettingsLazyRoute.ts │ │ │ ├── Domains │ │ │ │ ├── constants.ts │ │ │ │ ├── domainsLandingLazyRoute.ts │ │ │ │ ├── CreateDomain │ │ │ │ │ └── createDomainLazyRoute.ts │ │ │ │ └── DomainDetail │ │ │ │ │ └── domainDetailLazyRoute.ts │ │ │ ├── Delivery │ │ │ │ ├── Streams │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── StreamForm │ │ │ │ │ │ ├── streamCreateLazyRoute.ts │ │ │ │ │ │ └── streamEditLazyRoute.ts │ │ │ │ ├── Destinations │ │ │ │ │ ├── constants.ts │ │ │ │ │ └── DestinationForm │ │ │ │ │ │ ├── destinationCreateLazyRoute.ts │ │ │ │ │ │ └── destinationEditLazyRoute.ts │ │ │ │ ├── deliveryLandingLazyRoute.ts │ │ │ │ └── Shared │ │ │ │ │ └── FormSubmitBar │ │ │ │ │ └── FormSubmitBar.styles.tsx │ │ │ ├── StackScripts │ │ │ │ ├── types.ts │ │ │ │ └── StackScriptLanding │ │ │ │ │ └── stackScriptLandingLazyRoute.ts │ │ │ ├── Lish │ │ │ │ ├── lishLazyRoute.ts │ │ │ │ └── lishUtils.ts │ │ │ ├── Linodes │ │ │ │ ├── LinodeCreate │ │ │ │ │ ├── SMTP.tsx │ │ │ │ │ ├── Tabs │ │ │ │ │ │ ├── Clone │ │ │ │ │ │ │ └── cloneLazyRoute.ts │ │ │ │ │ │ ├── imagesLazyRoutes.ts │ │ │ │ │ │ ├── Backups │ │ │ │ │ │ │ ├── backupsLazyRoute.ts │ │ │ │ │ │ │ └── Backups.tsx │ │ │ │ │ │ ├── Marketplace │ │ │ │ │ │ │ └── marketPlaceLazyRoute.ts │ │ │ │ │ │ ├── StackScripts │ │ │ │ │ │ │ └── stackScriptsLazyRoute.ts │ │ │ │ │ │ └── operatingSystemsLazyRoute.ts │ │ │ │ │ └── linodeCreateLazyRoute.ts │ │ │ │ ├── linodesLandingLazyRoute.ts │ │ │ │ ├── LinodesDetail │ │ │ │ │ ├── linodeDetailLazyRoute.ts │ │ │ │ │ ├── LinodeAlerts │ │ │ │ │ │ └── linodeAlertsLazyRoute.ts │ │ │ │ │ ├── LinodeBackup │ │ │ │ │ │ └── linodeBackupsLazyRoute.ts │ │ │ │ │ ├── LinodeMetrics │ │ │ │ │ │ └── linodeMetricsLazyRoute.ts │ │ │ │ │ ├── LinodeStorage │ │ │ │ │ │ └── linodeStorageLazyRoute.ts │ │ │ │ │ ├── HostMaintenanceError.tsx │ │ │ │ │ ├── LinodeActivity │ │ │ │ │ │ └── linodeActivityLazyRoute.ts │ │ │ │ │ ├── LinodeConfigs │ │ │ │ │ │ └── linodeConfigsLazyRoute.ts │ │ │ │ │ ├── LinodeSettings │ │ │ │ │ │ └── linodeSettingsLazyRoute.ts │ │ │ │ │ ├── LinodeNetworking │ │ │ │ │ │ ├── liondeNetworkingLazyRoute.ts │ │ │ │ │ │ ├── NetworkingSummaryPanel │ │ │ │ │ │ │ └── utils.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ └── LinodePermissionsError.tsx │ │ │ │ └── CloneLanding │ │ │ │ │ └── cloneLandingLazyRoute.ts │ │ │ ├── Betas │ │ │ │ ├── betasLandingLazyRoute.ts │ │ │ │ └── betaSignupLazyRoute.ts │ │ │ ├── IAM │ │ │ │ ├── Roles │ │ │ │ │ ├── rolesLandingLazyRoute.ts │ │ │ │ │ └── Defaults │ │ │ │ │ │ ├── defaultsLandingLazyRoute.ts │ │ │ │ │ │ ├── defaultRolesLazyRoute.ts │ │ │ │ │ │ └── defaultEntityAccessLazyRoute.ts │ │ │ │ ├── Users │ │ │ │ │ ├── UsersTable │ │ │ │ │ │ └── usersLandingLazyRoute.ts │ │ │ │ │ ├── UserDetails │ │ │ │ │ │ └── userProfileLazyRoute.ts │ │ │ │ │ ├── UserRoles │ │ │ │ │ │ └── userRolesLazyRoute.ts │ │ │ │ │ ├── UserEntities │ │ │ │ │ │ └── userEntitiesLazyRoute.ts │ │ │ │ │ ├── UserDelegations │ │ │ │ │ │ └── userDelegationsLazyRoute.ts │ │ │ │ │ └── userDetailsLandingLazyRoute.ts │ │ │ │ ├── iamLandingLazyRoute.ts │ │ │ │ └── Delegations │ │ │ │ │ └── delegationsLandingLazyRoute.ts │ │ │ ├── Account │ │ │ │ ├── types.ts │ │ │ │ ├── globalSettingsLazyRoute.ts │ │ │ │ ├── accountLandingLazyRoute.ts │ │ │ │ ├── accountLoginsLazyRoute.ts │ │ │ │ └── Maintenance │ │ │ │ │ └── maintenanceLandingLazyRoute.ts │ │ │ ├── Quotas │ │ │ │ └── quotasLandingLazyRoute.ts │ │ │ ├── Users │ │ │ │ ├── userDetailLazyRoute.ts │ │ │ │ └── usersLandingLazyRoute.ts │ │ │ ├── VPCs │ │ │ │ ├── VPCCreate │ │ │ │ │ ├── VPCCreateLazyRoute.ts │ │ │ │ │ └── FormComponents │ │ │ │ │ │ └── CannotCreateVPCNotice.tsx │ │ │ │ ├── VPCDetail │ │ │ │ │ ├── VPCDetailLazyRoute.ts │ │ │ │ │ ├── SubnetLinodeRow.styles.ts │ │ │ │ │ └── SubnetAssignLinodesDrawer.styles.ts │ │ │ │ └── VPCLanding │ │ │ │ │ └── VPCLandingLazyRoute.ts │ │ │ ├── Events │ │ │ │ ├── eventsLandingLazyRoute.ts │ │ │ │ └── factories │ │ │ │ │ ├── profile.tsx │ │ │ │ │ ├── ipaddress.tsx │ │ │ │ │ └── credit.tsx │ │ │ ├── Search │ │ │ │ └── searchLandingLazyRoute.ts │ │ │ ├── UsersAndGrants │ │ │ │ ├── usersAndGrantsLandingLazyRoute.ts │ │ │ │ └── usersAndGrantsUserProfileLazyRoute.ts │ │ │ ├── Firewalls │ │ │ │ ├── FirewallDetail │ │ │ │ │ ├── Devices │ │ │ │ │ │ └── constants.ts │ │ │ │ │ └── firewallDetailLazyRoute.ts │ │ │ │ └── FirewallLanding │ │ │ │ │ └── firewallLandingLazyRoute.ts │ │ │ ├── LoginHistory │ │ │ │ └── loginHistoryLandingLazyRoute.ts │ │ │ ├── ObjectStorage │ │ │ │ ├── AccessKeyLanding │ │ │ │ │ └── types.ts │ │ │ │ ├── BucketLanding │ │ │ │ │ ├── StylesBucketIcon.ts │ │ │ │ │ └── OMC_CreateBucketDrawer.styles.ts │ │ │ │ ├── objectStorageLandingLazyRoute.ts │ │ │ │ └── BucketDetail │ │ │ │ │ └── bucketDetailLandingLazyRoute.ts │ │ │ ├── Images │ │ │ │ ├── ImagesLanding │ │ │ │ │ └── imagesLandingLazyRoute.ts │ │ │ │ └── ImagesCreate │ │ │ │ │ └── imagesCreateLazyRoute.ts │ │ │ ├── Maintenance │ │ │ │ └── maintenanceLandingLazyRoute.ts │ │ │ ├── CloudPulse │ │ │ │ ├── Alerts │ │ │ │ │ ├── AlertsListing │ │ │ │ │ │ └── cloudPulseAlertsLandingLazyRoute.ts │ │ │ │ │ ├── CreateAlert │ │ │ │ │ │ └── cloudPulseAlertsCreateLazyRoute.ts │ │ │ │ │ ├── AlertsDetail │ │ │ │ │ │ ├── cloudPulseAlertsDefinitionsDetailLazyRoute.ts │ │ │ │ │ │ └── constants.ts │ │ │ │ │ ├── EditAlert │ │ │ │ │ │ └── cloudPulseAlertsDefinitionsEditLazyRoute.ts │ │ │ │ │ └── NotificationChannels │ │ │ │ │ │ └── NotificationsChannelsListing │ │ │ │ │ │ └── cloudPulseAlertsNotificationChannelsListingLazyRoute.ts │ │ │ │ └── Dashboard │ │ │ │ │ └── cloudPulseMetricsLandingLazyRoute.ts │ │ │ ├── AccountSettings │ │ │ │ └── accountSettingsLandingLazyRoute.ts │ │ │ ├── NodeBalancers │ │ │ │ ├── nodeBalancersCreateLazyRoute.ts │ │ │ │ ├── NodeBalancersLanding │ │ │ │ │ └── nodeBalancersLandingLazyRoute.ts │ │ │ │ └── NodeBalancerDetail │ │ │ │ │ └── nodeBalancersDetailLazyRoute.ts │ │ │ ├── ServiceTransfers │ │ │ │ ├── serviceTransfersLandingLazyRoute.ts │ │ │ │ └── serviceTransfersCreateLazyRoute.ts │ │ │ ├── Support │ │ │ │ ├── SupportTicketDetail │ │ │ │ │ └── supportTicketDetailLazyRoute.ts │ │ │ │ └── SupportTickets │ │ │ │ │ └── supportTicketsLandingLazyRoute.ts │ │ │ ├── EntityTransfers │ │ │ │ ├── EntityTransfersCreate │ │ │ │ │ ├── entityTransfersCreateLazyRoute.ts │ │ │ │ │ └── TransferHeader.tsx │ │ │ │ └── EntityTransfersLanding │ │ │ │ │ └── entityTransferLandingLazyRoute.ts │ │ │ ├── NetworkLoadBalancers │ │ │ │ ├── NetworkLoadBalancersLanding │ │ │ │ │ └── networkLoadBalancersLazyRoute.tsx │ │ │ │ └── NetworkLoadBalancersDetail │ │ │ │ │ ├── NetworkLoadBalancerDetailLazyRoute.ts │ │ │ │ │ └── NetworkLoadBalancerListenersLazyRoute.ts │ │ │ ├── PlacementGroups │ │ │ │ ├── PlacementGroups.styles.ts │ │ │ │ ├── PlacementGroupsDetail │ │ │ │ │ └── placementGroupDetailLazyRoute.ts │ │ │ │ └── PlacementGroupsLanding │ │ │ │ │ ├── placemenGroupsLandingLazyRoute.ts │ │ │ │ │ └── PlacementGroupsRow.styles.ts │ │ │ └── Help │ │ │ │ └── SupportSearchLanding │ │ │ │ └── SupportSearchLandingWrapper.tsx │ │ ├── store │ │ │ ├── globalErrors │ │ │ │ ├── index.ts │ │ │ │ ├── types.ts │ │ │ │ └── globalErrors.actions.ts │ │ │ └── selectors │ │ │ │ └── getAbuseTicket.ts │ │ ├── routes │ │ │ ├── volumes │ │ │ │ └── constants.ts │ │ │ ├── auth │ │ │ │ └── AuthRoute.tsx │ │ │ ├── events │ │ │ │ └── EventsRoute.tsx │ │ │ ├── linodes │ │ │ │ └── LinodesRoute.tsx │ │ │ ├── profile │ │ │ │ └── ProfileRoute.tsx │ │ │ └── root.ts │ │ ├── factories │ │ │ ├── userEntityPermissions.ts │ │ │ ├── userAccountPermissions.ts │ │ │ ├── tags.ts │ │ │ ├── accountAgreements.ts │ │ │ ├── accountLogin.ts │ │ │ └── kernels.ts │ │ ├── mocks │ │ │ ├── testServer.ts │ │ │ ├── presets │ │ │ │ └── crud │ │ │ │ │ ├── quotas.ts │ │ │ │ │ ├── entities.ts │ │ │ │ │ ├── permissions.ts │ │ │ │ │ ├── networking.ts │ │ │ │ │ └── users.ts │ │ │ └── mswWorkers.ts │ │ ├── queries │ │ │ └── managed │ │ │ │ └── types.ts │ │ ├── assets │ │ │ ├── icons │ │ │ │ ├── divider-vertical.svg │ │ │ │ ├── credit-card.svg │ │ │ │ ├── caret_down.svg │ │ │ │ ├── caret_right.svg │ │ │ │ ├── LKEminusSign.svg │ │ │ │ └── ResizeWindow.svg │ │ │ └── weblish │ │ │ │ └── weblish.css │ │ ├── hooks │ │ │ ├── types.ts │ │ │ ├── useGlobalErrors.ts │ │ │ ├── usePendingUpload.ts │ │ │ ├── useIsLargeAccount.ts │ │ │ └── useInfinitePageSize.ts │ │ ├── __data__ │ │ │ └── ExtendedType.ts │ │ ├── context │ │ │ ├── complianceUpdateContext.ts │ │ │ ├── sessionExpirationContext.ts │ │ │ └── switchAccountSessionContext.ts │ │ ├── OAuth │ │ │ └── Logout.tsx │ │ ├── types │ │ │ └── index.ts │ │ └── vite.d.ts │ ├── public │ │ ├── favicon.ico │ │ ├── fonts │ │ │ └── fonts │ │ │ │ ├── FiraCode.ttf │ │ │ │ ├── FiraCode.woff │ │ │ │ ├── Lato-Bold.eot │ │ │ │ ├── Lato-Bold.ttf │ │ │ │ ├── Lato-Bold.woff │ │ │ │ ├── Lato-Bold.woff2 │ │ │ │ ├── Lato-Regular.eot │ │ │ │ ├── Lato-Regular.ttf │ │ │ │ ├── Lato-Regular.woff │ │ │ │ ├── Lato-Regular.woff2 │ │ │ │ ├── Lato-Semibold.eot │ │ │ │ ├── Lato-Semibold.ttf │ │ │ │ ├── Lato-Semibold.woff │ │ │ │ ├── Lato-Semibold.woff2 │ │ │ │ ├── UbuntuMono-Regular.ttf │ │ │ │ ├── UbuntuMono-Regular.woff │ │ │ │ ├── SourceCodePro-Regular.ttf │ │ │ │ ├── UbuntuMono-Regular.woff2 │ │ │ │ ├── SourceCodePro-Regular.ttf.woff │ │ │ │ └── SourceCodePro-Regular.ttf.woff2 │ │ └── assets │ │ │ ├── marketplace-background.png │ │ │ ├── shadowsocks.svg │ │ │ ├── white │ │ │ ├── saltcorn.svg │ │ │ ├── nomad.svg │ │ │ ├── nomadocc.svg │ │ │ └── nomadclientsocc.svg │ │ │ ├── nomad.svg │ │ │ ├── nomadocc.svg │ │ │ ├── nomadclientsocc.svg │ │ │ └── wazuh.svg │ ├── .prettierrc │ ├── cypress │ │ ├── support │ │ │ ├── util │ │ │ │ └── cypress-mochawesome-reporter.d.ts │ │ │ ├── api │ │ │ │ └── account.ts │ │ │ ├── constants │ │ │ │ ├── login.ts │ │ │ │ ├── user.ts │ │ │ │ ├── tickets.ts │ │ │ │ ├── api.ts │ │ │ │ ├── vpc.ts │ │ │ │ ├── images.ts │ │ │ │ └── linodes.ts │ │ │ ├── plugins │ │ │ │ └── plugin.ts │ │ │ ├── ui │ │ │ │ ├── app-bar.ts │ │ │ │ ├── tooltip.ts │ │ │ │ ├── file-upload.ts │ │ │ │ └── breadcrumb.ts │ │ │ ├── component │ │ │ │ └── index.html │ │ │ └── cypress-exports.ts │ │ ├── fixtures │ │ │ ├── object-storage-files │ │ │ │ ├── 1.txt │ │ │ │ ├── 2.jpg │ │ │ │ ├── 3.jpg │ │ │ │ └── 4.zip │ │ │ ├── test_screenshot.png │ │ │ ├── machine-images │ │ │ │ └── test-image.gz │ │ │ ├── stackscripts │ │ │ │ ├── stackscript-basic.sh │ │ │ │ ├── stackscript-no-shebang.sh │ │ │ │ ├── stackscript-udf-invalid.sh │ │ │ │ └── stackscript-udf.sh │ │ │ ├── example.json │ │ │ └── user-data │ │ │ │ └── user-data-config-basic.yml │ │ └── e2e │ │ │ └── synthetic │ │ │ └── hello-world.spec.ts │ ├── .changeset │ │ ├── pr-13120-tests-1763655928886.md │ │ ├── pr-13176-tests-1765218851864.md │ │ ├── pr-13186-fixed-1765370117878.md │ │ ├── pr-13185-tests-1765297901858.md │ │ ├── pr-13149-added-1765469597776.md │ │ ├── pr-13189-changed-1765378735594.md │ │ ├── pr-13192-tests-1765463156655.md │ │ ├── pr-13190-fixed-1765447529132.md │ │ ├── pr-13170-fixed-1764918493011.md │ │ ├── pr-13200-changed-1765812688683.md │ │ ├── pr-13201-fixed-1765798247833.md │ │ ├── pr-13194-fixed-1765470340634.md │ │ ├── pr-13188-upcoming-features-1765378307536.md │ │ ├── pr-13150-upcoming-features-1764648735682.md │ │ ├── pr-13151-upcoming-features-1765447199412.md │ │ ├── pr-13193-upcoming-features-1765540702676.md │ │ ├── pr-13171-changed-1764924158682.md │ │ └── pr-13196-fixed-1765520959220.md │ ├── .storybook │ │ └── vite.config.ts │ └── index.html ├── queries │ ├── src │ │ ├── tags │ │ │ └── index.ts │ │ ├── images │ │ │ └── index.ts │ │ ├── locks │ │ │ └── index.ts │ │ ├── support │ │ │ └── index.ts │ │ ├── types │ │ │ └── index.ts │ │ ├── vlans │ │ │ └── index.ts │ │ ├── cloudnats │ │ │ ├── index.ts │ │ │ └── requests.ts │ │ ├── delivery │ │ │ └── index.ts │ │ ├── firewalls │ │ │ └── index.ts │ │ ├── placementGroups │ │ │ └── index.ts │ │ ├── betas │ │ │ └── index.ts │ │ ├── vpcs │ │ │ └── index.ts │ │ ├── regions │ │ │ └── index.ts │ │ ├── volumes │ │ │ └── index.ts │ │ ├── networking │ │ │ └── index.ts │ │ ├── nodebalancers │ │ │ └── index.ts │ │ ├── networktransfer │ │ │ ├── index.ts │ │ │ └── requests.ts │ │ ├── servicetransfers │ │ │ └── index.ts │ │ ├── iam │ │ │ └── index.ts │ │ ├── domains │ │ │ └── index.ts │ │ ├── quotas │ │ │ └── index.ts │ │ ├── databases │ │ │ └── index.ts │ │ ├── stackscripts │ │ │ └── index.ts │ │ ├── profile │ │ │ └── index.ts │ │ ├── netloadbalancers │ │ │ └── index.ts │ │ ├── account │ │ │ ├── notifications.ts │ │ │ ├── transfer.ts │ │ │ └── availability.ts │ │ ├── linodes │ │ │ └── index.ts │ │ ├── eventHandlers.ts │ │ └── statusPage │ │ │ └── index.ts │ ├── .prettierrc │ ├── tsconfig.json │ ├── .changeset │ │ ├── pr-13189-changed-1765378759554.md │ │ └── pr-13187-upcoming-features-1765970953049.md │ └── eslint.config.js ├── ui │ ├── src │ │ ├── assets │ │ │ ├── index.ts │ │ │ └── icons │ │ │ │ ├── radioRadioed.svg │ │ │ │ ├── radio.svg │ │ │ │ ├── plusSign.svg │ │ │ │ ├── checkboxIndeterminate.svg │ │ │ │ ├── toggleOn.svg │ │ │ │ ├── toggleOff.svg │ │ │ │ └── checkbox.svg │ │ ├── components │ │ │ ├── Box │ │ │ │ └── index.ts │ │ │ ├── Chip │ │ │ │ └── index.ts │ │ │ ├── List │ │ │ │ ├── index.ts │ │ │ │ └── List.ts │ │ │ ├── Dialog │ │ │ │ └── index.ts │ │ │ ├── Drawer │ │ │ │ └── index.ts │ │ │ ├── Input │ │ │ │ └── index.ts │ │ │ ├── Notice │ │ │ │ └── index.ts │ │ │ ├── Paper │ │ │ │ └── index.ts │ │ │ ├── Radio │ │ │ │ └── index.ts │ │ │ ├── Stack │ │ │ │ └── index.ts │ │ │ ├── Toggle │ │ │ │ └── index.ts │ │ │ ├── Accordion │ │ │ │ └── index.ts │ │ │ ├── BetaChip │ │ │ │ └── index.ts │ │ │ ├── Checkbox │ │ │ │ └── index.ts │ │ │ ├── Divider │ │ │ │ └── index.ts │ │ │ ├── H1Header │ │ │ │ └── index.ts │ │ │ ├── ListItem │ │ │ │ ├── index.ts │ │ │ │ └── ListItem.ts │ │ │ ├── SvgIcon │ │ │ │ ├── index.ts │ │ │ │ └── SvgIcon.ts │ │ │ ├── TextField │ │ │ │ └── index.ts │ │ │ ├── Tooltip │ │ │ │ └── index.ts │ │ │ ├── DialogTitle │ │ │ │ └── index.ts │ │ │ ├── ErrorState │ │ │ │ └── index.ts │ │ │ ├── FormControl │ │ │ │ └── index.ts │ │ │ ├── IconButton │ │ │ │ ├── index.ts │ │ │ │ └── IconButton.tsx │ │ │ ├── InputLabel │ │ │ │ ├── index.ts │ │ │ │ └── InputLabel.tsx │ │ │ ├── RadioGroup │ │ │ │ ├── index.ts │ │ │ │ └── RadioGroup.tsx │ │ │ ├── TooltipIcon │ │ │ │ └── index.ts │ │ │ ├── Typography │ │ │ │ └── index.ts │ │ │ ├── ActionsPanel │ │ │ │ └── index.ts │ │ │ ├── CircleProgress │ │ │ │ └── index.ts │ │ │ ├── EditableText │ │ │ │ └── index.ts │ │ │ ├── FormHelperText │ │ │ │ ├── index.ts │ │ │ │ └── FormHelperText.tsx │ │ │ ├── InputAdornment │ │ │ │ └── index.ts │ │ │ ├── ListItemOption │ │ │ │ └── index.ts │ │ │ ├── NewFeatureChip │ │ │ │ └── index.ts │ │ │ ├── FormControlLabel │ │ │ │ └── index.ts │ │ │ ├── ClickAwayListener │ │ │ │ ├── index.ts │ │ │ │ └── ClickAwayListener.ts │ │ │ ├── VisibilityTooltip │ │ │ │ └── index.ts │ │ │ ├── DatePicker │ │ │ │ ├── DateRangePicker │ │ │ │ │ └── index.ts │ │ │ │ └── DateTimeRangePicker │ │ │ │ │ └── index.ts │ │ │ ├── Autocomplete │ │ │ │ └── index.ts │ │ │ └── Button │ │ │ │ └── index.ts │ │ ├── env.d.ts │ │ ├── foundations │ │ │ ├── index.ts │ │ │ ├── breakpoints.ts │ │ │ └── keyframes.ts │ │ ├── utilities │ │ │ ├── convertToKebabCase.ts │ │ │ ├── index.ts │ │ │ ├── clamp.ts │ │ │ ├── stringUtils.ts │ │ │ └── error.test.ts │ │ └── index.ts │ ├── .prettierrc │ ├── eslint.config.js │ ├── tsconfig.json │ ├── testSetup.ts │ └── vitest.config.ts ├── api-v4 │ ├── src │ │ ├── network-transfer │ │ │ ├── index.ts │ │ │ └── prices.ts │ │ ├── betas │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── locks │ │ │ └── index.ts │ │ ├── managed │ │ │ └── index.ts │ │ ├── tags │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── vlans │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── vpcs │ │ │ └── index.ts │ │ ├── databases │ │ │ └── index.ts │ │ ├── entities │ │ │ ├── index.ts │ │ │ └── types.ts │ │ ├── images │ │ │ └── index.ts │ │ ├── longview │ │ │ └── index.ts │ │ ├── quotas │ │ │ └── index.ts │ │ ├── support │ │ │ └── index.ts │ │ ├── cloudnat │ │ │ └── index.ts │ │ ├── firewalls │ │ │ └── index.ts │ │ ├── networking │ │ │ └── index.ts │ │ ├── stackscripts │ │ │ └── index.ts │ │ ├── placement-groups │ │ │ └── index.ts │ │ ├── service-transfers │ │ │ └── index.ts │ │ ├── domains │ │ │ └── index.ts │ │ ├── delivery │ │ │ └── index.ts │ │ ├── regions │ │ │ └── index.ts │ │ ├── volumes │ │ │ └── index.ts │ │ ├── kubernetes │ │ │ └── index.ts │ │ ├── iam │ │ │ └── index.ts │ │ ├── netloadbalancers │ │ │ └── index.ts │ │ ├── cloudpulse │ │ │ └── index.ts │ │ ├── nodebalancers │ │ │ └── index.ts │ │ ├── profile │ │ │ └── index.ts │ │ ├── constants.ts │ │ ├── object-storage │ │ │ ├── index.ts │ │ │ └── account.ts │ │ ├── linodes │ │ │ └── index.ts │ │ └── account │ │ │ └── index.ts │ ├── .prettierrc │ ├── vitest.config.ts │ ├── eslint.config.js │ ├── .changeset │ │ ├── pr-13171-added-1764924231615.md │ │ ├── pr-13187-upcoming-features-1765970845449.md │ │ └── pr-13193-changed-1765542569473.md │ ├── tsconfig.json │ └── tsup.config.ts ├── search │ ├── src │ │ └── vite-env.d.ts │ ├── tsconfig.json │ └── vitest.config.ts ├── shared │ ├── src │ │ ├── components │ │ │ ├── index.ts │ │ │ └── LinodeSelect │ │ │ │ └── index.ts │ │ ├── index.ts │ │ ├── hooks │ │ │ └── index.ts │ │ └── env.d.ts │ ├── .prettierrc │ ├── eslint.config.js │ ├── tsconfig.json │ └── vitest.config.ts ├── utilities │ ├── src │ │ ├── __data__ │ │ │ └── index.ts │ │ ├── helpers │ │ │ ├── userAgent.ts │ │ │ ├── redactAccessToken.ts │ │ │ ├── evenizeNumber.ts │ │ │ ├── maybeCastToNumber.ts │ │ │ ├── breakpoints.ts │ │ │ ├── pluralize.ts │ │ │ ├── formatStatus.ts │ │ │ ├── getDisplayName.ts │ │ │ ├── stripImageName.ts │ │ │ ├── capitalize.ts │ │ │ ├── nullOrUndefined.ts │ │ │ ├── tail.ts │ │ │ ├── isNilOrEmpty.ts │ │ │ ├── getUserTimezone.ts │ │ │ ├── escapeRegExp.ts │ │ │ ├── env.ts │ │ │ ├── replaceNewlinesWithLineBreaks.tsx │ │ │ ├── scrollTo.ts │ │ │ ├── getNewRegionLabel.ts │ │ │ └── isToday.ts │ │ ├── types │ │ │ ├── index.ts │ │ │ └── LinodeCreateType.ts │ │ ├── constants.ts │ │ ├── index.ts │ │ └── hooks │ │ │ ├── useFormattedDate.ts │ │ │ ├── usePrevious.ts │ │ │ └── index.ts │ ├── .prettierrc │ ├── tsconfig.json │ ├── vitest.config.ts │ ├── eslint.config.js │ └── testSetup.ts ├── validation │ ├── src │ │ ├── constants.ts │ │ ├── twofactor.schema.ts │ │ ├── transfers.schema.ts │ │ └── longview.schema.ts │ ├── .prettierrc │ ├── eslint.config.js │ ├── .changeset │ │ └── pr-13176-changed-1765202473278.md │ ├── tsconfig.json │ └── tsup.config.ts └── tsconfig │ ├── tsconfig.react.json │ ├── package.json │ └── tsconfig.package.json ├── Jenkinsfile ├── Jenkinsfile-tests.groovy ├── pnpm-workspace.yaml ├── Jenkinsfile-component-tests.groovy ├── Jenkinsfile-playwright.groovy ├── docs ├── public │ └── favicon.ico └── .vitepress │ └── tsconfig.json ├── .editorconfig ├── scripts ├── validatePackages │ ├── sdk-esm.js │ └── sdk-commonjs.cjs └── junit-summary │ ├── formatters │ └── status-formatter.ts │ └── results │ └── test-result.ts ├── vitest.config.ts └── CHANGELOG.md /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.19 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | pnpm lint-staged -------------------------------------------------------------------------------- /packages/manager/.prettierignore: -------------------------------------------------------------------------------- 1 | public/ 2 | build/ -------------------------------------------------------------------------------- /packages/manager/src/utilities/routing/matchPath.ts: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Jenkinsfile: -------------------------------------------------------------------------------- 1 | library 'ui-builder' 2 | 3 | buildManager() 4 | -------------------------------------------------------------------------------- /packages/queries/src/tags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tags'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/assets/index.ts: -------------------------------------------------------------------------------- 1 | export * from './icons'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/images/index.ts: -------------------------------------------------------------------------------- 1 | export * from './images'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/locks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './locks'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/support/index.ts: -------------------------------------------------------------------------------- 1 | export * from './support'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/vlans/index.ts: -------------------------------------------------------------------------------- 1 | export * from './vlans'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Box/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Box'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Chip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Chip'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/List/index.ts: -------------------------------------------------------------------------------- 1 | export * from './List'; 2 | -------------------------------------------------------------------------------- /Jenkinsfile-tests.groovy: -------------------------------------------------------------------------------- 1 | library 'ui-builder' 2 | 3 | testManager() 4 | -------------------------------------------------------------------------------- /packages/queries/src/cloudnats/index.ts: -------------------------------------------------------------------------------- 1 | export * from './cloudnats'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/delivery/index.ts: -------------------------------------------------------------------------------- 1 | export * from './delivery'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/firewalls/index.ts: -------------------------------------------------------------------------------- 1 | export * from './firewalls'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Dialog/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Dialog'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Drawer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Drawer'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Input/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Input'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Notice/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Notice'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Paper/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Paper'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Radio/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Radio'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Stack/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Stack'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Toggle/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Toggle'; 2 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - 'packages/*' 3 | - 'scripts' 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/network-transfer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './prices'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/OrderBy.md: -------------------------------------------------------------------------------- 1 | # Documentation coming soon... 2 | -------------------------------------------------------------------------------- /packages/search/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/shared/src/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LinodeSelect'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Accordion/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Accordion'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/BetaChip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './BetaChip'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Checkbox/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Checkbox'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Divider/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Divider'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/H1Header/index.ts: -------------------------------------------------------------------------------- 1 | export * from './H1Header'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/ListItem/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ListItem'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/SvgIcon/index.ts: -------------------------------------------------------------------------------- 1 | export * from './SvgIcon'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/TextField/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TextField'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tooltip'; 2 | -------------------------------------------------------------------------------- /packages/utilities/src/__data__/index.ts: -------------------------------------------------------------------------------- 1 | export * from './regionsData'; 2 | -------------------------------------------------------------------------------- /packages/validation/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const MAX_VOLUME_SIZE = 16384; 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/Paginated.md: -------------------------------------------------------------------------------- 1 | # Documentation coming soon... 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/DialogTitle/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DialogTitle'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/ErrorState/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ErrorState'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/FormControl/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FormControl'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/IconButton/index.ts: -------------------------------------------------------------------------------- 1 | export * from './IconButton'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/InputLabel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './InputLabel'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/RadioGroup/index.ts: -------------------------------------------------------------------------------- 1 | export * from './RadioGroup'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/TooltipIcon/index.ts: -------------------------------------------------------------------------------- 1 | export * from './TooltipIcon'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/Typography/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Typography'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/TopMenu/constants.ts: -------------------------------------------------------------------------------- 1 | export const TOPMENU_HEIGHT = 56; 2 | -------------------------------------------------------------------------------- /packages/queries/src/placementGroups/index.ts: -------------------------------------------------------------------------------- 1 | export * from './placementGroups'; 2 | -------------------------------------------------------------------------------- /packages/shared/src/components/LinodeSelect/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LinodeSelect'; 2 | -------------------------------------------------------------------------------- /packages/ui/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /packages/ui/src/components/ActionsPanel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ActionsPanel'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/CircleProgress/index.ts: -------------------------------------------------------------------------------- 1 | export * from './CircleProgress'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/EditableText/index.ts: -------------------------------------------------------------------------------- 1 | export * from './EditableText'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/FormHelperText/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FormHelperText'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/InputAdornment/index.ts: -------------------------------------------------------------------------------- 1 | export * from './InputAdornment'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/ListItemOption/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ListItemOption'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/NewFeatureChip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './NewFeatureChip'; 2 | -------------------------------------------------------------------------------- /packages/utilities/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } -------------------------------------------------------------------------------- /Jenkinsfile-component-tests.groovy: -------------------------------------------------------------------------------- 1 | library 'ui-builder' 2 | 3 | testManagerComponents() 4 | -------------------------------------------------------------------------------- /Jenkinsfile-playwright.groovy: -------------------------------------------------------------------------------- 1 | library 'cloud-manager-ui-tests' 2 | 3 | runTestsRelease() 4 | -------------------------------------------------------------------------------- /packages/api-v4/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /packages/manager/src/components/Currency/index.ts: -------------------------------------------------------------------------------- 1 | export { Currency } from './Currency'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/DocumentTitle/index.tsx: -------------------------------------------------------------------------------- 1 | export * from './DocumentTitle'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/Tabs/TabPanel.ts: -------------------------------------------------------------------------------- 1 | export { TabPanel } from '@reach/tabs'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/constants.ts: -------------------------------------------------------------------------------- 1 | export const SIZE_FIELD_WIDTH = 160; 2 | -------------------------------------------------------------------------------- /packages/queries/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /packages/queries/src/betas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './betas'; 2 | export * from './keys'; 3 | -------------------------------------------------------------------------------- /packages/shared/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /packages/ui/src/components/FormControlLabel/index.ts: -------------------------------------------------------------------------------- 1 | export * from './FormControlLabel'; 2 | -------------------------------------------------------------------------------- /packages/validation/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/docs/public/favicon.ico -------------------------------------------------------------------------------- /packages/api-v4/src/betas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './betas'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/locks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './locks'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/managed/index.ts: -------------------------------------------------------------------------------- 1 | export * from './managed'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/api-v4/src/tags/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tags'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/vlans/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | 3 | export * from './vlans'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/vpcs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './types'; 2 | 3 | export * from './vpcs'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/components/Tabs/TabPanels.ts: -------------------------------------------------------------------------------- 1 | export { TabPanels } from '@reach/tabs'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Backups/index.tsx: -------------------------------------------------------------------------------- 1 | export { BackupDrawer } from './BackupDrawer'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/TopMenu/UserMenu/index.ts: -------------------------------------------------------------------------------- 1 | export { UserMenu } from './UserMenu'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/vpcs/index.ts: -------------------------------------------------------------------------------- 1 | export * from './requests'; 2 | export * from './vpcs'; 3 | -------------------------------------------------------------------------------- /packages/shared/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './components'; 2 | 3 | export * from './hooks'; 4 | -------------------------------------------------------------------------------- /packages/ui/src/components/ClickAwayListener/index.ts: -------------------------------------------------------------------------------- 1 | export * from './ClickAwayListener'; 2 | -------------------------------------------------------------------------------- /packages/ui/src/components/VisibilityTooltip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './VisibilityTooltip'; 2 | -------------------------------------------------------------------------------- /packages/api-v4/src/databases/index.ts: -------------------------------------------------------------------------------- 1 | export * from './databases'; 2 | export * from './types'; 3 | -------------------------------------------------------------------------------- /packages/api-v4/src/entities/index.ts: -------------------------------------------------------------------------------- 1 | export * from './entities'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/images/index.ts: -------------------------------------------------------------------------------- 1 | export * from './images'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/longview/index.ts: -------------------------------------------------------------------------------- 1 | export * from './longview'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/quotas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './quotas'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/support/index.ts: -------------------------------------------------------------------------------- 1 | export * from './support'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/components/SupportLink/index.tsx: -------------------------------------------------------------------------------- 1 | export { SupportLink } from './SupportLink'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/TextTooltip/index.ts: -------------------------------------------------------------------------------- 1 | export { TextTooltip } from './TextTooltip'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/regions/index.ts: -------------------------------------------------------------------------------- 1 | export * from './regions'; 2 | export * from './requests'; 3 | -------------------------------------------------------------------------------- /packages/queries/src/volumes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './requests'; 2 | export * from './volumes'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/components/DatePicker/DateRangePicker/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DateRangePicker'; 2 | -------------------------------------------------------------------------------- /packages/api-v4/src/cloudnat/index.ts: -------------------------------------------------------------------------------- 1 | export * from './cloudnats'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/firewalls/index.ts: -------------------------------------------------------------------------------- 1 | export * from './firewalls'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/networking/index.ts: -------------------------------------------------------------------------------- 1 | export * from './networking'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/queries/src/networking/index.ts: -------------------------------------------------------------------------------- 1 | export * from './networking'; 2 | export * from './requests'; 3 | -------------------------------------------------------------------------------- /packages/queries/src/nodebalancers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './keys'; 2 | export * from './nodebalancers'; 3 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/userAgent.ts: -------------------------------------------------------------------------------- 1 | export const isOSMac = navigator.userAgent.includes('Mac'); 2 | -------------------------------------------------------------------------------- /packages/api-v4/src/stackscripts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './stackscripts'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/components/AbuseTicketBanner/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './AbuseTicketBanner'; 2 | -------------------------------------------------------------------------------- /packages/search/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@linode/tsconfig/package"], 3 | "include": ["src"] 4 | } 5 | -------------------------------------------------------------------------------- /packages/ui/src/components/DatePicker/DateTimeRangePicker/index.ts: -------------------------------------------------------------------------------- 1 | export * from './DateTimeRangePicker'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Kubernetes/KubeCheckoutBar/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './KubeCheckoutBar'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/networktransfer/index.ts: -------------------------------------------------------------------------------- 1 | export * from './networkTransfer'; 2 | export * from './requests'; 3 | -------------------------------------------------------------------------------- /packages/queries/src/servicetransfers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './requests'; 2 | export * from './serviceTransfers'; 3 | -------------------------------------------------------------------------------- /packages/api-v4/src/placement-groups/index.ts: -------------------------------------------------------------------------------- 1 | export * from './placement-groups'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/service-transfers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './service-transfers'; 2 | 3 | export * from './types'; 4 | -------------------------------------------------------------------------------- /packages/manager/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/favicon.ico -------------------------------------------------------------------------------- /packages/manager/src/components/ShowMoreExpansion/index.ts: -------------------------------------------------------------------------------- 1 | export { ShowMoreExpansion } from './ShowMoreExpansion'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/ManagedDashboardCard/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './ManagedDashboardCard'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/iam/index.ts: -------------------------------------------------------------------------------- 1 | export * from './delegation'; 2 | export * from './iam'; 3 | export * from './keys'; 4 | -------------------------------------------------------------------------------- /packages/utilities/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './LinodeCreateType'; 2 | export * from './ManagerPreferences'; 3 | -------------------------------------------------------------------------------- /packages/manager/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "trailingComma": "es5", 4 | "arrowParens": "always" 5 | } 6 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/util/cypress-mochawesome-reporter.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'cypress-mochawesome-reporter/lib'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingPanels/BillingSummary/index.tsx: -------------------------------------------------------------------------------- 1 | export { default } from './BillingSummary'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/domains/index.ts: -------------------------------------------------------------------------------- 1 | export * from './domains'; 2 | export * from './keys'; 3 | export * from './requests'; 4 | -------------------------------------------------------------------------------- /packages/queries/src/quotas/index.ts: -------------------------------------------------------------------------------- 1 | export * from './keys'; 2 | export * from './quotas'; 3 | export * from './requests'; 4 | -------------------------------------------------------------------------------- /packages/search/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({}); 4 | -------------------------------------------------------------------------------- /packages/shared/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useIsGeckoEnabled'; 2 | export * from './useIsLinodeAclpSubscribed'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/components/Autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Autocomplete'; 2 | export * from './Autocomplete.styles'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/env.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const src: ComponentClass; 3 | export default src; 4 | } 5 | -------------------------------------------------------------------------------- /docs/.vitepress/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "lib": ["ESNext"], 4 | "module": "ESNext", 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /packages/manager/src/components/Table/index.ts: -------------------------------------------------------------------------------- 1 | export { Table } from './Table'; 2 | export type { TableProps } from './Table'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingPanels/PaymentInfoPanel/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './PaymentInformation'; 2 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/SSHAccess/common.ts: -------------------------------------------------------------------------------- 1 | export const DEFAULTS = { 2 | port: 22, 3 | user: 'root', 4 | }; 5 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/__mocks__/getUserTimezone.ts: -------------------------------------------------------------------------------- 1 | export const getUserTimezone = () => { 2 | return 'utc'; 3 | }; 4 | -------------------------------------------------------------------------------- /packages/queries/src/databases/index.ts: -------------------------------------------------------------------------------- 1 | export * from './databases'; 2 | export * from './keys'; 3 | export * from './requests'; 4 | -------------------------------------------------------------------------------- /packages/shared/src/env.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.svg' { 2 | const src: ComponentClass; 3 | export default src; 4 | } 5 | -------------------------------------------------------------------------------- /packages/api-v4/src/domains/index.ts: -------------------------------------------------------------------------------- 1 | export * from './domains'; 2 | 3 | export * from './records'; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './PaymentDrawer'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/stackscripts/index.ts: -------------------------------------------------------------------------------- 1 | export * from './keys'; 2 | export * from './requests'; 3 | export * from './stackscripts'; 4 | -------------------------------------------------------------------------------- /packages/ui/src/foundations/index.ts: -------------------------------------------------------------------------------- 1 | export * from './breakpoints'; 2 | export * from './keyframes'; 3 | export * from './themes'; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/delivery/index.ts: -------------------------------------------------------------------------------- 1 | export * from './destinations'; 2 | 3 | export * from './streams'; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/api-v4/src/regions/index.ts: -------------------------------------------------------------------------------- 1 | export * from './constants'; 2 | 3 | export * from './regions'; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/api-v4/src/volumes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './migrations'; 2 | 3 | export * from './types'; 4 | 5 | export * from './volumes'; 6 | -------------------------------------------------------------------------------- /packages/manager/src/components/DebouncedSearchTextField/index.tsx: -------------------------------------------------------------------------------- 1 | export { DebouncedSearchTextField } from './DebouncedSearchTextField'; 2 | -------------------------------------------------------------------------------- /packages/api-v4/src/kubernetes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './kubernetes'; 2 | 3 | export * from './nodePools'; 4 | 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/FiraCode.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/FiraCode.ttf -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/FiraCode.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/FiraCode.woff -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Bold.eot -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /packages/manager/src/components/NullComponent.tsx: -------------------------------------------------------------------------------- 1 | const NullComponent = () => { 2 | return null; 3 | }; 4 | 5 | export default NullComponent; 6 | -------------------------------------------------------------------------------- /packages/manager/src/components/TableRow/index.ts: -------------------------------------------------------------------------------- 1 | export { TableRow } from './TableRow'; 2 | export type { TableRowProps } from './TableRow'; 3 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/object-storage-files/1.txt: -------------------------------------------------------------------------------- 1 | This is a text file. 2 | 3 | It contains text. 4 | 5 | Let's upload it somewhere cool! 6 | -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Bold.woff -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Bold.woff2 -------------------------------------------------------------------------------- /packages/manager/src/components/TableCell/index.ts: -------------------------------------------------------------------------------- 1 | export { TableCell } from './TableCell'; 2 | export type { TableCellProps } from './TableCell'; 3 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/test_screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/cypress/fixtures/test_screenshot.png -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Regular.eot -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Regular.woff -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Regular.woff2 -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Semibold.eot -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Semibold.ttf -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Semibold.woff -------------------------------------------------------------------------------- /packages/manager/src/components/BarPercent/index.ts: -------------------------------------------------------------------------------- 1 | export { BarPercent } from './BarPercent'; 2 | export type { BarPercentProps } from './BarPercent'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/Menu.ts: -------------------------------------------------------------------------------- 1 | export { default as Menu } from '@mui/material/Menu'; 2 | export type { MenuProps } from '@mui/material/Menu'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/store/globalErrors/index.ts: -------------------------------------------------------------------------------- 1 | export { default, defaultState } from './globalErrors.reducer'; 2 | export type { State } from './types'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/components/List/List.ts: -------------------------------------------------------------------------------- 1 | export type { ListProps } from '@mui/material/List'; 2 | export { default as List } from '@mui/material/List'; 3 | -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/Lato-Semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/Lato-Semibold.woff2 -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/DetailTabs/Processes/types.ts: -------------------------------------------------------------------------------- 1 | export interface Process { 2 | name: string; 3 | user: string; 4 | } 5 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/Contacts/common.ts: -------------------------------------------------------------------------------- 1 | export interface ManagedContactGroup { 2 | contactNames: string[]; 3 | groupName: string; 4 | } 5 | -------------------------------------------------------------------------------- /packages/api-v4/src/iam/index.ts: -------------------------------------------------------------------------------- 1 | export * from './delegation'; 2 | export * from './delegation.types'; 3 | 4 | export * from './iam'; 5 | export * from './types'; 6 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/api/account.ts: -------------------------------------------------------------------------------- 1 | import { getAll } from './common'; 2 | 3 | export const getProfile = () => { 4 | return getAll('profile'); 5 | }; 6 | -------------------------------------------------------------------------------- /packages/manager/public/assets/marketplace-background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/assets/marketplace-background.png -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/UbuntuMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/UbuntuMono-Regular.ttf -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/UbuntuMono-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/UbuntuMono-Regular.woff -------------------------------------------------------------------------------- /packages/manager/src/components/AppBar.ts: -------------------------------------------------------------------------------- 1 | export { default as AppBar } from '@mui/material/AppBar'; 2 | export type { AppBarProps } from '@mui/material/AppBar'; 3 | -------------------------------------------------------------------------------- /packages/utilities/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@linode/tsconfig/package", 4 | "@linode/tsconfig/react" 5 | ], 6 | "include": ["src"] 7 | } 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/object-storage-files/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/cypress/fixtures/object-storage-files/2.jpg -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/object-storage-files/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/cypress/fixtures/object-storage-files/3.jpg -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/object-storage-files/4.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/cypress/fixtures/object-storage-files/4.zip -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/UbuntuMono-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/UbuntuMono-Regular.woff2 -------------------------------------------------------------------------------- /packages/manager/src/components/LandingHeader/index.tsx: -------------------------------------------------------------------------------- 1 | export type { LandingHeaderProps } from './LandingHeader'; 2 | export { LandingHeader } from './LandingHeader'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/SvgIcon.ts: -------------------------------------------------------------------------------- 1 | export { default as SvgIcon } from '@mui/material/SvgIcon'; 2 | export type { SvgIconProps } from '@mui/material/SvgIcon'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/TableSortCell/index.ts: -------------------------------------------------------------------------------- 1 | export { TableSortCell } from './TableSortCell'; 2 | export type { TableSortCellProps } from './TableSortCell'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/Toolbar.ts: -------------------------------------------------------------------------------- 1 | export { default as Toolbar } from '@mui/material/Toolbar'; 2 | export type { ToolbarProps } from '@mui/material/Toolbar'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseSettings/index.ts: -------------------------------------------------------------------------------- 1 | import DatabaseSettings from './DatabaseSettings'; 2 | export default DatabaseSettings; 3 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/escapeStringForCLI.ts: -------------------------------------------------------------------------------- 1 | export const escapeStringForCLI = (value: string) => { 2 | return value.replace(/(["'$`\\])/g, '\\$1'); 3 | }; 4 | -------------------------------------------------------------------------------- /packages/ui/src/components/SvgIcon/SvgIcon.ts: -------------------------------------------------------------------------------- 1 | export { default as SvgIcon } from '@mui/material/SvgIcon'; 2 | export type { SvgIconProps } from '@mui/material/SvgIcon'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/convertToKebabCase.ts: -------------------------------------------------------------------------------- 1 | export const convertToKebabCase = (string: string) => { 2 | return string.replace(/\s+/g, '-').toLowerCase(); 3 | }; 4 | -------------------------------------------------------------------------------- /packages/api-v4/src/netloadbalancers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './listeners'; 2 | export * from './netloadbalancers'; 3 | export * from './nodes'; 4 | export * from './types'; 5 | -------------------------------------------------------------------------------- /packages/api-v4/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | globals: true, 6 | }, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/machine-images/test-image.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/cypress/fixtures/machine-images/test-image.gz -------------------------------------------------------------------------------- /packages/manager/src/components/MenuItem.ts: -------------------------------------------------------------------------------- 1 | export type { MenuItemProps } from '@mui/material/MenuItem'; 2 | export { default as MenuItem } from '@mui/material/MenuItem'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/MenuList.ts: -------------------------------------------------------------------------------- 1 | export type { MenuListProps } from '@mui/material/MenuList'; 2 | export { default as MenuList } from '@mui/material/MenuList'; 3 | -------------------------------------------------------------------------------- /packages/queries/src/profile/index.ts: -------------------------------------------------------------------------------- 1 | export * from './preferences'; 2 | export * from './profile'; 3 | export * from './securityQuestions'; 4 | export * from './tokens'; 5 | -------------------------------------------------------------------------------- /packages/ui/src/components/ListItem/ListItem.ts: -------------------------------------------------------------------------------- 1 | export type { ListItemProps } from '@mui/material/ListItem'; 2 | export { default as ListItem } from '@mui/material/ListItem'; 3 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/index.ts: -------------------------------------------------------------------------------- 1 | export * from './clamp'; 2 | export * from './convertToKebabCase'; 3 | export * from './omittedProps'; 4 | export * from './stringUtils'; 5 | -------------------------------------------------------------------------------- /packages/api-v4/src/cloudpulse/index.ts: -------------------------------------------------------------------------------- 1 | export * from './alerts'; 2 | 3 | export * from './dashboards'; 4 | 5 | export * from './services'; 6 | 7 | export * from './types'; 8 | -------------------------------------------------------------------------------- /packages/api-v4/src/tags/types.ts: -------------------------------------------------------------------------------- 1 | export interface Tag { 2 | label: string; 3 | } 4 | 5 | export interface TagRequest { 6 | label: string; 7 | linodes?: number[]; 8 | } 9 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/stackscripts/stackscript-basic.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a basic valid StackScript to test StackScript creation. 3 | 4 | echo "Hello, world!" 5 | -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf.woff -------------------------------------------------------------------------------- /packages/manager/src/components/DateTimeDisplay/index.ts: -------------------------------------------------------------------------------- 1 | export type { DateTimeDisplayProps } from './DateTimeDisplay'; 2 | export { DateTimeDisplay } from './DateTimeDisplay'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/DisplayPrice/index.tsx: -------------------------------------------------------------------------------- 1 | export { DisplayPrice, displayPrice } from './DisplayPrice'; 2 | export type { DisplayPriceProps } from './DisplayPrice'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/TableBody.tsx: -------------------------------------------------------------------------------- 1 | export { default as TableBody } from '@mui/material/TableBody'; 2 | export type { TableBodyProps } from '@mui/material/TableBody'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/components/TableHead.tsx: -------------------------------------------------------------------------------- 1 | export { default as TableHead } from '@mui/material/TableHead'; 2 | export type { TableHeadProps } from '@mui/material/TableHead'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/PdfGenerator/LinodeLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/src/features/Billing/PdfGenerator/LinodeLogo.png -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/PdfGenerator/akamai-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/src/features/Billing/PdfGenerator/akamai-logo.png -------------------------------------------------------------------------------- /packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/linode/manager/HEAD/packages/manager/public/fonts/fonts/SourceCodePro-Regular.ttf.woff2 -------------------------------------------------------------------------------- /packages/manager/src/store/globalErrors/types.ts: -------------------------------------------------------------------------------- 1 | interface S { 2 | account_unactivated: boolean; 3 | api_maintenance_mode: boolean; 4 | } 5 | 6 | export type State = Partial; 7 | -------------------------------------------------------------------------------- /packages/ui/src/components/Button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button'; 2 | export * from './LinkButton'; 3 | export * from './StyledActionButton'; 4 | export * from './StyledTagButton'; 5 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/redactAccessToken.ts: -------------------------------------------------------------------------------- 1 | export const redactAccessToken = (s: string) => { 2 | return s.replace(/access_token=[^&]+/g, 'access_token=REDACTED'); 3 | }; 4 | -------------------------------------------------------------------------------- /packages/manager/cypress/e2e/synthetic/hello-world.spec.ts: -------------------------------------------------------------------------------- 1 | describe('Synthetic monitoring tests placeholder', () => { 2 | it('can run synthetic monitoring test suite', () => {}); 3 | }); 4 | -------------------------------------------------------------------------------- /packages/manager/src/components/PaginationFooter/PaginationFooter.constants.ts: -------------------------------------------------------------------------------- 1 | export const MIN_PAGE_SIZE = 25; 2 | 3 | export const PAGE_SIZES = [MIN_PAGE_SIZE, 50, 75, 100, Infinity]; 4 | -------------------------------------------------------------------------------- /packages/ui/src/components/IconButton/IconButton.tsx: -------------------------------------------------------------------------------- 1 | export type { IconButtonProps } from '@mui/material/IconButton'; 2 | export { default as IconButton } from '@mui/material/IconButton'; 3 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13120-tests-1763655928886.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Tests 3 | --- 4 | 5 | Proactive IAM e2e gating ([#13120](https://github.com/linode/manager/pull/13120)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/components/ListItemText.ts: -------------------------------------------------------------------------------- 1 | export type { ListItemTextProps } from '@mui/material/ListItemText'; 2 | export { default as ListItemText } from '@mui/material/ListItemText'; 3 | -------------------------------------------------------------------------------- /packages/tsconfig/tsconfig.react.json: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | * This tsconfig should be used when a package needs React / JSX. 4 | */ 5 | "compilerOptions": { 6 | "jsx": "react" 7 | } 8 | } -------------------------------------------------------------------------------- /packages/ui/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './assets'; 2 | export * from './components'; 3 | export * from './foundations'; 4 | export * from './utilities'; 5 | export * from '@mui/material/styles'; 6 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/evenizeNumber.ts: -------------------------------------------------------------------------------- 1 | export const evenizeNumber = (n: number): number => { 2 | if (n === 0) { 3 | return n; 4 | } 5 | return n % 2 === 0 ? n : n - 1; 6 | }; 7 | -------------------------------------------------------------------------------- /packages/utilities/src/types/LinodeCreateType.ts: -------------------------------------------------------------------------------- 1 | export type LinodeCreateType = 2 | | 'Backups' 3 | | 'Clone Linode' 4 | | 'Images' 5 | | 'One-Click' 6 | | 'OS' 7 | | 'StackScripts'; 8 | -------------------------------------------------------------------------------- /packages/queries/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@linode/tsconfig/package", 4 | "@linode/tsconfig/react", 5 | "@linode/tsconfig/non-strict" 6 | ], 7 | "include": ["src"] 8 | } 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | -------------------------------------------------------------------------------- /packages/api-v4/src/betas/types.ts: -------------------------------------------------------------------------------- 1 | export interface Beta { 2 | description?: string; 3 | ended?: string; 4 | id: string; 5 | label: string; 6 | more_info?: string; 7 | started: string; 8 | } 9 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13176-tests-1765218851864.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Tests 3 | --- 4 | 5 | Mock Destination data update values ([#13176](https://github.com/linode/manager/pull/13176)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13186-fixed-1765370117878.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | Typo in NodeBalancer Settings tooltip ([#13186](https://github.com/linode/manager/pull/13186)) 6 | -------------------------------------------------------------------------------- /packages/manager/.storybook/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite'; 2 | import react from '@vitejs/plugin-react-swc'; 3 | 4 | export default defineConfig({ 5 | plugins: [react()], 6 | }); 7 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/AuthenticationSettings/SecurityQuestions/types.ts: -------------------------------------------------------------------------------- 1 | // import { SecurityQuestions, AnsweredSecurityQuestions, NullSecurityQuestions } from '@linode/api-v4/lib/profile'; 2 | -------------------------------------------------------------------------------- /packages/queries/src/netloadbalancers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './keys'; 2 | export * from './listeners'; 3 | export * from './netloadbalancers'; 4 | export * from './nodes'; 5 | export * from './requests'; 6 | -------------------------------------------------------------------------------- /packages/validation/src/twofactor.schema.ts: -------------------------------------------------------------------------------- 1 | import { object, string } from 'yup'; 2 | 3 | export const enableTwoFactorSchema = object({ 4 | tfa_code: string().required('Please enter a token.'), 5 | }); 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13185-tests-1765297901858.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Tests 3 | --- 4 | 5 | Temporarily disable DBaaS update tests ([#13185](https://github.com/linode/manager/pull/13185)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/components/PrimaryNav/constants.ts: -------------------------------------------------------------------------------- 1 | export const SIDEBAR_WIDTH = 232; 2 | export const SIDEBAR_COLLAPSED_WIDTH = 49; // 48px + 1px border 3 | export const PRIMARY_NAV_TOGGLE_HEIGHT = 46; 4 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/isPast.ts: -------------------------------------------------------------------------------- 1 | import { parseAPIDate } from './date'; 2 | 3 | export const isPast = 4 | (a: string) => 5 | (b: string): boolean => 6 | parseAPIDate(b) >= parseAPIDate(a); 7 | -------------------------------------------------------------------------------- /packages/api-v4/src/nodebalancers/index.ts: -------------------------------------------------------------------------------- 1 | export * from './nodebalancer-config-nodes'; 2 | 3 | export * from './nodebalancer-configs'; 4 | 5 | export * from './nodebalancers'; 6 | 7 | export * from './types'; 8 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13149-added-1765469597776.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Added 3 | --- 4 | 5 | Elastic Stack and Weaviate to Marketplace Apps ([#13149](https://github.com/linode/manager/pull/13149)) 6 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } -------------------------------------------------------------------------------- /packages/manager/src/routes/volumes/constants.ts: -------------------------------------------------------------------------------- 1 | export const VOLUME_TABLE_DEFAULT_ORDER = 'asc'; 2 | export const VOLUME_TABLE_DEFAULT_ORDER_BY = 'label'; 3 | export const VOLUME_TABLE_PREFERENCE_KEY = 'volumes'; 4 | -------------------------------------------------------------------------------- /packages/utilities/src/constants.ts: -------------------------------------------------------------------------------- 1 | // Maximum page size allowed by the API. Used in the `getAll()` helper function 2 | // to request as many items at once as possible. 3 | export const API_MAX_PAGE_SIZE = 500; 4 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/maybeCastToNumber.ts: -------------------------------------------------------------------------------- 1 | import { isNilOrEmpty } from './isNilOrEmpty'; 2 | 3 | export const maybeCastToNumber = (v: number | string) => 4 | isNilOrEmpty(v) ? undefined : Number(v); 5 | -------------------------------------------------------------------------------- /packages/api-v4/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13189-changed-1765378735594.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Changed 3 | --- 4 | 5 | IAM: Enable account_viewer to access users table ([#13189](https://github.com/linode/manager/pull/13189)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13192-tests-1765463156655.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Tests 3 | --- 4 | 5 | Fix e2e tests impacted by Generational Plans release ([#13192](https://github.com/linode/manager/pull/13192)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/components/TableFooter.tsx: -------------------------------------------------------------------------------- 1 | import _TableFooter from '@mui/material/TableFooter'; 2 | export const TableFooter = _TableFooter; 3 | export type { TableFooterProps } from '@mui/material/TableFooter'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/Domains/constants.ts: -------------------------------------------------------------------------------- 1 | export const DOMAINS_TABLE_DEFAULT_ORDER = 'asc'; 2 | export const DOMAINS_TABLE_DEFAULT_ORDER_BY = 'domain'; 3 | export const DOMAINS_TABLE_PREFERENCE_KEY = 'domains'; 4 | -------------------------------------------------------------------------------- /packages/queries/.changeset/pr-13189-changed-1765378759554.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/queries": Changed 3 | --- 4 | 5 | IAM: Enable account_viewer to access users table ([#13189](https://github.com/linode/manager/pull/13189)) 6 | -------------------------------------------------------------------------------- /packages/shared/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/utilities/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | environment: 'jsdom', 6 | setupFiles: './testSetup.ts', 7 | }, 8 | }); 9 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13190-fixed-1765447529132.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | Ensure browser history integrity when redirecting in IAM ([#13190](https://github.com/linode/manager/pull/13190)) 6 | -------------------------------------------------------------------------------- /packages/queries/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/utilities/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/validation/eslint.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'eslint/config'; 2 | 3 | import { baseConfig } from '../manager/eslint.config.js'; 4 | 5 | export default defineConfig({ 6 | extends: baseConfig, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/validation/src/transfers.schema.ts: -------------------------------------------------------------------------------- 1 | import { array, number, object } from 'yup'; 2 | 3 | export const CreateTransferSchema = object({ 4 | entities: object({ 5 | linodes: array().of(number()), 6 | }), 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/stackscripts/stackscript-no-shebang.sh: -------------------------------------------------------------------------------- 1 | # This is a StackScript that does not include a shebang. 2 | # This is used to test StackScript validation/error messages. 3 | 4 | echo "Hello, world!" 5 | -------------------------------------------------------------------------------- /packages/ui/src/components/ClickAwayListener/ClickAwayListener.ts: -------------------------------------------------------------------------------- 1 | export type { ClickAwayListenerProps } from '@mui/material/ClickAwayListener'; 2 | export { default as ClickAwayListener } from '@mui/material/ClickAwayListener'; 3 | -------------------------------------------------------------------------------- /packages/manager/src/factories/userEntityPermissions.ts: -------------------------------------------------------------------------------- 1 | import type { PermissionType } from '@linode/api-v4'; 2 | 3 | export const userEntityPermissionsFactory: PermissionType[] = [ 4 | 'reboot_linode', 5 | 'view_linode', 6 | ]; 7 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingPanels/ContactInfoPanel/UpdateContactInformationForm/index.ts: -------------------------------------------------------------------------------- 1 | import UpdateContactInformationForm from './UpdateContactInformationForm'; 2 | export default UpdateContactInformationForm; 3 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Streams/constants.ts: -------------------------------------------------------------------------------- 1 | export const STREAMS_TABLE_DEFAULT_ORDER = 'desc'; 2 | export const STREAMS_TABLE_DEFAULT_ORDER_BY = 'updated'; 3 | export const STREAMS_TABLE_PREFERENCE_KEY = 'streams'; 4 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/breakpoints.ts: -------------------------------------------------------------------------------- 1 | const windowIsNarrowerThan = (breakpoint: number): boolean => { 2 | return window.matchMedia(`(max-width: ${breakpoint}px)`).matches; 3 | }; 4 | 5 | export default windowIsNarrowerThan; 6 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/pluralize.ts: -------------------------------------------------------------------------------- 1 | export const pluralize = ( 2 | single: string, 3 | plural: string, 4 | value: number | string, 5 | ) => { 6 | return value === 1 ? `${value} ${single}` : `${value} ${plural}`; 7 | }; 8 | -------------------------------------------------------------------------------- /packages/api-v4/.changeset/pr-13171-added-1764924231615.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/api-v4": Added 3 | --- 4 | 5 | `Akamai Cloud Pulse Logs LKE-E Audit ` to the `AccountCapability` type ([#13171](https://github.com/linode/manager/pull/13171)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13170-fixed-1764918493011.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | Show edit RDNS button for VPC NAT IPv4 address row in linode network tab ([#13170](https://github.com/linode/manager/pull/13170)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13200-changed-1765812688683.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Changed 3 | --- 4 | 5 | IAM: allow users with account_viewer role to see the roles table ([#13200](https://github.com/linode/manager/pull/13200)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/factories/userAccountPermissions.ts: -------------------------------------------------------------------------------- 1 | import type { PermissionType } from '@linode/api-v4'; 2 | 3 | export const userAccountPermissionsFactory: PermissionType[] = [ 4 | 'create_linode', 5 | 'create_firewall', 6 | ]; 7 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/testServer.ts: -------------------------------------------------------------------------------- 1 | import { setupServer } from 'msw/node'; 2 | 3 | import { handlers } from './serverHandlers'; 4 | 5 | export const server = setupServer(...handlers); 6 | export { http, HttpResponse } from 'msw'; 7 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/formatStatus.ts: -------------------------------------------------------------------------------- 1 | import { capitalizeAllWords } from './capitalize'; 2 | 3 | export const getFormattedStatus = (status: string): string => { 4 | return capitalizeAllWords(status.replace(/_/g, ' ')); 5 | }; 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13201-fixed-1765798247833.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | IAM: Remove Role filter (already assigned roles) in ChangeRoleForEntityDrawer ([#13201](https://github.com/linode/manager/pull/13201)) 6 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/getDisplayName.ts: -------------------------------------------------------------------------------- 1 | import type * as React from 'react'; 2 | 3 | export const getDisplayName =

(Component: React.ComponentType

) => { 4 | return Component.displayName || Component.name || 'Component'; 5 | }; 6 | -------------------------------------------------------------------------------- /packages/validation/.changeset/pr-13176-changed-1765202473278.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/validation": Changed 3 | --- 4 | 5 | Logs Destination Form - add matching host and bucket name validation ([#13176](https://github.com/linode/manager/pull/13176)) 6 | -------------------------------------------------------------------------------- /packages/api-v4/src/vlans/types.ts: -------------------------------------------------------------------------------- 1 | export interface VLAN { 2 | cidr_block: string; 3 | created: string; 4 | id: number; 5 | label: string; 6 | linodes: { id: number; ipv4_address: string; mac_address: string }[]; 7 | region: string; 8 | } 9 | -------------------------------------------------------------------------------- /packages/api-v4/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@linode/tsconfig/package", "@linode/tsconfig/emit-types"], 3 | "compilerOptions": { 4 | "outDir": "./lib", 5 | "baseUrl": ".", 6 | }, 7 | "include": [ 8 | "src" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13194-fixed-1765470340634.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | IAM: Enable account_viewer to access IAM User Details, User Roles and User Entities ([#13194](https://github.com/linode/manager/pull/13194)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/features/StackScripts/types.ts: -------------------------------------------------------------------------------- 1 | import type { ResourcePage, StackScript } from '@linode/api-v4'; 2 | 3 | export type StackScriptsRequest = ( 4 | params?: unknown, 5 | filter?: unknown 6 | ) => Promise>; 7 | -------------------------------------------------------------------------------- /packages/manager/src/queries/managed/types.ts: -------------------------------------------------------------------------------- 1 | import type { ManagedIssue } from '@linode/api-v4/lib/managed/types'; 2 | 3 | export interface ExtendedIssue extends ManagedIssue { 4 | dateClosed?: string; 5 | status?: 'closed' | 'new' | 'open'; 6 | } 7 | -------------------------------------------------------------------------------- /packages/ui/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@linode/tsconfig/package", 4 | "@linode/tsconfig/react", 5 | ], 6 | "compilerOptions": { 7 | "types": ["@testing-library/jest-dom"] 8 | }, 9 | "include": ["src"], 10 | } 11 | -------------------------------------------------------------------------------- /packages/utilities/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './__data__'; 2 | 3 | export * from './constants'; 4 | 5 | export * from './factories'; 6 | 7 | export * from './helpers'; 8 | 9 | export * from './hooks'; 10 | 11 | export * from './types'; 12 | -------------------------------------------------------------------------------- /packages/api-v4/.changeset/pr-13187-upcoming-features-1765970845449.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/api-v4": Upcoming Features 3 | --- 4 | 5 | Add new API endpoints and types for Resource Locking feature(RESPROT2) ([#13187](https://github.com/linode/manager/pull/13187)) 6 | -------------------------------------------------------------------------------- /packages/api-v4/.changeset/pr-13193-changed-1765542569473.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/api-v4": Changed 3 | --- 4 | 5 | Renamed updated_at, created_at to updated,created in NotificationChannelBase interface ([#13193](https://github.com/linode/manager/pull/13193)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13188-upcoming-features-1765378307536.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Upcoming Features 3 | --- 4 | 5 | UI/UX enhancements and fixes for Rule Sets & Prefix Lists (part-2) ([#13188](https://github.com/linode/manager/pull/13188)) 6 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/login.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Constants related to Cloud Manager login/logout flows. 3 | */ 4 | 5 | /** 6 | * Login base URL for Cloud Manager. 7 | */ 8 | export const loginBaseUrl = Cypress.env('REACT_APP_LOGIN_ROOT'); 9 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/divider-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Destinations/constants.ts: -------------------------------------------------------------------------------- 1 | export const DESTINATIONS_TABLE_DEFAULT_ORDER = 'desc'; 2 | export const DESTINATIONS_TABLE_DEFAULT_ORDER_BY = 'created'; 3 | export const DESTINATIONS_TABLE_PREFERENCE_KEY = 'destinations'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/filterCurrentLinodeTypes.ts: -------------------------------------------------------------------------------- 1 | import type { ExtendedType } from './extendType'; 2 | 3 | export const filterCurrentTypes = (types: ExtendedType[] = []) => { 4 | return types.filter((thisType) => !thisType.isDeprecated); 5 | }; 6 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/radioRadioed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/validation/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@linode/tsconfig/package", "@linode/tsconfig/emit-types"], 3 | "compilerOptions": { 4 | "outDir": "./lib", 5 | "baseUrl": ".", 6 | }, 7 | "include": [ 8 | "src" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /packages/api-v4/src/profile/index.ts: -------------------------------------------------------------------------------- 1 | export * from './accessTokens'; 2 | 3 | export * from './appTokens'; 4 | 5 | export * from './profile'; 6 | 7 | export * from './sshkeys'; 8 | 9 | export * from './twofactor'; 10 | 11 | export * from './types'; 12 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/user.ts: -------------------------------------------------------------------------------- 1 | /** Notice shown to users not setting up security questions. */ 2 | export const verificationBannerNotice = 3 | 'Add verification details to enhance account security and ensure prompt assistance when needed.'; 4 | -------------------------------------------------------------------------------- /packages/manager/src/factories/tags.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from '@linode/utilities'; 2 | 3 | import type { Tag } from '@linode/api-v4'; 4 | 5 | export const tagFactory = Factory.Sync.makeFactory({ 6 | label: Factory.each((id) => `tag-${id + 1}`), 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/plugins/plugin.ts: -------------------------------------------------------------------------------- 1 | export type CypressPlugin = ( 2 | on: Cypress.PluginEvents, 3 | config: Cypress.PluginConfigOptions 4 | ) => 5 | | Cypress.PluginConfigOptions 6 | | Promise 7 | | void; 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Lish/lishLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Lish } from './Lish'; 4 | 5 | export const lishLazyRoute = createLazyRoute('/linodes/$linodeId/lish/$type')({ 6 | component: Lish, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/queries/.changeset/pr-13187-upcoming-features-1765970953049.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/queries": Upcoming Features 3 | --- 4 | 5 | Add new API queries for CRUD of locks for Resource Locking feature(RESPROT2) ([#13187](https://github.com/linode/manager/pull/13187)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13150-upcoming-features-1764648735682.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Upcoming Features 3 | --- 4 | 5 | Introduce and conditionally render Notification Channels tab under ACLP-Alerting ([#13150](https://github.com/linode/manager/pull/13150)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13151-upcoming-features-1765447199412.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Upcoming Features 3 | --- 4 | 5 | Add back navigation functionality to Drawer and integrate it with PrefixList Drawer ([#13151](https://github.com/linode/manager/pull/13151)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13193-upcoming-features-1765540702676.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Upcoming Features 3 | --- 4 | 5 | Introduce Listing for ACLP-Alerting Notification channels with ordering, pagination ([#13193](https://github.com/linode/manager/pull/13193)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/hooks/types.ts: -------------------------------------------------------------------------------- 1 | import type { AnyAction } from 'redux'; 2 | import type { ThunkDispatch } from 'redux-thunk'; 3 | import type { ApplicationState } from 'src/store'; 4 | 5 | export type Dispatch = ThunkDispatch; 6 | -------------------------------------------------------------------------------- /packages/api-v4/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | format: ['esm', 'cjs', 'iife'], 6 | target: 'es6', 7 | outDir: 'lib', 8 | splitting: false, 9 | dts: false, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/SMTP.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import { SMTPRestrictionText } from '../SMTPRestrictionText'; 4 | 5 | export const SMTP = () => { 6 | return {({ text }) => text}; 7 | }; 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/SSHKeys/sshKeysLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { SSHKeys } from './SSHKeys'; 4 | 5 | export const sshKeysLazyRoute = createLazyRoute('/profile/keys')({ 6 | component: SSHKeys, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/hooks/useGlobalErrors.ts: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | 3 | import type { ApplicationState } from 'src/store'; 4 | 5 | export const useGlobalErrors = () => { 6 | return useSelector((state: ApplicationState) => state.globalErrors); 7 | }; 8 | -------------------------------------------------------------------------------- /scripts/validatePackages/sdk-esm.js: -------------------------------------------------------------------------------- 1 | // This file used by GitHub Actions (ci.yml workflow) to validate the api-v4 NPM package before publishing. 2 | 3 | import { getRegions } from '@linode/api-v4'; 4 | 5 | getRegions().then(res => { 6 | console.log(res.data.length); 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/tickets.ts: -------------------------------------------------------------------------------- 1 | import type { TicketSeverity } from '@linode/api-v4'; 2 | 3 | export const severityLabelMap: Map = new Map([ 4 | [1, '1-Major Impact'], 5 | [2, '2-Moderate Impact'], 6 | [3, '3-Low Impact'], 7 | ]); 8 | -------------------------------------------------------------------------------- /packages/manager/src/hooks/usePendingUpload.ts: -------------------------------------------------------------------------------- 1 | import { useSelector } from 'react-redux'; 2 | 3 | import type { ApplicationState } from 'src/store'; 4 | 5 | export const usePendingUpload = () => { 6 | return useSelector((state: ApplicationState) => state.pendingUpload); 7 | }; 8 | -------------------------------------------------------------------------------- /packages/validation/tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | format: ['esm', 'cjs', 'iife'], 6 | target: 'es6', 7 | outDir: 'lib', 8 | splitting: false, 9 | dts: false, 10 | }); 11 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13171-changed-1764924158682.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Changed 3 | --- 4 | 5 | Logs: in Stream Form limit access to "lke_audit_logs" type based on Akamai Cloud Pulse Logs LKE-E Audit capability ([#13171](https://github.com/linode/manager/pull/13171)) 6 | -------------------------------------------------------------------------------- /packages/manager/.changeset/pr-13196-fixed-1765520959220.md: -------------------------------------------------------------------------------- 1 | --- 2 | "@linode/manager": Fixed 3 | --- 4 | 5 | CloudPulse-Metrics: Update `CloudPulseDashboardFilterBuilder.tsx` to add type-check for usage of dependent filters ref ([#13196](https://github.com/linode/manager/pull/13196)) 6 | -------------------------------------------------------------------------------- /packages/manager/src/features/Betas/betasLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { BetasLanding } from './BetasLanding'; 4 | 5 | export const betasLandingLazyRoute = createLazyRoute('/betas')({ 6 | component: BetasLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingPanels/BillingSummary/PaymentDrawer/types.ts: -------------------------------------------------------------------------------- 1 | import type { APIWarning } from '@linode/api-v4/lib/types'; 2 | export type SetSuccess = ( 3 | message: null | string, 4 | paymentWasMade?: boolean, 5 | warning?: APIWarning[] 6 | ) => void; 7 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Roles/rolesLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { RolesLanding } from './Roles'; 4 | 5 | export const rolesLandingLazyRoute = createLazyRoute('/iam/roles')({ 6 | component: RolesLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/profileLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Profile } from 'src/features/Profile/Profile'; 4 | 5 | export const ProfileLazyRoute = createLazyRoute('/profile')({ 6 | component: Profile, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/testSetup.ts: -------------------------------------------------------------------------------- 1 | import * as matchers from '@testing-library/jest-dom/matchers'; 2 | import { cleanup } from '@testing-library/react'; 3 | import { afterEach, expect } from 'vitest'; 4 | 5 | expect.extend(matchers); 6 | 7 | afterEach(() => { 8 | cleanup(); 9 | }); 10 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/stripImageName.ts: -------------------------------------------------------------------------------- 1 | export const stripImageName = (images: (null | string)[]) => { 2 | return images.reduce((acc: string[], image) => { 3 | if (image) { 4 | acc.push(image.replace('linode/', '')); 5 | } 6 | return acc; 7 | }, []); 8 | }; 9 | -------------------------------------------------------------------------------- /scripts/validatePackages/sdk-commonjs.cjs: -------------------------------------------------------------------------------- 1 | // This file used by GitHub Actions (ci.yml workflow) to validate the api-v4 NPM package before publishing. 2 | 3 | const apiv4 = require('@linode/api-v4/lib'); 4 | 5 | apiv4.getRegions().then(res => { 6 | console.log(res.data.length) 7 | }) 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Account/types.ts: -------------------------------------------------------------------------------- 1 | import type { grantTypeMap } from 'src/features/Account/constants'; 2 | 3 | // A useful type for getting the values of an object 4 | export type ObjectValues = T[keyof T]; 5 | 6 | export type GrantTypeMap = ObjectValues; 7 | -------------------------------------------------------------------------------- /packages/manager/src/features/Betas/betaSignupLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { BetaSignup } from './BetaSignup'; 4 | 5 | export const betaSignupLazyRoute = createLazyRoute('/betas/signup/$betaId')({ 6 | component: BetaSignup, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/Clone/cloneLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Clone } from './Clone'; 4 | 5 | export const cloneLazyRoute = createLazyRoute('/linodes/create/clone')({ 6 | component: Clone, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/imagesLazyRoutes.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Images } from './Images'; 4 | 5 | export const imagesLazyRoute = createLazyRoute('/linodes/create/images')({ 6 | component: Images, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/APITokens/apiTokensLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { APITokens } from './APITokens'; 4 | 5 | export const apiTokensLazyRoute = createLazyRoute('/profile/tokens')({ 6 | component: APITokens, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Quotas/quotasLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { QuotasLanding } from './QuotasLanding'; 4 | 5 | export const quotasLandingLazyRoute = createLazyRoute('/quotas')({ 6 | component: QuotasLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/shared/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@linode/tsconfig/package", 4 | "@linode/tsconfig/react", 5 | "@linode/tsconfig/non-strict" 6 | ], 7 | "compilerOptions": { 8 | "types": ["@testing-library/jest-dom"] 9 | }, 10 | "include": ["src"] 11 | } 12 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/capitalize.ts: -------------------------------------------------------------------------------- 1 | export const capitalize = (s: string) => { 2 | return s.charAt(0).toUpperCase() + s.slice(1); 3 | }; 4 | 5 | export const capitalizeAllWords = (s: string, delimiter = ' ') => { 6 | return s.split(delimiter).map(capitalize).join(' '); 7 | }; 8 | -------------------------------------------------------------------------------- /packages/utilities/testSetup.ts: -------------------------------------------------------------------------------- 1 | import * as matchers from '@testing-library/jest-dom/matchers'; 2 | import { cleanup } from '@testing-library/react'; 3 | import { afterEach, expect } from 'vitest'; 4 | 5 | expect.extend(matchers); 6 | 7 | afterEach(() => { 8 | cleanup(); 9 | }); 10 | -------------------------------------------------------------------------------- /packages/api-v4/src/constants.ts: -------------------------------------------------------------------------------- 1 | export const API_ROOT = 'https://api.linode.com/v4'; 2 | export const BETA_API_ROOT = API_ROOT + 'beta'; 3 | 4 | // Value from 1-4 reflecting a minimum score from zxcvbn 5 | export const MINIMUM_PASSWORD_STRENGTH = 4; 6 | 7 | export const MAX_VOLUME_SIZE = 16384; 8 | -------------------------------------------------------------------------------- /packages/manager/public/assets/shadowsocks.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /packages/manager/src/components/Tabs/Tabs.tsx: -------------------------------------------------------------------------------- 1 | import { Tabs as ReachTabs } from '@reach/tabs'; 2 | import * as React from 'react'; 3 | 4 | export const Tabs = (props: React.ComponentProps) => { 5 | const id = React.useId(); 6 | return ; 7 | }; 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/UsersTable/usersLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UsersLanding } from './Users'; 4 | 5 | export const usersLandingLazyRoute = createLazyRoute('/iam/users')({ 6 | component: UsersLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/linodeCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodeCreate } from './'; 4 | 5 | export const linodeCreateLazyRoute = createLazyRoute('/linodes/create')({ 6 | component: LinodeCreate, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/Referrals/referralsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Referrals } from './Referrals'; 4 | 5 | export const referralsLazyRoute = createLazyRoute('/profile/referrals')({ 6 | component: Referrals, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Users/userDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserDetail } from './UserDetail'; 4 | 5 | export const userDetailLazyRoute = createLazyRoute('/account/users/$username')({ 6 | component: UserDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Users/usersLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UsersLanding } from './UsersLanding'; 4 | 5 | export const usersLandingLazyRoute = createLazyRoute('/account/users')({ 6 | component: UsersLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/radio.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/ui/src/foundations/breakpoints.ts: -------------------------------------------------------------------------------- 1 | import { unstable_createBreakpoints } from '@mui/material'; 2 | 3 | export const breakpoints = unstable_createBreakpoints({ 4 | values: { 5 | lg: 1280, 6 | md: 960, 7 | sm: 600, 8 | xl: 1920, 9 | xs: 0, 10 | }, 11 | }); 12 | -------------------------------------------------------------------------------- /packages/validation/src/longview.schema.ts: -------------------------------------------------------------------------------- 1 | import { object, string } from 'yup'; 2 | 3 | export const longviewClientCreate = object().shape({ 4 | label: string() 5 | .min(3, 'Label must be between 3 and 32 characters.') 6 | .max(32, 'Label must be between 3 and 32 characters.'), 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/components/Skeleton.tsx: -------------------------------------------------------------------------------- 1 | import _Skeleton from '@mui/material/Skeleton'; 2 | import React from 'react'; 3 | 4 | import type { SkeletonProps } from '@mui/material/Skeleton'; 5 | 6 | export const Skeleton = (props: SkeletonProps) => { 7 | return <_Skeleton {...props} />; 8 | }; 9 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/billingDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { BillingDetail } from './BillingDetail'; 4 | 5 | export const billingDetailLazyRoute = createLazyRoute('/account/billing')({ 6 | component: BillingDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/linodesLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodesLandingWrapper } from './'; 4 | 5 | export const linodesLandingLazyRoute = createLazyRoute('/linodes')({ 6 | component: LinodesLandingWrapper, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/api-v4/src/object-storage/index.ts: -------------------------------------------------------------------------------- 1 | export * from './account'; 2 | 3 | export * from './buckets'; 4 | 5 | export * from './clusters'; 6 | 7 | export * from './objects'; 8 | 9 | export * from './objectStorageKeys'; 10 | 11 | export * from './prices'; 12 | 13 | export * from './types'; 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Account/globalSettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import GlobalSettings from './GlobalSettings'; 4 | 5 | export const globalSettingsLazyRoute = createLazyRoute('/account/settings')({ 6 | component: GlobalSettings, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/backupsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Backups } from './Backups'; 4 | 5 | export const backupsLazyRoute = createLazyRoute('/linodes/create/backups')({ 6 | component: Backups, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/LishSettings/lishSettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LishSettings } from './LishSettings'; 4 | 5 | export const lishSettingsLazyRoute = createLazyRoute('/profile/lish')({ 6 | component: LishSettings, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/OAuthClients/oAuthClientsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import OAuthClients from './OAuthClients'; 4 | 5 | export const oAuthClientsLazyRoute = createLazyRoute('/profile/clients')({ 6 | component: OAuthClients, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCCreate/VPCCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import VPCCreate from 'src/features/VPCs/VPCCreate/VPCCreate'; 4 | 5 | export const vpcCreateLazyRoute = createLazyRoute('/vpcs/create')({ 6 | component: VPCCreate, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCDetail/VPCDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import VPCDetail from 'src/features/VPCs/VPCDetail/VPCDetail'; 4 | 5 | export const vpcDetailLazyRoute = createLazyRoute('/vpcs/$vpcId')({ 6 | component: VPCDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCLanding/VPCLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import VPCLanding from 'src/features/VPCs/VPCLanding/VPCLanding'; 4 | 5 | export const vpcLandingLazyRoute = createLazyRoute('/')({ 6 | component: VPCLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/clamp.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Restricts a number to be within a range. 3 | */ 4 | export function clamp(min: number, max: number, value: number) { 5 | if (value > max) { 6 | return max; 7 | } 8 | if (value < min) { 9 | return min; 10 | } 11 | return value; 12 | } 13 | -------------------------------------------------------------------------------- /packages/utilities/src/hooks/useFormattedDate.ts: -------------------------------------------------------------------------------- 1 | import { DateTime } from 'luxon'; 2 | import { useMemo } from 'react'; 3 | 4 | export const useFormattedDate = () => { 5 | return useMemo(() => { 6 | const now = DateTime.local(); 7 | return now.toFormat('yyyy-MM-dd'); 8 | }, []); 9 | }; 10 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/api.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * API OAuth token for authenticating API requests and Cloud Manager interactions. 3 | */ 4 | export const oauthToken = Cypress.env('MANAGER_OAUTH'); 5 | 6 | /** 7 | * API request pagination page size. 8 | */ 9 | export const pageSize = 500; 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Events/eventsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { EventsLanding } from 'src/features/Events/EventsLanding'; 4 | 5 | export const eventsLandingLazyRoute = createLazyRoute('/events')({ 6 | component: EventsLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/UserDetails/userProfileLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserProfile } from './UserProfile'; 4 | 5 | export const userProfileLazyRoute = createLazyRoute('/iam/users/$username')({ 6 | component: UserProfile, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/iamLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { IdentityAccessLanding } from 'src/features/IAM/IAMLanding'; 4 | 5 | export const iamLandingLazyRoute = createLazyRoute('/iam')({ 6 | component: IdentityAccessLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/DetailTabs/OverviewGraphs/types.ts: -------------------------------------------------------------------------------- 1 | export interface GraphProps { 2 | clientAPIKey: string; 3 | end: number; 4 | isToday: boolean; 5 | lastUpdated?: number; 6 | lastUpdatedError: boolean; 7 | start: number; 8 | timezone: string; 9 | } 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Search/searchLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { SearchLanding } from 'src/features/Search/SearchLanding'; 4 | 5 | export const searchLandingLazyRoute = createLazyRoute('/search')({ 6 | component: SearchLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/volumesLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { VolumesLanding } from 'src/features/Volumes/VolumesLanding'; 4 | 5 | export const volumesLandingLazyRoute = createLazyRoute('/')({ 6 | component: VolumesLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingLanding/billingLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { BillingLanding } from './BillingLanding'; 4 | 5 | export const billingLandingLazyRoute = createLazyRoute('/billing')({ 6 | component: BillingLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/linodeDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodeDetail } from './LinodesDetail'; 4 | 5 | export const linodeDetailLazyRoute = createLazyRoute('/linodes/$linodeId')({ 6 | component: LinodeDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Lish/lishUtils.ts: -------------------------------------------------------------------------------- 1 | export const lishLaunch = (linodeId: number) => { 2 | window.open( 3 | `${window.location.protocol}//${window.location.host}/linodes/${linodeId}/lish/weblish`, 4 | `weblish_con_${linodeId}`, 5 | 'width=1080,height=730,toolbar=0,resizable=1' 6 | ); 7 | }; 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/volumesCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { VolumeCreate } from 'src/features/Volumes/VolumeCreate'; 4 | 5 | export const volumeCreateLazyRoute = createLazyRoute('/volumes/create')({ 6 | component: VolumeCreate, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/stringUtils.ts: -------------------------------------------------------------------------------- 1 | export const convertForAria = (str: string) => { 2 | return ( 3 | str 4 | .trim() 5 | .toLowerCase() 6 | // eslint-disable-next-line sonarjs/slow-regex 7 | .replace(/([^A-Z0-9]+)(.)/gi, (match, p1, p2) => p2.toUpperCase()) 8 | ); 9 | }; 10 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/stackscripts/stackscript-udf-invalid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a StackScript with an invalid user-defined field to test 3 | # StackScript validation/error messages. 4 | 5 | # 6 | 7 | echo "Hello, world!" 8 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/ui/app-bar.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * UI helpers for Cloud Manager top app bar. 3 | */ 4 | export const appBar = { 5 | /** 6 | * Finds the app bar. 7 | * 8 | * @returns Cypress chainable. 9 | */ 10 | find: () => { 11 | return cy.get('[data-qa-appbar]'); 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/public/assets/white/saltcorn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/manager/src/__data__/ExtendedType.ts: -------------------------------------------------------------------------------- 1 | import { extendType } from 'src/utilities/extendType'; 2 | import types from 'src/utilities/types.json'; 3 | 4 | import type { LinodeType } from '@linode/api-v4'; 5 | 6 | const _types = types.data as LinodeType[]; 7 | 8 | export const extendedTypes = _types.map(extendType); 9 | -------------------------------------------------------------------------------- /packages/manager/src/components/CheckoutBar/styles.ts: -------------------------------------------------------------------------------- 1 | import { useTheme } from '@mui/material/styles'; 2 | 3 | export const SxTypography = () => { 4 | const theme = useTheme(); 5 | 6 | return { 7 | color: theme.color.headline, 8 | fontSize: '.8rem', 9 | lineHeight: '1.5em', 10 | }; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Account/accountLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AccountLanding } from 'src/features/Account/AccountLanding'; 4 | 5 | export const accountLandingLazyRoute = createLazyRoute('/account')({ 6 | component: AccountLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Domains/domainsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DomainsLanding } from 'src/features/Domains/DomainsLanding'; 4 | 5 | export const domainsLandingLazyRoute = createLazyRoute('/domains')({ 6 | component: DomainsLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Roles/Defaults/defaultsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DefaultsLanding } from './DefaultsLanding'; 4 | 5 | export const defaultsLandingLazyRoute = createLazyRoute('/iam/roles/')({ 6 | component: DefaultsLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/managedLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { ManagedLanding } from 'src/features/Managed/ManagedLanding'; 4 | 5 | export const managedLandingLazyRoute = createLazyRoute('/managed')({ 6 | component: ManagedLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/UsersAndGrants/usersAndGrantsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UsersAndGrants } from './UsersAndGrants'; 4 | 5 | export const usersAndGrantsLandingLazyRoute = createLazyRoute('/users')({ 6 | component: UsersAndGrants, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/VolumeDetails/volumeDetailsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { VolumeDetails } from './VolumeDetails'; 4 | 5 | export const volumeDetailsLazyRoute = createLazyRoute('/volumes/$volumeId')({ 6 | component: VolumeDetails, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/nullOrUndefined.ts: -------------------------------------------------------------------------------- 1 | export const isNullOrUndefined = ( 2 | value: unknown, 3 | ): value is null | undefined => { 4 | return value === null || value === undefined; 5 | }; 6 | 7 | export const isNotNullOrUndefined = (el: null | T | undefined): el is T => 8 | !isNullOrUndefined(el); 9 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/user-data/user-data-config-basic.yml: -------------------------------------------------------------------------------- 1 | #cloud-config 2 | 3 | # Sample cloud-init config data file. 4 | # See also: https://cloudinit.readthedocs.io/en/latest/explanation/format.html 5 | 6 | groups: 7 | - foo-group 8 | 9 | users: 10 | - name: foo 11 | primary_group: foo-group 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseCreate/databaseCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseCreate } from './DatabaseCreate'; 4 | 5 | export const databaseCreateLazyRoute = createLazyRoute('/databases/create')({ 6 | component: DatabaseCreate, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCDetail/SubnetLinodeRow.styles.ts: -------------------------------------------------------------------------------- 1 | import { WarningIcon } from '@linode/ui'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledWarningIcon = styled(WarningIcon, { 5 | label: 'StyledWarningIcon', 6 | })(({ theme }) => ({ 7 | fill: theme.color.yellow, 8 | })); 9 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/credit-card.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/context/complianceUpdateContext.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import { defaultContext } from './useDialogContext'; 4 | 5 | import type { DialogContextProps } from './useDialogContext'; 6 | 7 | export const complianceUpdateContext = 8 | React.createContext(defaultContext); 9 | -------------------------------------------------------------------------------- /packages/manager/src/context/sessionExpirationContext.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import { defaultContext } from './useDialogContext'; 4 | 5 | import type { DialogContextProps } from './useDialogContext'; 6 | 7 | export const sessionExpirationContext = 8 | React.createContext(defaultContext); 9 | -------------------------------------------------------------------------------- /packages/manager/src/features/Account/accountLoginsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import AccountLogins from './AccountLogins'; 4 | 5 | export const accountLoginsLazyRoute = createLazyRoute('/account/login-history')( 6 | { 7 | component: AccountLogins, 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/deliveryLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DeliveryLanding } from 'src/features/Delivery/DeliveryLanding'; 4 | 5 | export const deliveryLandingLazyRoute = createLazyRoute('/logs/delivery')({ 6 | component: DeliveryLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Firewalls/FirewallDetail/Devices/constants.ts: -------------------------------------------------------------------------------- 1 | import type { FirewallDeviceEntityType } from '@linode/api-v4'; 2 | 3 | export const formattedTypes: Record = { 4 | linode_interface: 'Linode Interface', 5 | linode: 'Linode', 6 | nodebalancer: 'NodeBalancer', 7 | }; 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/UserRoles/userRolesLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserRoles } from './UserRoles'; 4 | 5 | export const userRolesLazyRoute = createLazyRoute('/iam/users/$username/roles')( 6 | { 7 | component: UserRoles, 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewLanding/Gauges/common.ts: -------------------------------------------------------------------------------- 1 | import type { APIError } from '@linode/api-v4/lib/types'; 2 | 3 | export const baseGaugeProps = { 4 | height: 110, 5 | width: '100%', 6 | }; 7 | 8 | export interface BaseProps { 9 | clientID: number; 10 | lastUpdatedError?: APIError[]; 11 | } 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/SSHAccess/SSHAccessTable.styles.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | export const StyledDiv = styled('div', { 4 | label: 'StyledDiv', 5 | })(({ theme }) => ({ 6 | '&:before': { 7 | display: 'none', 8 | }, 9 | marginTop: theme.spacing(4), 10 | })); 11 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/DisplaySettings/displaySettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DisplaySettings } from './DisplaySettings'; 4 | 5 | export const displaySettingsLazyRoute = createLazyRoute('/profile/display')({ 6 | component: DisplaySettings, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/store/selectors/getAbuseTicket.ts: -------------------------------------------------------------------------------- 1 | import type { Notification } from '@linode/api-v4/lib/account'; 2 | 3 | export const getAbuseTickets = (notifications: Notification[]) => { 4 | return notifications.filter( 5 | (thisNotification: Notification) => thisNotification.type === 'ticket_abuse' 6 | ); 7 | }; 8 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/tail.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns all elements of an array except the first one. 3 | * @param array The input array. 4 | * @returns An array with all elements of the input array except the first one. 5 | */ 6 | 7 | export function tail(array: T[]): T[] { 8 | return array.slice(1); 9 | } 10 | -------------------------------------------------------------------------------- /packages/manager/public/assets/nomad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/assets/weblish/weblish.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: black !important; 3 | } 4 | 5 | #terminal { 6 | margin: 0; 7 | padding: 0; 8 | background-color: #000; 9 | background-size: 10px 10px; 10 | background-position: 0 0, 5px 5px; 11 | } 12 | 13 | canvas { 14 | margin: unset !important; 15 | } -------------------------------------------------------------------------------- /packages/manager/src/context/switchAccountSessionContext.ts: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import { defaultContext } from './useDialogContext'; 4 | 5 | import type { DialogContextProps } from './useDialogContext'; 6 | 7 | export const switchAccountSessionContext = 8 | React.createContext(defaultContext); 9 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Delegations/delegationsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AccountDelegations } from './AccountDelegations'; 4 | 5 | export const delegationsLandingLazyRoute = createLazyRoute('/iam/delegations')({ 6 | component: AccountDelegations, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/LoginHistory/loginHistoryLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LoginHistoryLanding } from './LoginHistoryLanding'; 4 | 5 | export const loginHistoryLandingLazyRoute = createLazyRoute('/login-history')({ 6 | component: LoginHistoryLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/ObjectStorage/AccessKeyLanding/types.ts: -------------------------------------------------------------------------------- 1 | import type { ObjectStorageKey } from '@linode/api-v4/lib/object-storage/types'; 2 | 3 | export type MODE = 'creating' | 'editing' | 'viewing'; 4 | 5 | export type OpenAccessDrawer = ( 6 | mode: MODE, 7 | objectStorageKey?: null | ObjectStorageKey 8 | ) => void; 9 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/promoUtils.ts: -------------------------------------------------------------------------------- 1 | import { parseAPIDate } from 'src/utilities/date'; 2 | 3 | export const expiresInDays = (time: string) => { 4 | if (!time) { 5 | return null; 6 | } 7 | // Adding a day here to match how the API calculates this. 8 | return parseAPIDate(time).diffNow().days + 1; 9 | }; 10 | -------------------------------------------------------------------------------- /packages/manager/public/assets/nomadocc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/public/assets/white/nomad.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/public/assets/white/nomadocc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/features/Domains/CreateDomain/createDomainLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { CreateDomain } from 'src/features/Domains/CreateDomain/CreateDomain'; 4 | 5 | export const createDomainLazyRoute = createLazyRoute('/domains/create')({ 6 | component: CreateDomain, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Roles/Defaults/defaultRolesLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DefaultRoles } from './DefaultRoles'; 4 | 5 | export const defaultRolesLazyRoute = createLazyRoute( 6 | '/iam/roles/defaults/roles' 7 | )({ 8 | component: DefaultRoles, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Images/ImagesLanding/imagesLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { ImagesLanding } from 'src/features/Images/ImagesLanding/ImagesLanding'; 4 | 5 | export const imagesLandingLazyRoute = createLazyRoute('/images')({ 6 | component: ImagesLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/CloneLanding/cloneLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { CloneLanding } from './CloneLanding'; 4 | 5 | export const cloneLandingLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/clone' 7 | )({ 8 | component: CloneLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/DetailTabs/Processes/ProcessesTable.styles.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | export const StyledDiv = styled('div', { label: 'StyledDiv' })({ 4 | alignItems: 'center', 5 | display: 'flex', 6 | flexFlow: 'row nowrap', 7 | wordBreak: 'break-all', 8 | }); 9 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/__mocks__/request.ts: -------------------------------------------------------------------------------- 1 | export const get = vi.fn().mockResolvedValue({ DATA: {} }); 2 | export const getLastUpdated = vi.fn().mockResolvedValue(0); 3 | export const getValues = vi.fn().mockResolvedValue({}); 4 | export const handleLongviewResponse = vi.fn().mockResolvedValue({}); 5 | export default get; 6 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/isNilOrEmpty.ts: -------------------------------------------------------------------------------- 1 | export const isNilOrEmpty = (v: null | number | object | string | undefined) => 2 | v === null || 3 | v === undefined || 4 | v === '' || 5 | (typeof v === 'object' && 6 | (v instanceof Set || v instanceof Map 7 | ? v.size === 0 8 | : Object.keys(v || {}).length === 0)); 9 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/ui/tooltip.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Tooltip UI helper. 3 | */ 4 | export const tooltip = { 5 | /** 6 | * Finds a tooltip that has the given text. 7 | */ 8 | findByText: (text: string): Cypress.Chainable => { 9 | return cy.document().its('body').find(`[data-qa-tooltip="${text}"]`); 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /packages/manager/public/assets/nomadclientsocc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/OAuth/Logout.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect } from 'react'; 2 | 3 | import { SplashScreen } from 'src/components/SplashScreen'; 4 | import { logout } from 'src/OAuth/oauth'; 5 | 6 | export const Logout = () => { 7 | useEffect(() => { 8 | logout(); 9 | }, []); 10 | 11 | return ; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/manager/src/features/Domains/DomainDetail/domainDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DomainDetail } from 'src/features/Domains/DomainDetail/DomainDetail'; 4 | 5 | export const domainDetailLazyRoute = createLazyRoute('/domains/$domainId')({ 6 | component: DomainDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Firewalls/FirewallDetail/firewallDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { FirewallDetail } from 'src/features/Firewalls/FirewallDetail'; 4 | 5 | export const firewallDetailLazyRoute = createLazyRoute('/firewalls/$id')({ 6 | component: FirewallDetail, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/UserEntities/userEntitiesLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserEntities } from './UserEntities'; 4 | 5 | export const userEntitiesLazyRoute = createLazyRoute( 6 | '/iam/users/$username/entities' 7 | )({ 8 | component: UserEntities, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/queries/src/account/notifications.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from '@tanstack/react-query'; 2 | 3 | import { accountQueries } from './queries'; 4 | 5 | import type { APIError, Notification } from '@linode/api-v4'; 6 | 7 | export const useNotificationsQuery = () => 8 | useQuery(accountQueries.notifications); 9 | -------------------------------------------------------------------------------- /packages/manager/public/assets/white/nomadclientsocc.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/caret_down.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeAlerts/linodeAlertsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LinodeAlerts from './LinodeAlerts'; 4 | 5 | export const linodeAlertsLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/alerts' 7 | )({ 8 | component: LinodeAlerts, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ObjectStorage/BucketLanding/StylesBucketIcon.ts: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | import StorageIcon from 'src/assets/icons/entityIcons/storage.svg'; 4 | 5 | const StyledBucketIcon = styled(StorageIcon)(() => ({ 6 | transform: 'scale(0.80)', 7 | })); 8 | 9 | export { StyledBucketIcon }; 10 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/charts.ts: -------------------------------------------------------------------------------- 1 | import { defaults as chartDefaults } from 'chart.js'; 2 | 3 | export const setUpCharts = () => { 4 | (chartDefaults as any).global.defaultFontFamily = '"Nunito Sans", sans-serif'; 5 | (chartDefaults as any).global.defaultFontStyle = '700'; 6 | (chartDefaults as any).global.defaultFontSize = 13; 7 | }; 8 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | projects: [ 6 | "packages/api-v4", 7 | "packages/manager", 8 | "packages/search", 9 | "packages/shared", 10 | "packages/ui", 11 | "packages/utilities", 12 | ], 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /packages/manager/src/factories/accountAgreements.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from '@linode/utilities'; 2 | 3 | import type { Agreements } from '@linode/api-v4/lib/account'; 4 | 5 | export const accountAgreementsFactory = Factory.Sync.makeFactory({ 6 | billing_agreement: false, 7 | eu_model: false, 8 | privacy_policy: true, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Firewalls/FirewallLanding/firewallLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import FirewallLanding from 'src/features/Firewalls/FirewallLanding/FirewallLanding'; 4 | 5 | export const firewallLandingLazyRoute = createLazyRoute('/firewalls')({ 6 | component: FirewallLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Kubernetes/CreateCluster/createClusterLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { CreateCluster } from 'src/features/Kubernetes/CreateCluster/CreateCluster'; 4 | 5 | export const createClusterLazyRoute = createLazyRoute('/kubernetes/create')({ 6 | component: CreateCluster, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/Marketplace/marketPlaceLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { Marketplace } from './Marketplace'; 4 | 5 | export const marketPlaceLazyRoute = createLazyRoute( 6 | '/linodes/create/marketplace' 7 | )({ 8 | component: Marketplace, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewLanding/longviewLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LongviewLanding from 'src/features/Longview/LongviewLanding/LongviewLanding'; 4 | 5 | export const longviewLandingLazyRoute = createLazyRoute('/longview')({ 6 | component: LongviewLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Maintenance/maintenanceLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { MaintenanceLanding } from './MaintenanceLanding'; 4 | 5 | export const maintenanceLandingLandingLazyRoute = createLazyRoute( 6 | '/maintenance' 7 | )({ 8 | component: MaintenanceLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/UsersAndGrants/usersAndGrantsUserProfileLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserDetail } from '../Users/UserDetail'; 4 | 5 | export const usersAndGrantsUserProfileLazyRoute = createLazyRoute( 6 | '/users/$username' 7 | )({ 8 | component: UserDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/types/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Necessary for ES6 import of svg/png files, else we would have to require() them. 3 | * 4 | * @see https://github.com/Microsoft/TypeScript-React-Starter/issues/12#issuecomment-326370098 5 | */ 6 | declare module '*.png'; 7 | declare module 'eslint-plugin-cypress/flat'; 8 | declare module 'eslint-plugin-xss'; 9 | -------------------------------------------------------------------------------- /packages/queries/src/linodes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './actions'; 2 | export * from './backups'; 3 | export * from './configs'; 4 | export * from './disks'; 5 | export * from './firewalls'; 6 | export * from './interfaces'; 7 | export * from './linodes'; 8 | export * from './networking'; 9 | export * from './requests'; 10 | export * from './stats'; 11 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/getUserTimezone.ts: -------------------------------------------------------------------------------- 1 | import { DateTime, IANAZone } from 'luxon'; 2 | 3 | export const getUserTimezone = (profileTimezone?: string) => { 4 | return profileTimezone && 5 | profileTimezone !== '' && 6 | IANAZone.isValidZone(profileTimezone) 7 | ? profileTimezone 8 | : DateTime.local().zoneName; 9 | }; 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Account/Maintenance/maintenanceLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import MaintenanceLanding from './MaintenanceLanding'; 4 | 5 | export const maintenanceLandingLazyRoute = createLazyRoute( 6 | '/account/maintenance' 7 | )({ 8 | component: MaintenanceLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseLanding/databaseLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseLanding } from 'src/features/Databases/DatabaseLanding/DatabaseLanding'; 4 | 5 | export const databaseLandingLazyRoute = createLazyRoute('/databases')({ 6 | component: DatabaseLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/StackScripts/stackScriptsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { StackScripts } from './StackScripts'; 4 | 5 | export const stackScriptsLazyRoute = createLazyRoute( 6 | '/linodes/create/stackscripts' 7 | )({ 8 | component: StackScripts, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeBackup/linodeBackupsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodeBackups } from './LinodeBackups'; 4 | 5 | export const linodeBackupsLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/backup' 7 | )({ 8 | component: LinodeBackups, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeMetrics/linodeMetricsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LinodeMetrics from './LinodeMetrics'; 4 | 5 | export const linodeMetricsLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/metrics' 7 | )({ 8 | component: LinodeMetrics, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeStorage/linodeStorageLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodeStorage } from './LinodeStorage'; 4 | 5 | export const linodeStorageLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/storage' 7 | )({ 8 | component: LinodeStorage, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/LongviewDetail.styles.ts: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | import { Tabs } from 'src/components/Tabs/Tabs'; 4 | 5 | export const StyledTabs = styled(Tabs, { label: 'StyledTabs' })( 6 | ({ theme }) => ({ 7 | marginBottom: `calc(${theme.spacing(3)} + 6px)`, 8 | }) 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/VolumeDetails/VolumeMetrics/volumeMetricsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { VolumeMetrics } from './VolumeMetrics'; 4 | 5 | export const volumeMetricsLazyRoute = createLazyRoute( 6 | '/volumes/$volumeId/metrics' 7 | )({ 8 | component: VolumeMetrics, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Volumes/VolumeDetails/VolumeSummary/volumeSummaryLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { VolumeSummary } from './VolumeSummary'; 4 | 5 | export const volumeSummaryLazyRoute = createLazyRoute( 6 | '/volumes/$volumeId/summary' 7 | )({ 8 | component: VolumeSummary, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/api-v4/src/linodes/index.ts: -------------------------------------------------------------------------------- 1 | export * from './actions'; 2 | 3 | export * from './backups'; 4 | 5 | export * from './configs'; 6 | 7 | export * from './disks'; 8 | 9 | export * from './info'; 10 | 11 | export * from './ips'; 12 | 13 | export * from './linode-interfaces'; 14 | 15 | export * from './linodes'; 16 | 17 | export * from './types'; 18 | -------------------------------------------------------------------------------- /packages/manager/src/features/Images/ImagesCreate/imagesCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { ImagesCreateContainer } from 'src/features/Images/ImagesCreate/ImageCreateContainer'; 4 | 5 | export const imageCreateLazyRoute = createLazyRoute('/images/create')({ 6 | component: ImagesCreateContainer, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/HostMaintenanceError.tsx: -------------------------------------------------------------------------------- 1 | import { Notice } from '@linode/ui'; 2 | import * as React from 'react'; 3 | 4 | export const HostMaintenanceError = () => ( 5 | 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeActivity/linodeActivityLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LinodeActivity from './LinodeActivity'; 4 | 5 | export const linodeActivityLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/activity' 7 | )({ 8 | component: LinodeActivity, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeConfigs/linodeConfigsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LinodeConfigs from './LinodeConfigs'; 4 | 5 | export const linodeConfigsLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/configurations' 7 | )({ 8 | component: LinodeConfigs, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeSettings/linodeSettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import LinodeSettings from './LinodeSettings'; 4 | 5 | export const linodeSettingsLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/settings' 7 | )({ 8 | component: LinodeSettings, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/queries/src/account/transfer.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from '@tanstack/react-query'; 2 | 3 | import { accountQueries } from './queries'; 4 | 5 | import type { APIError, RegionalNetworkUtilization } from '@linode/api-v4'; 6 | 7 | export const useAccountNetworkTransfer = () => 8 | useQuery(accountQueries.transfer); 9 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/escapeRegExp.ts: -------------------------------------------------------------------------------- 1 | // Escape a string for use with the RegExp constructor. 2 | // This function comes from the MDN documentation. 3 | // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#Escaping 4 | export const escapeRegExp = (s: string) => { 5 | return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); 6 | }; 7 | -------------------------------------------------------------------------------- /packages/manager/src/features/Billing/BillingLanding/invoiceDetailsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { InvoiceDetail } from '../InvoiceDetail/InvoiceDetail'; 4 | 5 | export const invoiceDetailsLazyRoute = createLazyRoute( 6 | '/billing/invoices/$invoiceId' 7 | )({ 8 | component: InvoiceDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/AlertsListing/cloudPulseAlertsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AlertListing } from './AlertListing'; 4 | 5 | export const cloudPulseAlertsLandingLazyRoute = createLazyRoute( 6 | '/alerts/definitions' 7 | )({ 8 | component: AlertListing, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/UserDelegations/userDelegationsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserDelegations } from './UserDelegations'; 4 | 5 | export const userDelegationsLazyRoute = createLazyRoute( 6 | '/iam/users/$username/delegations' 7 | )({ 8 | component: UserDelegations, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/ui/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import svgr from 'vite-plugin-svgr'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [ 6 | svgr({ svgrOptions: { exportType: 'default' }, include: '**/*.svg' }), 7 | ], 8 | test: { 9 | environment: 'jsdom', 10 | setupFiles: './testSetup.ts', 11 | }, 12 | }); 13 | -------------------------------------------------------------------------------- /packages/api-v4/src/object-storage/account.ts: -------------------------------------------------------------------------------- 1 | import { API_ROOT } from '../constants'; 2 | import Request, { setMethod, setURL } from '../request'; 3 | 4 | /** 5 | * cancelObjectStorage 6 | * 7 | * Cancels Object Storage service 8 | */ 9 | export const cancelObjectStorage = () => 10 | Request<{}>(setMethod('POST'), setURL(`${API_ROOT}/object-storage/cancel`)); 11 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/caret_right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Users/userDetailsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { UserDetailsLanding } from 'src/features/IAM/Users/UserDetailsLanding'; 4 | 5 | export const userDetailsLandingLazyRoute = createLazyRoute( 6 | '/iam/users/$username' 7 | )({ 8 | component: UserDetailsLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/operatingSystemsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { OperatingSystems } from 'src/features/Linodes/LinodeCreate/Tabs/OperatingSystems'; 4 | 5 | export const operatingSystemsLazyRoute = createLazyRoute('/linodes/create/os')({ 6 | component: OperatingSystems, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/plusSign.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/AccountSettings/accountSettingsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AccountSettingsLanding } from './AccountSettingsLanding'; 4 | 5 | export const accountSettingsLandingLazyRoute = createLazyRoute( 6 | '/account-settings' 7 | )({ 8 | component: AccountSettingsLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseResize/databaseResizeLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseResize } from './DatabaseResize'; 4 | 5 | export const databaseResizeLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/resize' 7 | )({ 8 | component: DatabaseResize, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/databaseDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseDetail } from 'src/features/Databases/DatabaseDetail'; 4 | 5 | export const databaseDetailLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId' 7 | )({ 8 | component: DatabaseDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/IAM/Roles/Defaults/defaultEntityAccessLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DefaultEntityAccess } from './DefaultEntityAccess'; 4 | 5 | export const defaultEntityAccessLazyRoute = createLazyRoute( 6 | '/iam/roles/defaults/entity-access' 7 | )({ 8 | component: DefaultEntityAccess, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/NodeBalancers/nodeBalancersCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import NodeBalancerCreate from 'src/features/NodeBalancers/NodeBalancerCreate'; 4 | 5 | export const nodeBalancerCreateLazyRoute = createLazyRoute( 6 | '/nodebalancers/create' 7 | )({ 8 | component: NodeBalancerCreate, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/presets/crud/quotas.ts: -------------------------------------------------------------------------------- 1 | import { getQuotas, getS3Endpoint } from './handlers/quotas'; 2 | 3 | import type { MockPresetCrud } from 'src/mocks/types'; 4 | 5 | export const quotasCrudPreset: MockPresetCrud = { 6 | group: { id: 'Quotas' }, 7 | handlers: [getQuotas, getS3Endpoint], 8 | id: 'quotas:crud', 9 | label: 'Quotas CRUD', 10 | }; 11 | -------------------------------------------------------------------------------- /packages/shared/vitest.config.ts: -------------------------------------------------------------------------------- 1 | import svgr from 'vite-plugin-svgr'; 2 | import { defineConfig } from 'vitest/config'; 3 | 4 | export default defineConfig({ 5 | plugins: [ 6 | svgr({ svgrOptions: { exportType: 'default' }, include: '**/*.svg' }), 7 | ], 8 | 9 | test: { 10 | environment: 'jsdom', 11 | setupFiles: './testSetup.ts', 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/ui/file-upload.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * File upload input element. 3 | */ 4 | export const fileUpload = { 5 | /** 6 | * Finds the file upload input element and returns the Cypresss chainable. 7 | * 8 | * @returns Cypress chainable. 9 | */ 10 | find: (): Cypress.Chainable => { 11 | return cy.get('input[type="file"]'); 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/liondeNetworkingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LinodeNetworking } from './LinodeNetworking'; 4 | 5 | export const linodeNetworkingLazyRoute = createLazyRoute( 6 | '/linodes/$linodeId/networking' 7 | )({ 8 | component: LinodeNetworking, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ServiceTransfers/serviceTransfersLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { ServiceTransfersLanding } from './ServiceTransfersLanding'; 4 | 5 | export const serviceTransfersLandingLazyRoute = createLazyRoute( 6 | '/service-transfers' 7 | )({ 8 | component: ServiceTransfersLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Support/SupportTicketDetail/supportTicketDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { SupportTicketDetail } from './SupportTicketDetail'; 4 | 5 | export const supportTicketDetailLazyRoute = createLazyRoute( 6 | '/support/tickets/$ticketId' 7 | )({ 8 | component: SupportTicketDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/presets/crud/entities.ts: -------------------------------------------------------------------------------- 1 | import { getEntities } from 'src/mocks/presets/crud/handlers/entities'; 2 | 3 | import type { MockPresetCrud } from 'src/mocks/types'; 4 | 5 | export const entityCrudPreset: MockPresetCrud = { 6 | group: { id: 'Entities' }, 7 | handlers: [getEntities], 8 | id: 'entities:crud', 9 | label: 'Entities CRUD', 10 | }; 11 | -------------------------------------------------------------------------------- /packages/manager/src/routes/auth/AuthRoute.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from '@tanstack/react-router'; 2 | import React from 'react'; 3 | 4 | import { SuspenseLoader } from 'src/components/SuspenseLoader'; 5 | 6 | export const AuthRoute = () => { 7 | return ( 8 | }> 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/ui/src/foundations/keyframes.ts: -------------------------------------------------------------------------------- 1 | import { keyframes } from 'tss-react'; 2 | 3 | export const rotate360 = keyframes` 4 | from { 5 | transform: rotate(0deg); 6 | } 7 | to { 8 | transform: rotate(360deg); 9 | } 10 | `; 11 | 12 | export const fadeIn = keyframes` 13 | from { 14 | opacity: 0; 15 | }, 16 | to { 17 | opacity: 1; 18 | } 19 | `; 20 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/env.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Helps you parse an environment variable that is intended to be a boolean. 3 | */ 4 | export function getBooleanEnv(value: boolean | string | undefined) { 5 | if (value === undefined) { 6 | return undefined; 7 | } 8 | if (value === true || value === 'true') { 9 | return true; 10 | } 11 | return false; 12 | } 13 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseBackups/databaseBackupsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseBackups } from './DatabaseBackups'; 4 | 5 | export const databaseBackupsLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/backups' 7 | )({ 8 | component: DatabaseBackups, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseMonitor/databaseMonitorLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseMonitor } from './DatabaseMonitor'; 4 | 5 | export const databaseMonitorLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/metrics' 7 | )({ 8 | component: DatabaseMonitor, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseSummary/databaseSummaryLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseSummary } from './DatabaseSummary'; 4 | 5 | export const databaseSummaryLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/summary' 7 | )({ 8 | component: DatabaseSummary, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Streams/StreamForm/streamCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { StreamCreate } from 'src/features/Delivery/Streams/StreamForm/StreamCreate'; 4 | 5 | export const streamCreateLazyRoute = createLazyRoute( 6 | '/logs/delivery/streams/create' 7 | )({ 8 | component: StreamCreate, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Streams/StreamForm/streamEditLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { StreamEdit } from 'src/features/Delivery/Streams/StreamForm/StreamEdit'; 4 | 5 | export const streamEditLazyRoute = createLazyRoute( 6 | '/logs/delivery/streams/$streamId/edit' 7 | )({ 8 | component: StreamEdit, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Events/factories/profile.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import type { PartialEventMap } from '../types'; 4 | 5 | export const profile: PartialEventMap<'profile'> = { 6 | profile_update: { 7 | notification: (e) => ( 8 | <> 9 | Your profile has been updated. 10 | 11 | ), 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewLanding/__mocks__/LongviewClientRow.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | interface Props { 4 | clientLabel: string; 5 | } 6 | 7 | export const LongviewClientRowMock = ({ clientLabel }: Props) => { 8 | return

{clientLabel}
; 9 | }; 10 | 11 | export default LongviewClientRowMock; 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Managed/Monitors/MonitorTable.styles.tsx: -------------------------------------------------------------------------------- 1 | import Grid from '@mui/material/Grid'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledGrid = styled(Grid, { 5 | label: 'StyledGrid', 6 | })(({ theme }) => ({ 7 | marginBottom: 5, 8 | [theme.breakpoints.down('md')]: { 9 | marginRight: theme.spacing(), 10 | }, 11 | })); 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Profile/AuthenticationSettings/authenicationSettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AuthenticationSettings } from './AuthenticationSettings'; 4 | 5 | export const authenticationSettingsLazyRoute = createLazyRoute('/profile/auth')( 6 | { 7 | component: AuthenticationSettings, 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/routes/events/EventsRoute.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from '@tanstack/react-router'; 2 | import React from 'react'; 3 | 4 | import { SuspenseLoader } from 'src/components/SuspenseLoader'; 5 | 6 | export const EventsRoute = () => { 7 | return ( 8 | }> 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/manager/src/vite.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * We set any svg import to be a default export of a React component. 3 | * 4 | * We do this because Vite's default is for the type to be a `string`, 5 | * but we use `vite-plugin-svgr` to allow us to import svgs as components. 6 | */ 7 | declare module '*.svg' { 8 | const src: ComponentClass; 9 | export default src; 10 | } 11 | -------------------------------------------------------------------------------- /packages/manager/src/components/FormGroup.tsx: -------------------------------------------------------------------------------- 1 | import { default as _FormGroup } from '@mui/material/FormGroup'; 2 | import React from 'react'; 3 | 4 | import type { FormGroupProps } from '@mui/material/FormGroup'; 5 | 6 | /** 7 | * A `` groups many inputs. 8 | */ 9 | export const FormGroup = (props: FormGroupProps) => { 10 | return <_FormGroup {...props} />; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseSettings/databaseSettingsLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseSettings } from './DatabaseSettings'; 4 | 5 | export const databaseSettingsLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/settings' 7 | )({ 8 | component: DatabaseSettings, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ObjectStorage/objectStorageLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { ObjectStorageLanding } from 'src/features/ObjectStorage/ObjectStorageLanding'; 4 | 5 | export const objectStorageLandingLazyRoute = createLazyRoute('/object-storage')( 6 | { 7 | component: ObjectStorageLanding, 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/StackScripts/StackScriptLanding/stackScriptLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { StackScriptsLanding } from 'src/features/StackScripts/StackScriptLanding/StackScriptsLanding'; 4 | 5 | export const stackScriptsLandingLazyRoute = createLazyRoute('/stackscripts')({ 6 | component: StackScriptsLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/routes/linodes/LinodesRoute.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from '@tanstack/react-router'; 2 | import React from 'react'; 3 | 4 | import { SuspenseLoader } from 'src/components/SuspenseLoader'; 5 | 6 | export const LinodesRoute = () => { 7 | return ( 8 | }> 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/manager/src/routes/profile/ProfileRoute.tsx: -------------------------------------------------------------------------------- 1 | import { Outlet } from '@tanstack/react-router'; 2 | import React from 'react'; 3 | 4 | import { SuspenseLoader } from 'src/components/SuspenseLoader'; 5 | 6 | export const ProfileRoute = () => { 7 | return ( 8 | }> 9 | 10 | 11 | ); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/queries/src/networktransfer/requests.ts: -------------------------------------------------------------------------------- 1 | import { getNetworkTransferPrices } from '@linode/api-v4'; 2 | import { getAll } from '@linode/utilities'; 3 | 4 | import type { PriceType } from '@linode/api-v4'; 5 | 6 | export const getAllNetworkTransferPrices = () => 7 | getAll((params) => getNetworkTransferPrices(params))().then( 8 | (data) => data.data, 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/CreateAlert/cloudPulseAlertsCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { CreateAlertDefinition } from './CreateAlertDefinition'; 4 | 5 | export const cloudPulseAlertsCreateLazyRoute = createLazyRoute( 6 | '/alerts/definitions/create' 7 | )({ 8 | component: CreateAlertDefinition, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Dashboard/cloudPulseMetricsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { CloudPulseDashboardLanding } from 'src/features/CloudPulse/Dashboard/CloudPulseDashboardLanding'; 4 | 5 | export const cloudPulseMetricsLandingLazyRoute = createLazyRoute('/metrics')({ 6 | component: CloudPulseDashboardLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCDetail/SubnetAssignLinodesDrawer.styles.ts: -------------------------------------------------------------------------------- 1 | import { Box } from '@linode/ui'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledButtonBox = styled(Box, { label: 'StyledButtonBox' })( 5 | ({ theme }) => ({ 6 | display: 'flex', 7 | justifyContent: 'flex-end', 8 | margin: `${theme.spacing(3)} 0px`, 9 | }) 10 | ); 11 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/checkboxIndeterminate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/vpc.ts: -------------------------------------------------------------------------------- 1 | /** Copies shown to users when assigning and unassigning a Linode from a VPC */ 2 | export const vpcConfigProfileInterfaceRebootNotice = 3 | 'Linodes with Configuration Profile Interfaces to be rebooted after changes.'; 4 | export const vpcLinodeInterfaceShutDownNotice = 5 | 'Linodes with Linode Interfaces to be shut down and powered on after changes.'; 6 | -------------------------------------------------------------------------------- /packages/ui/src/components/InputLabel/InputLabel.tsx: -------------------------------------------------------------------------------- 1 | import _InputLabel from '@mui/material/InputLabel'; 2 | import React from 'react'; 3 | 4 | import type { InputLabelProps } from '@mui/material/InputLabel'; 5 | 6 | /** 7 | * A `InputLabel` is used to label an ``. 8 | */ 9 | export const InputLabel = (props: InputLabelProps) => { 10 | return <_InputLabel {...props} />; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/replaceNewlinesWithLineBreaks.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | export const replaceNewlinesWithLineBreaks = (text: string) => 4 | text.split('\n').map((text, i, lines) => 5 | i === lines.length - 1 ? ( 6 | text 7 | ) : ( 8 | 9 | {text} 10 |
11 |
12 | ), 13 | ); 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseNetworking/databaseNetworkingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseNetworking } from './DatabaseNetworking'; 4 | 5 | export const databaseNetworkingLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/networking' 7 | )({ 8 | component: DatabaseNetworking, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/EntityTransfers/EntityTransfersCreate/entityTransfersCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { EntityTransfersCreate } from './EntityTransfersCreate'; 4 | 5 | export const entityTransfersCreateLazyRoute = createLazyRoute( 6 | '/account/service-transfers/create' 7 | )({ 8 | component: EntityTransfersCreate, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/EntityTransfers/EntityTransfersLanding/entityTransferLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { EntityTransfersLanding } from './EntityTransfersLanding'; 4 | 5 | export const entityTransferLandingLazyRoute = createLazyRoute( 6 | '/account/service-transfers' 7 | )({ 8 | component: EntityTransfersLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Events/factories/ipaddress.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import type { PartialEventMap } from '../types'; 4 | 5 | export const ip: PartialEventMap<'ipaddress'> = { 6 | ipaddress_update: { 7 | notification: () => ( 8 | <> 9 | An IP address has been updated on your account. 10 | 11 | ), 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Kubernetes/KubernetesLanding/kubernetesLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { KubernetesLanding } from 'src/features/Kubernetes/KubernetesLanding/KubernetesLanding'; 4 | 5 | export const kubernetesLandingLazyRoute = createLazyRoute( 6 | '/kubernetes/clusters' 7 | )({ 8 | component: KubernetesLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/DetailTabs/TopProcesses.styles.ts: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | import { Link } from 'src/components/Link'; 4 | 5 | export const StyledLink = styled(Link, { label: 'StyledLink' })( 6 | ({ theme }) => ({ 7 | font: theme.font.bold, 8 | fontSize: 16, 9 | position: 'relative', 10 | top: 3, 11 | }) 12 | ); 13 | -------------------------------------------------------------------------------- /packages/manager/src/features/Longview/LongviewDetail/longviewDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { LongviewDetailWrapper } from 'src/features/Longview/LongviewDetail/LongviewDetailWrapper'; 4 | 5 | export const longviewDetailLazyRoute = createLazyRoute('/longview/clients/$id')( 6 | { 7 | component: LongviewDetailWrapper, 8 | } 9 | ); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/NodeBalancers/NodeBalancersLanding/nodeBalancersLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { NodeBalancersLanding } from 'src/features/NodeBalancers/NodeBalancersLanding/NodeBalancersLanding'; 4 | 5 | export const nodeBalancersLandingLazyRoute = createLazyRoute('/nodebalancers')({ 6 | component: NodeBalancersLanding, 7 | }); 8 | -------------------------------------------------------------------------------- /packages/manager/src/features/VPCs/VPCCreate/FormComponents/CannotCreateVPCNotice.tsx: -------------------------------------------------------------------------------- 1 | import { Notice } from '@linode/ui'; 2 | import * as React from 'react'; 3 | 4 | import { CANNOT_CREATE_VPC_MESSAGE } from '../../constants'; 5 | 6 | export const CannotCreateVPCNotice = ( 7 | 12 | ); 13 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/presets/crud/permissions.ts: -------------------------------------------------------------------------------- 1 | import { getPermissions } from 'src/mocks/presets/crud/handlers/permissions'; 2 | 3 | import type { MockPresetCrud } from 'src/mocks/types'; 4 | 5 | export const permissionsCrudPreset: MockPresetCrud = { 6 | group: { id: 'Permissions' }, 7 | handlers: [getPermissions], 8 | id: 'permissions:crud', 9 | label: 'Permissions CRUD', 10 | }; 11 | -------------------------------------------------------------------------------- /packages/ui/src/components/RadioGroup/RadioGroup.tsx: -------------------------------------------------------------------------------- 1 | import { default as _RadioGroup } from '@mui/material/RadioGroup'; 2 | import React from 'react'; 3 | 4 | import type { RadioGroupProps } from '@mui/material/RadioGroup'; 5 | 6 | /** 7 | * A `` groups many Radios. 8 | */ 9 | export const RadioGroup = (props: RadioGroupProps) => { 10 | return <_RadioGroup {...props} />; 11 | }; 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/cloudPulseAlertsDefinitionsDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AlertDetail } from './AlertDetail'; 4 | 5 | export const cloudPulseAlertsDefinitionsDetailLazyRoute = createLazyRoute( 6 | '/alerts/definitions/detail/$serviceType/$alertId' 7 | )({ 8 | component: AlertDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Events/factories/credit.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import type { PartialEventMap } from '../types'; 4 | 5 | export const creditCard: PartialEventMap<'credit'> = { 6 | credit_card_updated: { 7 | notification: (e) => ( 8 | <> 9 | Your credit card information has been updated. 10 | 11 | ), 12 | }, 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Kubernetes/KubernetesClusterDetail/NodePoolsDisplay/LabelsAndTaints/LabelTable.styles.tsx: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | import { Table } from 'src/components/Table'; 4 | 5 | export const StyledLabelTable = styled(Table, { 6 | label: 'StyledLabelTable', 7 | })(({ theme }) => ({ 8 | margin: `${theme.spacing()} 0 ${theme.spacing(1.5)}`, 9 | })); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Support/SupportTickets/supportTicketsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { SupportTicketsLanding } from 'src/features/Support/SupportTickets/SupportTicketsLanding'; 4 | 5 | export const supportTicketsLandingLazyRoute = createLazyRoute( 6 | '/support/tickets' 7 | )({ 8 | component: SupportTicketsLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/routes/root.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createRootRouteWithContext, 3 | ErrorComponent, 4 | } from '@tanstack/react-router'; 5 | 6 | import { RootSwitch } from './../RootSwitch'; 7 | 8 | import type { RouterContext } from './types'; 9 | 10 | export const rootRoute = createRootRouteWithContext()({ 11 | component: RootSwitch, 12 | errorComponent: ErrorComponent, 13 | }); 14 | -------------------------------------------------------------------------------- /packages/api-v4/src/entities/types.ts: -------------------------------------------------------------------------------- 1 | export type EntityType = 2 | | 'database' 3 | | 'domain' 4 | | 'firewall' 5 | | 'image' 6 | | 'linode' 7 | | 'lkecluster' 8 | | 'longview' 9 | | 'nodebalancer' 10 | | 'placement_group' 11 | | 'stackscript' 12 | | 'volume' 13 | | 'vpc'; 14 | 15 | export interface AccountEntity { 16 | id: number; 17 | label: string; 18 | type: EntityType; 19 | } 20 | -------------------------------------------------------------------------------- /packages/manager/src/features/NodeBalancers/NodeBalancerDetail/nodeBalancersDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { NodeBalancerDetail } from 'src/features/NodeBalancers/NodeBalancerDetail/NodeBalancerDetail'; 4 | 5 | export const nodeBalancerDetailLazyRoute = createLazyRoute( 6 | '/nodebalancers/$id' 7 | )({ 8 | component: NodeBalancerDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ObjectStorage/BucketDetail/bucketDetailLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { BucketDetailLanding } from 'src/features/ObjectStorage/BucketDetail'; 4 | 5 | export const bucketDetailLandingLazyRoute = createLazyRoute( 6 | '/object-storage/buckets/$clusterId/$bucketName' 7 | )({ 8 | component: BucketDetailLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/store/globalErrors/globalErrors.actions.ts: -------------------------------------------------------------------------------- 1 | import { actionCreatorFactory } from 'typescript-fsa'; 2 | 3 | import type { State } from './types'; 4 | 5 | export const actionCreator = actionCreatorFactory('@@manager/globalErrors'); 6 | 7 | export const setErrors = actionCreator>('/set'); 8 | 9 | export const clearErrors = actionCreator | undefined>('/clear'); 10 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/getEventsActionLink.test.ts: -------------------------------------------------------------------------------- 1 | import { getEngineFromDatabaseEntityURL } from './getEventsActionLink'; 2 | 3 | describe('getEngineFromDatabaseEntityURL', () => { 4 | it('should return an engine from a URL returned by apiv4', () => { 5 | expect( 6 | getEngineFromDatabaseEntityURL('/v4/databases/postgresql/instances/2959') 7 | ).toBe('postgresql'); 8 | }); 9 | }); 10 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/toggleOn.svg: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/scrollTo.ts: -------------------------------------------------------------------------------- 1 | import type * as React from 'react'; 2 | /** 3 | * @param [ref] {React.RefObject} - If provided with a React Ref Object we will scroll to the 4 | * top of it. 5 | */ 6 | export const scrollTo = (ref?: React.RefObject) => { 7 | window.scroll({ 8 | behavior: 'smooth', 9 | left: 0, 10 | top: ref ? ref.current.offsetTop : 0, 11 | }); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/ui/breadcrumb.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Breadcrumb UI element. 3 | * 4 | * Useful for performing navigation and validating navigation display. 5 | */ 6 | export const breadcrumb = { 7 | /** 8 | * Finds a breadcrumb element. 9 | * 10 | * @returns Cypress chainable. 11 | */ 12 | find: (): Cypress.Chainable => { 13 | return cy.get('[data-qa-breadcrumb]'); 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /packages/manager/src/components/AccountActivation/accountActivationLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { AccountActivationLanding } from 'src/components/AccountActivation/AccountActivationLanding'; 4 | 5 | export const accountActivationLandingLazyRoute = createLazyRoute( 6 | '/account-activation' 7 | )({ 8 | component: AccountActivationLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/NetworkLoadBalancers/NetworkLoadBalancersLanding/networkLoadBalancersLazyRoute.tsx: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { NetworkLoadBalancersLanding } from './NetworkLoadBalancersLanding'; 4 | 5 | export const networkLoadBalancersLazyRoute = createLazyRoute( 6 | '/netloadbalancers' 7 | )({ 8 | component: NetworkLoadBalancersLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ServiceTransfers/serviceTransfersCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { EntityTransfersCreate } from '../EntityTransfers/EntityTransfersCreate/EntityTransfersCreate'; 4 | 5 | export const serviceTransfersCreateLazyRoute = createLazyRoute( 6 | '/service-transfers/create' 7 | )({ 8 | component: EntityTransfersCreate, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/toggleOff.svg: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/getNewRegionLabel.ts: -------------------------------------------------------------------------------- 1 | import type { Region } from '@linode/api-v4'; 2 | 3 | export const getNewRegionLabel = (region: Region) => { 4 | const [city] = region.label.split(', '); 5 | // Include state for the US 6 | if (region.country === 'us') { 7 | return `${region.country.toUpperCase()}, ${region.label}`; 8 | } 9 | return `${region.country.toUpperCase()}, ${city}`; 10 | }; 11 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Shared/FormSubmitBar/FormSubmitBar.styles.tsx: -------------------------------------------------------------------------------- 1 | import { Typography } from '@linode/ui'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledHeader = styled(Typography, { 5 | label: 'StyledHeader', 6 | })(({ theme }) => ({ 7 | font: theme.font.bold, 8 | fontSize: theme.tokens.font.FontSize.M, 9 | lineHeight: theme.tokens.font.LineHeight.Xs, 10 | })); 11 | -------------------------------------------------------------------------------- /packages/manager/src/features/EntityTransfers/EntityTransfersCreate/TransferHeader.tsx: -------------------------------------------------------------------------------- 1 | import { Typography } from '@linode/ui'; 2 | import * as React from 'react'; 3 | 4 | export const TransferHeader = () => { 5 | return ( 6 | 7 | To transfer ownership of one or more Linodes make your selections below 8 | then click Generate Token. 9 | 10 | ); 11 | }; 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodeCreate/Tabs/Backups/Backups.tsx: -------------------------------------------------------------------------------- 1 | import { Stack } from '@linode/ui'; 2 | import React from 'react'; 3 | 4 | import { BackupSelect } from './BackupSelect'; 5 | import { LinodeSelect } from './LinodeSelect'; 6 | 7 | export const Backups = () => { 8 | return ( 9 | 10 | 11 | 12 | 13 | ); 14 | }; 15 | -------------------------------------------------------------------------------- /packages/manager/src/features/NetworkLoadBalancers/NetworkLoadBalancersDetail/NetworkLoadBalancerDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import NetworkLoadBalancersDetail from './NetworkLoadBalancersDetail'; 4 | 5 | export const networkLoadBalancerDetailLazyRoute = createLazyRoute( 6 | '/netloadbalancers/$id' 7 | )({ 8 | component: NetworkLoadBalancersDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/PlacementGroups/PlacementGroups.styles.ts: -------------------------------------------------------------------------------- 1 | import { List } from '@linode/ui'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledDetailPanelFormattedRegionList = styled(List, { 5 | label: 'StyledFormattedRegionList', 6 | })(({ theme }) => ({ 7 | '& li': { 8 | padding: `4px 0`, 9 | }, 10 | padding: `${theme.spacing(0.5)} ${theme.spacing()}`, 11 | })); 12 | -------------------------------------------------------------------------------- /packages/manager/src/utilities/sortByUTFDate.ts: -------------------------------------------------------------------------------- 1 | import { parseAPIDate } from 'src/utilities/date'; 2 | 3 | type SortOrder = 'asc' | 'desc'; 4 | 5 | export const sortByUTFDate = (a: string, b: string, order: SortOrder) => { 6 | const result = parseAPIDate(a).diff(parseAPIDate(b)).valueOf(); 7 | if (order === 'asc') { 8 | return result; // ascending order 9 | } 10 | return -result; // descending order 11 | }; 12 | -------------------------------------------------------------------------------- /packages/utilities/src/hooks/usePrevious.ts: -------------------------------------------------------------------------------- 1 | import { useEffect, useRef } from 'react'; 2 | 3 | /** This hook is from the React docs: 4 | * https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state 5 | */ 6 | 7 | export const usePrevious = (value: T) => { 8 | const ref = useRef(undefined); 9 | useEffect(() => { 10 | ref.current = value; 11 | }); 12 | return ref.current; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/cypress/fixtures/stackscripts/stackscript-udf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a valid StackScript with user-defined fields to test StackScript 3 | # and Linode creation with user-defined fields. 4 | 5 | # 6 | # 7 | 8 | echo "Hello, world!" 9 | -------------------------------------------------------------------------------- /packages/manager/src/factories/accountLogin.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from '@linode/utilities'; 2 | 3 | import type { AccountLogin } from '@linode/api-v4'; 4 | 5 | export const accountLoginFactory = Factory.Sync.makeFactory({ 6 | datetime: '2021-05-21T14:27:51', 7 | id: Factory.each((id) => id), 8 | ip: '127.0.0.1', 9 | restricted: false, 10 | status: 'successful', 11 | username: 'mock-user', 12 | }); 13 | -------------------------------------------------------------------------------- /packages/utilities/src/helpers/isToday.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Returns true if the end time is the same day (within 24 hours) 3 | * as the start time, false otherwise. Padded to 25 hours to err 4 | * on the side of caution. 5 | * @param start Start time (must be seconds, not ms) 6 | * @param end End time (must be seconds, not ms) 7 | */ 8 | export const isToday = (start: number, end: number) => 9 | end - start < 60 * 60 * 25; 10 | -------------------------------------------------------------------------------- /packages/api-v4/src/account/index.ts: -------------------------------------------------------------------------------- 1 | export * from './account'; 2 | 3 | export * from './betas'; 4 | 5 | export * from './events'; 6 | 7 | export * from './invoices'; 8 | 9 | export * from './logins'; 10 | 11 | export * from './maintenance'; 12 | 13 | export * from './oauth'; 14 | 15 | export * from './payments'; 16 | 17 | export * from './promos'; 18 | 19 | export * from './types'; 20 | 21 | export * from './users'; 22 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/images.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @file Constants related to machine image tests. 3 | */ 4 | 5 | // Length of time to wait for Image to finish processing, milliseconds. 6 | // 5 minutes. 7 | export const imageUploadProcessingTimeout = 300000; 8 | 9 | // Length of time to wait for Image capture to complete, milliseconds. 10 | // 7 minutes. 11 | export const imageCaptureProcessingTimeout = 420000; 12 | -------------------------------------------------------------------------------- /packages/manager/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Akamai Cloud Manager 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Destinations/DestinationForm/destinationCreateLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DestinationCreate } from 'src/features/Delivery/Destinations/DestinationForm/DestinationCreate'; 4 | 5 | export const destinationCreateLazyRoute = createLazyRoute( 6 | '/logs/delivery/destinations/create' 7 | )({ 8 | component: DestinationCreate, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/NetworkingSummaryPanel/utils.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Calculates the percentage of a value compared to a target. 3 | * @param value 4 | * @param target 5 | * @returns number 6 | */ 7 | export const calculatePercentageWithCeiling = ( 8 | value: number, 9 | target: number 10 | ) => { 11 | return target > value ? 100 - ((target - value) * 100) / target : 100; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodePermissionsError.tsx: -------------------------------------------------------------------------------- 1 | import { Notice } from '@linode/ui'; 2 | import * as React from 'react'; 3 | 4 | import { getRestrictedResourceText } from 'src/features/Account/utils'; 5 | 6 | export const LinodePermissionsError = () => ( 7 | 13 | ); 14 | -------------------------------------------------------------------------------- /packages/queries/src/account/availability.ts: -------------------------------------------------------------------------------- 1 | import { useQuery } from '@tanstack/react-query'; 2 | 3 | import { accountQueries } from './queries'; 4 | 5 | import type { AccountAvailability, APIError } from '@linode/api-v4'; 6 | 7 | export const useAllAccountAvailabilitiesQuery = (enabled: boolean = true) => 8 | useQuery({ 9 | ...accountQueries.availability, 10 | enabled, 11 | }); 12 | -------------------------------------------------------------------------------- /packages/queries/src/cloudnats/requests.ts: -------------------------------------------------------------------------------- 1 | import { getCloudNATs } from '@linode/api-v4'; 2 | import { getAll } from '@linode/utilities'; 3 | 4 | import type { CloudNAT } from '@linode/api-v4'; 5 | import type { Filter } from '@linode/api-v4/lib/types'; 6 | 7 | export const getAllCloudNATsRequest = (filter: Filter) => 8 | getAll((params) => getCloudNATs(params, filter))().then( 9 | (data) => data.data, 10 | ); 11 | -------------------------------------------------------------------------------- /packages/queries/src/eventHandlers.ts: -------------------------------------------------------------------------------- 1 | import type { Event } from '@linode/api-v4'; 2 | import type { 3 | InvalidateQueryFilters, 4 | QueryClient, 5 | } from '@tanstack/react-query'; 6 | 7 | // TODO: move all event handlers to this file once migrated 8 | export interface EventHandlerData { 9 | event: Event; 10 | invalidateQueries: (filters: InvalidateQueryFilters) => Promise; 11 | queryClient: QueryClient; 12 | } 13 | -------------------------------------------------------------------------------- /packages/queries/src/statusPage/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * These are types and methods for working with Linode's statuspage.io integration 3 | * (status.linode.com). Since these are not part of the Linode API, and are only 4 | * used through this query, all of this is contained within src/queries. 5 | */ 6 | 7 | export * from './keys'; 8 | export * from './requests'; 9 | export * from './statusPage'; 10 | export * from './types'; 11 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | This changelog has been deprecated in favor individual changelogs for each package. 4 | 5 | See changelogs for: 6 | - [@linode/api-v4](https://github.com/linode/manager/blob/master/packages/api-v4/CHANGELOG.md) 7 | - [@linode/manager](https://github.com/linode/manager/blob/master/packages/manager/CHANGELOG.md) 8 | - [@linode/validation](https://github.com/linode/manager/blob/master/packages/validation/CHANGELOG.md) -------------------------------------------------------------------------------- /packages/manager/src/features/Delivery/Destinations/DestinationForm/destinationEditLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DestinationEdit } from 'src/features/Delivery/Destinations/DestinationForm/DestinationEdit'; 4 | 5 | export const destinationEditLazyRoute = createLazyRoute( 6 | '/logs/delivery/destinations/$destinationId/edit' 7 | )({ 8 | component: DestinationEdit, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/NetworkLoadBalancers/NetworkLoadBalancersDetail/NetworkLoadBalancerListenersLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import NetworkLoadBalancersDetail from './NetworkLoadBalancersDetail'; 4 | 5 | export const networkLoadBalancerListenersLazyRoute = createLazyRoute( 6 | '/netloadbalancers/$id/listeners' 7 | )({ 8 | component: NetworkLoadBalancersDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/PlacementGroups/PlacementGroupsDetail/placementGroupDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { PlacementGroupsDetail } from 'src/features/PlacementGroups/PlacementGroupsDetail/PlacementGroupsDetail'; 4 | 5 | export const placementGroupsDetailLazyRoute = createLazyRoute( 6 | '/placement-groups/$id' 7 | )({ 8 | component: PlacementGroupsDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/hooks/useIsLargeAccount.ts: -------------------------------------------------------------------------------- 1 | import { useLinodesQuery } from '@linode/queries'; 2 | 3 | import { LARGE_ACCOUNT_THRESHOLD } from 'src/constants'; 4 | 5 | export const useIsLargeAccount = (enabled = true) => { 6 | const { data: linodesData } = useLinodesQuery({}, {}, enabled); 7 | 8 | if (!linodesData) { 9 | return undefined; 10 | } 11 | 12 | return linodesData.results > LARGE_ACCOUNT_THRESHOLD; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/mswWorkers.ts: -------------------------------------------------------------------------------- 1 | import { setupWorker } from 'msw/browser'; 2 | 3 | import { handlers } from './serverHandlers'; 4 | 5 | import type { HttpHandler } from 'msw'; 6 | 7 | export const worker = ( 8 | extraHandlers: HttpHandler[], 9 | baseHandlers: HttpHandler[] 10 | ) => { 11 | return setupWorker(...extraHandlers, ...baseHandlers); 12 | }; 13 | 14 | export const storybookWorker = setupWorker(...handlers); 15 | -------------------------------------------------------------------------------- /packages/ui/src/assets/icons/checkbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/constants/linodes.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @file Constants related to Linode tests. 3 | */ 4 | 5 | /** 6 | * Length of time to wait for a Linode to be created. 7 | * 8 | * Equals 5 minutes. 9 | */ 10 | export const LINODE_CREATE_TIMEOUT = 300_000; 11 | 12 | /** 13 | * Length of time to wait for a Linode to be cloned. 14 | * 15 | * Equals 5 minutes. 16 | */ 17 | export const LINODE_CLONE_TIMEOUT = 300_000; 18 | -------------------------------------------------------------------------------- /packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/placemenGroupsLandingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { PlacementGroupsLanding } from 'src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsLanding'; 4 | 5 | export const placementGroupsLandingLazyRoute = createLazyRoute( 6 | '/placement-groups' 7 | )({ 8 | component: PlacementGroupsLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/utilities/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useDebouncedValue'; 2 | export * from './useDialog'; 3 | export * from './useEditableLabelState'; 4 | export * from './useErrors'; 5 | export * from './useFormattedDate'; 6 | export * from './useFormValidateOnChange'; 7 | export * from './useInterval'; 8 | export * from './useOpenClose'; 9 | export * from './usePrevious'; 10 | export * from './useScript'; 11 | export * from './useSet'; 12 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/component/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Cloud Manager Components 8 | 9 | 10 |
11 |
12 |
13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/LKEminusSign.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/presets/crud/networking.ts: -------------------------------------------------------------------------------- 1 | import { 2 | allocateIP, 3 | getIPAddresses, 4 | } from 'src/mocks/presets/crud/handlers/networking'; 5 | 6 | import type { MockPresetCrud } from 'src/mocks/types'; 7 | 8 | export const networkingCrudPreset: MockPresetCrud = { 9 | group: { id: 'IP Addresses' }, 10 | handlers: [getIPAddresses, allocateIP], 11 | id: 'ip-addresses:crud', 12 | label: 'IP Addresses CRUD', 13 | }; 14 | -------------------------------------------------------------------------------- /scripts/junit-summary/formatters/status-formatter.ts: -------------------------------------------------------------------------------- 1 | import type { Formatter } from './formatter'; 2 | import type { RunInfo } from '../results/run-info'; 3 | 4 | /** 5 | * Outputs "passing" if all tests have passed, or "failing" if one or more has failed. 6 | * 7 | * @param info - Run info. 8 | */ 9 | export const statusFormatter: Formatter = ( 10 | info: RunInfo, 11 | ) => { 12 | return info.failing ? 'failing' : 'passing'; 13 | }; 14 | -------------------------------------------------------------------------------- /packages/manager/src/components/TransferDisplay/TransferDisplay.styles.ts: -------------------------------------------------------------------------------- 1 | import { Box } from '@linode/ui'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledTransferDisplayContainer = styled(Box, { 5 | label: 'StyledTransferDisplayTypography', 6 | })(({ theme }) => ({ 7 | margin: 'auto', 8 | textAlign: 'center', 9 | [theme.breakpoints.down('md')]: { 10 | width: '85%', 11 | }, 12 | width: '100%', 13 | })); 14 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/EditAlert/cloudPulseAlertsDefinitionsEditLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { EditAlertLanding } from 'src/features/CloudPulse/Alerts/EditAlert/EditAlertLanding'; 4 | 5 | export const cloudPulseAlertsDefinitionsEditLazyRoute = createLazyRoute( 6 | '/alerts/definitions/edit/$serviceType/$alertId' 7 | )({ 8 | component: EditAlertLanding, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Help/SupportSearchLanding/SupportSearchLandingWrapper.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | 3 | import SupportSearchLanding from 'src/features/Help/SupportSearchLanding/SupportSearchLanding'; 4 | 5 | import type { AlgoliaState as AlgoliaProps } from 'src/features/Help/SearchHOC'; 6 | 7 | export const SupportSearchLandingWrapper = (props: AlgoliaProps) => { 8 | return ; 9 | }; 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Kubernetes/KubernetesClusterDetail/kubernetesClusterDetailLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { KubernetesClusterDetail } from 'src/features/Kubernetes/KubernetesClusterDetail/KubernetesClusterDetail'; 4 | 5 | export const kubernetesClusterDetailLazyRoute = createLazyRoute( 6 | '/kubernetes/clusters/$clusterId' 7 | )({ 8 | component: KubernetesClusterDetail, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/Linodes/LinodesDetail/LinodeNetworking/types.ts: -------------------------------------------------------------------------------- 1 | export type IPTypes = 2 | | 'Link Local – IPv6' 3 | | 'Private – IPv4' 4 | | 'Public – IPv4' 5 | | 'Public – IPv6 – SLAAC' 6 | | 'Range – IPv6' 7 | | 'Reserved IPv4 (private)' 8 | | 'Reserved IPv4 (public)' 9 | | 'Shared – IPv4' 10 | | 'VPC – IPv4' 11 | | 'VPC – IPv6' 12 | | 'VPC – Range – IPv4' 13 | | 'VPC – Range – IPv6' 14 | | 'VPC NAT – IPv4'; 15 | -------------------------------------------------------------------------------- /packages/manager/public/assets/wazuh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/manager/src/mocks/presets/crud/users.ts: -------------------------------------------------------------------------------- 1 | import { 2 | createUser, 3 | deleteUser, 4 | getUsers, 5 | updateUser, 6 | } from 'src/mocks/presets/crud/handlers/users'; 7 | 8 | import type { MockPresetCrud } from 'src/mocks/types'; 9 | 10 | export const usersCrudPreset: MockPresetCrud = { 11 | group: { id: 'Users' }, 12 | handlers: [getUsers, createUser, updateUser, deleteUser], 13 | id: 'users:crud', 14 | label: 'Users CRUD', 15 | }; 16 | -------------------------------------------------------------------------------- /packages/ui/src/components/FormHelperText/FormHelperText.tsx: -------------------------------------------------------------------------------- 1 | import { default as _FormHelperText } from '@mui/material/FormHelperText'; 2 | import React from 'react'; 3 | 4 | import type { FormHelperTextProps } from '@mui/material/FormHelperText'; 5 | 6 | /** 7 | * A `` provides helper text to an input. 8 | */ 9 | export const FormHelperText = (props: FormHelperTextProps) => { 10 | return <_FormHelperText {...props} />; 11 | }; 12 | -------------------------------------------------------------------------------- /scripts/junit-summary/results/test-result.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Describes an individual test result. 3 | */ 4 | export interface TestResult { 5 | /** Test spec filename. */ 6 | testFilename: string; 7 | 8 | /** Test group name. */ 9 | groupName: string; 10 | 11 | /** Test name. */ 12 | testName: string; 13 | 14 | /** Whether test is passing. */ 15 | passing: boolean; 16 | 17 | /** Whether test is failing. */ 18 | failing: boolean; 19 | }; 20 | -------------------------------------------------------------------------------- /packages/manager/cypress/support/cypress-exports.ts: -------------------------------------------------------------------------------- 1 | // We can't import Cypress types cleanly because of our tsconfig's `moduleResolution` setting. 2 | // For now, we will re-rexport types here so they are easily usable in our test suite. 3 | // 4 | // Cypress issue: https://github.com/cypress-io/cypress/issues/27973 5 | // Extra Context: https://github.com/linode/manager/pull/11611#discussion_r1941711748 6 | export * from '../../node_modules/cypress/types/net-stubbing'; 7 | -------------------------------------------------------------------------------- /packages/manager/src/assets/icons/ResizeWindow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/AlertsDetail/constants.ts: -------------------------------------------------------------------------------- 1 | import type { DimensionFilterOperatorType } from '@linode/api-v4'; 2 | 3 | export const transformationAllowedOperators: DimensionFilterOperatorType[] = [ 4 | 'eq', 5 | 'neq', 6 | 'in', 7 | ]; 8 | 9 | export const LINODE_DIMENSION_LABEL = 'linode_id'; 10 | export const VPC_SUBNET_DIMENSION_LABEL = 'vpc_subnet_id'; 11 | export const NODEBALANCER_DIMENSION_LABEL = 'nodebalancer_id'; 12 | -------------------------------------------------------------------------------- /packages/ui/src/utilities/error.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest'; 2 | 3 | import { getErrorText } from './error'; 4 | 5 | describe('getErrorText', () => { 6 | it('should return a string error text', () => { 7 | expect(getErrorText('Not Found')).toBe('Not Found'); 8 | }); 9 | 10 | it('should return an APIError error text', () => { 11 | expect(getErrorText([{ reason: 'Not Found' }])).toBe('Not Found'); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /packages/api-v4/src/network-transfer/prices.ts: -------------------------------------------------------------------------------- 1 | import { API_ROOT } from 'src/constants'; 2 | import Request, { setMethod, setParams, setURL } from 'src/request'; 3 | 4 | import type { Params, PriceType, ResourcePage } from 'src/types'; 5 | 6 | export const getNetworkTransferPrices = (params?: Params) => 7 | Request>( 8 | setURL(`${API_ROOT}/network-transfer/prices`), 9 | setMethod('GET'), 10 | setParams(params), 11 | ); 12 | -------------------------------------------------------------------------------- /packages/manager/src/features/Databases/DatabaseDetail/DatabaseAdvancedConfiguration/databaseAdvancedConfigurationLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { DatabaseAdvancedConfiguration } from './DatabaseAdvancedConfiguration'; 4 | 5 | export const databaseAdvancedConfigurationLazyRoute = createLazyRoute( 6 | '/databases/$engine/$databaseId/configs' 7 | )({ 8 | component: DatabaseAdvancedConfiguration, 9 | }); 10 | -------------------------------------------------------------------------------- /packages/manager/src/features/ObjectStorage/BucketLanding/OMC_CreateBucketDrawer.styles.ts: -------------------------------------------------------------------------------- 1 | import { styled } from '@mui/material/styles'; 2 | 3 | import { EUAgreementCheckbox } from 'src/features/Account/Agreements/EUAgreementCheckbox'; 4 | 5 | export const StyledEUAgreementCheckbox = styled(EUAgreementCheckbox, { 6 | label: 'StyledEUAgreementCheckbox', 7 | })(({ theme }) => ({ 8 | marginButton: theme.spacing(3), 9 | marginTop: theme.spacing(3), 10 | })); 11 | -------------------------------------------------------------------------------- /packages/manager/src/factories/kernels.ts: -------------------------------------------------------------------------------- 1 | import { Factory } from '@linode/utilities'; 2 | 3 | import type { Kernel } from '@linode/api-v4'; 4 | 5 | export const kernelFactory = Factory.Sync.makeFactory({ 6 | id: Factory.each((i) => `kernel-${i}`), 7 | label: Factory.each((i) => `kernel-${i}`), 8 | version: '1.0.0', 9 | kvm: true, 10 | architecture: 'x86_64', 11 | pvops: false, 12 | deprecated: false, 13 | built: '2009-10-26T04:00:00', 14 | }); 15 | -------------------------------------------------------------------------------- /packages/manager/src/features/CloudPulse/Alerts/NotificationChannels/NotificationsChannelsListing/cloudPulseAlertsNotificationChannelsListingLazyRoute.ts: -------------------------------------------------------------------------------- 1 | import { createLazyRoute } from '@tanstack/react-router'; 2 | 3 | import { NotificationChannelListing } from './NotificationChannelListing'; 4 | 5 | export const cloudPulseAlertsNotificationChannelsListingLazyRoute = 6 | createLazyRoute('/alerts/notification-channels')({ 7 | component: NotificationChannelListing, 8 | }); 9 | -------------------------------------------------------------------------------- /packages/manager/src/features/PlacementGroups/PlacementGroupsLanding/PlacementGroupsRow.styles.ts: -------------------------------------------------------------------------------- 1 | import Warning from '@mui/icons-material/Warning'; 2 | import { styled } from '@mui/material/styles'; 3 | 4 | export const StyledWarningIcon = styled(Warning, { 5 | label: 'StyledWarningIcon', 6 | })(({ theme }) => ({ 7 | fill: theme.color.yellow, 8 | height: 16, 9 | marginRight: theme.spacing(), 10 | position: 'relative', 11 | top: 2, 12 | width: 16, 13 | })); 14 | -------------------------------------------------------------------------------- /packages/manager/src/hooks/useInfinitePageSize.ts: -------------------------------------------------------------------------------- 1 | import { storage } from 'src/utilities/storage'; 2 | 3 | export const useInfinitePageSize = () => { 4 | return { 5 | // Setting infinitePageSize to 100 since Show All is effecting page performance. 6 | infinitePageSize: 7 | storage.infinitePageSize.get() === Infinity 8 | ? 100 9 | : storage.infinitePageSize.get(), 10 | setInfinitePageSize: storage.infinitePageSize.set, 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /packages/tsconfig/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@linode/tsconfig", 3 | "version": "0.0.0", 4 | "description": "Shared TypeScript configuration for Linode projects", 5 | "keywords": ["TypeScript", "tsconfig", "tsc", "Linode", "Akamai"], 6 | "exports": { 7 | "./package": "./tsconfig.package.json", 8 | "./react": "./tsconfig.react.json", 9 | "./non-strict": "./tsconfig.non-strict.json", 10 | "./emit-types": "./tsconfig.emit-types.json" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/tsconfig/tsconfig.package.json: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | * This tsconfig is our base config for packages. 4 | */ 5 | "compilerOptions": { 6 | "target": "esnext", 7 | "module": "esnext", 8 | "esModuleInterop": true, 9 | "moduleResolution": "bundler", 10 | "skipLibCheck": true, 11 | "strict": true, 12 | "noUnusedLocals": true, 13 | "incremental": true, 14 | "noEmit": true 15 | }, 16 | "include": [ 17 | "src" 18 | ] 19 | } 20 | --------------------------------------------------------------------------------