snapshot of https://github.com/espocrm/espocrm.git (master, 2026-09-18; blobs > 131072B omitted)
Some checks failed
Test / Test on PHP 8.3 (push) Failing after 5s
Test / Test on PHP 8.4 (push) Failing after 4s
Test / Test on PHP 8.5 (push) Failing after 3s
TypeScript static analysis / TypeScript check (push) Failing after 14s
Test Integration on MySQL / Test on PHP 8.3 (push) Failing after 2s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 0s
Test Integration on PostgreSQL / Test on PHP 8.4 fix (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 master (push) Failing after 1s
Some checks failed
Test / Test on PHP 8.3 (push) Failing after 5s
Test / Test on PHP 8.4 (push) Failing after 4s
Test / Test on PHP 8.5 (push) Failing after 3s
TypeScript static analysis / TypeScript check (push) Failing after 14s
Test Integration on MySQL / Test on PHP 8.3 (push) Failing after 2s
Test Integration on MySQL / Test on PHP 8.5 (push) Failing after 0s
Test Integration on PostgreSQL / Test on PHP 8.4 fix (push) Failing after 1s
Test Integration on PostgreSQL / Test on PHP 8.4 master (push) Failing after 1s
This commit is contained in:
16
frontend/less/espo/bootstrap/mixins/border-radius.less
Normal file
16
frontend/less/espo/bootstrap/mixins/border-radius.less
Normal file
@@ -0,0 +1,16 @@
|
||||
.border-top-radius(@radius) {
|
||||
border-top-right-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
.border-right-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-top-right-radius: @radius;
|
||||
}
|
||||
.border-bottom-radius(@radius) {
|
||||
border-bottom-right-radius: @radius;
|
||||
border-bottom-left-radius: @radius;
|
||||
}
|
||||
.border-left-radius(@radius) {
|
||||
border-bottom-left-radius: @radius;
|
||||
border-top-left-radius: @radius;
|
||||
}
|
||||
6
frontend/less/espo/bootstrap/mixins/buttons.less
Normal file
6
frontend/less/espo/bootstrap/mixins/buttons.less
Normal file
@@ -0,0 +1,6 @@
|
||||
|
||||
.button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
font-size: @font-size;
|
||||
line-height: @line-height;
|
||||
}
|
||||
5
frontend/less/espo/bootstrap/mixins/center-block.less
Normal file
5
frontend/less/espo/bootstrap/mixins/center-block.less
Normal file
@@ -0,0 +1,5 @@
|
||||
.center-block() {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
20
frontend/less/espo/bootstrap/mixins/clearfix.less
Normal file
20
frontend/less/espo/bootstrap/mixins/clearfix.less
Normal file
@@ -0,0 +1,20 @@
|
||||
// 1. The space content is one way to avoid an Opera bug when the
|
||||
// contenteditable attribute is included anywhere else in the document.
|
||||
// Otherwise it causes space to appear at the top and bottom of elements
|
||||
// that are clearfixed.
|
||||
// 2. The use of `table` rather than `block` is only necessary if using
|
||||
// `:before` to contain the top-margins of child elements.
|
||||
//
|
||||
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
|
||||
|
||||
.clearfix() {
|
||||
&:before,
|
||||
&:after {
|
||||
content: " ";
|
||||
display: table;
|
||||
}
|
||||
|
||||
&:after {
|
||||
clear: both;
|
||||
}
|
||||
}
|
||||
15
frontend/less/espo/bootstrap/mixins/forms.less
Normal file
15
frontend/less/espo/bootstrap/mixins/forms.less
Normal file
@@ -0,0 +1,15 @@
|
||||
.input-size(@input-height; @padding-vertical; @padding-horizontal; @font-size; @line-height) {
|
||||
padding: @padding-vertical @padding-horizontal;
|
||||
font-size: @font-size;
|
||||
line-height: @line-height;
|
||||
|
||||
select& {
|
||||
height: @input-height;
|
||||
line-height: @input-height;
|
||||
}
|
||||
|
||||
textarea&,
|
||||
select[multiple]& {
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
97
frontend/less/espo/bootstrap/mixins/grid-framework.less
Normal file
97
frontend/less/espo/bootstrap/mixins/grid-framework.less
Normal file
@@ -0,0 +1,97 @@
|
||||
.make-grid-columns() {
|
||||
// Common styles for all sizes of grid columns, widths 1-12
|
||||
.col(@index) { // initial
|
||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
||||
.col((@index + 1), @item);
|
||||
}
|
||||
|
||||
.col(@index, @list) when (@index =< @grid-columns) { // general; "=<" isn't a typo
|
||||
@item: ~".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}";
|
||||
.col((@index + 1), ~"@{list}, @{item}");
|
||||
}
|
||||
|
||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
||||
@{list} {
|
||||
position: relative;
|
||||
// Prevent columns from collapsing when empty
|
||||
min-height: 1px;
|
||||
// Inner gutter via padding
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
}
|
||||
}
|
||||
|
||||
.col(1); // kickstart it
|
||||
}
|
||||
|
||||
.float-grid-columns(@class) {
|
||||
.col(@index) { // initial
|
||||
@item: ~".col-@{class}-@{index}";
|
||||
.col((@index + 1), @item);
|
||||
}
|
||||
|
||||
.col(@index, @list) when (@index =< @grid-columns) { // general
|
||||
@item: ~".col-@{class}-@{index}";
|
||||
.col((@index + 1), ~"@{list}, @{item}");
|
||||
}
|
||||
|
||||
.col(@index, @list) when (@index > @grid-columns) { // terminal
|
||||
@{list} {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.col(1); // kickstart it
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {
|
||||
.col-@{class}-@{index} {
|
||||
width: percentage((@index / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {
|
||||
.col-@{class}-push-@{index} {
|
||||
left: percentage((@index / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {
|
||||
.col-@{class}-push-0 {
|
||||
left: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {
|
||||
.col-@{class}-pull-@{index} {
|
||||
right: percentage((@index / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {
|
||||
.col-@{class}-pull-0 {
|
||||
right: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.calc-grid-column(@index, @class, @type) when (@type = offset) {
|
||||
.col-@{class}-offset-@{index} {
|
||||
margin-left: percentage((@index / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
// Basic looping in LESS
|
||||
.loop-grid-columns(@index, @class, @type) when (@index >= 0) {
|
||||
.calc-grid-column(@index, @class, @type);
|
||||
// next iteration
|
||||
.loop-grid-columns((@index - 1), @class, @type);
|
||||
}
|
||||
|
||||
// Create grid for specific class
|
||||
.make-grid(@class) {
|
||||
.float-grid-columns(@class);
|
||||
.loop-grid-columns(@grid-columns, @class, width);
|
||||
.loop-grid-columns(@grid-columns, @class, pull);
|
||||
.loop-grid-columns(@grid-columns, @class, push);
|
||||
.loop-grid-columns(@grid-columns, @class, offset);
|
||||
}
|
||||
120
frontend/less/espo/bootstrap/mixins/grid.less
Normal file
120
frontend/less/espo/bootstrap/mixins/grid.less
Normal file
@@ -0,0 +1,120 @@
|
||||
// Centered container element
|
||||
.container-fixed() {
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
|
||||
// Creates a wrapper for a series of columns
|
||||
.make-row() {
|
||||
margin-left: calc(var(--grid-gutter-width-half) * -1);
|
||||
margin-right: calc(var(--grid-gutter-width-half) * -1);
|
||||
|
||||
&:extend(.clearfix all);
|
||||
}
|
||||
|
||||
// Generate the extra small columns
|
||||
.make-xs-column(@columns) {
|
||||
position: relative;
|
||||
float: left;
|
||||
width: percentage((@columns / @grid-columns));
|
||||
min-height: 1px;
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
}
|
||||
.make-xs-column-offset(@columns) {
|
||||
margin-left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
.make-xs-column-push(@columns) {
|
||||
left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
.make-xs-column-pull(@columns) {
|
||||
right: percentage((@columns / @grid-columns));
|
||||
}
|
||||
|
||||
// Generate the small columns
|
||||
.make-sm-column(@columns) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
|
||||
@media (min-width: @screen-sm-min) {
|
||||
float: left;
|
||||
width: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-sm-column-offset(@columns) {
|
||||
@media (min-width: @screen-sm-min) {
|
||||
margin-left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-sm-column-push(@columns) {
|
||||
@media (min-width: @screen-sm-min) {
|
||||
left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-sm-column-pull(@columns) {
|
||||
@media (min-width: @screen-sm-min) {
|
||||
right: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
// Generate the medium columns
|
||||
.make-md-column(@columns) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
|
||||
@media (min-width: @screen-md-min) {
|
||||
float: left;
|
||||
width: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-md-column-offset(@columns) {
|
||||
@media (min-width: @screen-md-min) {
|
||||
margin-left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-md-column-push(@columns) {
|
||||
@media (min-width: @screen-md-min) {
|
||||
left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-md-column-pull(@columns) {
|
||||
@media (min-width: @screen-md-min) {
|
||||
right: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
|
||||
// Generate the large columns
|
||||
.make-lg-column(@columns) {
|
||||
position: relative;
|
||||
min-height: 1px;
|
||||
padding-left: var(--grid-gutter-width-half);
|
||||
padding-right: var(--grid-gutter-width-half);
|
||||
|
||||
@media (min-width: @screen-lg-min) {
|
||||
float: left;
|
||||
width: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-lg-column-offset(@columns) {
|
||||
@media (min-width: @screen-lg-min) {
|
||||
margin-left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-lg-column-push(@columns) {
|
||||
@media (min-width: @screen-lg-min) {
|
||||
left: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
.make-lg-column-pull(@columns) {
|
||||
@media (min-width: @screen-lg-min) {
|
||||
right: percentage((@columns / @grid-columns));
|
||||
}
|
||||
}
|
||||
6
frontend/less/espo/bootstrap/mixins/nav-divider.less
Normal file
6
frontend/less/espo/bootstrap/mixins/nav-divider.less
Normal file
@@ -0,0 +1,6 @@
|
||||
.nav-divider(@color: #e5e5e5) {
|
||||
height: var(--1px);
|
||||
margin: calc(var(--line-height-computed-half) - var(--1px)) 0;
|
||||
overflow: hidden;
|
||||
background-color: @color;
|
||||
}
|
||||
22
frontend/less/espo/bootstrap/mixins/panels.less
Normal file
22
frontend/less/espo/bootstrap/mixins/panels.less
Normal file
@@ -0,0 +1,22 @@
|
||||
.panel-variant(@border; @heading-text-color; @heading-border) {
|
||||
border-color: @border;
|
||||
|
||||
& > .panel-heading {
|
||||
color: @heading-text-color;
|
||||
border-color: @heading-border;
|
||||
|
||||
+ .panel-collapse > .panel-body {
|
||||
border-top-color: @border;
|
||||
}
|
||||
|
||||
.badge {
|
||||
background-color: @heading-text-color;
|
||||
}
|
||||
}
|
||||
|
||||
& > .panel-footer {
|
||||
+ .panel-collapse > .panel-body {
|
||||
border-bottom-color: @border;
|
||||
}
|
||||
}
|
||||
}
|
||||
3
frontend/less/espo/bootstrap/mixins/progress-bar.less
Normal file
3
frontend/less/espo/bootstrap/mixins/progress-bar.less
Normal file
@@ -0,0 +1,3 @@
|
||||
.progress-bar-variant(@color) {
|
||||
background-color: @color;
|
||||
}
|
||||
17
frontend/less/espo/bootstrap/mixins/reset-text.less
Normal file
17
frontend/less/espo/bootstrap/mixins/reset-text.less
Normal file
@@ -0,0 +1,17 @@
|
||||
.reset-text() {
|
||||
font-family: @font-family-base;
|
||||
// We deliberately do NOT reset font-size.
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
letter-spacing: normal;
|
||||
line-break: auto;
|
||||
line-height: var(--line-height-base);
|
||||
text-align: start;
|
||||
text-decoration: none;
|
||||
text-shadow: none;
|
||||
text-transform: none;
|
||||
white-space: normal;
|
||||
word-break: normal;
|
||||
word-spacing: normal;
|
||||
word-wrap: normal;
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
// More easily include all the states for responsive-utilities.less.
|
||||
.responsive-visibility() {
|
||||
display: block !important;
|
||||
|
||||
table& {
|
||||
display: table !important;
|
||||
}
|
||||
|
||||
tr& {
|
||||
display: table-row !important;
|
||||
}
|
||||
|
||||
th&, td& {
|
||||
display: table-cell !important;
|
||||
}
|
||||
}
|
||||
|
||||
.responsive-invisibility() {
|
||||
display: none !important;
|
||||
}
|
||||
4
frontend/less/espo/bootstrap/mixins/tab-focus.less
Normal file
4
frontend/less/espo/bootstrap/mixins/tab-focus.less
Normal file
@@ -0,0 +1,4 @@
|
||||
.tab-focus() {
|
||||
outline: var(--5px) auto -webkit-focus-ring-color;
|
||||
outline-offset: var(--minus-2px);
|
||||
}
|
||||
7
frontend/less/espo/bootstrap/mixins/text-overflow.less
Normal file
7
frontend/less/espo/bootstrap/mixins/text-overflow.less
Normal file
@@ -0,0 +1,7 @@
|
||||
// Requires inline-block or block for proper styling
|
||||
|
||||
.text-overflow() {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
35
frontend/less/espo/bootstrap/mixins/vendor-prefixes.less
Normal file
35
frontend/less/espo/bootstrap/mixins/vendor-prefixes.less
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
// Animations
|
||||
.animation(@animation) {
|
||||
animation: @animation;
|
||||
}
|
||||
|
||||
.box-shadow(@shadow) {
|
||||
box-shadow: @shadow;
|
||||
}
|
||||
|
||||
.box-sizing(@boxmodel) {
|
||||
box-sizing: @boxmodel;
|
||||
}
|
||||
|
||||
.placeholder(@color: @input-color-placeholder) {
|
||||
&::placeholder {
|
||||
color: @color;
|
||||
}
|
||||
}
|
||||
|
||||
.transition(@transition) {
|
||||
transition: @transition;
|
||||
}
|
||||
.transition-property(@transition-property) {
|
||||
transition-property: @transition-property;
|
||||
}
|
||||
.transition-delay(@transition-delay) {
|
||||
transition-delay: @transition-delay;
|
||||
}
|
||||
.transition-duration(@transition-duration) {
|
||||
transition-duration: @transition-duration;
|
||||
}
|
||||
.transition-timing-function(@timing-function) {
|
||||
transition-timing-function: @timing-function;
|
||||
}
|
||||
Reference in New Issue
Block a user