diff --git a/jslib b/jslib index 8be95bfe..e2291581 160000 --- a/jslib +++ b/jslib @@ -1 +1 @@ -Subproject commit 8be95bfe574a7ae2c8173921bbdfe82451436081 +Subproject commit e22915818cb7c6a756c4ac34124b14e33621c5aa diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index dcf8d1bf..a512963d 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -15,6 +15,7 @@ import { RegisterComponent } from './accounts/register.component'; import { TwoFactorComponent } from './accounts/two-factor.component'; import { AccountComponent } from './settings/account.component'; +import { CreateOrganizationComponent } from './settings/create-organization.component'; import { DomainRulesComponent } from './settings/domain-rules.component'; import { OptionsComponent } from './settings/options.component'; import { SettingsComponent } from './settings/settings.component'; @@ -60,6 +61,11 @@ const routes: Routes = [ { path: 'domain-rules', component: DomainRulesComponent, canActivate: [AuthGuardService] }, { path: 'two-factor', component: TwoFactorSetupComponent, canActivate: [AuthGuardService] }, { path: 'billing', component: UserBillingComponent, canActivate: [AuthGuardService] }, + { + path: 'create-organization', + component: CreateOrganizationComponent, + canActivate: [AuthGuardService], + }, ], }, { diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 14662089..6ba5a85a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -37,6 +37,7 @@ import { AdjustPaymentComponent } from './settings/adjust-payment.component'; import { AdjustStorageComponent } from './settings/adjust-storage.component'; import { ChangeEmailComponent } from './settings/change-email.component'; import { ChangePasswordComponent } from './settings/change-password.component'; +import { CreateOrganizationComponent } from './settings/create-organization.component'; import { DeauthorizeSessionsComponent } from './settings/deauthorize-sessions.component'; import { DeleteAccountComponent } from './settings/delete-account.component'; import { DomainRulesComponent } from './settings/domain-rules.component'; @@ -127,6 +128,7 @@ import { SearchCiphersPipe } from 'jslib/angular/pipes/search-ciphers.pipe'; ChangePasswordComponent, CiphersComponent, CollectionsComponent, + CreateOrganizationComponent, DeauthorizeSessionsComponent, DeleteAccountComponent, DomainRulesComponent, diff --git a/src/app/settings/create-organization.component.html b/src/app/settings/create-organization.component.html new file mode 100644 index 00000000..efcf3976 --- /dev/null +++ b/src/app/settings/create-organization.component.html @@ -0,0 +1,169 @@ +
{{'newOrganizationDesc' | i18n}}
+{{'uploadLicenseFilePremium' | i18n}}
+{{'noOrganizationsList' | i18n}}
- + diff --git a/src/locales/en/messages.json b/src/locales/en/messages.json index 6b8a8e21..f70af4e2 100644 --- a/src/locales/en/messages.json +++ b/src/locales/en/messages.json @@ -570,7 +570,7 @@ "message": "New Organization" }, "noOrganizationsList": { - "message": "You do not belong to any organizations." + "message": "You do not belong to any organizations. Organizations allow you to securely share items with other users." }, "versionNumber": { "message": "Version $VERSION_NUMBER$", @@ -1254,10 +1254,14 @@ "message": "# of additional GB" }, "additionalStorageDesc": { - "message": "Your plan comes with 1 GB of encrypted file storage. You can add additional storage for $PRICE$ per GB /year.", + "message": "Your plan comes with $SIZE$ of encrypted file storage. You can add additional storage for $PRICE$ per GB /year.", "placeholders": { - "price": { + "size": { "content": "$1", + "example": "1 GB" + }, + "price": { + "content": "$2", "example": "$4.00" } } @@ -1274,11 +1278,21 @@ "month": { "message": "month" }, + "monthAbbr": { + "message": "mo.", + "description": "Short abbreviation for 'month'" + }, "paymentChargedAnnually": { "message": "Your payment method will be charged immediately and on a recurring basis each year. You may cancel at any time." }, - "paymentChargedMonthly": { - "message": "Your payment method will be charged immediately and on a recurring basis each month. You may cancel at any time." + "paymentChargedWithTrial": { + "message": "Your plan comes with a free 7 day trial. Your card will not be charged until the trial has ended and on a recurring basis each $INTERVAL$. You may cancel at any time.", + "placeholders": { + "interval": { + "content": "$1", + "example": "year" + } + } }, "paymentInformation": { "message": "Payment Information" @@ -1440,5 +1454,192 @@ }, "accountEmailMustBeVerified": { "message": "Your account's email address must be verified." + }, + "newOrganizationDesc": { + "message": "Organizations allow you to share parts of your vault with others as well as manage related users for a specific entity such as a family, small team, or large company." + }, + "generalInformation": { + "message": "General Information" + }, + "organizationName": { + "message": "Organization Name" + }, + "accountOwnedBusiness": { + "message": "This account is owned by a business." + }, + "billingEmail": { + "message": "Billing Email" + }, + "businessName": { + "message": "Business Name" + }, + "chooseYourPlan": { + "message": "Choose Your Plan" + }, + "users": { + "message": "Users" + }, + "userSeats": { + "message": "User Seats" + }, + "additionalUserSeats": { + "message": "Additional User Seats" + }, + "userSeatsDesc": { + "message": "# of user seats" + }, + "userSeatsAdditionalDesc": { + "message": "Your plan comes with $BASE_SEATS$ user seats. You can add additional users for $SEAT_PRICE$ per user /month.", + "placeholders": { + "base_seats": { + "content": "$1", + "example": "5" + }, + "seat_price": { + "content": "$2", + "example": "$2.00" + } + } + }, + "userSeatsHowManyDesc": { + "message": "How many user seats do you need? You can also add additional seats later if needed." + }, + "planNameFree": { + "message": "Free" + }, + "planDescFree": { + "message": "For testing or personal users to share with $COUNT$ other user.", + "placeholders": { + "count": { + "content": "$1", + "example": "1" + } + } + }, + "planNameFamilies": { + "message": "Families" + }, + "planDescFamilies": { + "message": "For personal use, to share with family & friends." + }, + "planNameTeams": { + "message": "Teams" + }, + "planDescTeams": { + "message": "For businesses and other team organizations." + }, + "planNameEnterprise": { + "message": "Enterprise" + }, + "planDescEnterprise": { + "message": "For businesses and other large organizations." + }, + "freeForever": { + "message": "Free Forever" + }, + "includesXUsers": { + "message": "includes $COUNT$ users", + "placeholders": { + "count": { + "content": "$1", + "example": "5" + } + } + }, + "additionalUsers": { + "message": "Additional Users" + }, + "costPerUser": { + "message": "$COST$ per user", + "placeholders": { + "cost": { + "content": "$1", + "example": "$3" + } + } + }, + "limitedUsers": { + "message": "Limited to $COUNT$ users (including you)", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "limitedCollections": { + "message": "Limited to $COUNT$ collections", + "placeholders": { + "count": { + "content": "$1", + "example": "2" + } + } + }, + "addShareLimitedUsers": { + "message": "Add and share with up to $COUNT$ users", + "placeholders": { + "count": { + "content": "$1", + "example": "5" + } + } + }, + "addShareUnlimitedUsers": { + "message": "Add and share with unlimited users" + }, + "createUnlimitedCollections": { + "message": "Create unlimited collections" + }, + "gbEncryptedFileStorage": { + "message": "$SIZE$ encrypted file storage", + "placeholders": { + "size": { + "content": "$1", + "example": "1 GB" + } + } + }, + "onPremHostingOptional": { + "message": "On-premise hosting (optional)" + }, + "controlAccessWithGroups": { + "message": "Control user access with groups" + }, + "syncUsersFromDirectory": { + "message": "Sync your users and groups from a directory" + }, + "trackAuditLogs": { + "message": "Track user actions with audit logs" + }, + "enforce2faDuo": { + "message": "Enforce 2FA with Duo" + }, + "priorityCustomerSupport": { + "message": "Priority customer support" + }, + "xDayFreeTrial": { + "message": "$COUNT$ day free trial, cancel anytime", + "placeholders": { + "count": { + "content": "$1", + "example": "7" + } + } + }, + "monthly": { + "message": "Monthly" + }, + "annually": { + "message": "Annually" + }, + "basePrice": { + "message": "Base Price" + }, + "organizationCreated": { + "message": "Organization Created" + }, + "organizationReadyToGo": { + "message": "Your new organization is ready to go!" } } diff --git a/src/scss/styles.scss b/src/scss/styles.scss index e0e50910..bc9418d1 100644 --- a/src/scss/styles.scss +++ b/src/scss/styles.scss @@ -25,6 +25,7 @@ $h4-font-size: 1rem; $h5-font-size: 1rem; $h6-font-size: 1rem; +$small-font-size: 90%; $font-size-lg: 1.18rem; $code-font-size: 100%; @@ -548,3 +549,25 @@ app-user-billing { min-width: 100px; } } + +.form-check-block { + .form-check-label { + font-weight: bold; + + > small { + display: block; + color: $text-muted; + font-weight: normal; + } + + > span { + display: block; + font-weight: normal; + @extend .mt-2; + } + } +} + +.form-check-block + .form-check-block { + @extend .mt-3; +}