@componyx/ui 0.0.0-stage → 1.0.3

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.
Files changed (169) hide show
  1. package/AppSkin/AppSkin.css +1268 -0
  2. package/AppSkin/AppSkin.js +2748 -0
  3. package/AppSkin/Themes/Default.css +241 -0
  4. package/Base/Base.js +3407 -0
  5. package/Base/ComponentIcons.css +66 -0
  6. package/Base/Font/ComponentIcons.woff +0 -0
  7. package/Base/Font/UI.woff +0 -0
  8. package/Base/Library.js +8432 -0
  9. package/Base/NavigationManager.js +462 -0
  10. package/Base/ResponsiveTemplates.js +371 -0
  11. package/Base/Sanitizer.js +288 -0
  12. package/Base/Themes/Default.css +255 -0
  13. package/Base/UI.css +618 -0
  14. package/Base/UIResourcePath.js +6 -0
  15. package/Bindary/Bindary.js +2011 -0
  16. package/Bindary/Modules/Connection.js +216 -0
  17. package/Bindary/Modules/Core.js +854 -0
  18. package/Bindary/Modules/DataUpdater.js +351 -0
  19. package/Bindary/Modules/ExpressionEngine.js +347 -0
  20. package/Bindary/Modules/ProxyManager.js +482 -0
  21. package/Bindary/Modules/Renderer.js +605 -0
  22. package/Bindary/Modules/Router.js +291 -0
  23. package/Bindary/Modules/Scroller.js +89 -0
  24. package/Bindary/Modules/Template.js +1273 -0
  25. package/BookmarkSpy/BookmarkSpy.js +430 -0
  26. package/Box/Box.css +36 -0
  27. package/Box/Box.js +1685 -0
  28. package/Button/Button.css +470 -0
  29. package/Button/Button.js +1398 -0
  30. package/Button/Themes/Default.css +200 -0
  31. package/Carousel/Carousel.css +273 -0
  32. package/Carousel/Carousel.js +607 -0
  33. package/ColorButton/ColorButton.css +39 -0
  34. package/ColorButton/ColorButton.js +336 -0
  35. package/ColorPicker/ColorPicker.css +359 -0
  36. package/ColorPicker/ColorPicker.js +972 -0
  37. package/ComboBox/ComboBox.css +357 -0
  38. package/ComboBox/ComboBox.js +2342 -0
  39. package/ComboBox/Themes/Default.css +23 -0
  40. package/DataPager/DataPager.css +72 -0
  41. package/DataPager/DataPager.js +674 -0
  42. package/DatePicker/DatePicker.css +227 -0
  43. package/DatePicker/DatePicker.js +1531 -0
  44. package/DatePicker/Themes/Default.css +26 -0
  45. package/Dialog/Dialog.css +106 -0
  46. package/Dialog/Dialog.js +572 -0
  47. package/Dialog/Themes/Default.css +10 -0
  48. package/Editor/Data/Emoji.json +8285 -0
  49. package/Editor/Data/Special.json +1042 -0
  50. package/Editor/Editor.css +1562 -0
  51. package/Editor/Editor.js +4058 -0
  52. package/Editor/Font/Editor.woff +0 -0
  53. package/Editor/Modules/ComponentFactory.js +565 -0
  54. package/Editor/Modules/ContentManager.js +748 -0
  55. package/Editor/Modules/DialogManager.js +1234 -0
  56. package/Editor/Modules/EventManager.js +458 -0
  57. package/Editor/Modules/Format.js +950 -0
  58. package/Editor/Modules/History.js +191 -0
  59. package/Editor/Modules/LayoutState.js +379 -0
  60. package/Editor/Modules/ListManager.js +296 -0
  61. package/Editor/Modules/MenuManager.js +388 -0
  62. package/Editor/Modules/NodeManager.js +681 -0
  63. package/Editor/Modules/ParagraphButtons.js +122 -0
  64. package/Editor/Modules/Resizer.js +176 -0
  65. package/Editor/Modules/SelectionRange.js +564 -0
  66. package/Editor/Modules/SourceViewBuilder.js +212 -0
  67. package/Editor/Modules/SymbolPicker.js +208 -0
  68. package/Editor/Modules/Table.js +2327 -0
  69. package/Editor/Modules/TableDialog.js +757 -0
  70. package/Editor/Modules/Toolbar.js +375 -0
  71. package/Editor/Modules/TooltipMenu.js +125 -0
  72. package/Editor/Modules/Utility.js +131 -0
  73. package/Editor/Themes/Default.css +204 -0
  74. package/FileUpload/FileUpload.css +156 -0
  75. package/FileUpload/FileUpload.js +898 -0
  76. package/FileUpload/Themes/Default.css +17 -0
  77. package/Form/Form.css +1934 -0
  78. package/Form/Form.js +4943 -0
  79. package/Form/Modules/ActionManager.js +368 -0
  80. package/Form/Modules/BuildPanelManager.js +319 -0
  81. package/Form/Modules/ComponentFactory.js +468 -0
  82. package/Form/Modules/ComponentPanel.js +265 -0
  83. package/Form/Modules/ConfigPanelManager.js +685 -0
  84. package/Form/Modules/DataObserver.js +717 -0
  85. package/Form/Modules/Databinder.js +602 -0
  86. package/Form/Modules/Draggable.js +756 -0
  87. package/Form/Modules/OptionsPanel.js +342 -0
  88. package/Form/Modules/Renderer.js +1889 -0
  89. package/Form/Modules/RuleEngine.js +585 -0
  90. package/Form/Modules/RulesPanel.js +1158 -0
  91. package/Form/Modules/Types.js +1709 -0
  92. package/Form/Modules/ValidationManager.js +194 -0
  93. package/Form/Themes/Default.css +216 -0
  94. package/FormField/FormField.css +468 -0
  95. package/FormField/FormField.js +576 -0
  96. package/FormField/Themes/Default.css +99 -0
  97. package/Grid/Grid.css +544 -0
  98. package/Grid/Grid.js +3761 -0
  99. package/Grid/Themes/Default.css +43 -0
  100. package/LICENSE +126 -0
  101. package/MaskedTextBox/MaskedTextBox.css +28 -0
  102. package/MaskedTextBox/MaskedTextBox.js +642 -0
  103. package/MaskedTextBox/Themes/Default.css +6 -0
  104. package/Menu/Menu.css +328 -0
  105. package/Menu/Menu.js +2386 -0
  106. package/Menu/Themes/Default.css +24 -0
  107. package/NumericBox/NumericBox.css +120 -0
  108. package/NumericBox/NumericBox.js +984 -0
  109. package/PanelBar/PanelBar.css +123 -0
  110. package/PanelBar/PanelBar.js +505 -0
  111. package/PanelBar/Themes/Default.css +51 -0
  112. package/PieChart/PieChart.css +95 -0
  113. package/PieChart/PieChart.js +820 -0
  114. package/PieChart/Themes/Default.css +9 -0
  115. package/README.md +178 -3
  116. package/Slider/Slider.css +348 -0
  117. package/Slider/Slider.js +1306 -0
  118. package/Slider/Themes/Default.css +44 -0
  119. package/TabStrip/TabStrip.css +52 -0
  120. package/TabStrip/TabStrip.js +362 -0
  121. package/TabStrip/Themes/Default.css +35 -0
  122. package/TimePicker/Themes/Default.css +30 -0
  123. package/TimePicker/TimePicker.css +253 -0
  124. package/TimePicker/TimePicker.js +1485 -0
  125. package/TooltipManager/Themes/Default.css +21 -0
  126. package/TooltipManager/TooltipManager.css +227 -0
  127. package/TooltipManager/TooltipManager.js +791 -0
  128. package/Validator/Validator.css +54 -0
  129. package/Validator/Validator.js +2508 -0
  130. package/componyx.html-data.json +619 -0
  131. package/index.js +27 -0
  132. package/package.json +43 -4
  133. package/types/AppSkin.d.ts +842 -0
  134. package/types/Base.d.ts +1034 -0
  135. package/types/Bindary.d.ts +1196 -0
  136. package/types/BookmarkSpy.d.ts +112 -0
  137. package/types/Box.d.ts +374 -0
  138. package/types/Button.d.ts +455 -0
  139. package/types/Carousel.d.ts +136 -0
  140. package/types/ColorButton.d.ts +120 -0
  141. package/types/ColorPicker.d.ts +225 -0
  142. package/types/ComboBox.d.ts +507 -0
  143. package/types/DataPager.d.ts +152 -0
  144. package/types/DatePicker.d.ts +354 -0
  145. package/types/Dialog.d.ts +160 -0
  146. package/types/Editor.d.ts +1289 -0
  147. package/types/FileUpload.d.ts +206 -0
  148. package/types/Form.d.ts +3078 -0
  149. package/types/FormField.d.ts +204 -0
  150. package/types/Grid.d.ts +911 -0
  151. package/types/Library.d.ts +1899 -0
  152. package/types/MaskedTextBox.d.ts +91 -0
  153. package/types/Menu.d.ts +577 -0
  154. package/types/NumericBox.d.ts +310 -0
  155. package/types/PanelBar.d.ts +223 -0
  156. package/types/PieChart.d.ts +224 -0
  157. package/types/ResponsiveTemplates.d.ts +108 -0
  158. package/types/Slider.d.ts +227 -0
  159. package/types/TabStrip.d.ts +185 -0
  160. package/types/TimePicker.d.ts +265 -0
  161. package/types/TooltipManager.d.ts +178 -0
  162. package/types/UI.d.ts +29 -0
  163. package/types/Validator.d.ts +653 -0
  164. package/types/index.d.ts +59 -0
  165. package/ui.css +11783 -0
  166. package/ui.js +79477 -0
  167. package/ui.min.css +138 -0
  168. package/ui.min.js +264 -0
  169. package/ui.min.js.map +1 -0
