@vario-software/vario-app-framework-frontend 2026.9.2 → 2026.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@vario-software/vario-app-framework-frontend",
3
- "version": "2026.09.2",
3
+ "version": "2026.10.1",
4
4
  "repository": "https://github.com/vario-software/vario-app-framework",
5
5
  "author": "VARIO Software AG",
6
6
  "homepage": "https://www.vario.ag",
7
7
  "description": "Provides CSS and useful JavaScript utilities for app features and capabilities to make a VARIO Cloud App appear in the corporate design, giving it a consistent look.",
8
8
  "license": "MIT",
9
+ "type": "module",
9
10
  "publishConfig": {
10
11
  "access": "public"
11
12
  }
package/script/height.js CHANGED
@@ -26,6 +26,8 @@ const initHeightTransfer = () =>
26
26
  childList: true,
27
27
  subtree: true,
28
28
  });
29
+
30
+ new ResizeObserver(transferHeight).observe(document.body);
29
31
  };
30
32
 
31
33
  export { initHeightTransfer };
package/script/index.js CHANGED
@@ -2,6 +2,7 @@ import { secureIntegration } from './secure.js';
2
2
  import { initHeightTransfer } from './height.js';
3
3
  import { initAppTokenHandling } from './token.js';
4
4
  import { initSharedSettings } from './sharedSettings.js';
5
+ import { initScreenSize } from './screenSize.js';
5
6
 
