Browse Source

Styles (#455)

* Styles
* Config added
* Styling fixes.
* Styles improvements.
* Revert webpack changes.
pull/458/head
Sebastian Stehle 7 years ago
committed by GitHub
parent
commit
748163c014
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      frontend/.sass-lint.yml
  2. 17
      frontend/app-config/webpack.config.js
  3. 3
      frontend/app/features/administration/pages/cluster/cluster-page.component.scss
  4. 2
      frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.html
  5. 6
      frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss
  6. 10
      frontend/app/features/administration/pages/restore/restore-page.component.scss
  7. 4
      frontend/app/features/administration/pages/users/user-page.component.html
  8. 8
      frontend/app/features/administration/pages/users/user-page.component.scss
  9. 6
      frontend/app/features/api/api-area.component.scss
  10. 16
      frontend/app/features/apps/pages/apps-page.component.html
  11. 39
      frontend/app/features/apps/pages/apps-page.component.scss
  12. 6
      frontend/app/features/apps/pages/news-dialog.component.scss
  13. 26
      frontend/app/features/apps/pages/onboarding-dialog.component.scss
  14. 6
      frontend/app/features/assets/pages/assets-filters-page.component.scss
  15. 27
      frontend/app/features/assets/pages/assets-page.component.scss
  16. 22
      frontend/app/features/content/pages/content/content-field.component.scss
  17. 2
      frontend/app/features/content/pages/content/content-history-page.component.scss
  18. 43
      frontend/app/features/content/pages/content/content-page.component.html
  19. 4
      frontend/app/features/content/pages/contents/contents-filters-page.component.scss
  20. 10
      frontend/app/features/content/pages/contents/contents-page.component.scss
  21. 17
      frontend/app/features/content/pages/schemas/schemas-page.component.scss
  22. 2
      frontend/app/features/content/shared/array-editor.component.scss
  23. 3
      frontend/app/features/content/shared/array-item.component.scss
  24. 14
      frontend/app/features/content/shared/assets-editor.component.scss
  25. 2
      frontend/app/features/content/shared/content-status.component.html
  26. 10
      frontend/app/features/content/shared/content-status.component.scss
  27. 4
      frontend/app/features/content/shared/content.component.scss
  28. 5
      frontend/app/features/content/shared/contents-selector.component.scss
  29. 2
      frontend/app/features/content/shared/field-editor.component.html
  30. 6
      frontend/app/features/content/shared/field-editor.component.scss
  31. 12
      frontend/app/features/content/shared/reference-item.component.scss
  32. 16
      frontend/app/features/content/shared/references-editor.component.scss
  33. 17
      frontend/app/features/dashboard/pages/dashboard-page.component.scss
  34. 6
      frontend/app/features/rules/pages/events/rule-events-page.component.scss
  35. 17
      frontend/app/features/rules/pages/rules/rule-element.component.scss
  36. 7
      frontend/app/features/rules/pages/rules/rule.component.scss
  37. 2
      frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss
  38. 20
      frontend/app/features/schemas/pages/schema/field.component.scss
  39. 6
      frontend/app/features/schemas/pages/schema/schema-export-form.component.scss
  40. 4
      frontend/app/features/schemas/pages/schema/schema-fields.component.scss
  41. 4
      frontend/app/features/schemas/pages/schema/schema-page.component.scss
  42. 5
      frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.scss
  43. 6
      frontend/app/features/schemas/pages/schema/schema-scripts-form.component.scss
  44. 6
      frontend/app/features/schemas/pages/schema/schema-ui-form.component.scss
  45. 2
      frontend/app/features/schemas/pages/schema/types/string-validation.component.scss
  46. 13
      frontend/app/features/schemas/pages/schemas/schema-form.component.scss
  47. 15
      frontend/app/features/schemas/pages/schemas/schemas-page.component.scss
  48. 12
      frontend/app/features/settings/pages/clients/client-connect-form.component.scss
  49. 2
      frontend/app/features/settings/pages/contributors/contributor-add-form.component.html
  50. 4
      frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss
  51. 6
      frontend/app/features/settings/pages/languages/language.component.scss
  52. 16
      frontend/app/features/settings/pages/more/more-page.component.scss
  53. 5
      frontend/app/features/settings/pages/patterns/pattern.component.scss
  54. 6
      frontend/app/features/settings/pages/plans/plan.component.scss
  55. 6
      frontend/app/features/settings/pages/plans/plans-page.component.scss
  56. 2
      frontend/app/features/settings/pages/roles/role.component.scss
  57. 32
      frontend/app/features/settings/pages/workflows/workflow-step.component.scss
  58. 4
      frontend/app/features/settings/pages/workflows/workflow-transition.component.scss
  59. 6
      frontend/app/features/settings/pages/workflows/workflow.component.scss
  60. 4
      frontend/app/features/settings/settings-area.component.scss
  61. 10
      frontend/app/framework/angular/code.component.scss
  62. 10
      frontend/app/framework/angular/external-link.directive.ts
  63. 2
      frontend/app/framework/angular/forms/checkbox-group.component.scss
  64. 3
      frontend/app/framework/angular/forms/control-errors.component.scss
  65. 4
      frontend/app/framework/angular/forms/date-time-editor.component.scss
  66. 8
      frontend/app/framework/angular/forms/dropdown.component.scss
  67. 23
      frontend/app/framework/angular/forms/editable-title.component.scss
  68. 2
      frontend/app/framework/angular/forms/iframe-editor.component.scss
  69. 1
      frontend/app/framework/angular/forms/json-editor.component.scss
  70. 8
      frontend/app/framework/angular/forms/stars.component.scss
  71. 23
      frontend/app/framework/angular/forms/tag-editor.component.scss
  72. 8
      frontend/app/framework/angular/forms/toggle.component.scss
  73. 20
      frontend/app/framework/angular/list-view.component.scss
  74. 10
      frontend/app/framework/angular/modals/dialog-renderer.component.scss
  75. 4
      frontend/app/framework/angular/modals/modal-dialog.component.html
  76. 6
      frontend/app/framework/angular/modals/modal-dialog.component.scss
  77. 14
      frontend/app/framework/angular/modals/modal-dialog.component.ts
  78. 4
      frontend/app/framework/angular/modals/onboarding-tooltip.component.html
  79. 10
      frontend/app/framework/angular/modals/onboarding-tooltip.component.scss
  80. 8
      frontend/app/framework/angular/status-icon.component.scss
  81. 2
      frontend/app/shared/components/asset-dialog.component.scss
  82. 8
      frontend/app/shared/components/asset-folder.component.scss
  83. 24
      frontend/app/shared/components/asset-uploader.component.scss
  84. 69
      frontend/app/shared/components/asset.component.scss
  85. 18
      frontend/app/shared/components/assets-list.component.scss
  86. 8
      frontend/app/shared/components/comments.component.scss
  87. 2
      frontend/app/shared/components/language-selector.component.scss
  88. 2
      frontend/app/shared/components/markdown-editor.component.scss
  89. 2
      frontend/app/shared/components/queries/filter-logical.component.scss
  90. 20
      frontend/app/shared/components/schema-category.component.scss
  91. 6
      frontend/app/shared/components/search-form.component.scss
  92. 10
      frontend/app/shell/pages/home/home-page.component.scss
  93. 26
      frontend/app/shell/pages/internal/apps-menu.component.scss
  94. 18
      frontend/app/shell/pages/internal/internal-area.component.scss
  95. 8
      frontend/app/shell/pages/internal/profile-menu.component.scss
  96. 56
      frontend/app/theme/_bootstrap.scss
  97. 53
      frontend/app/theme/_common.scss
  98. 55
      frontend/app/theme/_forms.scss
  99. 15
      frontend/app/theme/_lists.scss
  100. 353
      frontend/app/theme/_mixins.scss

5
frontend/.sass-lint.yml

@ -8,7 +8,7 @@ rules:
clean-import-paths: clean-import-paths:
- 0 - 0
property-sort-order: property-sort-order:
- 0 - 1
indentation: indentation:
- 2 - 2
- -
@ -23,4 +23,5 @@ leading-underscore: false
files: files:
ignore: ignore:
- 'app/theme/_mixins.scss' - 'app/theme/_mixins.scss'
- 'node_modules/**/*.*'

17
frontend/app-config/webpack.config.js

@ -25,7 +25,9 @@ const plugins = {
// https://github.com/NMFR/optimize-css-assets-webpack-plugin // https://github.com/NMFR/optimize-css-assets-webpack-plugin
OptimizeCSSAssetsPlugin: require("optimize-css-assets-webpack-plugin"), OptimizeCSSAssetsPlugin: require("optimize-css-assets-webpack-plugin"),
// https://github.com/jrparish/tslint-webpack-plugin // https://github.com/jrparish/tslint-webpack-plugin
TsLintPlugin: require('tslint-webpack-plugin') TsLintPlugin: require('tslint-webpack-plugin'),
// https://www.npmjs.com/package/sass-lint-webpack
SassLintPlugin: require('sass-lint-webpack')
}; };
module.exports = function (env) { module.exports = function (env) {
@ -131,13 +133,18 @@ module.exports = function (env) {
plugins.MiniCssExtractPlugin.loader, plugins.MiniCssExtractPlugin.loader,
{ {
loader: 'css-loader' loader: 'css-loader'
}, {
loader: 'postcss-loader'
}] }]
}, { }, {
test: /\.scss$/, test: /\.scss$/,
use: [{ use: [{
loader: 'raw-loader' loader: 'raw-loader'
}, { }, {
loader: 'sass-loader', options: { loader: 'postcss-loader'
}, {
loader: 'sass-loader',
options: {
sassOptions: { sassOptions: {
includePaths: [root('app', 'theme')] includePaths: [root('app', 'theme')]
} }
@ -172,6 +179,8 @@ module.exports = function (env) {
} }
}), }),
new plugins.SassLintPlugin(),
/** /**
* Detect circular dependencies in app. * Detect circular dependencies in app.
* *
@ -347,6 +356,8 @@ module.exports = function (env) {
plugins.MiniCssExtractPlugin.loader, plugins.MiniCssExtractPlugin.loader,
{ {
loader: 'css-loader' loader: 'css-loader'
}, {
loader: 'postcss-loader'
}, { }, {
loader: 'sass-loader' loader: 'sass-loader'
}], }],
@ -362,6 +373,8 @@ module.exports = function (env) {
loader: 'style-loader' loader: 'style-loader'
}, { }, {
loader: 'css-loader' loader: 'css-loader'
}, {
loader: 'postcss-loader'
}, { }, {
loader: 'sass-loader?sourceMap' loader: 'sass-loader?sourceMap'
}], }],

3
frontend/app/features/administration/pages/cluster/cluster-page.component.scss

@ -3,7 +3,6 @@
iframe { iframe {
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
min-width: 100%; @include force-width(100%);
min-height: 100%;
border: 0; border: 0;
} }

2
frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.html

@ -51,7 +51,7 @@
</ng-container> </ng-container>
<ng-container content> <ng-container content>
<textarea readonly class="form-control error-message">{{eventConsumerError}}</textarea> <textarea readonly class="form-control error-message small">{{eventConsumerError}}</textarea>
</ng-container> </ng-container>
</sqx-modal-dialog> </sqx-modal-dialog>
</ng-container> </ng-container>

6
frontend/app/features/administration/pages/event-consumers/event-consumers-page.component.scss

@ -13,6 +13,8 @@
.error-message { .error-message {
height: 18rem; height: 18rem;
font-size: .8rem; }
font-weight: normal;
.small {
font-size: 90%;
} }

10
frontend/app/features/administration/pages/restore/restore-page.component.scss

@ -27,8 +27,8 @@ h3 {
} }
&-body { &-body {
font-family: monospace;
background: $color-border; background: $color-border;
font-family: monospace;
max-height: 400px; max-height: 400px;
min-height: 300px; min-height: 300px;
overflow-y: scroll; overflow-y: scroll;
@ -39,12 +39,12 @@ h3 {
&-status { &-status {
& { & {
@include circle($circle-size); @include circle($circle-size);
line-height: $circle-size + .1rem;
text-align: center;
font-size: .6 * $circle-size;
font-weight: normal;
background: $color-border; background: $color-border;
color: $color-dark-foreground; color: $color-dark-foreground;
font-size: .6 * $circle-size;
font-weight: normal;
line-height: $circle-size + .1rem;
text-align: center;
vertical-align: middle; vertical-align: middle;
} }

4
frontend/app/features/administration/pages/users/user-page.component.html

@ -55,7 +55,7 @@
<input type="text" class="form-control" id="displayName" maxlength="100" formControlName="displayName" autocomplete="false" spellcheck="false" /> <input type="text" class="form-control" id="displayName" maxlength="100" formControlName="displayName" autocomplete="false" spellcheck="false" />
</div> </div>
<div class="form-group form-group-password"> <div class="form-group form-group-section">
<div class="form-group"> <div class="form-group">
<label for="password">Password</label> <label for="password">Password</label>
@ -73,7 +73,7 @@
</div> </div>
</div> </div>
<div class="form-group form-group-permissions"> <div class="form-group form-group-section">
<label for="permissions">Permissions</label> <label for="permissions">Permissions</label>
<sqx-control-errors for="permissions" [submitted]="userForm.submitted | async"></sqx-control-errors> <sqx-control-errors for="permissions" [submitted]="userForm.submitted | async"></sqx-control-errors>

8
frontend/app/features/administration/pages/users/user-page.component.scss

@ -1,16 +1,10 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.form-group-password { .form-group-section {
margin-top: 2rem;
}
.form-group-permissions {
margin-top: 2rem; margin-top: 2rem;
} }
textarea { textarea {
height: 200px; height: 200px;
font-size: .9rem;
font-weight: normal;
} }

6
frontend/app/features/api/api-area.component.scss

@ -2,11 +2,11 @@
@import '_mixins'; @import '_mixins';
.nav-link { .nav-link {
position: relative;
padding-top: .6rem;
padding-bottom: .6rem; padding-bottom: .6rem;
padding-top: .6rem;
position: relative;
} }
.icon-angle-right { .icon-angle-right {
@include absolute(14px, 2rem, auto, auto); @include absolute(14px, 2rem);
} }

16
frontend/app/features/apps/pages/apps-page.component.html

@ -14,14 +14,14 @@
<h3 class="empty-headline">You are not collaborating to any app yet</h3> <h3 class="empty-headline">You are not collaborating to any app yet</h3>
</div> </div>
<div class="card card-href card-app float-left" *ngFor="let app of apps; trackBy: trackByApp" [routerLink]="['/app', app.name]"> <div class="card card-href card-app" *ngFor="let app of apps; trackBy: trackByApp" [routerLink]="['/app', app.name]">
<div class="card-body"> <div class="card-body">
<div class="row no-gutters"> <div class="row no-gutters">
<div class="col-auto card-left"> <div class="col-auto card-left">
<sqx-avatar [image]="app.image" [identifier]="app.name"></sqx-avatar> <sqx-avatar [image]="app.image" [identifier]="app.name"></sqx-avatar>
</div> </div>
<div class="col"> <div class="col">
<h4 class="card-title">{{app.displayName}}</h4> <h3 class="card-title">{{app.displayName}}</h3>
<div class="card-text card-links"> <div class="card-text card-links">
<a [routerLink]="['/app', app.name]" sqxStopClick>Edit</a> <a [routerLink]="['/app', app.name]" sqxStopClick>Edit</a>
@ -51,7 +51,7 @@
<img src="./images/add-app.svg" /> <img src="./images/add-app.svg" />
</div> </div>
<h4 class="card-title">New App</h4> <h3 class="card-title">New App</h3>
<div class="card-text"> <div class="card-text">
Create a new blank app without content and schemas. Create a new blank app without content and schemas.
@ -65,7 +65,7 @@
<img src="./images/add-blog.svg" /> <img src="./images/add-blog.svg" />
</div> </div>
<h4 class="card-title">New Blog Sample</h4> <h3 class="card-title">New Blog Sample</h3>
<div class="card-text"> <div class="card-text">
<div>Start with our ready to use blog.</div> <div>Start with our ready to use blog.</div>
@ -82,7 +82,7 @@
<img src="./images/add-profile.svg" /> <img src="./images/add-profile.svg" />
</div> </div>
<h4 class="card-title">New Profile Sample</h4> <h3 class="card-title">New Profile Sample</h3>
<div class="card-text"> <div class="card-text">
<div>Create your profile page.</div> <div>Create your profile page.</div>
@ -99,7 +99,7 @@
<img src="./images/add-identity.svg" /> <img src="./images/add-identity.svg" />
</div> </div>
<h4 class="card-title">New Identity App</h4> <h3 class="card-title">New Identity App</h3>
<div class="card-text"> <div class="card-text">
<div>Create app for Squidex Identity.</div> <div>Create app for Squidex Identity.</div>
@ -111,7 +111,9 @@
</div> </div>
</div> </div>
<div *ngIf="info" class="info">{{info}}</div> <div *ngIf="info" class="apps-section">
<small class="info">{{info}}</small>
</div>
<ng-container *sqxModal="addAppDialog"> <ng-container *sqxModal="addAppDialog">
<sqx-app-form [template]="addAppTemplate" <sqx-app-form [template]="addAppTemplate"

39
frontend/app/features/apps/pages/apps-page.component.scss

@ -8,20 +8,17 @@
&-section { &-section {
@include clearfix; @include clearfix;
padding-top: 2rem; padding: 2rem 1.25rem 0 $size-sidebar-width + .25rem;
padding-right: 1.25rem;
padding-bottom: 0;
padding-left: $size-sidebar-width + .25rem;
display: block;
} }
} }
.card { .card {
& { & {
margin-right: 1rem; @include hover-visible('.deeplinks', inline-block);
display: inline-block;
margin-bottom: 1rem; margin-bottom: 1rem;
margin-right: 1rem;
width: 20rem; width: 20rem;
float: left;
} }
&-lg { &-lg {
@ -42,25 +39,16 @@
&-text { &-text {
color: $color-text-decent; color: $color-text-decent;
font-weight: normal;
font-size: .9rem; font-size: .9rem;
margin-top: .5rem;
}
&-more {
color: $color-text-decent;
font-weight: normal; font-weight: normal;
font-size: .8rem; margin-top: .5rem;
margin-top: .4rem;
} }
&-title { &-title {
@include truncate; @include truncate;
color: $color-title; color: $color-title;
font-weight: light;
font-size: 1.2rem;
margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
margin-top: 0;
} }
&-template { &-template {
@ -69,8 +57,8 @@
} }
.card-title { .card-title {
margin-top: 1rem;
margin-bottom: .75rem; margin-bottom: .75rem;
margin-top: 1rem;
} }
} }
@ -93,16 +81,6 @@
text-decoration: none; text-decoration: none;
} }
} }
&:hover {
.deeplinks {
display: inline-block;
}
}
.deeplinks {
display: none;
}
} }
.card-image { .card-image {
@ -113,7 +91,4 @@
.info { .info {
color: $color-border-dark; color: $color-border-dark;
padding: 2rem;
padding-left: $size-sidebar-width + .25rem;
font-size: .8rem;
} }

6
frontend/app/features/apps/pages/news-dialog.component.scss

@ -4,11 +4,9 @@
:host ::ng-deep { :host ::ng-deep {
img { img {
@include box-shadow(0, 4px, 20px, .2); @include box-shadow(0, 4px, 20px, .2);
width: 80%;
margin: 0 auto;
margin-top: 10px;
margin-bottom: 10px;
display: block; display: block;
margin: 10px auto;
max-width: 80%;
} }
p { p {

26
frontend/app/features/apps/pages/onboarding-dialog.component.scss

@ -15,24 +15,21 @@ p {
} }
.col-image { .col-image {
min-width: 489px; @include force-width(489px);
max-width: 489px;
} }
:host ::ng-deep { :host ::ng-deep {
.modal { .modal {
&-content, &-content,
&-dialog { &-dialog {
min-height: $size-height; @include force-width($size-width);
max-height: $size-height; @include force-height($size-height);
min-width: $size-width;
max-width: $size-width;
} }
&-content { &-content {
color: $color-dark-foreground;
background-color: $color-dark-onboarding; background-color: $color-dark-onboarding;
background-image: url('./images/onboarding-background.png'); background-image: url('./images/onboarding-background.png');
color: $color-dark-foreground;
position: relative; position: relative;
} }
@ -42,9 +39,9 @@ p {
} }
&-close { &-close {
text-decoration: underline !important;
cursor: pointer;
color: $color-dark-foreground; color: $color-dark-foreground;
cursor: pointer;
text-decoration: underline !important;
} }
} }
} }
@ -54,24 +51,23 @@ p {
} }
.header-left { .header-left {
@include absolute(-70px, auto, auto, 2rem); @include absolute($t: -70px, $l: 2rem);
} }
.header-right { .header-right {
@include absolute(2rem, 2rem, auto, auto); @include absolute($t: 2rem, $r: 2rem);
} }
.footer { .footer {
@include absolute(auto, auto, 5rem, 2rem); @include absolute($b: 5rem, $l: 2rem);
} }
.onboarding { .onboarding {
&-enter-leave { &-enter-leave {
& { & {
text-align: center; @include force-width(28rem);
margin: 4rem auto 0; margin: 4rem auto 0;
max-width: 28rem; text-align: center;
min-width: 28rem;
} }
p { p {

6
frontend/app/features/assets/pages/assets-filters-page.component.scss

@ -1,6 +1,2 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.text-muted {
text-decoration: none;
}

27
frontend/app/features/assets/pages/assets-page.component.scss

@ -1,25 +1,18 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.section { .search ::ng-deep {
border-top: 1px solid $color-border; .form-control {
padding: 1rem; @include border-radius-right;
} }
:host ::ng-deep {
.search {
.form-control {
@include border-radius-right;
}
.tags { .tags {
@include border-radius-left; @include border-radius-left;
border-right: 0; border-right: 0;
&:focus, &:focus,
&.focus { &.focus {
z-index: 1000; z-index: 1000;
}
} }
} }
} }

22
frontend/app/features/content/pages/content/content-field.component.scss

@ -2,13 +2,12 @@
@import '_mixins'; @import '_mixins';
.table-items-row { .table-items-row {
position: relative;
border-width: 1px;
border-left-width: 4px; border-left-width: 4px;
position: relative;
} }
.languages-buttons { .languages-buttons {
@include absolute(.25rem, 1.25rem, auto, auto); @include absolute(.25rem, 1.25rem);
} }
.row { .row {
@ -44,18 +43,27 @@
&-disabled { &-disabled {
color: $color-border-dark; color: $color-border-dark;
font-size: .8rem;
font-weight: normal;
} }
&-copy { &-copy {
@include absolute(1rem, auto, auto, -1rem); @include absolute($t: 1rem, $l: -1rem);
z-index: 1000; z-index: 1000;
} }
} }
.compare { .compare {
padding: .5rem 0;
border: 0; border: 0;
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;
padding-bottom: .25rem;
padding-top: .5rem;
}
:host {
&:last-child {
margin-bottom: 0;
.compare {
border: 0;
}
}
} }

2
frontend/app/features/content/pages/content/content-history-page.component.scss

@ -23,8 +23,8 @@
} }
&-created { &-created {
font-weight: normal;
font-size: .75rem; font-size: .75rem;
font-weight: normal;
margin: .25rem 0; margin: .25rem 0;
} }
} }

43
frontend/app/features/content/pages/content/content-page.component.html

@ -1,7 +1,7 @@
<sqx-title [message]="schema.displayName"></sqx-title> <sqx-title [message]="schema.displayName"></sqx-title>
<form [formGroup]="contentForm.form" (ngSubmit)="saveAndPublish()"> <form [formGroup]="contentForm.form" (ngSubmit)="saveAndPublish()">
<sqx-panel desiredWidth="*" minWidth="60rem" [showSidebar]="hasContent"> <sqx-panel desiredWidth="*" minWidth="60rem" [showSidebar]="hasContent" grid="true">
<ng-container title> <ng-container title>
<a class="btn btn-text" (click)="back()" *ngIf="!schema.isSingleton"> <a class="btn btn-text" (click)="back()" *ngIf="!schema.isSingleton">
<i class="icon-angle-left"></i> <i class="icon-angle-left"></i>
@ -98,26 +98,31 @@
</ng-container> </ng-container>
<ng-container content> <ng-container content>
<div class="panel-alert panel-alert-danger" *ngIf="contentVersion; let version"> <sqx-list-view>
<div class="float-right"> <ng-container topHeader>
<a class="force" (click)="showLatest()">View latest</a> <div class="panel-alert panel-alert-danger" *ngIf="contentVersion; let version">
</div> <div class="float-right">
<a class="force" (click)="showLatest()">View latest</a>
</div>
Viewing <strong>version {{version.value}}</strong>.
</div>
</ng-container>
Viewing <strong>version {{version.value}}</strong>. <div content>
</div> <sqx-content-field *ngFor="let field of schema.fields; trackBy: trackByFieldFn"
[form]="contentForm"
[formContext]="formContext"
[field]="field"
[fieldForm]="contentForm.form.get(field.name)"
[fieldFormCompare]="contentFormCompare?.form.get(field.name)"
[schema]="schema"
[languages]="languages"
[(language)]="language">
</sqx-content-field>
</div>
</sqx-list-view>
<ng-container *ngFor="let field of schema.fields; trackBy: trackByFieldFn">
<sqx-content-field
[form]="contentForm"
[formContext]="formContext"
[field]="field"
[fieldForm]="contentForm.form.get(field.name)"
[fieldFormCompare]="contentFormCompare?.form.get(field.name)"
[schema]="schema"
[languages]="languages"
[(language)]="language">
</sqx-content-field>
</ng-container>
</ng-container> </ng-container>
<ng-container sidebar> <ng-container sidebar>

4
frontend/app/features/content/pages/contents/contents-filters-page.component.scss

@ -1,10 +1,6 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.text-muted {
pointer-events: none;
}
.status { .status {
@include truncate; @include truncate;
} }

10
frontend/app/features/content/pages/contents/contents-page.component.scss

@ -1,21 +1,15 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
:host ::ng-deep {
.search-form {
display: block;
}
}
.content { .content {
cursor: pointer; cursor: pointer;
} }
.table-container { .table-container {
display: inline-block; display: inline-block;
min-width: 100%;
padding: 0; padding: 0;
padding-right: 1.5rem; padding-right: 1.5rem;
min-width: 100%;
} }
.icon-plus { .icon-plus {
@ -28,6 +22,6 @@
.selection { .selection {
background: $color-theme-secondary; background: $color-theme-secondary;
border-bottom: 2px solid $color-border; border-bottom: 1px solid $color-border;
padding: .25 * $panel-padding $panel-padding; padding: .25 * $panel-padding $panel-padding;
} }

17
frontend/app/features/content/pages/schemas/schemas-page.component.scss

@ -1,17 +1,2 @@
@import '_vars'; @import '_vars';
@import '_mixins'; @import '_mixins';
.panel-header {
min-height: 8rem;
max-height: 8rem;
}
.nav-link {
position: relative;
padding-top: .6rem;
padding-bottom: .6rem;
}
.icon-angle-right {
@include absolute(14px, 2rem, auto, auto);
}

2
frontend/app/features/content/shared/array-editor.component.scss

@ -3,10 +3,10 @@
.array-container { .array-container {
background: $color-border; background: $color-border;
margin-bottom: 1rem;
padding: 1rem; padding: 1rem;
padding-bottom: 1px; padding-bottom: 1px;
position: relative; position: relative;
margin-bottom: 1rem;
} }
.item { .item {

3
frontend/app/features/content/shared/array-item.component.scss

@ -20,9 +20,8 @@
} }
.header-index { .header-index {
@include force-width(3rem);
display: inline-block; display: inline-block;
min-width: 3rem;
max-width: 3rem;
} }
} }

14
frontend/app/features/content/shared/assets-editor.component.scss

@ -9,11 +9,11 @@
&-container { &-container {
& { & {
background: $color-background; background: $color-background;
height: $asset-height + 2rem;
overflow-x: hidden; overflow-x: hidden;
overflow-y: scroll; overflow-y: scroll;
padding: 1rem; padding: 1rem;
padding-bottom: 0; padding-bottom: 0;
height: $asset-height + 2rem;
} }
} }
} }
@ -34,16 +34,16 @@
.drop-area { .drop-area {
& { & {
@include transition(border-color .4s ease);
@include border-radius; @include border-radius;
@include truncate-nowidth; @include truncate-nowidth;
border: 2px dashed darken($color-border, 10%); border: 2px dashed darken($color-border, 10%);
padding: 5px .5rem;
font-weight: normal;
font-size: 1rem;
text-align: center;
color: darken($color-border, 30%); color: darken($color-border, 30%);
cursor: pointer; cursor: pointer;
font-size: 1rem;
font-weight: normal;
padding: 5px .5rem;
text-align: center;
transition: border-color .4s ease;
} }
&:hover { &:hover {
@ -56,8 +56,8 @@
&.drag { &.drag {
border-color: darken($color-border, 15%); border-color: darken($color-border, 15%);
cursor: copy;
color: darken($color-border, 40%); color: darken($color-border, 40%);
cursor: copy;
text-decoration: none; text-decoration: none;
} }
} }

2
frontend/app/features/content/shared/content-status.component.html

@ -1,5 +1,5 @@
<ng-container *ngIf="scheduledTo; else noSchedule"> <ng-container *ngIf="scheduledTo; else noSchedule">
<span class="content-status pending mr-1"title="{{tooltipText}}"> <span class="content-status pending mr-1" title="{{tooltipText}}">
<i class="icon-clock" [class.icon-sm]="small"></i> <i class="icon-clock" [class.icon-sm]="small"></i>
</span> </span>
</ng-container> </ng-container>

10
frontend/app/features/content/shared/content-status.component.scss

@ -13,14 +13,4 @@
&-label { &-label {
color: $color-text; color: $color-text;
} }
&-tooltip {
@include border-radius;
background: $color-tooltip;
border: 0;
font-size: .9rem;
font-weight: normal;
color: $color-dark-foreground;
padding: .75rem;
}
} }

4
frontend/app/features/content/shared/content.component.scss

@ -8,12 +8,10 @@
.edit-menu { .edit-menu {
@include absolute(.75rem, auto, auto, .25rem); @include absolute(.75rem, auto, auto, .25rem);
background: $color-table-background;
border-right: 1px solid $color-border; border-right: 1px solid $color-border;
min-height: 2.4rem;
max-height: 2.4rem;
padding-right: 1rem; padding-right: 1rem;
white-space: nowrap; white-space: nowrap;
background: $color-table-background;
z-index: 100; z-index: 100;
} }
} }

5
frontend/app/features/content/shared/contents-selector.component.scss

@ -16,15 +16,14 @@
.form-control { .form-control {
@include absolute(-.4rem, auto, auto, 0); @include absolute(-.4rem, auto, auto, 0);
max-width: 300px; @include force-width(300px);
min-width: 300px;
color: $color-dark-foreground; color: $color-dark-foreground;
} }
} }
.table-container { .table-container {
display: inline-block; display: inline-block;
min-width: 100%;
padding: 0; padding: 0;
padding-right: 1.5rem; padding-right: 1.5rem;
min-width: 100%;
} }

2
frontend/app/features/content/shared/field-editor.component.html

@ -4,7 +4,7 @@
{{field.displayName}} {{displaySuffix}} <span class="field-required" [class.hidden]="!field.properties.isRequired">*</span> {{field.displayName}} {{displaySuffix}} <span class="field-required" [class.hidden]="!field.properties.isRequired">*</span>
</label> </label>
<span class="field-disabled pl-1" *ngIf="field.isDisabled">Disabled</span> <small class="field-disabled pl-1" *ngIf="field.isDisabled">Disabled</small>
<sqx-control-errors *ngIf="form" [for]="editorControl" [fieldName]="field.displayName" [submitted]="form.submitted | async"></sqx-control-errors> <sqx-control-errors *ngIf="form" [for]="editorControl" [fieldName]="field.displayName" [submitted]="form.submitted | async"></sqx-control-errors>
</ng-container> </ng-container>

6
frontend/app/features/content/shared/field-editor.component.scss

@ -19,12 +19,12 @@
} }
&-separator { &-separator {
color: lighten($color-text, 20%);
border-bottom: 1px solid darken($color-border, 5%); border-bottom: 1px solid darken($color-border, 5%);
color: lighten($color-text, 20%);
font-size: 1.3rem; font-size: 1.3rem;
font-weight: normal; font-weight: normal;
padding: .25rem 0;
margin-top: 1.5rem;
margin-bottom: 0; margin-bottom: 0;
margin-top: 1.5rem;
padding: .25rem 0;
} }
} }

12
frontend/app/features/content/shared/reference-item.component.scss

@ -3,24 +3,16 @@
.reference-edit { .reference-edit {
& { & {
@include hover-visible('.reference-menu');
position: relative; position: relative;
} }
&:hover {
.reference-menu {
display: block;
}
}
.reference-menu { .reference-menu {
@include absolute(0, -.25rem, auto, auto); @include absolute(0, -.25rem, auto, auto);
background: $color-table-background;
border-left: 1px solid $color-border; border-left: 1px solid $color-border;
display: none;
min-height: 2.4rem;
max-height: 2.4rem;
padding-left: 1rem; padding-left: 1rem;
white-space: nowrap; white-space: nowrap;
background: $color-table-background;
} }
} }

16
frontend/app/features/content/shared/references-editor.component.scss

@ -6,33 +6,33 @@
} }
.invalid { .invalid {
padding: 2rem; color: darken($color-border, 30%);
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
padding: 2rem;
text-align: center; text-align: center;
color: darken($color-border, 30%);
} }
.references-container { .references-container {
background: $color-background; background: $color-background;
max-height: 20rem;
min-height: 6rem;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto; overflow-y: auto;
padding: 1rem; padding: 1rem;
min-height: 6rem;
max-height: 20rem;
} }
.drop-area { .drop-area {
& { & {
@include transition(border-color .4s ease);
@include border-radius; @include border-radius;
border: 2px dashed darken($color-border, 10%); border: 2px dashed darken($color-border, 10%);
color: darken($color-border, 30%);
cursor: pointer;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
text-align: center;
padding: 1rem; padding: 1rem;
cursor: pointer; text-align: center;
color: darken($color-border, 30%); transition: border-color .4s ease;
} }
&:hover { &:hover {

17
frontend/app/features/dashboard/pages/dashboard-page.component.scss

@ -12,9 +12,9 @@
} }
&-inner { &-inner {
max-width: 75rem;
padding: 2rem; padding: 2rem;
padding-right: 1rem; padding-right: 1rem;
max-width: 75rem;
} }
} }
@ -25,8 +25,8 @@
:host ::ng-deep { :host ::ng-deep {
canvas { canvas {
height: 12rem !important; height: 12rem !important;
margin-top: -1rem;
margin-bottom: 0; margin-bottom: 0;
margin-top: -1rem;
} }
} }
@ -38,12 +38,11 @@
.card { .card {
& { & {
margin-right: 1rem; @include force-height(16rem);
float: left;
margin-bottom: 1rem; margin-bottom: 1rem;
margin-right: 1rem;
width: 16rem; width: 16rem;
min-height: 16rem;
max-height: 16rem;
float: left;
} }
&-lg { &-lg {
@ -60,14 +59,14 @@
&-text { &-text {
color: $color-text-decent; color: $color-text-decent;
font-weight: normal;
font-size: .9rem; font-size: .9rem;
font-weight: normal;
} }
&-title { &-title {
color: $color-title; color: $color-title;
font-weight: light;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: light;
margin-top: 1rem; margin-top: 1rem;
} }
@ -103,7 +102,7 @@
&-value { &-value {
font-size: 3rem; font-size: 3rem;
margin-top: 1rem;
margin-bottom: .5rem; margin-bottom: .5rem;
margin-top: 1rem;
} }
} }

6
frontend/app/features/rules/pages/events/rule-events-page.component.scss

@ -11,21 +11,21 @@ h3 {
} }
&-dump { &-dump {
margin-top: 1rem;
font-family: monospace; font-family: monospace;
font-size: .8rem; font-size: .8rem;
font-weight: normal; font-weight: normal;
height: 20rem; height: 20rem;
margin-top: 1rem;
} }
&-header { &-header {
& { & {
padding: .75rem 1.25rem;
position: relative;
background: $color-border; background: $color-border;
border: 0; border: 0;
margin: -.75rem -1.25rem; margin: -.75rem -1.25rem;
margin-bottom: 1rem; margin-bottom: 1rem;
padding: .75rem 1.25rem;
position: relative;
} }
&::before { &::before {

17
frontend/app/features/rules/pages/rules/rule-element.component.scss

@ -3,9 +3,9 @@
.small { .small {
& { & {
@include transition(background-color .4s ease);
height: 3rem; height: 3rem;
position: relative; position: relative;
transition: background-color .4s ease;
} }
&.editable { &.editable {
@ -16,26 +16,25 @@
@include absolute(0, 0, 0, 3rem); @include absolute(0, 0, 0, 3rem);
@include truncate; @include truncate;
color: $color-dark-foreground; color: $color-dark-foreground;
line-height: 3rem;
font-size: 1rem; font-size: 1rem;
font-weight: normal; font-weight: normal;
line-height: 3rem;
padding: 0 .8rem; padding: 0 .8rem;
} }
&-icon { &-icon {
@include absolute(0, auto, 0, 0); @include absolute(0, auto, 0, 0);
color: $color-dark-foreground; color: $color-dark-foreground;
line-height: 3.2rem;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
line-height: 3.2rem;
padding: 0 .8rem; padding: 0 .8rem;
} }
} }
.large { .large {
& { & {
min-height: 100px; @include force-height(100px);
max-height: 100px;
} }
&.editable { &.editable {
@ -47,23 +46,23 @@
} }
&-title { &-title {
font-weight: bold;
font-size: 1rem; font-size: 1rem;
font-weight: bold;
line-height: 1; line-height: 1;
} }
&-text { &-text {
font-size: .8rem; font-size: .8rem;
margin-top: .25rem;
margin-bottom: .25rem; margin-bottom: .25rem;
margin-top: .25rem;
} }
&-icon { &-icon {
color: $color-dark-foreground; color: $color-dark-foreground;
display: inline-block; display: inline-block;
line-height: 1px;
margin-right: .5rem; margin-right: .5rem;
position: relative;
padding: 1rem; padding: 1rem;
line-height: 1px; position: relative;
} }
} }

7
frontend/app/features/rules/pages/rules/rule.component.scss

@ -3,8 +3,8 @@
.card { .card {
& { & {
@include border-radius(0);
border-bottom-width: 2px; border-bottom-width: 2px;
border-radius: 0;
border-top-width: 0; border-top-width: 0;
margin-bottom: .25rem; margin-bottom: .25rem;
} }
@ -16,12 +16,11 @@
&-footer { &-footer {
background: $color-theme-secondary; background: $color-theme-secondary;
font-weight: normal;
font-size: 90%; font-size: 90%;
font-weight: normal;
} }
} }
.col-last { .col-last {
min-width: 80px; @include force-width(80px);
max-width: 80px;
} }

2
frontend/app/features/rules/pages/rules/triggers/content-changed-trigger.component.scss

@ -3,8 +3,8 @@
.section { .section {
border-top: 1px solid $color-border; border-top: 1px solid $color-border;
padding-top: 1rem;
padding-bottom: 1rem; padding-bottom: 1rem;
padding-top: 1rem;
} }
.form-check { .form-check {

20
frontend/app/features/schemas/pages/schema/field.component.scss

@ -17,9 +17,9 @@ $padding: 1rem;
} }
.table-items-row-summary { .table-items-row-summary {
position: relative;
padding-right: 1.25rem;
padding-left: 3rem; padding-left: 3rem;
padding-right: 1.25rem;
position: relative;
} }
.drag-container { .drag-container {
@ -39,12 +39,12 @@ $padding: 1rem;
} }
.nested-fields { .nested-fields {
background: $color-theme-secondary;
border: 1px solid $color-border;
border-top-width: 0;
padding: $padding; padding: $padding;
padding-left: 2 * $padding; padding-left: 2 * $padding;
position: relative; position: relative;
border: 1px solid $color-border;
border-top-width: 0;
background: $color-theme-secondary;
} }
.nested-field { .nested-field {
@ -54,8 +54,8 @@ $padding: 1rem;
&-add { &-add {
border: 2px dashed $field-line; border: 2px dashed $field-line;
position: relative;
padding: 1rem; padding: 1rem;
position: relative;
} }
&-line-v { &-line-v {
@ -79,10 +79,10 @@ $padding: 1rem;
} }
&-icon { &-icon {
margin-right: 1rem;
color: $color-border-dark; color: $color-border-dark;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
margin-right: 1rem;
vertical-align: middle; vertical-align: middle;
} }
@ -96,13 +96,13 @@ $padding: 1rem;
&-partitioning { &-partitioning {
color: $color-text-decent; color: $color-text-decent;
font-weight: normal;
font-size: .85rem; font-size: .85rem;
font-weight: normal;
} }
.tag { .tag {
@include opacity(.9);
min-width: 4rem;
max-width: 6rem; max-width: 6rem;
min-width: 4rem;
opacity: .9;
} }
} }

6
frontend/app/features/schemas/pages/schema/schema-export-form.component.scss

@ -4,9 +4,9 @@
:host, :host,
.inner-form, .inner-form,
.inner-main { .inner-main {
@include flex-box; display: flex;
@include flex-grow(1); flex-direction: column;
@include flex-direction(column); flex-grow: 1;
} }
.inner-header, .inner-header,

4
frontend/app/features/schemas/pages/schema/schema-fields.component.scss

@ -2,10 +2,10 @@
@import '_mixins'; @import '_mixins';
:host { :host {
overflow-x: hidden;
overflow-y: auto;
padding: $panel-padding; padding: $panel-padding;
padding-bottom: 8rem; padding-bottom: 8rem;
overflow-y: auto;
overflow-x: hidden;
} }
.field-button { .field-button {

4
frontend/app/features/schemas/pages/schema/schema-page.component.scss

@ -4,13 +4,13 @@
.btn-publishing { .btn-publishing {
&.disabled, &.disabled,
&:disabled { &:disabled {
@include opacity(1); opacity: 1;
} }
} }
.cards { .cards {
padding: $panel-padding;
overflow-y: auto; overflow-y: auto;
padding: $panel-padding;
} }
.nav-tabs2 { .nav-tabs2 {

5
frontend/app/features/schemas/pages/schema/schema-preview-urls-form.component.scss

@ -11,10 +11,9 @@
} }
.col-options { .col-options {
min-width: 6rem; @include force-width(6rem);
} }
.col-name { .col-name {
min-width: 14rem; @include force-width(14rem);
max-width: 14rem;
} }

6
frontend/app/features/schemas/pages/schema/schema-scripts-form.component.scss

@ -4,9 +4,9 @@
:host, :host,
.inner-form, .inner-form,
.inner-main { .inner-main {
@include flex-box; display: flex;
@include flex-grow(1); flex-direction: column;
@include flex-direction(column); flex-grow: 1;
} }
.inner-header, .inner-header,

6
frontend/app/features/schemas/pages/schema/schema-ui-form.component.scss

@ -4,9 +4,9 @@
:host, :host,
.inner-form, .inner-form,
.inner-main { .inner-main {
@include flex-box; display: flex;
@include flex-grow(1); flex-direction: column;
@include flex-direction(column); flex-grow: 1;
} }
.inner-header, .inner-header,

2
frontend/app/features/schemas/pages/schema/types/string-validation.component.scss

@ -14,8 +14,8 @@
.control-dropdown { .control-dropdown {
& { & {
max-width: 285px; max-width: 285px;
min-width: 200px;
min-height: 220px; min-height: 220px;
min-width: 200px;
} }
h4 { h4 {

13
frontend/app/features/schemas/pages/schemas/schema-form.component.scss

@ -4,8 +4,8 @@
$icon-size: 4.5rem; $icon-size: 4.5rem;
.btn-text { .btn-text {
margin-top: -1rem;
margin-left: -.5rem; margin-left: -.5rem;
margin-top: -1rem;
} }
.form-group { .form-group {
@ -32,16 +32,17 @@ $icon-size: 4.5rem;
&-icon { &-icon {
& { & {
@include border-radius; @include border-radius;
height: $icon-size; background: transparent;
border: 1px solid $color-border;
color: $color-theme-blue; color: $color-theme-blue;
cursor: pointer; cursor: pointer;
border: 1px solid $color-border;
background: transparent;
margin-right: .5rem;
line-height: $icon-size;
font-size: 1.75rem; font-size: 1.75rem;
font-weight: normal; font-weight: normal;
height: $icon-size;
line-height: $icon-size;
margin-right: .5rem;
text-align: center; text-align: center;
text-decoration: none;
width: $icon-size; width: $icon-size;
} }

15
frontend/app/features/schemas/pages/schemas/schemas-page.component.scss

@ -4,27 +4,24 @@
$button-size: calc(2.5rem - 2px); $button-size: calc(2.5rem - 2px);
.subheader-button { .subheader-button {
@include force-width($button-size);
font-size: 1rem;
height: $button-size; height: $button-size;
line-height: 2.5rem;
margin-right: .4rem; margin-right: .4rem;
min-width: $button-size;
max-width: $button-size;
padding: 0; padding: 0;
padding-left: 0;
padding-right: 0;
font-size: 1rem;
line-height: 2.5rem;
} }
.new-category-input { .new-category-input {
& { & {
margin-top: 1rem;
background: 0; background: 0;
border-width: 0;
border-bottom-width: 1px; border-bottom-width: 1px;
border-width: 0;
margin-top: 1rem;
padding-left: 0; padding-left: 0;
} }
&:focus { &:focus {
@include box-shadow-none; box-shadow: none;
} }
} }

12
frontend/app/features/settings/pages/clients/client-connect-form.component.scss

@ -3,8 +3,8 @@
.badge { .badge {
@include circle(1.3rem); @include circle(1.3rem);
margin-right: .25rem;
font-size: 80%; font-size: 80%;
margin-right: .25rem;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
vertical-align: top; vertical-align: top;
@ -20,12 +20,12 @@
.option { .option {
@include border-radius; @include border-radius;
cursor: pointer;
background: none; background: none;
border: 1px solid $color-border; border: 1px solid $color-border;
cursor: pointer;
margin-top: .5rem;
padding: 1rem; padding: 1rem;
position: relative; position: relative;
margin-top: .5rem;
&:hover { &:hover {
border-color: darken($color-border, 10%); border-color: darken($color-border, 10%);
@ -33,16 +33,16 @@
i { i {
@include absolute(1.6rem, 1rem, auto, auto); @include absolute(1.6rem, 1rem, auto, auto);
color: $color-border;
font-size: 1.8rem; font-size: 1.8rem;
font-weight: 300; font-weight: 300;
color: $color-border;
} }
} }
.access-token { .access-token {
height: 10rem; font-family: monospace;
font-size: 1rem; font-size: 1rem;
font-weight: normal; font-weight: normal;
font-family: monospace; height: 10rem;
resize: none; resize: none;
} }

2
frontend/app/features/settings/pages/contributors/contributor-add-form.component.html

@ -1,4 +1,4 @@
<div class="table-items-header" style="margin: 0"> <div class="table-items-header">
<form [formGroup]="assignContributorForm.form" (ngSubmit)="assignContributor()"> <form [formGroup]="assignContributorForm.form" (ngSubmit)="assignContributor()">
<div class="row no-gutters"> <div class="row no-gutters">
<div class="col"> <div class="col">

4
frontend/app/features/settings/pages/contributors/contributor-add-form.component.scss

@ -12,7 +12,7 @@
} }
.table-items-header { .table-items-header {
border-width: 0; border: 0;
border-bottom-width: 2px; border-bottom: 2px solid $color-border;
margin: 0; margin: 0;
} }

6
frontend/app/features/settings/pages/languages/language.component.scss

@ -17,19 +17,19 @@ $field-header: #e7ebef;
&-languages { &-languages {
@include border-radius; @include border-radius;
background: $color-border; background: $color-border;
border-top: .5rem solid $color-border;
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;
border-top: .5rem solid $color-border;
padding: 0 .5rem; padding: 0 .5rem;
} }
&-language { &-language {
@include border-radius(2px); @include border-radius(2px);
padding: .5rem;
background: $color-dark-foreground; background: $color-dark-foreground;
border: 0; border: 0;
line-height: 2rem;
margin: 0; margin: 0;
margin-bottom: .5rem; margin-bottom: .5rem;
line-height: 2rem; padding: .5rem;
} }
&-label { &-label {

16
frontend/app/features/settings/pages/more/more-page.component.scss

@ -3,9 +3,9 @@
.app { .app {
&-image { &-image {
position: relative;
min-width: 150px;
min-height: 150px; min-height: 150px;
min-width: 150px;
position: relative;
} }
&-image-remove { &-image-remove {
@ -24,17 +24,17 @@
@mixin overlay { @mixin overlay {
& { & {
@include transition(opacity .4s ease);
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
@include opacity(0);
@include flex-box;
color: $color-dark-foreground; color: $color-dark-foreground;
display: flex;
opacity: 0;
transition: opacity .4s ease;
} }
&-background { &-background {
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
@include opacity(.7);
background: $color-dark-black; background: $color-dark-black;
opacity: .7;
} }
} }
@ -55,15 +55,15 @@
} }
&-text { &-text {
position: absolute;
font-size: 1.25rem; font-size: 1.25rem;
font-weight: lighter; font-weight: lighter;
position: absolute;
} }
} }
.drag { .drag {
.drop-overlay { .drop-overlay {
@include opacity(1); opacity: 1;
} }
.app-image-remove { .app-image-remove {

5
frontend/app/features/settings/pages/patterns/pattern.component.scss

@ -2,11 +2,10 @@
@import '_mixins'; @import '_mixins';
.col-options { .col-options {
min-width: 6rem; @include force-width(6rem);
} }
.col-name, .col-name,
.col-message { .col-message {
min-width: 10rem; @include force-width(10rem);
max-width: 10rem;
} }

6
frontend/app/features/settings/pages/plans/plan.component.scss

@ -3,15 +3,15 @@
.plan { .plan {
& { & {
min-width: 13rem;
max-width: 20rem;
margin: .5rem; margin: .5rem;
max-width: 20rem;
min-width: 13rem;
} }
&-price { &-price {
color: $color-theme-blue; color: $color-theme-blue;
margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
margin-top: 0;
} }
&-selected { &-selected {

6
frontend/app/features/settings/pages/plans/plans-page.component.scss

@ -3,15 +3,15 @@
.plan { .plan {
& { & {
min-width: 13rem;
max-width: 20rem;
margin: .5rem; margin: .5rem;
max-width: 20rem;
min-width: 13rem;
} }
&-price { &-price {
color: $color-theme-blue; color: $color-theme-blue;
margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
margin-top: 0;
} }
&-selected { &-selected {

2
frontend/app/features/settings/pages/roles/role.component.scss

@ -14,9 +14,9 @@
.prefix { .prefix {
border: 0; border: 0;
border-bottom: 1px solid $color-input; border-bottom: 1px solid $color-input;
color: $color-text-decent;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
color: $color-text-decent;
} }
.rule-name { .rule-name {

32
frontend/app/features/settings/pages/workflows/workflow-step.component.scss

@ -17,44 +17,40 @@
} }
.col-arrow { .col-arrow {
min-width: 2rem; @include force-width(2rem);
max-width: 2rem;
} }
.col-button { .col-button {
min-width: 3rem; @include force-width(3rem);
max-width: 3rem;
} }
.col-step { .col-step {
min-width: 10rem; @include force-width(10rem);
max-width: 10rem;
} }
.col-roles { .col-roles {
min-width: 18rem; @include force-width(18rem);
max-width: 18rem;
} }
.transition { .transition {
& { & {
margin-top: .25rem;
margin-bottom: .5rem;
line-height: 2.2rem; line-height: 2.2rem;
margin-bottom: .5rem;
margin-top: .25rem;
} }
&-to { &-to {
line-height: 1.2rem;
padding: .5rem .75rem; padding: .5rem .75rem;
padding-right: 0; padding-right: 0;
line-height: 1.2rem;
} }
} }
} }
.step { .step {
& { & {
margin-bottom: 1.5rem;
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;
margin-bottom: 1.5rem;
} }
&-inner { &-inner {
@ -72,16 +68,16 @@
.btn-initial { .btn-initial {
& { & {
visibility: hidden;
line-height: 1.6rem; line-height: 1.6rem;
padding-left: 0; padding-left: 0;
padding-right: 0; padding-right: 0;
width: 2rem;
text-align: center; text-align: center;
visibility: hidden;
width: 2rem;
} }
&:disabled { &:disabled {
@include opacity(1); opacity: 1;
} }
&.active { &.active {
@ -91,15 +87,15 @@
.transition-prevent-updates { .transition-prevent-updates {
& { & {
margin-top: .25rem;
margin-bottom: 1rem;
line-height: 2.5rem; line-height: 2.5rem;
margin-bottom: 1rem;
margin-top: .25rem;
} }
&-to { &-to {
line-height: 1.2rem;
padding: .5rem .75rem; padding: .5rem .75rem;
padding-right: 0; padding-right: 0;
line-height: 1.2rem;
} }
} }

4
frontend/app/features/settings/pages/workflows/workflow-transition.component.scss

@ -3,11 +3,11 @@
.select-placeholder { .select-placeholder {
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
border: 1px solid transparent;
color: $color-theme-secondary; color: $color-theme-secondary;
line-height: 1.2rem;
padding: .5rem .75rem; padding: .5rem .75rem;
pointer-events: none; pointer-events: none;
line-height: 1.2rem;
border: 1px solid transparent;
} }
.form-control { .form-control {

6
frontend/app/features/settings/pages/workflows/workflow.component.scss

@ -14,13 +14,11 @@
} }
.col-form-label { .col-form-label {
min-width: 4rem; @include force-width(4rem);
max-width: 4rem;
} }
.col-tags { .col-tags {
padding: .6rem 1rem; padding: .6rem 1rem 0;
padding-bottom: 0;
} }
.form-group { .form-group {

4
frontend/app/features/settings/settings-area.component.scss

@ -2,9 +2,9 @@
@import '_mixins'; @import '_mixins';
.nav-link { .nav-link {
position: relative;
padding-top: .6rem;
padding-bottom: .6rem; padding-bottom: .6rem;
padding-top: .6rem;
position: relative;
} }
.header-link { .header-link {

10
frontend/app/framework/angular/code.component.scss

@ -3,17 +3,17 @@
.code { .code {
background: $color-code-background; background: $color-code-background;
margin: .25rem 0;
padding-left: .5rem; padding-left: .5rem;
padding-right: 3rem; padding-right: 3rem;
margin: .25rem 0;
} }
.code, .code,
.code-copy { .code-copy {
font-size: .8rem; font-size: .8rem;
padding-top: .25rem;
padding-bottom: .25rem;
min-height: 27px; min-height: 27px;
padding-bottom: .25rem;
padding-top: .25rem;
} }
.copy-container { .copy-container {
@ -23,11 +23,11 @@
.code-copy { .code-copy {
& { & {
@include absolute(0, 0, auto, auto); @include absolute(0, 0, auto, auto);
border: 0;
background: darken($color-border-dark, 30%); background: darken($color-border-dark, 30%);
border: 0;
color: $color-dark-foreground;
padding-left: .375rem; padding-left: .375rem;
padding-right: .375rem; padding-right: .375rem;
color: $color-dark-foreground;
} }
&:focus { &:focus {

10
frontend/app/framework/angular/external-link.directive.ts

@ -21,16 +21,18 @@ export class ExternalLinkDirective implements AfterViewInit {
} }
public ngAfterViewInit() { public ngAfterViewInit() {
this.renderer.setProperty(this.element.nativeElement, 'target', '_blank'); const element = this.element.nativeElement;
this.renderer.setProperty(this.element.nativeElement, 'rel', 'noopener');
this.renderer.setProperty(element, 'target', '_blank');
this.renderer.setProperty(element, 'rel', 'noopener');
if (this.type !== 'noicon') { if (this.type !== 'noicon') {
const icon = this.renderer.createElement('i'); const icon = this.renderer.createElement('i');
this.renderer.addClass(icon, 'icon-external-link'); this.renderer.addClass(icon, 'icon-external-link');
this.renderer.addClass(icon, 'ml-1');
this.renderer.appendChild(this.element.nativeElement, icon); this.renderer.appendChild(element, this.renderer.createText(' '));
this.renderer.appendChild(element, icon);
} }
} }
} }

2
frontend/app/framework/angular/forms/checkbox-group.component.scss

@ -3,8 +3,8 @@
.form-check { .form-check {
display: block; display: block;
margin-left: 0;
margin-bottom: .5rem; margin-bottom: .5rem;
margin-left: 0;
} }
.form-check-input { .form-check-input {

3
frontend/app/framework/angular/forms/control-errors.component.scss

@ -2,7 +2,6 @@
@import '_vars'; @import '_vars';
:host { :host {
@include force-width(100%);
align-self: flex-start; align-self: flex-start;
min-width: 100%;
max-width: 100%;
} }

4
frontend/app/framework/angular/forms/date-time-editor.component.scss

@ -23,8 +23,8 @@
.input-group { .input-group {
.form-control { .form-control {
&:last-child { &:last-child {
position: relative;
padding-right: 2rem; padding-right: 2rem;
position: relative;
} }
} }
@ -47,6 +47,6 @@
} }
&:focus { &:focus {
@include box-shadow-none; box-shadow: none;
} }
} }

8
frontend/app/framework/angular/forms/dropdown.component.scss

@ -22,28 +22,28 @@ $color-input-disabled: #eef1f4;
} }
.control-dropdown { .control-dropdown {
max-width: 40rem;
max-height: none; max-height: none;
max-width: 40rem;
overflow-y: hidden; overflow-y: hidden;
} }
.control-dropdown-items { .control-dropdown-items {
overflow-y: auto;
max-height: 15rem; max-height: 15rem;
overflow-y: auto;
} }
.selection { .selection {
& { & {
position: relative;
overflow: hidden; overflow: hidden;
position: relative;
} }
.control-dropdown-item { .control-dropdown-item {
@include absolute(0, 1rem, 0, 0); @include absolute(0, 1rem, 0, 0);
line-height: 1.2rem;
padding-bottom: 0; padding-bottom: 0;
pointer-events: none; pointer-events: none;
position: absolute; position: absolute;
line-height: 1.2rem;
} }
.icon-caret-down { .icon-caret-down {

23
frontend/app/framework/angular/forms/editable-title.component.scss

@ -3,41 +3,28 @@
.title { .title {
& { & {
@include hover-visible('.title-edit', inline);
position: relative; position: relative;
} }
&-edit { &-edit {
color: $color-border-dark; color: $color-border-dark;
display: none; cursor: pointer;
font-size: .9rem;
font-weight: normal;
padding: .6rem .25rem; padding: .6rem .25rem;
border: 0;
background: transparent;
vertical-align: baseline;
} }
&-name { &-name {
font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif; display: inline;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
display: inline;
margin: 0;
} }
&-view { &-view {
@include truncate; @include truncate;
border-bottom: 1px solid transparent;
border-top: 0;
padding: .375rem 0; padding: .375rem 0;
position: absolute; position: absolute;
border-top: 0;
border-bottom: 1px solid transparent;
line-height: 1.5rem;
}
&:hover {
.title-edit {
display: inline;
}
} }
} }

2
frontend/app/framework/angular/forms/iframe-editor.component.scss

@ -2,7 +2,7 @@
@import '_vars'; @import '_vars';
iframe { iframe {
border: 0;
background: 0; background: 0;
border: 0;
overflow: hidden; overflow: hidden;
} }

1
frontend/app/framework/angular/forms/json-editor.component.scss

@ -7,7 +7,6 @@ $editor-height: 30rem;
:host ::ng-deep { :host ::ng-deep {
.ace_editor { .ace_editor {
background: $color-dark-foreground;
border: 1px solid $color-input; border: 1px solid $color-input;
&.no-border { &.no-border {

8
frontend/app/framework/angular/forms/stars.component.scss

@ -9,9 +9,6 @@ $color-gold: #ffd700;
.stars { .stars {
& { & {
display: inline-block;
border: 0;
height: 2.4rem;
line-height: 2.4rem; line-height: 2.4rem;
} }
@ -26,17 +23,16 @@ $color-gold: #ffd700;
.star { .star {
& { & {
background: transparent;
border: 0;
line-height: 1px; line-height: 1px;
vertical-align: middle; vertical-align: middle;
} }
&::before { &::before {
display: inline-block;
color: $color-gold; color: $color-gold;
content: ''; content: '';
display: inline-block;
font-size: 1.8rem; font-size: 1.8rem;
font-weight: normal;
line-height: 1px; line-height: 1px;
} }

23
frontend/app/framework/angular/forms/tag-editor.component.scss

@ -2,6 +2,7 @@
@import '_vars'; @import '_vars';
$focus-color: #b3d3ff; $focus-color: #b3d3ff;
$focus-shadow: rgba(51, 137, 255, .25);
:host { :host {
text-align: left; text-align: left;
@ -22,8 +23,8 @@ $focus-color: #b3d3ff;
} }
&.focus { &.focus {
@include box-shadow-raw(0 0 0 .2rem rgba(51, 137, 255, .25));
border-color: $focus-color; border-color: $focus-color;
box-shadow: 0 0 0 .2rem $focus-shadow;
} }
&.single-line { &.single-line {
@ -40,26 +41,26 @@ $focus-color: #b3d3ff;
div { div {
&.form-control { &.form-control {
height: auto; height: auto;
position: relative;
text-align: left; text-align: left;
text-decoration: none; text-decoration: none;
position: relative;
} }
} }
.blank { .blank {
& { & {
@include placeholder-color($color-input-placeholder); @include placeholder-color($color-input-placeholder);
padding: 0;
border: 0;
background: transparent; background: transparent;
min-width: 50px; border: 0;
max-width: 100%;
height: auto !important; height: auto !important;
max-width: 100%;
min-width: 50px;
padding: 0;
} }
&:focus, &:focus,
&.focus { &.focus {
@include box-shadow-none; box-shadow: none;
outline: none; outline: none;
} }
@ -88,15 +89,15 @@ div {
.item { .item {
& { & {
@include border-radius(10px); @include border-radius(10px);
color: $color-dark-foreground;
cursor: default;
padding: 1px .6rem;
background: $color-theme-blue; background: $color-theme-blue;
border: 0; border: 0;
height: 1.25rem; color: $color-dark-foreground;
cursor: default;
font-size: .8rem; font-size: .8rem;
font-weight: normal; font-weight: normal;
height: 1.25rem;
margin-right: 2px; margin-right: 2px;
padding: 1px .6rem;
white-space: nowrap; white-space: nowrap;
} }

8
frontend/app/framework/angular/forms/toggle.component.scss

@ -10,23 +10,23 @@ $toggle-button-size: $toggle-height - .25rem;
@include circle($toggle-button-size); @include circle($toggle-button-size);
@include box-shadow(0, 2px, 2px, .2); @include box-shadow(0, 2px, 2px, .2);
@include absolute($toggle-height * .5, auto, auto, $toggle-width * .5); @include absolute($toggle-height * .5, auto, auto, $toggle-width * .5);
@include transition(left .3s ease);
background: $color-dark-foreground; background: $color-dark-foreground;
border: 0; border: 0;
margin-left: -$toggle-button-size * .5; margin-left: -$toggle-button-size * .5;
margin-top: -$toggle-button-size * .5; margin-top: -$toggle-button-size * .5;
transition: left .3s ease;
} }
&-container { &-container {
& { & {
@include border-radius($toggle-height * .5); @include border-radius($toggle-height * .5);
@include box-shadow-inner; @include box-shadow-inner;
@include transition(background-color .3s ease);
display: inline-block;
position: relative;
background: lighten($color-border, 6%); background: lighten($color-border, 6%);
border: 0; border: 0;
display: inline-block;
height: $toggle-height; height: $toggle-height;
position: relative;
transition: background-color .3s ease;
width: $toggle-width; width: $toggle-width;
} }

20
frontend/app/framework/angular/list-view.component.scss

@ -2,9 +2,9 @@
@import '_vars'; @import '_vars';
:host { :host {
@include flex-box; display: flex;
@include flex-direction(column); flex-direction: column;
@include flex-grow(1); flex-grow: 1;
overflow: hidden; overflow: hidden;
padding: 0; padding: 0;
position: relative; position: relative;
@ -18,17 +18,17 @@
&-content, &-content,
&-header, &-header,
&-footer { &-footer {
@include transition(opacity .2 ease);
padding: 0 $panel-padding; padding: 0 $panel-padding;
transition: opacity .2 ease;
} }
&-content { &-content {
@include flex-grow(1); flex-grow: 1;
padding: $panel-padding; padding: $panel-padding;
&.tabled { &.tabled {
padding-top: .5rem;
padding-bottom: .5rem; padding-bottom: .5rem;
padding-top: .5rem;
} }
&.normal { &.normal {
@ -36,17 +36,17 @@
} }
&.synced { &.synced {
overflow-y: auto;
overflow-x: auto; overflow-x: auto;
overflow-y: auto;
padding-right: 0; padding-right: 0;
} }
} }
&-header { &-header {
& { & {
@include flex-shrink(0);
border: 0; border: 0;
border-bottom: 1px solid $color-border; border-bottom: 1px solid $color-border;
flex-shrink: 0;
overflow-x: hidden; overflow-x: hidden;
overflow-y: hidden; overflow-y: hidden;
} }
@ -70,9 +70,9 @@
&-footer { &-footer {
& { & {
@include flex-shrink(1);
border: 0; border: 0;
border-top: 1px solid $color-border; border-top: 1px solid $color-border;
flex-shrink: 0;
} }
/deep/ .pagination { /deep/ .pagination {
@ -87,7 +87,7 @@
} }
.loading-indicator { .loading-indicator {
@include opacity(.5); opacity: .5;
} }
.loader { .loader {

10
frontend/app/framework/angular/modals/dialog-renderer.component.scss

@ -5,10 +5,9 @@
.notification-container { .notification-container {
& { & {
@include force-width(30rem);
@include fixed;
margin: .625rem; margin: .625rem;
max-width: 30rem;
min-width: 30rem;
position: fixed;
z-index: 100000; z-index: 100000;
} }
@ -45,13 +44,12 @@ $caret-size: 6px;
.tooltip2 { .tooltip2 {
& { & {
color: $color-dark-foreground;
background: $color-tooltip; background: $color-tooltip;
border: 0; color: $color-dark-foreground;
font-size: .9rem; font-size: .9rem;
font-weight: normal; font-weight: normal;
white-space: nowrap;
padding: .5rem; padding: .5rem;
white-space: nowrap;
} }
&-left { &-left {

4
frontend/app/framework/angular/modals/modal-dialog.component.html

@ -19,8 +19,8 @@
<ng-content select="[content]"></ng-content> <ng-content select="[content]"></ng-content>
</div> </div>
<div class="modal-footer" *ngIf="showFooter"> <div class="modal-footer" #footerElement *ngIf="showFooter">
<div class="clearfix" #footerElement> <div class="clearfix">
<ng-content select="[footer]"></ng-content> <ng-content select="[footer]"></ng-content>
</div> </div>
</div> </div>

6
frontend/app/framework/angular/modals/modal-dialog.component.scss

@ -6,8 +6,8 @@
} }
.flexed { .flexed {
@include flex-box; display: flex;
@include flex-grow(1); flex-direction: column;
@include flex-direction(column); flex-grow: 1;
padding: 0; padding: 0;
} }

14
frontend/app/framework/angular/modals/modal-dialog.component.ts

@ -46,7 +46,7 @@ export class ModalDialogComponent implements AfterViewInit {
@ViewChild('tabsElement', { static: false }) @ViewChild('tabsElement', { static: false })
public tabsElement: ElementRef<ParentNode>; public tabsElement: ElementRef<ParentNode>;
@ViewChild('tabsElement', { static: false }) @ViewChild('footerElement', { static: false })
public footerElement: ElementRef<ParentNode>; public footerElement: ElementRef<ParentNode>;
constructor( constructor(
@ -56,7 +56,7 @@ export class ModalDialogComponent implements AfterViewInit {
public ngAfterViewInit() { public ngAfterViewInit() {
this.hideWhenEmpty(this.tabsElement); this.hideWhenEmpty(this.tabsElement);
this.hideWhenEmpty(this.footerElement); this.hideParentWhenEmpty(this.footerElement);
} }
private hideWhenEmpty(element: ElementRef) { private hideWhenEmpty(element: ElementRef) {
@ -69,6 +69,16 @@ export class ModalDialogComponent implements AfterViewInit {
} }
} }
private hideParentWhenEmpty(element: ElementRef) {
if (element && element.nativeElement) {
const isEmpty = element.nativeElement.children.length === 0;
if (isEmpty) {
this.renderer.setStyle(element.nativeElement.parentNode, 'display', 'none');
}
}
}
public emitClose() { public emitClose() {
this.close.emit(); this.close.emit();
} }

4
frontend/app/framework/angular/modals/onboarding-tooltip.component.html

@ -1,9 +1,9 @@
<ng-container *sqxModal="tooltipModal"> <ng-container *sqxModal="tooltipModal">
<div class="onboarding-rect" [sqxAnchoredTo]="for" [offset]="4" [position]="'full'"></div> <div class="onboarding-rect" [sqxAnchoredTo]="for" [offset]="4" [position]="'full'"></div>
<div class="onboarding-help" [sqxAnchoredTo]="for" [offset]="4" [position]="position" @fade> <div class="onboarding-help" [sqxAnchoredTo]="for" [offset]="4" [position]="position" @fade>
<div class="onboarding-text"> <small class="onboarding-text">
<ng-content></ng-content> <ng-content></ng-content>
</div> </small>
<div class="onboarding-buttons clearfix"> <div class="onboarding-buttons clearfix">
<button (click)="hideAll()" class="btn btn-text-primary btn-sm float-left"> <button (click)="hideAll()" class="btn btn-text-primary btn-sm float-left">

10
frontend/app/framework/angular/modals/onboarding-tooltip.component.scss

@ -1,18 +1,18 @@
@import '_mixins'; @import '_mixins';
@import '_vars'; @import '_vars';
$hide-shadow: rgba(0, 0, 0, .5);
.onboarding { .onboarding {
&-help { &-help {
@include border-radius; @include border-radius;
background: $color-tooltip; background: $color-tooltip;
border: 0;
max-width: 20rem; max-width: 20rem;
padding: .75rem; min-width: 10rem;
padding: .75rem 1rem;
} }
&-text { &-text {
font-size: .9rem;
font-weight: normal;
color: $color-dark-foreground; color: $color-dark-foreground;
} }
@ -21,6 +21,6 @@
} }
&-rect { &-rect {
@include box-shadow-raw(0 0 0 9999px rgba(0, 0, 0, .5)); box-shadow: 0 0 0 9999px $hide-shadow;
} }
} }

8
frontend/app/framework/angular/status-icon.component.scss

@ -7,26 +7,26 @@ $circle-size-lg: 2.8rem;
.status { .status {
& { & {
text-align: center;
display: inline-block;
background: $color-border; background: $color-border;
border: 0; border: 0;
color: $color-dark-foreground; color: $color-dark-foreground;
display: inline-block;
text-align: center;
vertical-align: middle; vertical-align: middle;
} }
&.sm { &.sm {
@include circle($circle-size-sm); @include circle($circle-size-sm);
line-height: $circle-size-sm + .1rem;
font-size: .5 * $circle-size-sm; font-size: .5 * $circle-size-sm;
font-weight: normal; font-weight: normal;
line-height: $circle-size-sm + .1rem;
} }
&.lg { &.lg {
@include circle($circle-size-lg); @include circle($circle-size-lg);
line-height: $circle-size-lg + .1rem;
font-size: .5 * $circle-size-lg; font-size: .5 * $circle-size-lg;
font-weight: normal; font-weight: normal;
line-height: $circle-size-lg + .1rem;
} }
&-pending { &-pending {

2
frontend/app/shared/components/asset-dialog.component.scss

@ -15,6 +15,6 @@
} }
&:focus { &:focus {
@include box-shadow-none; box-shadow: none;
} }
} }

8
frontend/app/shared/components/asset-folder.component.scss

@ -9,23 +9,23 @@
img { img {
height: 1.5rem; height: 1.5rem;
margin-right: 1rem;
margin-bottom: .25rem; margin-bottom: .25rem;
margin-right: 1rem;
} }
.card { .card {
& { & {
border-width: 1px;
border-bottom-width: 1px; border-bottom-width: 1px;
border-width: 1px;
width: $asset-width; width: $asset-width;
} }
&-body { &-body {
font-size: 1.1rem; font-size: 1.1rem;
padding-top: .75rem; line-height: 2.2rem;
padding-bottom: .75rem; padding-bottom: .75rem;
padding-right: .5rem; padding-right: .5rem;
line-height: 2.2rem; padding-top: .75rem;
} }
} }

24
frontend/app/shared/components/asset-uploader.component.scss

@ -13,35 +13,35 @@
.nav-link { .nav-link {
color: $color-dark-foreground; color: $color-dark-foreground;
padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
padding-top: 0;
} }
} }
} }
.icon-upload-3 { .icon-upload-3 {
vertical-align: middle;
font-size: 1.4rem; font-size: 1.4rem;
font-weight: lighter; font-weight: lighter;
padding-right: .5rem; padding-right: .5rem;
vertical-align: middle;
} }
.dropdown-menu { .dropdown-menu {
@include absolute(2.6rem, 0, auto, auto); @include absolute(2.6rem, 0, auto, auto);
display: block; display: block;
min-width: 30rem;
max-width: 60%; max-width: 60%;
min-height: 4rem; min-height: 4rem;
min-width: 30rem;
padding: 1rem; padding: 1rem;
} }
.uploads { .uploads {
& { & {
border: 2px solid transparent;
background: none; background: none;
border: 2px solid transparent;
min-height: 2rem; min-height: 2rem;
} }
&-empty { &-empty {
line-height: 1.8rem; line-height: 1.8rem;
} }
@ -49,9 +49,8 @@
.upload { .upload {
& { & {
@include force-height(2rem);
line-height: 2rem; line-height: 2rem;
min-height: 2rem;
max-height: 2rem;
margin-bottom: .5rem; margin-bottom: .5rem;
} }
@ -61,8 +60,8 @@
&-name { &-name {
@include truncate; @include truncate;
padding-right: .5rem;
padding-left: .5rem; padding-left: .5rem;
padding-right: .5rem;
} }
} }
@ -71,14 +70,13 @@ $circle-size: 1.6rem;
.upload-status { .upload-status {
& { & {
@include circle($circle-size); @include circle($circle-size);
display: inline-block;
line-height: $circle-size + .1rem;
text-align: center;
font-size: .4 * $circle-size;
font-weight: normal;
background: $color-border; background: $color-border;
color: $color-dark-foreground; color: $color-dark-foreground;
cursor: none; cursor: none;
font-size: .4 * $circle-size;
font-weight: normal;
line-height: $circle-size + .1rem;
text-align: center;
} }
&-running { &-running {

69
frontend/app/shared/components/asset.component.scss

@ -6,34 +6,34 @@
$list-height: 2.25rem; $list-height: 2.25rem;
@mixin overlay-container { @mixin overlay-container {
position: relative;
padding: 0;
overflow: hidden; overflow: hidden;
padding: 0;
position: relative;
} }
@mixin overlay { @mixin overlay {
& { & {
@include transition(opacity .4s ease);
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
@include opacity(0);
@include flex-box;
color: $color-dark-foreground; color: $color-dark-foreground;
display: flex;
opacity: 0;
transition: opacity .4s ease;
} }
&-background { &-background {
@include absolute(0, 0, 0, 0); @include absolute(0, 0, 0, 0);
@include opacity(.7);
background: $color-dark-black; background: $color-dark-black;
opacity: .7;
} }
} }
@mixin asset-type { @mixin asset-type {
padding: .1rem .25rem; color: $color-dark-foreground;
text-transform: uppercase; cursor: none;
font-size: .7rem; font-size: .7rem;
font-weight: normal; font-weight: normal;
cursor: none; padding: .1rem .25rem;
color: $color-dark-foreground; text-transform: uppercase;
} }
:host(.isListView) { :host(.isListView) {
@ -42,6 +42,7 @@ $list-height: 2.25rem;
:host ::ng-deep { :host ::ng-deep {
.form-control { .form-control {
&.disabled, &.disabled,
&:disabled { &:disabled {
background: transparent; background: transparent;
@ -52,26 +53,25 @@ $list-height: 2.25rem;
.card { .card {
& { & {
@include overlay-container; @include overlay-container;
width: $asset-width;
border-top-width: 1px; border-top-width: 1px;
border-width: 1px; border-width: 1px;
margin-bottom: 1rem; margin-bottom: 1rem;
margin-right: .5rem; margin-right: .5rem;
width: $asset-width;
} }
&-body { &-body {
position: relative; @include force-height($asset-header);
padding: 1rem; padding: 1rem;
min-height: $asset-header; position: relative;
max-height: $asset-header;
} }
&-footer { &-footer {
position: relative; max-height: auto;
min-height: $asset-footer;
padding: 1rem; padding: 1rem;
padding-top: .5rem; padding-top: .5rem;
min-height: $asset-footer; position: relative;
max-height: auto;
} }
} }
@ -87,24 +87,25 @@ $list-height: 2.25rem;
&:hover { &:hover {
.overlay { .overlay {
@include opacity(1); opacity: 1;
} }
.file-type { .file-type {
@include opacity(0); opacity: 0;
} }
} }
} }
&-type { &-type {
@include transition(opacity .4s ease);
@include absolute(1rem, auto, auto, 1rem); @include absolute(1rem, auto, auto, 1rem);
@include asset-type; @include asset-type;
@include border-radius(3px); @include border-radius(3px);
background: $color-dark-black; background: $color-dark-black;
transition: opacity .4s ease;
} }
&-name, &-info { &-name,
&-info {
@include truncate; @include truncate;
} }
@ -125,10 +126,10 @@ $list-height: 2.25rem;
} }
&-icon { &-icon {
padding: 2rem;
background: $color-asset-bg; background: $color-asset-bg;
border: 0; border: 0;
height: $asset-image; height: $asset-image;
padding: 2rem;
text-align: center; text-align: center;
} }
} }
@ -147,10 +148,10 @@ $list-height: 2.25rem;
a { a {
& { & {
color: darken($color-dark-foreground, 10%);
cursor: pointer;
font-size: 1.1rem; font-size: 1.1rem;
font-weight: normal; font-weight: normal;
cursor: pointer;
color: darken($color-dark-foreground, 10%);
} }
&:hover { &:hover {
@ -175,24 +176,24 @@ $list-height: 2.25rem;
} }
.editable { .editable {
height: 2rem;
border-top: 0;
border-bottom: 1px solid transparent; border-bottom: 1px solid transparent;
border-top: 0;
height: 2rem;
} }
.table-items-row { .table-items-row {
& { & {
position: relative;
padding-left: $list-height + 3rem;
height: $list-height + 2rem; height: $list-height + 2rem;
padding-left: $list-height + 3rem;
position: relative;
} }
.left-border { .left-border {
& { & {
@include absolute(0, auto, auto, 0); @include absolute(0, auto, auto, 0);
height: $list-height + 2rem;
border: 0;
background: $color-border; background: $color-border;
border: 0;
height: $list-height + 2rem;
width: 4px; width: 4px;
} }
@ -203,8 +204,8 @@ $list-height: 2.25rem;
.image { .image {
@include absolute(0, auto, 0, 4px); @include absolute(0, auto, 0, 4px);
border: 0;
background: $color-asset-bg; background: $color-asset-bg;
border: 0;
width: $list-height + 2rem; width: $list-height + 2rem;
} }
@ -261,19 +262,19 @@ $list-height: 2.25rem;
} }
&-text { &-text {
position: absolute;
font-size: 1.25rem; font-size: 1.25rem;
font-weight: lighter; font-weight: lighter;
position: absolute;
} }
} }
.drag { .drag {
.drop-overlay { .drop-overlay {
@include opacity(1); opacity: 1;
} }
.file-type { .file-type {
@include opacity(0); opacity: 0;
} }
} }

18
frontend/app/shared/components/assets-list.component.scss

@ -7,8 +7,8 @@
h5 { h5 {
font-size: .9rem; font-size: .9rem;
margin-top: 0;
margin-bottom: .5rem; margin-bottom: .5rem;
margin-top: 0;
} }
.folders { .folders {
@ -19,23 +19,23 @@ h5 {
.folder-container { .folder-container {
& { & {
width: $asset-width; height: $asset-folder-height;
position: relative;
margin-bottom: 1rem; margin-bottom: 1rem;
margin-right: .5rem; margin-right: .5rem;
height: $asset-folder-height; position: relative;
width: $asset-width;
} }
&-over { &-over {
@include absolute(-6px, -6px, -6px, -6px); @include absolute(-6px, -6px, -6px, -6px);
@include opacity(0);
border: 2px solid $color-theme-blue; border: 2px solid $color-theme-blue;
opacity: 0;
} }
&.cdk-drop-list-dragging { &.cdk-drop-list-dragging {
&:hover { &:hover {
.folder-container-over { .folder-container-over {
@include opacity(1); opacity: 1;
} }
} }
} }
@ -43,13 +43,13 @@ h5 {
.file-drop { .file-drop {
& { & {
@include transition(border-color .4s ease);
border: 2px dashed $color-border;
background: transparent; background: transparent;
padding: 1rem; border: 2px dashed $color-border;
margin-bottom: 1rem; margin-bottom: 1rem;
margin-right: 0; margin-right: 0;
padding: 1rem;
text-align: center; text-align: center;
transition: border-color .4s ease;
} }
&.drag { &.drag {

8
frontend/app/shared/components/comments.component.scss

@ -3,16 +3,16 @@
.comments { .comments {
&-list { &-list {
@include flex-grow(1); flex-grow: 1;
overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
overflow-y: auto;
padding: 1rem; padding: 1rem;
padding-left: 1.5rem; padding-left: 1.5rem;
} }
&-footer { &-footer {
@include flex-shrink(0);
border-top: 1px solid $color-border; border-top: 1px solid $color-border;
flex-shrink: 0;
} }
} }
@ -21,6 +21,6 @@
border: 0; border: 0;
&:focus { &:focus {
@include box-shadow-none; box-shadow: none;
} }
} }

2
frontend/app/shared/components/language-selector.component.scss

@ -11,6 +11,6 @@
.iso-code-dropdown { .iso-code-dropdown {
display: inline-block; display: inline-block;
min-width: 40px;
max-width: 60px; max-width: 60px;
min-width: 40px;
} }

2
frontend/app/shared/components/markdown-editor.component.scss

@ -9,7 +9,7 @@ $background: #fff;
.fullscreen { .fullscreen {
@include fixed(0, 0, 0, 0); @include fixed(0, 0, 0, 0);
border: 0;
background: $background; background: $background;
border: 0;
z-index: 1040; z-index: 1040;
} }

2
frontend/app/shared/components/queries/filter-logical.component.scss

@ -4,8 +4,8 @@
$field-line: #e1e8ef; $field-line: #e1e8ef;
.filters { .filters {
position: relative;
padding-left: 3rem; padding-left: 3rem;
position: relative;
} }
.filter { .filter {

20
frontend/app/shared/components/schema-category.component.scss

@ -38,9 +38,9 @@ $drag-margin: -8px;
.drop-indicator { .drop-indicator {
@include absolute($drag-margin, $drag-margin, $drag-margin, $drag-margin); @include absolute($drag-margin, $drag-margin, $drag-margin, $drag-margin);
display: none;
border: 2px dashed $color-dark-black;
background: none; background: none;
border: 2px dashed $color-dark-black;
display: none;
pointer-events: none; pointer-events: none;
} }
} }
@ -50,9 +50,9 @@ $drag-margin: -8px;
} }
.nav-link { .nav-link {
padding-top: .75rem;
padding-bottom: .75rem;
border: 0; border: 0;
padding-bottom: .75rem;
padding-top: .75rem;
} }
.nav-item { .nav-item {
@ -92,7 +92,7 @@ $drag-margin: -8px;
} }
.cdk-drag-animating { .cdk-drag-animating {
@include transition(none); transition: none;
} }
.schema { .schema {
@ -105,23 +105,23 @@ $drag-margin: -8px;
} }
&-modified { &-modified {
padding-left: 0;
text-align: right; text-align: right;
width: auto;
white-space: nowrap; white-space: nowrap;
padding-left: 0; width: auto;
} }
&-user { &-user {
@include border-radius(1px); @include border-radius(1px);
@include truncate; @include truncate;
display: inline-block;
background: $color-dark2-control; background: $color-dark2-control;
padding: .1rem .25rem; display: inline-block;
font-size: .8rem; font-size: .8rem;
font-weight: normal; font-weight: normal;
margin-left: 10px;
margin-bottom: 2px; margin-bottom: 2px;
margin-left: 10px;
max-width: 100%; max-width: 100%;
padding: .1rem .25rem;
vertical-align: middle; vertical-align: middle;
} }
} }

6
frontend/app/shared/components/search-form.component.scss

@ -23,17 +23,17 @@
.save-search { .save-search {
color: $color-border-dark !important; color: $color-border-dark !important;
cursor: pointer !important;
font-size: .9rem; font-size: .9rem;
font-weight: normal; font-weight: normal;
cursor: pointer !important;
} }
.expand-search { .expand-search {
& { & {
color: $color-border-dark !important; color: $color-border-dark !important;
cursor: pointer !important;
font-size: .9rem; font-size: .9rem;
font-weight: normal; font-weight: normal;
cursor: pointer !important;
padding: 0 .5rem; padding: 0 .5rem;
} }
@ -43,9 +43,9 @@
} }
.link { .link {
margin-top: 1.5rem;
font-size: .8rem; font-size: .8rem;
font-weight: normal; font-weight: normal;
margin-top: 1.5rem;
} }
.col-form-label { .col-form-label {

10
frontend/app/shell/pages/home/home-page.component.scss

@ -13,17 +13,17 @@
.login { .login {
&-area { &-area {
max-width: 28rem;
margin: 1rem auto 0; margin: 1rem auto 0;
max-width: 28rem;
padding: 0 1rem; padding: 0 1rem;
} }
&-arms { &-arms {
@include absolute(auto, auto, -40px, -110px); @include absolute(auto, auto, -40px, -110px);
background: url('data:image/png;base64,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');
border: 0;
height: 200px; height: 200px;
width: 200px; width: 200px;
border: 0;
background: url('data:image/png;base64,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');
} }
&-icon { &-icon {
@ -41,9 +41,9 @@
.proudly-made { .proudly-made {
color: $color-text-decent; color: $color-text-decent;
line-height: 1.5rem;
text-align: center;
font-size: .9rem; font-size: .9rem;
font-style: normal; font-style: normal;
line-height: 1.5rem;
margin: 2rem 6rem; margin: 2rem 6rem;
text-align: center;
} }

26
frontend/app/shell/pages/internal/apps-menu.component.scss

@ -3,31 +3,33 @@
$color-apps-border: #65a6ff; $color-apps-border: #65a6ff;
$color-nav-shadow: rgba(26, 93, 184, .26);
.nav { .nav {
& { & {
@include flex-direction(row); flex-direction: row;
} }
.nav-item { .nav-item {
.nav-link { .nav-link {
& { & {
@include box-shadow-colored(0, 2px, 4px, rgba(26, 93, 184, .26));
@include transition(opacity .4 ease);
@include opacity(.95);
@include no-selection;
@include border-radius; @include border-radius;
cursor: pointer;
color: $color-dark-foreground;
border: 1px solid $color-theme-blue-lighter;
background: $color-theme-blue; background: $color-theme-blue;
border: 1px solid $color-theme-blue-lighter;
box-shadow: 0, 2px, 4px $color-nav-shadow;
color: $color-dark-foreground;
cursor: pointer;
line-height: 1.25rem; line-height: 1.25rem;
min-width: 150px;
opacity: .95;
padding-left: 1rem; padding-left: 1rem;
padding-right: 2rem; padding-right: 2rem;
min-width: 150px; transition: opacity .4 ease;
user-select: none;
} }
&:hover { &:hover {
@include opacity(1); opacity: 1;
} }
&::after { &::after {
@ -48,7 +50,7 @@ $color-apps-border: #65a6ff;
} }
&-item { &-item {
@include border-radius(0); border-radius: 0;
} }
} }
@ -61,8 +63,8 @@ $color-apps-border: #65a6ff;
} }
.apps-list { .apps-list {
max-height: 600px;
margin: -.5rem 0; margin: -.5rem 0;
max-height: 600px;
overflow-y: auto; overflow-y: auto;
} }

18
frontend/app/shell/pages/internal/internal-area.component.scss

@ -7,18 +7,18 @@
} }
.navbar-brand { .navbar-brand {
width: $size-sidebar-width;
background: $color-theme-blue-dark; background: $color-theme-blue-dark;
padding-top: 0;
padding-bottom: 0;
cursor: pointer; cursor: pointer;
margin-top: -.5rem; float: left;
margin-left: -1rem;
margin-right: 2rem;
font-size: 1.8rem; font-size: 1.8rem;
height: $size-navbar-height; height: $size-navbar-height;
text-decoration: none;
text-align: center;
line-height: $size-navbar-height; line-height: $size-navbar-height;
float: left; margin-left: -1rem;
margin-right: 2rem;
margin-top: -.5rem;
padding-bottom: 0;
padding-top: 0;
text-align: center;
text-decoration: none;
width: $size-sidebar-width;
} }

8
frontend/app/shell/pages/internal/profile-menu.component.scss

@ -9,16 +9,16 @@
.nav-link { .nav-link {
color: $color-dark-foreground; color: $color-dark-foreground;
padding-top: 0;
padding-bottom: 0; padding-bottom: 0;
padding-top: 0;
} }
} }
&-item-help { &-item-help {
padding-top: 2px;
padding-right: 1rem;
font-size: 1.4rem; font-size: 1.4rem;
font-weight: lighter; font-weight: lighter;
padding-right: 1rem;
padding-top: 2px;
vertical-align: middle; vertical-align: middle;
} }
} }
@ -38,8 +38,8 @@
} }
&-info { &-info {
line-height: 1.4rem;
font-size: .9rem; font-size: .9rem;
font-weight: normal; font-weight: normal;
line-height: 1.4rem;
} }
} }

56
frontend/app/theme/_bootstrap.scss

@ -14,33 +14,33 @@
} }
&-primary { &-primary {
color: $color-badge-primary-foreground;
background: $color-badge-primary-background; background: $color-badge-primary-background;
color: $color-badge-primary-foreground;
} }
&-secondary { &-secondary {
color: $color-badge-secondary-foreground;
background: $color-badge-secondary-background; background: $color-badge-secondary-background;
color: $color-badge-secondary-foreground;
} }
&-success { &-success {
color: $color-badge-success-foreground;
background: $color-badge-success-background; background: $color-badge-success-background;
color: $color-badge-success-foreground;
} }
&-info { &-info {
color: $color-badge-info-foreground;
background: $color-badge-info-background; background: $color-badge-info-background;
color: $color-badge-info-foreground;
} }
&-warning { &-warning {
color: $color-badge-warning-foreground;
background: $color-badge-warning-background; background: $color-badge-warning-background;
color: $color-badge-warning-foreground;
} }
&-danger { &-danger {
color: $color-badge-danger-foreground;
background: $color-badge-danger-background; background: $color-badge-danger-background;
color: $color-badge-danger-foreground;
} }
} }
@ -64,8 +64,8 @@
.close { .close {
& { & {
font-weight: 400;
font-size: 1.6rem; font-size: 1.6rem;
font-weight: 400;
padding-top: .25rem; padding-top: .25rem;
} }
@ -82,12 +82,12 @@
} }
.alert-hint { .alert-hint {
@include border-radius(0);
background: lighten($color-theme-blue, 35%); background: lighten($color-theme-blue, 35%);
border: 1px solid $color-border; border: 1px solid $color-border;
border-radius: 0;
color: $color-text;
font-size: 90%; font-size: 90%;
font-weight: normal; font-weight: normal;
color: $color-text;
.alert-link { .alert-link {
color: $color-text !important; color: $color-text !important;
@ -104,7 +104,7 @@
a { a {
&:disabled, &:disabled,
&.disabled { &.disabled {
@include opacity(.8); opacity: .8;
pointer-events: none; pointer-events: none;
} }
@ -124,9 +124,9 @@ a {
} }
&:hover { &:hover {
text-decoration: underline !important;
cursor: pointer;
color: inherit; color: inherit;
cursor: pointer;
text-decoration: underline !important;
} }
} }
} }
@ -163,8 +163,8 @@ a {
// White dropdown menu without border and shadow. // White dropdown menu without border and shadow.
& { & {
@include box-shadow(0, 3px, 16px, .2); @include box-shadow(0, 3px, 16px, .2);
border: 0;
background: $panel-light-background; background: $panel-light-background;
border: 0;
z-index: 1200; z-index: 1200;
} }
@ -203,9 +203,9 @@ a {
// //
.breadcrumb { .breadcrumb {
& { & {
margin-bottom: 2rem;
background: none; background: none;
border: 1px solid $color-border; border: 1px solid $color-border;
margin-bottom: 2rem;
} }
&.steps { &.steps {
@ -215,12 +215,12 @@ a {
.breadcrumb-item { .breadcrumb-item {
& { & {
padding: .75rem 2rem .75rem 1rem;
background: url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns="http://www.w3.org/2000/svg" width="7" height="20"%3e%3cpath d="M0 0l7 10-7 10" fill="none" stroke="%23e4e7e9" stroke-width=".5"/%3e%3c/svg%3e'); background: url('data:image/svg+xml;charset=UTF-8,%3csvg xmlns="http://www.w3.org/2000/svg" width="7" height="20"%3e%3cpath d="M0 0l7 10-7 10" fill="none" stroke="%23e4e7e9" stroke-width=".5"/%3e%3c/svg%3e');
background-position-x: right; background-position-x: right;
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: contain; background-size: contain;
color: $color-text-decent; color: $color-text-decent;
padding: .75rem 2rem .75rem 1rem;
a { a {
color: $color-text-decent !important; color: $color-text-decent !important;
@ -343,11 +343,11 @@ a {
& .nav-link { & .nav-link {
& { & {
border-bottom: .25rem solid transparent;
color: $color-text; color: $color-text;
cursor: pointer; cursor: pointer;
padding: 1rem 0;
border-bottom: .25rem solid transparent;
margin: 0 1rem; margin: 0 1rem;
padding: 1rem 0;
text-align: center; text-align: center;
} }
@ -444,13 +444,13 @@ a {
&-radio { &-radio {
& { & {
@include border-radius; @include border-radius;
background: transparent;
border: 1px solid $color-border;
color: $color-text-decent; color: $color-text-decent;
cursor: pointer; cursor: pointer;
border: 1px solid $color-border;
background: transparent;
margin-right: .5rem;
font-size: 1.5rem; font-size: 1.5rem;
font-weight: normal; font-weight: normal;
margin-right: .5rem;
text-align: center; text-align: center;
width: 4.5rem; width: 4.5rem;
} }
@ -463,9 +463,9 @@ a {
display: block; display: block;
font-size: .7rem; font-size: .7rem;
font-weight: bold; font-weight: bold;
line-height: 1.5rem;
margin-left: -.5rem; margin-left: -.5rem;
margin-right: -.5rem; margin-right: -.5rem;
line-height: 1.5rem;
} }
.radio-input { .radio-input {
@ -505,8 +505,8 @@ a {
&-group { &-group {
.btn-toggle { .btn-toggle {
& { & {
border: 1px solid $color-theme-secondary;
background: $color-dark-foreground; background: $color-dark-foreground;
border: 1px solid $color-theme-secondary;
} }
&.btn-primary { &.btn-primary {
@ -580,8 +580,8 @@ $icon-size: 4.5rem;
&-title { &-title {
font-weight: bold; font-weight: bold;
margin-top: -.25rem;
margin-bottom: 0; margin-bottom: 0;
margin-top: -.25rem;
} }
&-text { &-text {
@ -590,10 +590,10 @@ $icon-size: 4.5rem;
.btn-radio { .btn-radio {
& { & {
line-height: $icon-size;
font-size: 1.75rem; font-size: 1.75rem;
font-weight: normal; font-weight: normal;
height: $icon-size; height: $icon-size;
line-height: $icon-size;
} }
i { i {
@ -616,7 +616,7 @@ $icon-size: 4.5rem;
.modal { .modal {
&-header, &-header,
&-footer { &-footer {
@include flex-shrink(0); flex-shrink: 0;
} }
&-body { &-body {
@ -649,9 +649,9 @@ $icon-size: 4.5rem;
&-content { &-content {
@include box-shadow(0, 6px, 16px, .4); @include box-shadow(0, 6px, 16px, .4);
@include border-radiusn(.4rem, .35rem, .35rem, .4rem);
max-height: 100%;
border: 0; border: 0;
border-radius: .4rem, .35rem, .35rem, .4rem;
max-height: 100%;
} }
&-fh { &-fh {
@ -675,8 +675,8 @@ $icon-size: 4.5rem;
&-tabs { &-tabs {
background: $color-theme-secondary; background: $color-theme-secondary;
position: relative;
padding: .75rem 1.25rem; padding: .75rem 1.25rem;
position: relative;
} }
&-footer { &-footer {

53
frontend/app/theme/_common.scss

@ -21,8 +21,8 @@ body {
// Common style for user email. // Common style for user email.
.user-email { .user-email {
font-style: italic;
font-size: .8rem; font-size: .8rem;
font-style: italic;
} }
.text-decent { .text-decent {
@ -30,8 +30,8 @@ body {
} }
.drag-handle { .drag-handle {
cursor: move;
color: $color-text-decent; color: $color-text-decent;
cursor: move;
} }
// //
@ -48,7 +48,7 @@ body {
} }
.cdk-drag-preview { .cdk-drag-preview {
@include opacity(.7); opacity: .7;
&.table-drag { &.table-drag {
background: $color-dark-foreground; background: $color-dark-foreground;
@ -62,20 +62,20 @@ body {
} }
.cdk-drag-placeholder { .cdk-drag-placeholder {
@include opacity(0); opacity: 0;
} }
.cdk-drag-animating { .cdk-drag-animating {
@include transition(transform 250ms cubic-bezier(0, 0, .2, 1)); transition: transform 250ms cubic-bezier(0, 0, .2, 1);
} }
.cdk-drop-list-dragging { .cdk-drop-list-dragging {
* { * {
@include transition(transform 250ms cubic-bezier(0, 0, .2, 1)); transition: transform 250ms cubic-bezier(0, 0, .2, 1);
} }
.cdk-drag-placeholder { .cdk-drag-placeholder {
@include transition(none); transition: none;
} }
} }
@ -107,7 +107,7 @@ body {
} }
&:not([src]) { &:not([src]) {
@include opacity(0); opacity: 0;
} }
} }
@ -121,9 +121,8 @@ body {
.item-published { .item-published {
& { & {
@include circle(.5rem); @include circle(.5rem);
display: inline-block;
border: 0;
background: $color-theme-green; background: $color-theme-green;
border: 0;
margin-left: .4rem; margin-left: .4rem;
} }
@ -191,25 +190,25 @@ body {
& { & {
@include absolute(30px, 30px, 30px, 30px); @include absolute(30px, 30px, 30px, 30px);
@include border-radius; @include border-radius;
z-index: 10;
align-content: center; align-content: center;
align-items: center; align-items: center;
display: none;
border: 2px dashed $color-border; border: 2px dashed $color-border;
color: darken($color-border, 30%);
display: none;
font-size: 1.2rem; font-size: 1.2rem;
font-weight: normal; font-weight: normal;
justify-content: center; justify-content: center;
color: darken($color-border, 30%); z-index: 10;
} }
&.dragging { &.dragging {
@include flex-box; display: flex;
} }
&.drag { &.drag {
border-color: darken($color-border, 10%); border-color: darken($color-border, 10%);
cursor: copy;
color: darken($color-border, 40%); color: darken($color-border, 40%);
cursor: copy;
text-decoration: none; text-decoration: none;
} }
} }
@ -222,7 +221,7 @@ body {
.sorting { .sorting {
&, &,
& > * { & > * {
@include opacity(.5); opacity: .5;
} }
} }
@ -230,41 +229,41 @@ body {
// Animations // Animations
// //
.spin { .spin {
@include animation(spin 3s infinite linear); animation: spin 3s infinite linear;
} }
.spin2 { .spin2 {
@include animation(spin2 5s infinite linear); animation: spin2 5s infinite linear;
} }
@include keyframes (spin2) { @keyframes spin2 {
50% { 50% {
@include rotate(180deg); transform: rotate(180deg);
} }
100% { 100% {
@include rotate(360deg); transform: rotate(360deg);
} }
} }
@include keyframes (spin) { @keyframes spin {
20% { 20% {
@include rotate(0deg); transform: rotate(0deg);
} }
30% { 30% {
@include rotate(180deg); transform: rotate(180deg);
} }
70% { 70% {
@include rotate(180deg); transform: rotate(180deg);
} }
80% { 80% {
@include rotate(360deg); transform: rotate(360deg);
} }
100% { 100% {
@include rotate(360deg); transform: rotate(360deg);
} }
} }

55
frontend/app/theme/_forms.scss

@ -14,8 +14,8 @@
&:hover, &:hover,
&:focus { &:focus {
@include box-shadow-colored(0, 0, .2rem, $color-theme-error);
border-color: $color-theme-error-dark; border-color: $color-theme-error-dark;
box-shadow: 0 0 .2rem, $color-theme-error;
} }
} }
} }
@ -33,11 +33,11 @@
// Small triangle under the error tooltip with the border trick. // Small triangle under the error tooltip with the border trick.
&::after { &::after {
@include absolute(auto, auto, -.75rem, .625rem); @include absolute(auto, auto, -.75rem, .625rem);
content: ''; border-color: $color-theme-error transparent transparent;
height: 0;
border-style: solid; border-style: solid;
border-width: .4rem; border-width: .4rem;
border-color: $color-theme-error transparent transparent; content: '';
height: 0;
width: 0; width: 0;
} }
@ -45,6 +45,7 @@
& { & {
@include absolute(auto, auto, .4rem, 0); @include absolute(auto, auto, .4rem, 0);
@include border-radius(2px); @include border-radius(2px);
background: $color-theme-error;
color: $color-dark-foreground; color: $color-dark-foreground;
cursor: none; cursor: none;
display: inline-block; display: inline-block;
@ -53,7 +54,6 @@
line-height: 1.1rem; line-height: 1.1rem;
padding: .25rem .4rem; padding: .25rem .4rem;
padding-bottom: .5rem; padding-bottom: .5rem;
background: $color-theme-error;
} }
} }
@ -72,18 +72,18 @@
& { & {
@include border-radius(4px); @include border-radius(4px);
color: $color-dark-foreground; color: $color-dark-foreground;
margin-top: .25rem;
margin-bottom: .8rem;
font-size: .9rem; font-size: .9rem;
font-weight: normal; font-weight: normal;
margin-bottom: .8rem;
margin-top: .25rem;
padding: .5rem; padding: .5rem;
padding-right: 1.5rem; padding-right: 1.5rem;
} }
&-close { &-close {
@include absolute(0, 0, auto, auto); @include absolute(0, 0, auto, auto);
padding: .5rem;
display: none; display: none;
padding: .5rem;
} }
&-error { &-error {
@ -120,21 +120,21 @@
.form-alert { .form-alert {
@include absolute(.25rem, 0, auto, auto); @include absolute(.25rem, 0, auto, auto);
padding: 1rem;
min-width: 200px;
max-width: 600px;
font-size: 1rem; font-size: 1rem;
font-weight: normal; font-weight: normal;
max-width: 600px;
min-width: 200px;
padding: 1rem;
text-align: left; text-align: left;
z-index: 2000; z-index: 2000;
&::after { &::after {
@include absolute(-.75rem, .625rem, auto, auto); @include absolute(-.75rem, .625rem, auto, auto);
content: ''; border-color: transparent transparent $color-theme-error;
height: 0;
border-style: solid; border-style: solid;
border-width: .4rem; border-width: .4rem;
border-color: transparent transparent $color-theme-error; content: '';
height: 0;
width: 0; width: 0;
} }
} }
@ -148,11 +148,11 @@
@include absolute(2px, auto, auto, 0); @include absolute(2px, auto, auto, 0);
@include border-radius(.25em); @include border-radius(.25em);
@include box-shadow; @include box-shadow;
max-height: 15rem;
border: 1px solid $color-input;
background: $color-dark-foreground; background: $color-dark-foreground;
padding: .25rem 0; border: 1px solid $color-input;
max-height: 15rem;
overflow-y: auto; overflow-y: auto;
padding: .25rem 0;
} }
&-item { &-item {
@ -166,9 +166,9 @@
&.active, &.active,
&:hover { &:hover {
color: $color-dark-foreground;
border: 0;
background: $color-theme-blue; background: $color-theme-blue;
border: 0;
color: $color-dark-foreground;
} }
} }
} }
@ -218,7 +218,7 @@ label {
// //
.search-form { .search-form {
& { & {
@include flex-grow(1); flex-grow: 1;
position: relative; position: relative;
} }
@ -239,11 +239,11 @@ label {
// Dark form control for the dark panel. // Dark form control for the dark panel.
.form-control-dark { .form-control-dark {
& { & {
@include transition(background-color .3s ease);
@include placeholder-color($color-dark2-placeholder); @include placeholder-color($color-dark2-placeholder);
background: $color-dark2-control; background: $color-dark2-control;
border: 1px solid $color-dark2-control; border: 1px solid $color-dark2-control;
color: darken($color-dark-foreground, 20%); color: darken($color-dark-foreground, 20%);
transition: background-color .3s ease;
} }
&:focus { &:focus {
@ -256,17 +256,16 @@ label {
input { input {
&.form-underlined { &.form-underlined {
& { & {
@include border-radius(0);
border: 0; border: 0;
border-bottom: 1px solid $color-input; border-bottom: 1px solid $color-input;
border-radius: 0;
} }
&:focus, &:focus,
&.focus { &.focus {
@include box-shadow-none;
background: transparent; background: transparent;
border-color: transparent;
border-bottom-color: $color-theme-blue; border-bottom-color: $color-theme-blue;
box-shadow: none;
outline: none; outline: none;
} }
@ -282,18 +281,18 @@ input {
&.ng-touched, &.ng-touched,
&.ng-dirty { &.ng-dirty {
& { & {
@include box-shadow-none;
background: transparent; background: transparent;
border-color: transparent;
border-bottom-color: $color-theme-error; border-bottom-color: $color-theme-error;
border-color: transparent;
box-shadow: none;
outline: none; outline: none;
} }
&:hover, &:hover,
&:focus { &:focus {
@include box-shadow-none;
border-color: transparent;
border-bottom-color: $color-theme-error-dark; border-bottom-color: $color-theme-error-dark;
border-color: transparent;
box-shadow: none;
} }
} }
} }

15
frontend/app/theme/_lists.scss

@ -34,10 +34,10 @@
thead { thead {
// Small font size for the table header, content is more important! // Small font size for the table header, content is more important!
th { th {
border: 0;
color: $color-table-header; color: $color-table-header;
font-size: .8rem; font-size: .8rem;
font-weight: normal; font-weight: normal;
border: 0;
padding-top: 0; padding-top: 0;
vertical-align: middle; vertical-align: middle;
@ -61,7 +61,6 @@
tr { tr {
// Each row is white and a has a border. // Each row is white and a has a border.
& { & {
@include transition(all .2s ease);
background: $color-table-background; background: $color-table-background;
border: 1px solid $color-table-border; border: 1px solid $color-table-border;
border-bottom: 2px solid $color-table-border; border-bottom: 2px solid $color-table-border;
@ -96,19 +95,19 @@
// //
&-row { &-row {
& { & {
padding: .75rem 1.25rem;
background: $color-table-background; background: $color-table-background;
border: 1px solid $color-border; border: 1px solid $color-border;
border-top: 0;
border-bottom-width: 2px; border-bottom-width: 2px;
border-top: 0;
margin-bottom: .25rem; margin-bottom: .25rem;
padding: .75rem 1.25rem;
} }
// Summary row for expandable rows. // Summary row for expandable rows.
&-summary { &-summary {
line-height: 2.5rem;
padding: .75rem 1.25rem; padding: .75rem 1.25rem;
position: relative; position: relative;
line-height: 2.5rem;
} }
&-expandable { &-expandable {
@ -137,9 +136,9 @@
&-tabs { &-tabs {
background: $color-table-footer; background: $color-table-footer;
position: relative;
padding: 1rem 1.25rem;
height: 70px; height: 70px;
padding: 1rem 1.25rem;
position: relative;
} }
} }
} }
@ -147,10 +146,10 @@
// Footer that typically contains an add-item-form. // Footer that typically contains an add-item-form.
&-header, &-header,
&-footer { &-footer {
padding: .75rem 1.25rem;
background: $color-table-footer; background: $color-table-footer;
border: 1px solid $color-input; border: 1px solid $color-input;
border-bottom-width: 2px; border-bottom-width: 2px;
padding: .75rem 1.25rem;
} }
&-header { &-header {

353
frontend/app/theme/_mixins.scss

@ -1,7 +1,7 @@
@mixin build-icon($color) { @mixin build-icon($color) {
& { & {
@include transition(color .3s ease);
color: $color; color: $color;
transition: color .3s ease;
} }
&:hover, &:hover,
@ -12,9 +12,9 @@
@mixin build-toggle-button($color, $background) { @mixin build-toggle-button($color, $background) {
& { & {
color: $color;
border-color: $color;
background: $background; background: $background;
border-color: $color;
color: $color;
z-index: 1000; z-index: 1000;
} }
} }
@ -26,12 +26,12 @@
&:disabled &:disabled
&.disabled { &.disabled {
@include opacity(.4); opacity: .4;
} }
&:focus, &:focus,
&.focus { &.focus {
@include box-shadow-raw(0 0 0 $btn-focus-width rgba($color, .5)); box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
} }
&:active, &:active,
@ -42,8 +42,8 @@
@mixin scrollbars($size, $foreground-color, $background-color: mix($foreground-color, white, 50%)) { @mixin scrollbars($size, $foreground-color, $background-color: mix($foreground-color, white, 50%)) {
&::-webkit-scrollbar { &::-webkit-scrollbar {
width: $size;
height: $size; height: $size;
width: $size;
} }
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
@ -56,112 +56,40 @@
} }
& { & {
scrollbar-color: $foreground-color $background-color;
scrollbar-face-color: $foreground-color; scrollbar-face-color: $foreground-color;
scrollbar-track-color: $background-color; scrollbar-track-color: $background-color;
scrollbar-color: $foreground-color $background-color;
scrollbar-width: thin; scrollbar-width: thin;
} }
} }
@mixin clearfix {
@mixin clearfix() {
&::after { &::after {
content: '';
clear: both; clear: both;
content: '';
display: table; display: table;
} }
} }
@mixin hidden() { @mixin hidden() {
width: 0;
opacity: 0; opacity: 0;
overflow: hidden; overflow: hidden;
position: absolute; position: absolute;
width: 0;
} }
@mixin force-width($width) { @mixin force-width($width) {
min-width: $width;
max-width: $width;
width: $width; width: $width;
// Ensure that we use the minimum width in flex scenarios.
max-width: $width;
min-width: $width;
} }
@mixin flex-box { @mixin force-height($height) {
display: -webkit-box; height: $height;
display: -webkit-flex; // Ensure that we use the minimum width in flex scenarios.
display: -moz-flex; max-height: $height;
display: -ms-flexbox; min-height: $height;
display: flex;
}
@mixin flex-inline {
display: -webkit-inline-box;
display: -webkit-inline-flex;
display: -moz-inline-flex;
display: -ms-inline-flexbox;
display: inline-flex;
}
@mixin flex-direction($direction) {
-webkit-flex-direction: $direction;
-moz-flex-direction: $direction;
-ms-flex-direction: $direction;
flex-direction: $direction;
}
@mixin flex-flow($values: (row nowrap)) {
-webkit-flex-flow: $values;
-moz-flex-flow: $values;
-ms-flex-flow: $values;
flex-flow: $values;
}
@mixin flex-grow($int: 0) {
-webkit-box-flex: $int;
-webkit-flex-grow: $int;
-moz-flex-grow: $int;
-ms-flex-positive: $int;
flex-grow: $int;
}
@mixin flex-shrink($int: 0) {
-webkit-flex-shrink: $int;
-moz-flex-shrink: $int;
flex-shrink: $int;
}
@mixin inner-border($color: #999) {
-webkit-box-shadow: inset 1px 1px 1px $color;
-moz-box-shadow: inset 1px 1px 1px $color;
box-shadow: inset 1px 1px 1px $color;
}
@mixin no-selection() {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
@mixin ellipsis() {
-o-text-overflow: ellipsis;
-ms-text-overflow: ellipsis;
text-overflow: ellipsis;
}
@mixin box-sizing($sizing: border-box) {
-webkit-box-sizing: $sizing;
-ms-box-sizing: $sizing;
-moz-box-sizing: $sizing;
box-sizing: $sizing;
}
@mixin border-box() {
-webkit-box-sizing: border-box;
-ms-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
} }
@mixin caret-top($color, $size: .6rem) { @mixin caret-top($color, $size: .6rem) {
@ -188,28 +116,18 @@
border-top-color: $color; border-top-color: $color;
} }
@mixin caret() { @mixin caret {
display: inline-block; @include force-height(0);
min-width: 0; @include force-width(0);
max-width: 0;
min-height: 0;
max-height: 0;
content: ''; content: '';
display: inline-block;
} }
@mixin circle($size) { @mixin circle($size) {
@include border-radius($size * .5); @include border-radius($size * .5);
min-height: $size; @include force-height($size);
max-height: $size; @include force-width($size);
min-width: $size; display: inline-block;
max-width: $size;
}
@mixin wrap() {
-ms-word-break: normal;
word-break: normal;
-ms-word-wrap: break-word;
word-wrap: break-word;
} }
@mixin placeholder-color($color) { @mixin placeholder-color($color) {
@ -223,12 +141,12 @@
&:-moz-placeholder { &:-moz-placeholder {
color: $color; color: $color;
@include opacity(1.0); opacity: 1;
} }
&::-moz-placeholder { &::-moz-placeholder {
color: $color; color: $color;
@include opacity(1.0); opacity: 1;
} }
&:-ms-input-placeholder { &:-ms-input-placeholder {
@ -236,220 +154,71 @@
} }
} }
@mixin text-shadow($x-axis: 1px, $y-axis: 1px, $blur: 1px, $color: #000) { @mixin hover-visible($selector, $display: 'block') {
-webkit-text-shadow: $x-axis $y-axis $blur $color; #{$selector} {
text-shadow: $x-axis $y-axis $blur $color; display: none;
} }
@mixin text-shadow-none() {
-webkit-text-shadow: none;
text-shadow: none;
}
@mixin box-shadow-none() {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
@mixin box-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) {
-webkit-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
-moz-box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
}
@mixin box-shadow-colored($x-axis: 0, $y-axis: 1px, $blur: 2px, $color: #000) {
-webkit-box-shadow: $x-axis $y-axis $blur $color;
-moz-box-shadow: $x-axis $y-axis $blur $color;
box-shadow: $x-axis $y-axis $blur $color;
}
@mixin box-shadow-inner($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: 0.1) { &:hover {
-webkit-box-shadow: inset $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); #{$selector} {
-moz-box-shadow: inset $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); display: $display;
box-shadow: inset $x-axis $y-axis $blur rgba(0, 0, 0, $alpha); }
}
} }
@mixin box-shadow-raw($shadows...) { @mixin box-shadow($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: .1) {
-webkit-box-shadow: $shadows; box-shadow: $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
-moz-box-shadow: $shadows;
box-shadow: $shadows;
} }
@mixin border-radius-clip() { @mixin box-shadow-inner($x-axis: 0, $y-axis: 1px, $blur: 2px, $alpha: .1) {
-webkit-background-clip: padding-box; box-shadow: inset $x-axis $y-axis $blur rgba(0, 0, 0, $alpha);
-moz-background-clip: padding;
background-clip: padding-box;
} }
@mixin border-radius ($radius: 4px) { @mixin border-radius ($radius: 4px) {
-webkit-border-radius: $radius; border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
@include border-radius-clip;
}
@mixin border-radiusn($topright, $bottomright, $bottomleft, $topleft) {
-webkit-border-radius: $topright $bottomright $bottomleft $topleft;
-moz-border-radius: $topright $bottomright $bottomleft $topleft;
border-radius: $topright $bottomright $bottomleft $topleft;
@include border-radius-clip;
} }
@mixin border-radius-left ($radius: 4px) { @mixin border-radius-left ($radius: 4px) {
-webkit-border-radius: $radius 0 0 $radius; border-radius: $radius 0 0 $radius;
-moz-border-radius: $radius 0 0 $radius;
border-radius: $radius 0 0 $radius;
} }
@mixin border-radius-right ($radius: 4px) { @mixin border-radius-right ($radius: 4px) {
-webkit-border-radius: 0 $radius $radius 0; border-radius: 0 $radius $radius 0;
-moz-border-radius: 0 $radius $radius 0;
border-radius: 0 $radius $radius 0;
} }
@mixin border-radius-bottom ($radius: 4px) { @mixin border-radius-bottom ($radius: 4px) {
-webkit-border-radius: 0 0 $radius $radius; border-radius: 0 0 $radius $radius;
-moz-border-radius: 0 0 $radius $radius;
border-radius: 0 0 $radius $radius;
} }
@mixin border-radius-top ($radius: 4px) { @mixin border-radius-top ($radius: 4px) {
-webkit-border-radius: $radius $radius 0 0; border-radius: $radius $radius 0 0;
-moz-border-radius: $radius $radius 0 0;
border-radius: $radius $radius 0 0;
}
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content;
}
@-moz-keyframes #{$name} {
@content;
}
@keyframes #{$name} {
@content;
}
@-ms-keyframes #{$name} {
@content;
}
}
@mixin animation($animation...) {
-webkit-animation: $animation;
-moz-animation: $animation;
-o-animation: $animation;
animation: $animation;
}
@mixin transition($transition...) {
-webkit-transition: $transition;
-moz-transition: $transition;
-o-transition: $transition;
transition: $transition;
}
@mixin transition-delay($transition-delay...) {
-webkit-transition-delay: $transition-delay;
-moz-transition-delay: $transition-delay;
-o-transition-delay: $transition-delay;
transition-delay: $transition-delay;
}
@mixin transition-duration($transition-duration...) {
-webkit-transition-duration: $transition-duration;
-moz-transition-duration: $transition-duration;
-o-transition-duration: $transition-duration;
transition-duration: $transition-duration;
}
@mixin rotate($degrees) {
-webkit-transform: rotate($degrees);
-moz-transform: rotate($degrees);
-ms-transform: rotate($degrees);
-o-transform: rotate($degrees);
transform: rotate($degrees);
}
@mixin scale($ratio) {
-webkit-transform: scale($ratio);
-moz-transform: scale($ratio);
-ms-transform: scale($ratio);
-o-transform: scale($ratio);
transform: scale($ratio);
} }
@mixin translate($x, $y) { @mixin position($t: null, $r: null, $b: null, $l: null) {
-webkit-transform: translate($x, $y); bottom: $b; left: $l; right: $r; top: $t;
-moz-transform: translate($x, $y);
-ms-transform: translate($x, $y);
-o-transform: translate($x, $y);
transform: translate($x, $y);
} }
@mixin skew($x, $y) { @mixin absolute($t: null, $r: null, $b: null, $l: null) {
-webkit-transform: skew($x, $y); @include position($t, $r, $b, $l);
-moz-transform: skew($x, $y);
-ms-transform: skewX($x) skewY($y);
-o-transform: skew($x, $y);
transform: skew($x, $y);
-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
backface-visibility: hidden;
}
@mixin translate3d($x, $y, $z) {
-webkit-transform: translate3d($x, $y, $z);
-moz-transform: translate3d($x, $y, $z);
-ms-transform: translate3d($x, $y, $z);
-o-transform: translate3d($x, $y, $z);
transform: translate3d($x, $y, $z);
}
@mixin absolute($top, $right, $bottom, $left) {
top: $top;
left: $left;
right: $right;
bottom: $bottom;
position: absolute; position: absolute;
} }
@mixin fixed($top, $right, $bottom, $left) { @mixin fixed($t: null, $r: null, $b: null, $l: null) {
top: $top; @include position($t, $r, $b, $l);
left: $left;
right: $right;
bottom: $bottom;
position: fixed; position: fixed;
} }
@mixin opacity($value) {
$opacityPercentage: $value * 100;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=$opacityPercentage)";
-moz-opacity: $value;
-khtml-opacity: $value;
opacity: $value;
filter: alpha(opacity=$opacityPercentage);
}
@mixin truncate-nowidth() { @mixin truncate-nowidth {
@include ellipsis; display: block;
display: block; overflow-x: hidden;
overflow-y: hidden;
text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
overflow: hidden;
} }
@mixin truncate() { @mixin truncate {
@include truncate-nowidth; @include truncate-nowidth;
width: auto;
min-width: 0;
max-width: 100%; max-width: 100%;
} min-width: 0;
width: auto;
@mixin gradient($stop: #EEE, $start: #FFF) { }
background: $start;
background: -webkit-gradient(linear, left bottom, left top, color-stop(0, $start), color-stop(1, $stop));
background: -ms-linear-gradient(bottom, $start, $stop);
background: -moz-linear-gradient(center bottom, $start 0%, $stop 100%);
background: -o-linear-gradient($stop, $start);
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save