@@ -0,0 +1,1268 @@
1
+ /*! Componyx.UI | (c) E.H. Daanen / Componyx | BUSL-1.1 | componyx.com/license */
2
+ :root
3
+ {
4
+ --app-skin-menu-width: 300px;
5
+ --app-skin-content-width: 960px; /* updated per media query below */
6
+ --app-skin-content-margin: auto; /* Use this on your content wrapper's margin-left to keep it correctly offset when a menu is open and content-pinned (not viewport-pinned). Pair with margin-right: auto. */
7
+ }
8
+
9
+ img
10
+ {
11
+ border: none;
12
+ }
13
+
14
+ select
15
+ {
16
+ box-sizing: content-box;
17
+ -webkit-box-sizing: content-box;
18
+ -moz-box-sizing: content-box;
19
+ -ms-box-sizing: content-box;
20
+ }
21
+
22
+ html
23
+ {
24
+ height: 100%;
25
+ overflow-y: scroll;
26
+ margin: 0;
27
+ padding: 0;
28
+ }
29
+
30
+ ul, ol, li
31
+ {
32
+ padding: 0;
33
+ margin: 0;
34
+ list-style: none;
35
+ }
36
+
37
+ body, form
38
+ {
39
+ height: 100%;
40
+ margin: 0;
41
+ padding: 0;
42
+ }
43
+
44
+ input[type=password]::-ms-reveal,
45
+ input[type=password]::-ms-clear
46
+ {
47
+ display: none;
48
+ }
49
+
50
+ .app-skin.theme
51
+ {
52
+ margin: 0;
53
+ padding: 0;
54
+
55
+ &.portal-menu,
56
+ &.login
57
+ {
58
+ min-height: 100%; /* skin and positioned body bg should stretch with content height */
59
+ }
60
+
61
+ &:not(.portal):not(.login)
62
+ {
63
+ height: 100%;
64
+ }
65
+
66
+ & > header,
67
+ & > footer,
68
+ & div.topbar,
69
+ & .menu.theme.portal,
70
+ & div.login-screen,
71
+ & div.body,
72
+ & div.app-content
73
+ {
74
+ border-radius: 0px;
75
+ }
76
+
77
+ & div.body
78
+ {
79
+ display: none;
80
+ position: fixed;
81
+ top: 0px;
82
+ bottom: 0px;
83
+ left: 0px;
84
+ right: 0px;
85
+ z-index: 2;
86
+ }
87
+
88
+ &.portal-menu div.body,
89
+ &.login div.body
90
+ {
91
+ display: block;
92
+ }
93
+
94
+ & div.app-content
95
+ {
96
+ width: auto;
97
+ margin: auto;
98
+ }
99
+
100
+ & div.view > div.app-content
101
+ {
102
+ width: auto;
103
+ }
104
+
105
+ &.full div.view > div.app-content,
106
+ & div.page div.app-content.full
107
+ {
108
+ max-width: none !important;
109
+ width: auto !important;
110
+ }
111
+
112
+ & div.page
113
+ {
114
+ position: relative;
115
+ padding-top: 48px;
116
+
117
+ div.app-content
118
+ {
119
+ transition: all .1s;
120
+ }
121
+ }
122
+
123
+ &.topbar div.page
124
+ {
125
+ padding-top: 96px;
126
+ height: calc(100% - 96px);
127
+ }
128
+
129
+ &.footer div.page
130
+ {
131
+ padding-bottom: 48px;
132
+ height: calc(100% - 96px);
133
+ }
134
+
135
+ &.topbar.footer div.page
136
+ {
137
+ height: calc(100% - 144px);
138
+ }
139
+
140
+ /* header */
141
+ & > header
142
+ {
143
+ position: fixed;
144
+ top: 0px;
145
+ left: 0px;
146
+ right: 0px;
147
+ height: 48px;
148
+ vertical-align: middle;
149
+ z-index: 2;
150
+
151
+ /* header topbar content*/
152
+ > .topbar > div.app-content
153
+ {
154
+ position: relative;
155
+ height: 100%;
156
+ }
157
+ }
158
+
159
+ /* header content */
160
+ & > header > div.app-content,
161
+ & > footer > div.app-content
162
+ {
163
+ position: relative;
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: space-between;
167
+ height: 100%;
168
+ }
169
+
170
+ /* header-menu is in topbar by default */
171
+ & > header > div.app-content .menu.theme
172
+ {
173
+ position: absolute;
174
+ width: calc(100% - 400px); /* 400px is the default reserved space for the menu between the logo/menu-button and search-box. Change as desired accordingly to the displayed items in the header. */
175
+ text-align: center;
176
+ white-space: nowrap;
177
+ left: 68px; /* 68px for menu-button */
178
+ top: 0px;
179
+ }
180
+
181
+ &:not(.menu-left) > header > div.app-content .menu.theme
182
+ {
183
+ left: 208px; /* 208px for logo */
184
+ }
185
+
186
+ /* menu in footer */
187
+ div &
188
+ {
189
+ > footer > div.app-content .menu.theme
190
+ {
191
+ position: absolute;
192
+ left: 50%;
193
+ transform: translateX(-50%);
194
+ text-align: center;
195
+ white-space: nowrap;
196
+ }
197
+ }
198
+
199
+ /* menu in topbar */
200
+ & > header > div.app-content > .topbar > div.app-content .menu.theme
201
+ {
202
+ position: static;
203
+ left: auto;
204
+ transform: none;
205
+ width: 100%;
206
+ }
207
+
208
+ /* center first menu when both header- and quicklaunch- menu are in the same parent within header or footer */
209
+ & > header > div.app-content > div.header-menu ~ .menu.theme.quick-lauch,
210
+ & > header > div.app-content > topbar > div.header-menu ~ .menu.theme.quick-lauch,
211
+ & > footer > div.app-content > div.header-menu ~ .menu.theme.quick-lauch
212
+ {
213
+ position: static;
214
+ transform: none;
215
+ width: auto;
216
+ order: 3;
217
+ }
218
+
219
+ /* header item order for menu-right(default) or menu-left */
220
+ &:not(.menu-left) > header > div.app-content > .button.theme
221
+ {
222
+ order: 3;
223
+ }
224
+
225
+ &:not(.menu-left) > header > div.app-content > figure.logo
226
+ {
227
+ order: 1;
228
+ margin-left: 20px;
229
+ }
230
+
231
+ &.menu-left > header > div.app-content > .button.theme
232
+ {
233
+ order: 1;
234
+ }
235
+
236
+ &.menu-left > header > div.app-content > figure.logo
237
+ {
238
+ order: 3;
239
+ margin-right: 20px;
240
+ }
241
+
242
+ /* top bar */
243
+ & .topbar
244
+ {
245
+ position: fixed;
246
+ top: 48px;
247
+ left: 0px;
248
+ right: 0px;
249
+ z-index: 2;
250
+ height: 48px;
251
+ }
252
+
253
+ /* shadow */
254
+ & > header::after
255
+ {
256
+ position: absolute;
257
+ z-index: 2;
258
+ content: '';
259
+ left: 0px;
260
+ right: 0px;
261
+ top: 48px;
262
+ height: 10px;
263
+ background: linear-gradient(to bottom, rgba(0,0,0,0.15) 0%,rgba(0,0,0,0) 100%);
264
+ }
265
+
266
+ & .menu.theme.portal
267
+ {
268
+ width: 240px; /* max 1 horizontal large sub-groups */
269
+ overflow: hidden;
270
+ position: relative;
271
+ margin: auto;
272
+ padding-top: 50px;
273
+ padding-bottom: 48px;
274
+ text-align: center;
275
+ z-index: 3;
276
+
277
+ /* -- viewport widths -- */
278
+ @media screen and (min-width: 480px)
279
+ {
280
+ width: 480px; /* max 2 horizontal large sub-groups */
281
+ }
282
+
283
+ @media screen and (min-width: 720px)
284
+ {
285
+ width: 720px; /* max 3 horizontal large sub-groups */
286
+ }
287
+
288
+ @media screen and (min-width: 960px)
289
+ {
290
+ width: var(--app-skin-content-width);
291
+ }
292
+ }
293
+
294
+ &.topbar .menu.theme.portal
295
+ {
296
+ padding-top: 98px;
297
+ }
298
+
299
+ @media screen and (min-width: 960px)
300
+ {
301
+ &:not(.full) div.app-content,
302
+ & div.page div.app-content:not(.full)
303
+ {
304
+ max-width: var(--app-skin-content-width);
305
+ }
306
+
307
+ &:not(.full) .box.side-menu
308
+ {
309
+ right: calc((100% - var(--app-skin-content-width)) / 2);
310
+ }
311
+
312
+ &.menu-left:not(.full) .box.side-menu
313
+ {
314
+ left: calc((100% - var(--app-skin-content-width)) / 2);
315
+ }
316
+
317
+ /* -- margins when side-menu is visible, from this viewport width we no longer overlap the menu over the content -- */
318
+
319
+ /* menu pinned to content */
320
+ &.side-menu.menu-left
321
+ {
322
+ --app-skin-content-margin: calc((100% - var(--app-skin-content-width)) / 2 + var(--app-skin-menu-width));
323
+ }
324
+
325
+ /* menu pinned to viewport */
326
+ &.full.side-menu.menu-left
327
+ {
328
+ --app-skin-content-margin: var(--app-skin-menu-width);
329
+ }
330
+
331
+ &.full.side-menu div.page > * > div.app-content
332
+ {
333
+ margin-left: var(--app-skin-content-margin);
334
+ }
335
+
336
+ &.full.side-menu:not(.menu-left) div.page > * > div.app-content
337
+ {
338
+ margin-left: 0;
339
+ margin-right: var(--app-skin-content-margin);
340
+ }
341
+
342
+ /* apply margin to deepest nested content container */
343
+ &:not(.full).side-menu .app-content:not(:has(.app-content))
344
+ {
345
+ margin-left: var(--app-skin-content-margin);
346
+ }
347
+
348
+ &:not(.full).side-menu:not(.menu-left) .app-content:not(:has(.app-content))
349
+ {
350
+ margin-left: 0;
351
+ margin-right: var(--app-skin-content-margin);
352
+ }
353
+ }
354
+
355
+ /* logo */
356
+ & figure.logo
357
+ {
358
+ display: inline-block;
359
+ background-repeat: no-repeat;
360
+ background-position: 0px 0px;
361
+ margin: 0px;
362
+ margin-bottom: 25px;
363
+ height: 23px;
364
+ width: 168px;
365
+
366
+ &::before
367
+ {
368
+ content: 'COMPANY LOGO';
369
+ display: inline-block;
370
+ position: relative;
371
+ top: 50%;
372
+ left: 0px;
373
+ transform: translateY(-50%);
374
+ }
375
+ }
376
+
377
+ & > header div.app-content figure.logo
378
+ {
379
+ margin-bottom: 0px;
380
+ }
381
+
382
+ /* search-box */
383
+ & div.search
384
+ {
385
+ order: 2;
386
+ margin-left: auto;
387
+ margin-right: 12px;
388
+ position: relative;
389
+ z-index: 2;
390
+
391
+ &::after
392
+ {
393
+ display: inline-block;
394
+ position: absolute;
395
+ right: 5px;
396
+ top: 50%;
397
+ transform: translateY(-50%);
398
+ font-family: 'UI';
399
+ content: '\e906';
400
+ font-size: 20px;
401
+ opacity: 0.5;
402
+ }
403
+
404
+ > input
405
+ {
406
+ border-color: transparent;
407
+ width: 0px;
408
+ height: 28px;
409
+ padding-left: 5px;
410
+ padding-right: 25px;
411
+ transition: width .1s;
412
+
413
+ &:focus
414
+ {
415
+ width: clamp(150px, 20vw, 320px);
416
+ }
417
+ }
418
+ }
419
+
420
+ & div.search:hover::after,
421
+ &.search-active div.search::after
422
+ {
423
+ opacity: 0.7;
424
+ }
425
+
426
+ @media screen and (max-width: 767px)
427
+ {
428
+ & div.search > input:focus
429
+ {
430
+ width: 150px;
431
+ }
432
+ }
433
+
434
+ /* footer */
435
+ & > footer
436
+ {
437
+ position: fixed;
438
+ bottom: 0px;
439
+ left: 0px;
440
+ right: 0px;
441
+ height: 48px;
442
+ text-align: right;
443
+ z-index: 2;
444
+ }
445
+
446
+ /* header menu */
447
+ & > header .menu > .item-group.root > nav
448
+ {
449
+ display: flex;
450
+ overflow: hidden;
451
+ white-space: nowrap;
452
+ }
453
+
454
+ & .menu .item-group:not(.root)
455
+ {
456
+ z-index: 5;
457
+ }
458
+
459
+ /* side menu */
460
+ & .box.side-menu
461
+ {
462
+ position: fixed;
463
+ right: 0px;
464
+ top: 48px;
465
+ bottom: 0px;
466
+ width: var(--app-skin-menu-width);
467
+ box-sizing: border-box;
468
+ z-index: 3;
469
+ overflow-y: visible;
470
+ overflow-x: hidden;
471
+ white-space: nowrap;
472
+ transform: scaleX(0);
473
+ transform-origin: right top;
474
+ will-change: transform opacity width;
475
+ opacity: 0;
476
+ border-radius: 0px;
477
+ padding: 10px;
478
+ background: transparent;
479
+ box-shadow: 0px 0px 8px 2px rgba(0,0,0,0.08);
480
+ scrollbar-width: thin;
481
+
482
+ &.show
483
+ {
484
+ white-space: normal;
485
+ opacity: 1;
486
+ transform: scale(1);
487
+ }
488
+
489
+ &.show-animation
490
+ {
491
+ animation: side-menu-animation .1s;
492
+ }
493
+
494
+ &.hide-animation
495
+ {
496
+ animation: side-menu-animation .1s;
497
+ animation-direction: reverse;
498
+ }
499
+
500
+ .button.item.split > div.command
501
+ {
502
+ display: flex;
503
+ align-items: center;
504
+ flex: 1 1 auto;
505
+ min-width: 0;
506
+ }
507
+
508
+ .button.item .content-holder
509
+ {
510
+ display: inline-block;
511
+ overflow: hidden;
512
+ text-overflow: ellipsis;
513
+ }
514
+ }
515
+
516
+ &.menu-left .box.side-menu
517
+ {
518
+ right: auto;
519
+ left: 0px;
520
+ transform-origin: left top;
521
+ }
522
+
523
+ &.topbar .box.side-menu
524
+ {
525
+ top: 96px;
526
+ }
527
+
528
+ &.footer .box.side-menu
529
+ {
530
+ bottom: 48px;
531
+ }
532
+
533
+ & .menu.theme.side .item-group:not(.root)
534
+ {
535
+ position: relative;
536
+ }
537
+
538
+ /* side menu overlay */
539
+ & .overlay
540
+ {
541
+ display: none;
542
+ content: '';
543
+ position: fixed;
544
+ left: 0px;
545
+ right: 0px;
546
+ top: 48px;
547
+ bottom: 0px;
548
+ background: rgba(0,0,0,0.3);
549
+ z-index: 1;
550
+ }
551
+
552
+ &.topbar .overlay
553
+ {
554
+ top: 96px;
555
+ }
556
+
557
+ /* overlay only when the side-menu overlaps the content (below 960px there is no room next to the content) */
558
+ @media screen and (max-width: 959px)
559
+ {
560
+ &.side-menu .overlay
561
+ {
562
+ display: block;
563
+ }
564
+ }
565
+
566
+ /* header, topbar, footer buttons */
567
+ & .button.theme.menu-button, & .button.theme.account,
568
+ & > header .menu > .item-group.root > nav > .button.theme,
569
+ & > footer .menu > .item-group.root > nav > .button.theme
570
+ {
571
+ flex-shrink: 0;
572
+ height: 46px;
573
+ width: auto;
574
+ line-height: 46px !important;
575
+ vertical-align: top;
576
+ border-radius: 0;
577
+ padding-left: 0px;
578
+ padding-right: 0px;
579
+ text-align: center;
580
+ }
581
+
582
+ /* account button avatar */
583
+ & .button.theme.account-avatar
584
+ {
585
+ display: flex;
586
+ position: relative;
587
+ border-radius: 50%;
588
+ width: 46px;
589
+ height: 46px;
590
+ padding: 0;
591
+ margin: 20px;
592
+ align-items: center;
593
+ justify-content: center;
594
+ text-transform: uppercase;
595
+
596
+ &::before
597
+ {
598
+ content: var(--avatar-initials);
599
+ font-size: 16px;
600
+ font-weight: bold;
601
+ }
602
+
603
+ &::after
604
+ {
605
+ content: '';
606
+ display: inline-block;
607
+ position: absolute;
608
+ border-radius: 50%;
609
+ width: 42px;
610
+ height: 42px;
611
+ background-repeat: no-repeat;
612
+ background-position: center;
613
+ background-size: cover;
614
+ background-image: var(--avatar-image);
615
+ }
616
+ }
617
+
618
+ & > header > div.app-content > .topbar .menu > .item-group.root > nav > .button.theme
619
+ {
620
+ flex: 1;
621
+ justify-content: center;
622
+ }
623
+
624
+ /* header, footer content */
625
+ & > header .menu > .item-group.root > nav > .button.theme:not(.childless) .content-holder,
626
+ & > footer .menu > .item-group.root > nav > .button.theme:not(.childless) .content-holder
627
+ {
628
+ margin-right: 24px; /* reserve space for expand-icon to keep combined content centered */
629
+ }
630
+
631
+ /* header, footer expand icon */
632
+ & > header .menu > .item-group.root > nav > .button.theme span.expand-icon,
633
+ & > footer .menu > .item-group.root > nav > .button.theme span.expand-icon
634
+ {
635
+ right: auto;
636
+ margin-left: -12px;
637
+ }
638
+
639
+ /* portal icon */
640
+ & > .menu.theme.portal .item-group.root > nav > * > .button.theme span.expand-icon
641
+ {
642
+ margin-right: 8px;
643
+ margin-top: -4px;
644
+ transform: none;
645
+ }
646
+
647
+ & > .menu.theme.portal .item-group.root > nav > * > .button.theme[class*="small"] span.expand-icon
648
+ {
649
+ margin-right: 0px;
650
+ }
651
+
652
+ & .menu.header-menu .item-group.root > nav > .button.theme .content-holder,
653
+ & .menu.header-menu .item-group.root > nav > * > .button.theme .content-holder,
654
+ & .menu.footer-menu .item-group.root > nav > .button.theme .content-holder,
655
+ & .menu.footer-menu .item-group.root > nav > * > .button.theme .content-holder,
656
+ & .menu.portal .item-group.root > nav > .button.theme .content-holder,
657
+ & .menu.portal .item-group.root > nav > * > .button.theme .content-holder,
658
+ & .menu.side .item-group > nav > .button.theme .content-holder,
659
+ & .menu.side .item-group > nav > * > .button.theme .content-holder
660
+ {
661
+ padding: 0px;
662
+ }
663
+
664
+ /* fixed width buttons */
665
+ & .button.theme.menu-button, & .button.theme.account
666
+ {
667
+ width: 46px;
668
+ flex: none;
669
+ }
670
+
671
+ & .button.theme.menu-button
672
+ {
673
+ line-height: 35px !important;
674
+ font-size: 0px;
675
+ display: inline-block;
676
+
677
+ > span.icon
678
+ {
679
+ min-height: 0;
680
+ }
681
+ }
682
+
683
+ & > header .menu > .item-group.root > nav > .button.theme .content-holder,
684
+ & > footer .menu > .item-group.root > nav > .button.theme .content-holder
685
+ {
686
+ display: inline-block;
687
+ margin-left: 10px;
688
+ margin-right: 10px;
689
+ }
690
+
691
+ /* icon only header buttons when there is a header overflow */
692
+ &.header-overflow > header .menu > .item-group.root > nav > .button.theme span + .content-holder
693
+ {
694
+ display: none;
695
+ }
696
+
697
+ &.header-overflow > header .menu > .item-group.root > nav > .button.theme:not(.childless) span
698
+ {
699
+ margin-right: 22px;
700
+ }
701
+
702
+ /* button icon size */
703
+ & .button.theme.account span[class*='ico-'],
704
+ & > header .menu > .item-group.root > nav > .button.theme span[class*='ico-'],
705
+ & > footer .menu > .item-group.root > nav > .button.theme span[class*='ico-'],
706
+ & div.toolbar > .button.theme span[class*='ico-']
707
+ {
708
+ font-size: 20px;
709
+ }
710
+
711
+ & > .menu.theme.portal .item-group.root > nav > * > .button.theme span[class*='ico-']
712
+ {
713
+ font-size: 24px;
714
+ }
715
+
716
+ & > .menu.theme.portal .item-group.root > nav > * > .button.theme[class*='large'] span[class*='ico-']
717
+ {
718
+ font-size: 48px;
719
+ }
720
+
721
+ /* portal menu (trick to center floats) */
722
+ & > .menu.theme.portal .item-group.root
723
+ {
724
+ position: relative;
725
+ float: right;
726
+ left: -50%;
727
+
728
+ > nav
729
+ {
730
+ position: relative;
731
+ left: 50%;
732
+ }
733
+ }
734
+
735
+ /* portal menu tile groups, sizes, and buttons */
736
+ & .menu.theme.portal .item-group.root > nav
737
+ {
738
+ > .sub-group
739
+ {
740
+ float: left;
741
+
742
+ &.small
743
+ {
744
+ width: 60px;
745
+ height: 60px;
746
+ }
747
+
748
+ &.small-wide
749
+ {
750
+ width: 120px;
751
+ }
752
+
753
+ &.medium
754
+ {
755
+ width: 120px;
756
+ height: 120px;
757
+ }
758
+
759
+ &.medium-wide
760
+ {
761
+ width: 240px;
762
+ }
763
+
764
+ &.large
765
+ {
766
+ width: 240px;
767
+ height: 240px;
768
+
769
+ /* portal menu small buttons in large container */
770
+ > .button.theme.row-start
771
+ {
772
+ clear: both; /* move to bottom left */
773
+ }
774
+
775
+ /* portal menu button next to row-start button */
776
+ > .button.theme.small-wide.row-start + .button.theme,
777
+ > .button.theme.small.row-start + .button.theme.small + .button.theme
778
+ {
779
+ margin-top: -58px; /* move to top (height + margin) */
780
+ }
781
+ }
782
+ }
783
+
784
+ > * > .button.theme
785
+ {
786
+ display: block;
787
+ float: left;
788
+ margin: 2px;
789
+ line-height: 32px;
790
+ padding: 0px;
791
+ text-align: center;
792
+ border-radius: 0px;
793
+
794
+ &.small
795
+ {
796
+ width: 54px;
797
+ height: 54px;
798
+ }
799
+
800
+ &.small-wide
801
+ {
802
+ width: 114px;
803
+ height: 54px;
804
+ }
805
+
806
+ &.small .content-holder,
807
+ &.small-wide .content-holder
808
+ {
809
+ display: none;
810
+ }
811
+
812
+ &.medium
813
+ {
814
+ width: 114px;
815
+ height: 114px;
816
+ }
817
+
818
+ &.medium-wide
819
+ {
820
+ width: 234px;
821
+ height: 114px;
822
+ }
823
+
824
+ &.large
825
+ {
826
+ width: 234px;
827
+ height: 234px;
828
+ }
829
+
830
+ > span:first-child
831
+ {
832
+ position: relative;
833
+ display: block;
834
+ top: 50%;
835
+ transform: translateY(-50%);
836
+ }
837
+
838
+ > .content-holder
839
+ {
840
+ display: inline-block;
841
+ position: absolute;
842
+ top: 100%;
843
+ left: 50%;
844
+ transform: translateY(-40px) translateX(-50%);
845
+ line-height: 18px;
846
+ margin: 0px;
847
+ width: 100%;
848
+ white-space: pre-line;
849
+ }
850
+ }
851
+ }
852
+
853
+ /* overwrite portal cat-nav icon */
854
+ & > .menu.theme.portal.horizontal div.item-group.root .button.theme.cat-nav span.icon::before
855
+ {
856
+ transform: rotate(-135deg); /* left */
857
+ }
858
+
859
+ /* overwrite portal-menu category animation (slide not possible with complex floating positions) */
860
+ & > .menu.theme.portal.cat
861
+ {
862
+ height: auto;
863
+
864
+ > .cat-container .item-group.show-animation
865
+ {
866
+ animation: portal-category-display .2s ease;
867
+ }
868
+
869
+ > .cat-container .item-group.hide-animation
870
+ {
871
+ animation: portal-category-display .2s ease;
872
+ animation-direction: reverse;
873
+ }
874
+
875
+ > .cat-container .item-group.show-animation + .item-group.cat,
876
+ > .cat-container .item-group.hide-animation + .item-group.cat
877
+ {
878
+ display: none;
879
+ }
880
+ }
881
+
882
+ /* username label */
883
+ & b.username
884
+ {
885
+ line-height: 48px;
886
+ font-weight: normal;
887
+ white-space: nowrap;
888
+ margin-left: auto;
889
+ margin-right: 20px;
890
+ }
891
+
892
+ &:not(.authenticated) b.username
893
+ {
894
+ font-style: italic;
895
+ }
896
+
897
+ /* login-screen */
898
+ & div.login-screen
899
+ {
900
+ display: flex;
901
+ align-items: center;
902
+ justify-content: center;
903
+ box-sizing: border-box;
904
+ height: 100vh;
905
+ padding-top: 48px;
906
+ z-index: 2;
907
+ position: relative;
908
+
909
+ &.login-verification input
910
+ {
911
+ height: 20px;
912
+ width: 280px;
913
+ padding: 10px;
914
+ }
915
+
916
+ div.content > div
917
+ {
918
+ margin-top: 15px;
919
+ }
920
+
921
+ div.content .button.theme
922
+ {
923
+ margin-top: 15px;
924
+ }
925
+
926
+ div.user input,
927
+ div.pass input
928
+ {
929
+ height: 20px;
930
+ width: 250px;
931
+ padding: 10px;
932
+ padding-left: 40px;
933
+ }
934
+
935
+ div.user,
936
+ div.pass
937
+ {
938
+ position: relative;
939
+ }
940
+
941
+ .form-field.theme label
942
+ {
943
+ line-height: 40px;
944
+ }
945
+
946
+ div.user .form-field.theme label,
947
+ div.pass .form-field.theme label
948
+ {
949
+ left: 40px;
950
+ }
951
+
952
+ i[class*='ico-']
953
+ {
954
+ position: absolute;
955
+ top: 50%;
956
+ transform: translateY(-50%);
957
+ text-shadow: none;
958
+ }
959
+
960
+ .form-field.floating i[class*='ico-']
961
+ {
962
+ top: calc(0.5rem + 28px); /* use the default form-field margin-top + reserved label height */
963
+ transform: translateY(50%); /* center using own height */
964
+ }
965
+
966
+ i[class*='ico-eye']
967
+ {
968
+ right: 10px;
969
+ }
970
+
971
+ i.ico-user,
972
+ i.ico-key
973
+ {
974
+ left: 10px;
975
+ }
976
+
977
+ input.default + i + i.ico-eye
978
+ {
979
+ display: none;
980
+ }
981
+
982
+ input
983
+ {
984
+ font-size: 15px;
985
+ }
986
+
987
+ div.remember
988
+ {
989
+ text-shadow: none !important;
990
+ }
991
+
992
+ .button.theme
993
+ {
994
+ height: 38px;
995
+ line-height: 38px;
996
+ width: 298px;
997
+ padding: 0px;
998
+ }
999
+
1000
+ div.message
1001
+ {
1002
+ height: 25px;
1003
+ }
1004
+ }
1005
+
1006
+ & div.login-screen div.content
1007
+ {
1008
+ padding: 50px;
1009
+ width: 300px;
1010
+ margin: auto;
1011
+ text-align: center;
1012
+ }
1013
+
1014
+ /* login required launch screen (no header) */
1015
+ &.login.required
1016
+ {
1017
+ > header
1018
+ {
1019
+ display: none;
1020
+ }
1021
+
1022
+ div.login-screen
1023
+ {
1024
+ top: 0px;
1025
+ }
1026
+ }
1027
+
1028
+ &:not(.required) div.login-screen figure.logo
1029
+ {
1030
+ display: none;
1031
+ }
1032
+
1033
+ /* preloader */
1034
+ & .box.preloader
1035
+ {
1036
+ z-index: 6;
1037
+
1038
+ div.content
1039
+ {
1040
+ position: relative;
1041
+ padding: 20px;
1042
+ width: auto;
1043
+ margin: 0px;
1044
+ min-width: initial;
1045
+
1046
+ > div
1047
+ {
1048
+ display: flex;
1049
+ align-items: center;
1050
+ }
1051
+
1052
+ i.spinner
1053
+ {
1054
+ position: relative;
1055
+ margin-right: 10px;
1056
+ }
1057
+
1058
+ b
1059
+ {
1060
+ vertical-align: top;
1061
+ font-weight: normal;
1062
+ }
1063
+ }
1064
+ }
1065
+
1066
+ & > header h1
1067
+ {
1068
+ padding-left: 12px;
1069
+ padding-right: 12px;
1070
+ margin-top: 0px;
1071
+ margin-bottom: 0px;
1072
+ }
1073
+
1074
+ & h1,
1075
+ & h2,
1076
+ & h3
1077
+ {
1078
+ line-height: 34px;
1079
+ }
1080
+
1081
+ /* page content */
1082
+ & .toolbar
1083
+ {
1084
+ position: relative;
1085
+ line-height: 34px;
1086
+ height: 34px;
1087
+ border-bottom-width: 1px;
1088
+ border-bottom-style: solid;
1089
+ border-radius: 0;
1090
+
1091
+ &.fixed
1092
+ {
1093
+ position: fixed;
1094
+ z-index: 1;
1095
+ left: 0px;
1096
+ right: 0px;
1097
+ height: 34px;
1098
+
1099
+ + h1
1100
+ {
1101
+ padding-top: 33px;
1102
+ }
1103
+ }
1104
+ }
1105
+
1106
+ & section
1107
+ {
1108
+ padding: 12px;
1109
+ margin-bottom: 20px;
1110
+
1111
+ > div.column
1112
+ {
1113
+ margin-right: 12px;
1114
+ padding: 12px;
1115
+
1116
+ &.list
1117
+ {
1118
+ overflow-y: auto;
1119
+ }
1120
+
1121
+ &.grow
1122
+ {
1123
+ flex-grow: 1;
1124
+ }
1125
+
1126
+ &:last-child
1127
+ {
1128
+ margin-right: 0px;
1129
+ }
1130
+ }
1131
+ }
1132
+
1133
+ & div.error > div.app-content > section
1134
+ {
1135
+ display: block;
1136
+ }
1137
+
1138
+ /* inputs */
1139
+ & select
1140
+ {
1141
+ box-sizing: content-box;
1142
+ }
1143
+
1144
+ & input[type="text"],
1145
+ & input[type="password"],
1146
+ & textarea,
1147
+ & select
1148
+ {
1149
+ font-family: inherit;
1150
+ border-width: 1px;
1151
+ border-style: solid;
1152
+ height: 28px;
1153
+ padding-left: 4px;
1154
+ padding-right: 4px;
1155
+ vertical-align: top;
1156
+ min-width: 200px;
1157
+ }
1158
+
1159
+ & .numeric-box.theme input,
1160
+ & div.combo-box input
1161
+ {
1162
+ min-width: 0;
1163
+ }
1164
+
1165
+ & textarea
1166
+ {
1167
+ min-height: 30px;
1168
+ height: 50px;
1169
+ padding-top: 4px;
1170
+ padding-bottom: 4px;
1171
+ }
1172
+
1173
+ /* search-result */
1174
+ & .search-result
1175
+ {
1176
+ position: fixed;
1177
+ z-index: 12;
1178
+ top: 48px;
1179
+ bottom: 0;
1180
+ left: 0px;
1181
+ right: 0px;
1182
+ overflow-y: auto;
1183
+ padding: 20px;
1184
+ display: flex;
1185
+ gap: 2rem;
1186
+ justify-content: space-around;
1187
+ border-style: solid;
1188
+
1189
+ > nav
1190
+ {
1191
+ > h2
1192
+ {
1193
+ text-transform: uppercase;
1194
+ }
1195
+
1196
+ > a
1197
+ {
1198
+ display: block;
1199
+ }
1200
+ }
1201
+ }
1202
+
1203
+ /* hide root category navigator in main side-menu when all navigation items are in header-menu and header-menu is visible */
1204
+ &.header-all:not(.header-menu-hidden) .menu.theme.side .button.theme.cat-nav.root
1205
+ {
1206
+ display: none;
1207
+ }
1208
+ }
1209
+
1210
+ @keyframes side-menu-animation
1211
+ {
1212
+ 0%
1213
+ {
1214
+ opacity: 0;
1215
+ transform: scaleX(0) rotate(0deg) translate3d(0,0,0);
1216
+ }
1217
+
1218
+ 100%
1219
+ {
1220
+ opacity: 1;
1221
+ transform: scaleX(1) rotate(0deg) translate3d(0,0,0);
1222
+ }
1223
+ }
1224
+
1225
+ @keyframes portal-category-display
1226
+ {
1227
+ 0%
1228
+ {
1229
+ opacity: 0;
1230
+ }
1231
+
1232
+ 100%
1233
+ {
1234
+ opacity: 1;
1235
+ }
1236
+ }
1237
+
1238
+ @media screen and (min-width: 1200px)
1239
+ {
1240
+ :root
1241
+ {
1242
+ --app-skin-content-width: 1200px;
1243
+ }
1244
+ }
1245
+
1246
+ @media screen and (min-width: 1280px)
1247
+ {
1248
+ :root
1249
+ {
1250
+ --app-skin-content-width: 1280px;
1251
+ }
1252
+ }
1253
+
1254
+ @media screen and (min-width: 1440px)
1255
+ {
1256
+ :root
1257
+ {
1258
+ --app-skin-content-width: 1440px;
1259
+ }
1260
+ }
1261
+
1262
+ @media screen and (max-width: 767px)
1263
+ {
1264
+ :root
1265
+ {
1266
+ --app-skin-menu-width: 280px;
1267
+ }
1268
+ }