6
7
  window.addEventListener('DOMContentLoaded', () =>
7
8
  {
@@ -9,4 +10,5 @@ window.addEventListener('DOMContentLoaded', () =>
9
10
  initHeightTransfer();
10
11
  initAppTokenHandling();
11
12
  initSharedSettings();
13
+ initScreenSize();
12
14
  });
@@ -0,0 +1,26 @@
1
+ const breakpoints = [
2
+ { name: 'xs', minWidth: 0 },
3
+ { name: 'sm', minWidth: 600 },
4
+ { name: 'md', minWidth: 1024 },
5
+ { name: 'lg', minWidth: 1440 },
6
+ { name: 'xl', minWidth: 1920 },
7
+ ];
8
+
9
+ const classes = breakpoints.map(bp => `v-screen--${bp.name}`);
10
+
11
+ const update = () =>
12
+ {
13
+ const match = breakpoints.findLast(bp => window.innerWidth >= bp.minWidth);
14
+
15
+ document.body.classList.remove(...classes);
16
+ document.body.classList.add(`v-screen--${match.name}`);
17
+ };
18
+
19
+ const initScreenSize = () =>
20
+ {
21
+ update();
22
+
23
+ window.addEventListener('resize', update);
24
+ };
25
+
26
+ export { initScreenSize };
package/style/grid.css CHANGED
@@ -1,13 +1,17 @@
1
1
  /* Grid container */
2
2
  .v-row {
3
3
  display: flex;
4
+ flex-wrap: wrap;
4
5
  width: 100%;
5
6
  box-sizing: border-box;
6
7
  align-items: flex-start;
7
8
 
8
- --gap: 1.715em;
9
+ --gap: 1.143em;
10
+ --col-gap: var(--gap);
11
+ --row-gap: var(--gap);
9
12
 
10
- gap: var(--gap);
13
+ column-gap: var(--col-gap);
14
+ row-gap: var(--row-gap);
11
15
  }
12
16
 
13
17
  .v-row-xs { --gap: 0.286em; }
@@ -16,14 +20,29 @@
16
20
  .v-row-lg { --gap: 1.715em; }
17
21
  .v-row-xl { --gap: 3.5em; }
18
22
 
23
+ .v-row-y-xs { --col-gap: 0.286em; }
24
+ .v-row-y-sm { --col-gap: 0.572em; }
25
+ .v-row-y-md { --col-gap: 1.143em; }
26
+ .v-row-y-lg { --col-gap: 1.715em; }
27
+ .v-row-y-xl { --col-gap: 3.5em; }
28
+
29
+ .v-row-x-xs { --row-gap: 0.286em; }
30
+ .v-row-x-sm { --row-gap: 0.572em; }
31
+ .v-row-x-md { --row-gap: 1.143em; }
32
+ .v-row-x-lg { --row-gap: 1.715em; }
33
+ .v-row-x-xl { --row-gap: 3.5em; }
34
+
19
35
  .v-col-1, .v-col-2, .v-col-3, .v-col-4,
20
36
  .v-col-5, .v-col-6, .v-col-7, .v-col-8,
21
- .v-col-9, .v-col-10, .v-col-11, .v-col-12 {
37
+ .v-col-9, .v-col-10, .v-col-11, .v-col-12,
38
+ [class*="v-col-xs-"], [class*="v-col-sm-"],
39
+ [class*="v-col-md-"], [class*="v-col-lg-"],
40
+ [class*="v-col-xl-"] {
22
41
  display: flex;
23
42
  flex-direction: column;
24
43
  box-sizing: border-box;
25
- flex: 1 1 calc(var(--col) * 100%);
26
- max-width: calc(var(--col) * 100%);
44
+ flex: 0 0 calc(var(--col) * (100% + var(--col-gap)) - var(--col-gap));
45
+ max-width: calc(var(--col) * (100% + var(--col-gap)) - var(--col-gap));
27
46
  align-items: stretch;
28
47
  }
29
48
 
@@ -44,10 +63,88 @@
44
63
  .v-col-11 { --col: 11/12; }
45
64
  .v-col-12 { --col: 1; }
46
65
 
66
+ /* xs breakpoint (0px+) — same as base, for explicit mobile-first usage */
67
+ .v-col-xs-1 { --col: 1/12; }
68
+ .v-col-xs-2 { --col: 2/12; }
69
+ .v-col-xs-3 { --col: 3/12; }
70
+ .v-col-xs-4 { --col: 4/12; }
71
+ .v-col-xs-5 { --col: 5/12; }
72
+ .v-col-xs-6 { --col: 6/12; }
73
+ .v-col-xs-7 { --col: 7/12; }
74
+ .v-col-xs-8 { --col: 8/12; }
75
+ .v-col-xs-9 { --col: 9/12; }
76
+ .v-col-xs-10 { --col: 10/12; }
77
+ .v-col-xs-11 { --col: 11/12; }
78
+ .v-col-xs-12 { --col: 1; }
79
+
80
+ /* sm breakpoint (600px+) */
81
+ @media (min-width: 600px) {
82
+ .v-col-sm-1 { --col: 1/12; }
83
+ .v-col-sm-2 { --col: 2/12; }
84
+ .v-col-sm-3 { --col: 3/12; }
85
+ .v-col-sm-4 { --col: 4/12; }
86
+ .v-col-sm-5 { --col: 5/12; }
87
+ .v-col-sm-6 { --col: 6/12; }
88
+ .v-col-sm-7 { --col: 7/12; }
89
+ .v-col-sm-8 { --col: 8/12; }
90
+ .v-col-sm-9 { --col: 9/12; }
91
+ .v-col-sm-10 { --col: 10/12; }
92
+ .v-col-sm-11 { --col: 11/12; }
93
+ .v-col-sm-12 { --col: 1; }
94
+ }
95
+
96
+ /* md breakpoint (1024px+) */
97
+ @media (min-width: 1024px) {
98
+ .v-col-md-1 { --col: 1/12; }
99
+ .v-col-md-2 { --col: 2/12; }
100
+ .v-col-md-3 { --col: 3/12; }
101
+ .v-col-md-4 { --col: 4/12; }
102
+ .v-col-md-5 { --col: 5/12; }
103
+ .v-col-md-6 { --col: 6/12; }
104
+ .v-col-md-7 { --col: 7/12; }
105
+ .v-col-md-8 { --col: 8/12; }
106
+ .v-col-md-9 { --col: 9/12; }
107
+ .v-col-md-10 { --col: 10/12; }
108
+ .v-col-md-11 { --col: 11/12; }
109
+ .v-col-md-12 { --col: 1; }
110
+ }
111
+
112
+ /* lg breakpoint (1440px+) */
113
+ @media (min-width: 1440px) {
114
+ .v-col-lg-1 { --col: 1/12; }
115
+ .v-col-lg-2 { --col: 2/12; }
116
+ .v-col-lg-3 { --col: 3/12; }
117
+ .v-col-lg-4 { --col: 4/12; }
118
+ .v-col-lg-5 { --col: 5/12; }
119
+ .v-col-lg-6 { --col: 6/12; }
120
+ .v-col-lg-7 { --col: 7/12; }
121
+ .v-col-lg-8 { --col: 8/12; }
122
+ .v-col-lg-9 { --col: 9/12; }
123
+ .v-col-lg-10 { --col: 10/12; }
124
+ .v-col-lg-11 { --col: 11/12; }
125
+ .v-col-lg-12 { --col: 1; }
126
+ }
127
+
128
+ /* xl breakpoint (1920px+) */
129
+ @media (min-width: 1920px) {
130
+ .v-col-xl-1 { --col: 1/12; }
131
+ .v-col-xl-2 { --col: 2/12; }
132
+ .v-col-xl-3 { --col: 3/12; }
133
+ .v-col-xl-4 { --col: 4/12; }
134
+ .v-col-xl-5 { --col: 5/12; }
135
+ .v-col-xl-6 { --col: 6/12; }
136
+ .v-col-xl-7 { --col: 7/12; }
137
+ .v-col-xl-8 { --col: 8/12; }
138
+ .v-col-xl-9 { --col: 9/12; }
139
+ .v-col-xl-10 { --col: 10/12; }
140
+ .v-col-xl-11 { --col: 11/12; }
141
+ .v-col-xl-12 { --col: 1; }
142
+ }
143
+
47
144
  .v-col-shrink {
48
145
  display: flex;
49
146
  flex-direction: column;
50
- gap: var(--gap);
147
+ gap: var(--row-gap);
51
148
  box-sizing: border-box;
52
149
  flex: 0 0 auto;
53
150
  width: auto;
@@ -56,7 +153,7 @@
56
153
  .v-col-grow {
57
154
  display: flex;
58
155
  flex-direction: column;
59
- gap: var(--gap);
156
+ gap: var(--row-gap);
60
157
  box-sizing: border-box;
61
158
  flex: 1 1 auto;
62
159
  min-width: 0;
@@ -64,4 +161,4 @@
64
161
 
65
162
  .v-col-vertical-center {
66
163
  align-self: center;
67
- }
164
+ }
@@ -1,63 +0,0 @@
1
- .v-row {
2
- display: flex;
3
- width: 100%;
4
- box-sizing: border-box;
5
- align-items: flex-start;
6
-
7
- --gap: 1.715em;
8
-
9
- gap: var(--gap);
10
- }
11
-
12
- .v-row-xs { --gap: 0.286em; }
13
- .v-row-sm { --gap: 0.572em; }
14
- .v-row-md { --gap: 1.143em; }
15
- .v-row-lg { --gap: 1.715em; }
16
- .v-row-xl { --gap: 3.5em; }
17
-
18
- .v-row-xs,
19
- .v-row-sm,
20
- .v-row-md,
21
- .v-row-lg,
22
- .v-row-xl {
23
- gap: var(--gap);
24
- }
25
-
26
- [class^="v-col-"] {
27
- display: flex;
28
- flex-direction: column;
29
- gap: var(--gap);
30
- flex: 1 1 calc(var(--col) * 100%);
31
- max-width: calc(var(--col) * 100%);
32
- }
33
-
34
- .v-col-shrink {
35
- flex: 0 0 auto !important;
36
- width: auto !important;
37
- max-width: none !important;
38
- }
39
-
40
- .v-col-grow {
41
- flex: 1 1 auto !important;
42
- min-width: 0;
43
- max-width: 100%;
44
- }
45
-
46
- .v-content > .v-row [class^="v-col-"],
47
- .v-content.v-row [class^="v-col-"] {
48
- max-width: calc(100% * var(--col) - (var(--gap) / 2));
49
- flex: 1 1 calc(100% * var(--col) - (var(--gap) / 2));
50
- }
51
-
52
- .v-col-1 { --col: 1 / 12; }
53
- .v-col-2 { --col: 2 / 12; }
54
- .v-col-3 { --col: 3 / 12; }
55
- .v-col-4 { --col: 4 / 12; }
56
- .v-col-5 { --col: 5 / 12; }
57
- .v-col-6 { --col: 6 / 12; }
58
- .v-col-7 { --col: 7 / 12; }
59
- .v-col-8 { --col: 8 / 12; }
60
- .v-col-9 { --col: 9 / 12; }
61
- .v-col-10 { --col: 10 / 12; }
62
- .v-col-11 { --col: 11 / 12; }
63
- .v-col-12 { --col: 1; }