@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
package/Form/Form.css ADDED
@@ -0,0 +1,1934 @@
1
+ /*! Componyx.UI | (c) E.H. Daanen / Componyx | BUSL-1.1 | componyx.com/license */
2
+ @import url('../Base/ComponentIcons.css');
3
+
4
+ .form.theme
5
+ {
6
+ --z-index: 9;
7
+ --fieldset-border-width: 1px;
8
+ --fieldset-drop-above-margin: -34px;
9
+ --fieldset-bannered-drop-above-margin: -52px;
10
+ --fieldset-nested-margin: 30px;
11
+ --field-width: 360px;
12
+ --field-margin-right: 1rem;
13
+ --field-label-width: 175px;
14
+ --field-inline-label-width: 140px;
15
+ --field-option-drag-ghost-width: 360px;
16
+ --field-option-min-width: 100px;
17
+ --droppable-margin: 20px;
18
+ --droppable-line-size: 5px;
19
+ --build-pane-width: clamp(220px, 15vw, 260px);
20
+ --config-pane-width: 380px;
21
+ --config-pane-expanded-width: clamp(380px, 40vw, 740px);
22
+ --header-height: 48px;
23
+ --fixed-layout-offset-top: 0px;
24
+ --fixed-layout-offset-bottom: 0px;
25
+ --fixed-layout-offset-left: 0px;
26
+ --fixed-layout-offset-right: 0px;
27
+ display: flex;
28
+ flex-direction: column;
29
+ z-index: var(--z-index);
30
+
31
+ &:not(.build-mode):not(.preview-mode)
32
+ {
33
+ max-width: 1000px;
34
+ margin: 0 auto;
35
+ }
36
+
37
+ &.view-mode
38
+ {
39
+ .form-field > label
40
+ {
41
+ font-weight: bold
42
+ }
43
+
44
+ .view-field > span.readonly
45
+ {
46
+ background-color: transparent !important;
47
+ }
48
+ }
49
+
50
+ &.preview-mode
51
+ {
52
+ & .panes
53
+ {
54
+ width: 100%;
55
+ max-width: 1000px;
56
+ margin: 0 auto;
57
+
58
+ & > footer
59
+ {
60
+ margin: auto;
61
+ width: 100%;
62
+ display: flex;
63
+ justify-content: center;
64
+ align-items: center;
65
+
66
+ & .button
67
+ {
68
+ &:not(:last-child)
69
+ {
70
+ margin-right: 0.5rem;
71
+ }
72
+
73
+ &.section-prev
74
+ {
75
+ order: 0;
76
+
77
+ & .icon
78
+ {
79
+ font-size: 12px;
80
+ }
81
+ }
82
+
83
+ &.section-next,
84
+ &.submit
85
+ {
86
+ order: 1;
87
+ }
88
+
89
+ &.section-next .icon
90
+ {
91
+ font-size: 12px;
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+
98
+ &.build-mode > header,
99
+ &.preview-mode > header
100
+ {
101
+ display: flex;
102
+ position: sticky;
103
+ z-index: inherit;
104
+ top: 0;
105
+ align-items: center;
106
+ min-width: 100%;
107
+ height: var(--header-height);
108
+ margin: 0;
109
+ padding: 0;
110
+ margin-bottom: 1rem;
111
+ }
112
+
113
+ &.build-mode.fixed-layout > header,
114
+ &.preview-mode.fixed-layout > header
115
+ {
116
+ position: fixed;
117
+ z-index: inherit;
118
+ top: var(--fixed-layout-offset-top);
119
+ left: 0;
120
+ right: 0;
121
+ }
122
+
123
+ & > header
124
+ {
125
+ & > h1
126
+ {
127
+ font-size: 1.5rem;
128
+ padding: 0;
129
+ margin: 0px;
130
+ padding-left: 1rem;
131
+ padding-right: 1rem;
132
+ flex: 1;
133
+ }
134
+
135
+ & > .commands
136
+ {
137
+ margin-right: 1rem;
138
+ }
139
+ }
140
+
141
+ &.build-mode
142
+ {
143
+ & .panes
144
+ {
145
+ display: flex;
146
+ flex-direction: row;
147
+ align-items: stretch;
148
+ overflow-x: hidden;
149
+ }
150
+
151
+ &:has(.drag-ghost.dragging > .build-block.field-set) .form-pane,
152
+ &:has(.drag-ghost.dragging.field-set) .form-pane,
153
+ &:has(.drag-ghost.dragging > .build-block.field-set) .form-pane > section,
154
+ &:has(.drag-ghost.dragging.field-set) .form-pane > section
155
+ {
156
+ padding-bottom: 150px;
157
+ }
158
+
159
+ & .form-pane
160
+ {
161
+ & fieldset
162
+ {
163
+ & > fieldSet
164
+ {
165
+ margin-top: var(--fieldset-nested-margin);
166
+ }
167
+
168
+ &.layoutless
169
+ {
170
+ border-style: dashed;
171
+ }
172
+
173
+ & > .field-pane
174
+ {
175
+ padding: 34px;
176
+ }
177
+
178
+ & > .field-pane > .form-field
179
+ {
180
+ --drag-handle-offset: 0px;
181
+ box-sizing: border-box;
182
+ border-style: solid;
183
+ padding: 10px;
184
+ min-height: 140px;
185
+ height: fit-content;
186
+ min-width: var(--field-width);
187
+ cursor: pointer;
188
+ padding-left: 36px;
189
+ transition: margin 0.25s ease-in-out;
190
+
191
+ &.spacer-field
192
+ {
193
+ min-height: 0px;
194
+ }
195
+
196
+ &:hover,
197
+ &:focus,
198
+ &:focus-within,
199
+ &.selected
200
+ {
201
+ --drag-handle-offset: -4px;
202
+ border-left-width: 5px;
203
+ padding-left: 32px;
204
+ }
205
+
206
+ & > i.icon
207
+ {
208
+ position: absolute;
209
+ left: var(--drag-handle-offset);
210
+ top: 8px;
211
+ padding-left: 8px;
212
+ width: 32px;
213
+ height: 32px;
214
+ line-height: 32px;
215
+ }
216
+
217
+ &.above > label
218
+ {
219
+ width: var(--field-label-width);
220
+ }
221
+
222
+ &.before > label
223
+ {
224
+ height: fit-content;
225
+ width: var(--field-inline-label-width);
226
+ padding-top: 5px;
227
+
228
+ &:has(i.icon)
229
+ {
230
+ width: calc(var(--field-inline-label-width) - 30px);
231
+ margin-right: 30px;
232
+ }
233
+ }
234
+
235
+ & > .field-content-wrapper
236
+ {
237
+ overflow: auto;
238
+
239
+ & > div
240
+ {
241
+ margin-top: 8px;
242
+ }
243
+ }
244
+
245
+ &.before > .field-content-wrapper
246
+ {
247
+ flex: 1;
248
+ align-self: flex-start;
249
+ margin-top: 39px;
250
+ max-height: calc(100% - 35px);
251
+ }
252
+
253
+ & textarea
254
+ {
255
+ height: 3rem;
256
+ }
257
+
258
+ & .field-indicators
259
+ {
260
+ position: absolute;
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 8px;
264
+ bottom: 8px;
265
+ right: 8px;
266
+ }
267
+ }
268
+
269
+ & .build-menu
270
+ {
271
+ position: absolute;
272
+ right: 10px;
273
+ top: 7px;
274
+ border-left-style: solid;
275
+ padding-left: 10px;
276
+ border-radius: 0;
277
+ }
278
+
279
+ & > .build-menu
280
+ {
281
+ top: 0px;
282
+ }
283
+
284
+ &.bannered > .build-menu
285
+ {
286
+ top: 45px;
287
+ }
288
+ }
289
+
290
+ & legend,
291
+ & fieldset > .form-field > label
292
+ {
293
+ display: inline-block;
294
+ width: 180px;
295
+ line-height: 25px;
296
+ height: 30px;
297
+ white-space: nowrap;
298
+ cursor: text;
299
+ position: relative;
300
+ padding-left: 22px;
301
+ padding-right: 5px;
302
+ }
303
+
304
+ & fieldset > .form-field > label
305
+ {
306
+ padding-left: 0px;
307
+ }
308
+
309
+ & legend > input,
310
+ & .form-field > label > input
311
+ {
312
+ font-size: 0.8rem;
313
+ }
314
+
315
+ & legend::before
316
+ {
317
+ font-family: 'UI';
318
+ content: '\e905';
319
+ font-size: 12px;
320
+ pointer-events: none;
321
+ position: absolute;
322
+ top: 50%;
323
+ left: 5px;
324
+ transform: translateY(-50%);
325
+ }
326
+
327
+ & legend > input[type="text"]:focus,
328
+ & .form-field > label > input[type="text"]:focus
329
+ {
330
+ border-style: solid;
331
+ border-width: 1px;
332
+ border-color: transparent;
333
+ }
334
+
335
+ & .form-field.content-field .content[contenteditable="true"]
336
+ {
337
+ box-sizing: border-box;
338
+ position: relative;
339
+ height: fit-content;
340
+ min-height: 75px;
341
+ max-height: 200px;
342
+ padding: 10px;
343
+ overflow: auto;
344
+ cursor: text;
345
+ border-style: solid;
346
+ border-width: 1px;
347
+ }
348
+ }
349
+
350
+ & .tab-strip
351
+ {
352
+ margin-bottom: 1rem;
353
+ display: flex;
354
+ flex-wrap: wrap;
355
+
356
+ & > .button
357
+ {
358
+ flex: 1 1 auto;
359
+ min-width: 200px;
360
+ max-width: 400px;
361
+
362
+ &.section-add
363
+ {
364
+ flex: 0 0 auto;
365
+ min-width: 0px;
366
+ }
367
+
368
+ & > .content-holder > input
369
+ {
370
+ border: none;
371
+ background: transparent;
372
+ font: inherit;
373
+ color: inherit;
374
+ width: 100%;
375
+ min-width: 0;
376
+ max-width: auto;
377
+ height: 28px;
378
+ padding: 0;
379
+ padding-left: 4px;
380
+ padding-right: 4px;
381
+ margin: 0;
382
+ white-space: nowrap;
383
+ overflow: hidden;
384
+ text-overflow: ellipsis;
385
+ cursor: text;
386
+ box-sizing: border-box;
387
+ box-shadow: none !important;
388
+ text-align: center;
389
+ }
390
+
391
+ & > i.section-remove
392
+ {
393
+ margin-left: 8px;
394
+ width: 28px;
395
+ }
396
+ }
397
+ }
398
+
399
+ & .form-pane legend > input,
400
+ & .form-pane .form-field > label > input,
401
+ & .tab-strip > .button > .content-holder > input
402
+ {
403
+ border: none;
404
+ background: transparent;
405
+ font: inherit;
406
+ color: inherit;
407
+ width: 100%;
408
+ min-width: 0;
409
+ max-width: 400px;
410
+ height: 28px;
411
+ padding: 0;
412
+ padding-left: 4px;
413
+ padding-right: 4px;
414
+ margin: 0;
415
+ white-space: nowrap;
416
+ overflow: hidden;
417
+ text-overflow: ellipsis;
418
+ cursor: text;
419
+ box-sizing: border-box;
420
+ padding-left: 4px;
421
+ padding-right: 4px;
422
+ box-shadow: none !important;
423
+ }
424
+
425
+ & .disabled[inert]:not(:where([inert] [inert])):not(.dragging)
426
+ {
427
+ opacity: 0.5;
428
+ pointer-events: none;
429
+ user-select: none;
430
+ }
431
+
432
+ & .invisible:not(:hover):not(:focus):not(:focus-within):not(.dragging)
433
+ {
434
+ opacity: 0.4;
435
+ filter: grayscale(1);
436
+ border-top-style: dashed !important;
437
+ border-bottom-style: dashed !important;
438
+ border-right-style: dashed !important;
439
+ }
440
+
441
+ & fieldset.selected,
442
+ & .form-field.selected
443
+ {
444
+ opacity: 1;
445
+ }
446
+
447
+ & .config-pane > .panel-bar > .panel > .content
448
+ {
449
+ padding-left: 0.5rem;
450
+ padding-right: 0.5rem;
451
+ }
452
+
453
+ &.fixed-layout nav.sections
454
+ {
455
+ margin-top: var(--fixed-layout-offset-top);
456
+ margin-left: var(--build-pane-width);
457
+ margin-right: var(--config-pane-width);
458
+ }
459
+ }
460
+
461
+ & .form-pane
462
+ {
463
+ display: flex;
464
+ flex-wrap: wrap;
465
+ flex-grow: 1;
466
+ padding-left: 50px;
467
+ padding-right: 50px;
468
+ align-self: flex-start;
469
+
470
+ & > section
471
+ {
472
+ display: flex;
473
+ flex-wrap: wrap;
474
+ flex-grow: 1;
475
+ align-self: flex-start;
476
+ }
477
+
478
+ & fieldset
479
+ {
480
+ display: inline-flex;
481
+ flex-wrap: wrap;
482
+ flex: 1 1 200px;
483
+ position: relative;
484
+ margin: 0 1rem 1rem 1rem;
485
+ padding-left: 1rem;
486
+ width: auto;
487
+ height: auto;
488
+ box-sizing: border-box;
489
+ border-style: solid;
490
+ transition: all 0.25s ease-in-out;
491
+
492
+ & > legend
493
+ {
494
+ padding-left: 0.5rem;
495
+ padding-right: 0.5rem;
496
+ text-transform: uppercase;
497
+
498
+ &:has(> .icon)
499
+ {
500
+ padding-right: calc(0.5rem + 20px);
501
+ }
502
+
503
+ & > .icon
504
+ {
505
+ margin-left: 10px;
506
+ }
507
+ }
508
+
509
+ & > .field-pane
510
+ {
511
+ min-width: 100px;
512
+ width: 100%;
513
+ box-sizing: border-box;
514
+
515
+ &:has(~ fieldset)
516
+ {
517
+ display: none;
518
+ }
519
+
520
+ &:empty::before
521
+ {
522
+ content: attr(data-placeholder);
523
+ display: block;
524
+ font-style: italic;
525
+ pointer-events: none;
526
+ }
527
+
528
+ & > .form-field
529
+ {
530
+ display: inline-flex;
531
+ margin-right: var(--field-margin-right);
532
+
533
+ & .edit-field
534
+ {
535
+ & > input[type="text"],
536
+ & > textarea
537
+ {
538
+ width: 100%;
539
+ box-sizing: border-box;
540
+ min-width: 100px;
541
+ padding-left: 5px;
542
+ padding-right: 5px;
543
+ }
544
+ }
545
+ }
546
+ }
547
+
548
+ &:not(:has(> fieldset)) > .field-pane:empty::before
549
+ {
550
+ content: attr(data-placeholder);
551
+ display: block;
552
+ font-style: italic;
553
+ pointer-events: none;
554
+ }
555
+
556
+ &:has(> fieldset) > .field-pane
557
+ {
558
+ min-width: 0;
559
+ padding: 0;
560
+ }
561
+
562
+ & > fieldset.repeatable
563
+ {
564
+ &:first-of-type
565
+ {
566
+ padding-top: 30px;
567
+ }
568
+
569
+ &:last-of-type
570
+ {
571
+ padding-bottom: calc(30px + 1rem);
572
+ }
573
+ }
574
+
575
+ & > .drag-handle
576
+ {
577
+ position: absolute;
578
+ top: 10px;
579
+ width: 20px;
580
+ }
581
+
582
+ &.bannered
583
+ {
584
+ position: relative;
585
+ box-sizing: border-box;
586
+ padding-top: 40px;
587
+
588
+ & > legend
589
+ {
590
+ position: absolute;
591
+ display: flex;
592
+ width: auto;
593
+ left: 0;
594
+ right: 0;
595
+ top: 0;
596
+ height: 40px;
597
+ align-items: center;
598
+ }
599
+
600
+ & > .drag-handle
601
+ {
602
+ top: 50px;
603
+ }
604
+ }
605
+
606
+ &.repeatable
607
+ {
608
+ & .button.repeat-add
609
+ {
610
+ position: absolute;
611
+ bottom: 1rem;
612
+ }
613
+
614
+ & .button.repeat-remove
615
+ {
616
+ position: absolute;
617
+ top: 0;
618
+ }
619
+ }
620
+
621
+ &.droppable
622
+ {
623
+ border-style: dashed;
624
+ }
625
+
626
+ & > .field-pane
627
+ {
628
+ & .masked-textbox,
629
+ & .combo-box,
630
+ & .slider
631
+ {
632
+ width: 100%;
633
+ }
634
+
635
+ & .slider
636
+ {
637
+ font-size: 0.8rem;
638
+ }
639
+
640
+ & .masked-textbox > input[type="text"]
641
+ {
642
+ width: calc(100% - 10px);
643
+ }
644
+ }
645
+ }
646
+
647
+ & .field-options.options-row
648
+ {
649
+ display: flex;
650
+ width: 100%;
651
+ flex-wrap: wrap;
652
+
653
+ & > .form-field
654
+ {
655
+ flex-basis: auto;
656
+ box-sizing: border-box;
657
+ min-width: var(--field-option-min-width);
658
+ white-space: nowrap;
659
+ overflow: hidden;
660
+ text-overflow: ellipsis;
661
+ }
662
+ }
663
+
664
+ & .form-field.spacer-field .spacer
665
+ {
666
+ position: relative;
667
+ display: flex;
668
+ align-items: center;
669
+ height: 31px;
670
+
671
+ &.divider::after
672
+ {
673
+ content: '';
674
+ height: 1px;
675
+ flex: 1;
676
+ }
677
+ }
678
+
679
+ & .form-field > .drag-handle
680
+ {
681
+ position: absolute;
682
+ top: 50%;
683
+ left: var(--drag-handle-offset);
684
+ transform: translateY(-50%);
685
+ height: 100%;
686
+ width: 22px;
687
+ padding-left: 10px;
688
+ border-radius: 0;
689
+ border-right-style: solid;
690
+ }
691
+
692
+ & fieldset.droppable:not(.drag-ghost).drop-below + fieldset,
693
+ & fieldset fieldset.droppable:not(.drag-ghost).drop-below + fieldset
694
+ {
695
+ margin-top: var(--droppable-margin);
696
+ }
697
+
698
+ & fieldset fieldset.droppable:not(.drag-ghost).drop-above
699
+ {
700
+ margin-top: calc(var(--fieldset-nested-margin) + var(--droppable-margin));
701
+ }
702
+
703
+ & fieldset.droppable:not(.drag-ghost).drop-right + fieldset
704
+ {
705
+ margin-left: var(--droppable-margin);
706
+ }
707
+
708
+ & fieldset.droppable:not(.drag-ghost)
709
+ {
710
+ &.drop-above
711
+ {
712
+ &::before
713
+ {
714
+ top: var(--fieldset-drop-above-margin);
715
+ left: 0px;
716
+ right: 0px;
717
+ height: var(--droppable-line-size);
718
+ }
719
+
720
+ &::after
721
+ {
722
+ top: calc(var(--fieldset-drop-above-margin) + (var(--droppable-line-size) / 2));
723
+ left: 50%;
724
+ transform: translate(-50%, -50%);
725
+ }
726
+ }
727
+ }
728
+
729
+ & fieldset.bannered.droppable:not(.drag-ghost)
730
+ {
731
+ &.drop-above
732
+ {
733
+ &::before
734
+ {
735
+ top: var(--fieldset-bannered-drop-above-margin);
736
+ left: 0px;
737
+ right: 0px;
738
+ height: var(--droppable-line-size);
739
+ }
740
+
741
+ &::after
742
+ {
743
+ top: calc(var(--fieldset-bannered-drop-above-margin) + (var(--droppable-line-size) / 2));
744
+ left: 50%;
745
+ transform: translate(-50%, -50%);
746
+ }
747
+ }
748
+ }
749
+
750
+ & .filler
751
+ {
752
+ flex-grow: 1;
753
+ }
754
+ }
755
+
756
+ &:not(.build-mode)
757
+ {
758
+ & .form-pane
759
+ {
760
+ padding: 0px;
761
+
762
+ & fieldset.layoutless
763
+ {
764
+ border-color: transparent;
765
+ }
766
+
767
+ & .form-field.content-field
768
+ {
769
+ & .edit-field > .content,
770
+ & .view-field > .content
771
+ {
772
+ height: fit-content;
773
+ border-style: solid;
774
+ border-color: transparent;
775
+ }
776
+ }
777
+ }
778
+
779
+ & .field-pane
780
+ {
781
+ & > .form-field
782
+ {
783
+ &.before,
784
+ &.after
785
+ {
786
+ align-items: flex-start;
787
+ }
788
+
789
+ &.theme.before
790
+ {
791
+ width: 150px;
792
+ word-break: break-all;
793
+ }
794
+ }
795
+ }
796
+
797
+ & .field-options .form-field
798
+ {
799
+ &.before,
800
+ &.after
801
+ {
802
+ align-items: center;
803
+ }
804
+ }
805
+
806
+ & [inert]:not(:where([inert] [inert]))
807
+ {
808
+ opacity: 0.5;
809
+ pointer-events: none;
810
+ user-select: none;
811
+ }
812
+ }
813
+
814
+ & .droppable:not(.drag-ghost)
815
+ {
816
+ &::before
817
+ {
818
+ content: '';
819
+ position: absolute;
820
+ z-index: 1;
821
+ border-radius: 4px;
822
+ opacity: 0.25;
823
+ }
824
+
825
+ &::after
826
+ {
827
+ z-index: 2;
828
+ content: '+';
829
+ font-family: arial;
830
+ font-size: 20px;
831
+ color: white;
832
+ position: absolute;
833
+ display: flex;
834
+ align-items: center;
835
+ justify-content: center;
836
+ height: 16px;
837
+ width: 16px;
838
+ border-radius: 50%;
839
+ }
840
+
841
+ &:not([class*="drop-"])::before,
842
+ &:not([class*="drop-"])::after,
843
+ &.drop-denied::before,
844
+ &.drop-denied::after
845
+ {
846
+ content: none;
847
+ }
848
+
849
+ &.drop-below
850
+ {
851
+ & ~ .line-break + .form-field
852
+ {
853
+ margin-top: var(--droppable-margin);
854
+ }
855
+
856
+ &::before
857
+ {
858
+ bottom: -12px;
859
+ left: 0px;
860
+ right: 0px;
861
+ height: var(--droppable-line-size);
862
+ }
863
+
864
+ &::after
865
+ {
866
+ bottom: -18px;
867
+ left: 50%;
868
+ transform: translateX(-50%);
869
+ }
870
+ }
871
+
872
+ &.drop-above
873
+ {
874
+ margin-top: var(--droppable-margin);
875
+
876
+ &::before
877
+ {
878
+ top: -12px;
879
+ left: 0px;
880
+ right: 0px;
881
+ height: var(--droppable-line-size);
882
+ }
883
+
884
+ &::after
885
+ {
886
+ top: -18px;
887
+ left: 50%;
888
+ transform: translateX(-50%);
889
+ }
890
+ }
891
+
892
+ &.drop-inside
893
+ {
894
+ &::before
895
+ {
896
+ top: 50%;
897
+ left: 0px;
898
+ right: 0px;
899
+ transform: translateY(-50%);
900
+ height: var(--droppable-line-size);
901
+ }
902
+
903
+ &::after
904
+ {
905
+ top: 50%;
906
+ left: 50%;
907
+ transform: translateX(-50%) translateY(-50%);
908
+ }
909
+ }
910
+
911
+ &.drop-left
912
+ {
913
+ margin-left: var(--droppable-margin);
914
+
915
+ &::before
916
+ {
917
+ left: -12px;
918
+ top: 0px;
919
+ bottom: 0px;
920
+ width: var(--droppable-line-size);
921
+ }
922
+
923
+ &::after
924
+ {
925
+ left: -18px;
926
+ top: 50%;
927
+ transform: translateY(-50%);
928
+ }
929
+ }
930
+
931
+ &.drop-right
932
+ {
933
+ & + .form-field
934
+ {
935
+ margin-left: var(--droppable-margin);
936
+ }
937
+
938
+ &::before
939
+ {
940
+ right: -12px;
941
+ top: 0px;
942
+ bottom: 0px;
943
+ width: var(--droppable-line-size);
944
+ }
945
+
946
+ &::after
947
+ {
948
+ right: -18px;
949
+ top: 50%;
950
+ transform: translateY(-50%);
951
+ }
952
+ }
953
+
954
+ &.drop-denied
955
+ {
956
+ opacity: 0.6;
957
+ }
958
+ }
959
+
960
+ & .option-item.droppable:not(.drag-ghost).drop-below + .option-item
961
+ {
962
+ margin-top: var(--droppable-margin);
963
+ }
964
+
965
+ & .line-break
966
+ {
967
+ display: block;
968
+ min-width: 100%;
969
+ height: 0;
970
+ font-size: 0;
971
+ margin: 0;
972
+ padding: 0;
973
+ }
974
+
975
+ & .build-block
976
+ {
977
+ display: flex;
978
+ position: relative;
979
+ flex: 1;
980
+ align-items: center;
981
+ justify-content: flex-start;
982
+ cursor: grab;
983
+ border-style: solid;
984
+ padding: 0;
985
+ padding-left: 10px;
986
+ padding-right: 30px;
987
+ margin: 0.5rem 40px 0px 0.5rem;
988
+ font-size: 0.8rem;
989
+ touch-action: none;
990
+
991
+ &:not(:has(~ .build-block))
992
+ {
993
+ margin-bottom: 0.5rem;
994
+ }
995
+
996
+ & i.icon
997
+ {
998
+ width: 32px;
999
+ height: 32px;
1000
+ text-align: center;
1001
+ line-height: 32px;
1002
+ cursor: grab;
1003
+ }
1004
+
1005
+ & > a.button.theme
1006
+ {
1007
+ position: absolute;
1008
+ top: -1px;
1009
+ bottom: -1px;
1010
+ right: -36px;
1011
+ display: flex;
1012
+ align-items: center;
1013
+ justify-content: center;
1014
+ }
1015
+ }
1016
+
1017
+ & .drag-handle
1018
+ {
1019
+ width: 16px;
1020
+ display: flex;
1021
+ flex-direction: column;
1022
+ gap: 3px;
1023
+ justify-content: center;
1024
+ align-items: center;
1025
+ cursor: grab;
1026
+ touch-action: none;
1027
+
1028
+ & b
1029
+ {
1030
+ width: 4px;
1031
+ height: 4px;
1032
+ border-radius: 50%;
1033
+ position: relative;
1034
+
1035
+ &::before,
1036
+ &::after
1037
+ {
1038
+ content: "";
1039
+ position: absolute;
1040
+ }
1041
+
1042
+ &::before
1043
+ {
1044
+ width: 4px;
1045
+ height: 4px;
1046
+ border-radius: 50%;
1047
+ left: -7px;
1048
+ }
1049
+ }
1050
+ }
1051
+
1052
+ & .drag-ghost
1053
+ {
1054
+ opacity: 0.8;
1055
+ cursor: grab;
1056
+ z-index: 1;
1057
+
1058
+ &.option-item-ghost
1059
+ {
1060
+ height: 36px;
1061
+ line-height: 36px;
1062
+ padding: 4px;
1063
+ box-sizing: border-box;
1064
+ min-width: var(--field-option-drag-ghost-width);
1065
+ max-width: var(--field-option-drag-ghost-width);
1066
+ overflow: hidden;
1067
+ white-space: nowrap;
1068
+ text-overflow: ellipsis;
1069
+ border-style: solid;
1070
+ }
1071
+
1072
+ &.droppable
1073
+ {
1074
+ opacity: 1;
1075
+ cursor: grabbing;
1076
+
1077
+ & > *
1078
+ {
1079
+ opacity: 1;
1080
+ cursor: grabbing;
1081
+ }
1082
+
1083
+ &.drop-denied
1084
+ {
1085
+ cursor: no-drop;
1086
+
1087
+ & *
1088
+ {
1089
+ cursor: no-drop;
1090
+ }
1091
+ }
1092
+
1093
+ &:not(.drop-above):not(drop-below) > .field-options
1094
+ {
1095
+ cursor: no-drop;
1096
+ }
1097
+ }
1098
+
1099
+ & > .build-block
1100
+ {
1101
+ margin: 0px;
1102
+ }
1103
+
1104
+ &.field-set
1105
+ {
1106
+ max-height: 30px;
1107
+ max-width: 200px;
1108
+ padding: 1rem;
1109
+ border-width: 1px;
1110
+ }
1111
+ }
1112
+
1113
+ &.fixed-layout
1114
+ {
1115
+ & .build-pane,
1116
+ & .config-pane
1117
+ {
1118
+ position: fixed;
1119
+ z-index: var(--z-index);
1120
+ top: calc(var(--header-height) + var(--fixed-layout-offset-top));
1121
+ bottom: var(--fixed-layout-offset-bottom);
1122
+ left: var(--fixed-layout-offset-left);
1123
+ }
1124
+
1125
+ & .config-pane
1126
+ {
1127
+ left: auto;
1128
+ right: var(--fixed-layout-offset-right);
1129
+ }
1130
+
1131
+ & .form-pane
1132
+ {
1133
+ margin-left: var(--build-pane-width);
1134
+ margin-right: var(--config-pane-width);
1135
+ margin-top: var(--fixed-layout-offset-top);
1136
+ transition: margin 0.3s ease;
1137
+ }
1138
+
1139
+ &:has(nav.sections) .form-pane
1140
+ {
1141
+ margin-top: 0;
1142
+ }
1143
+
1144
+ &:has(.build-pane.pane-hidden) .form-pane
1145
+ {
1146
+ margin-left: 0;
1147
+ }
1148
+
1149
+ &:has(.config-pane.pane-hidden) .form-pane
1150
+ {
1151
+ margin-right: 0;
1152
+ }
1153
+ }
1154
+
1155
+ & .build-pane
1156
+ {
1157
+ flex-shrink: 0;
1158
+ user-select: none;
1159
+ position: relative;
1160
+ width: var(--build-pane-width);
1161
+ min-width: var(--build-pane-width);
1162
+ transition: all 0.3s ease;
1163
+
1164
+ &.pane-hidden
1165
+ {
1166
+ margin-left: calc(-1 * var(--build-pane-width));
1167
+ }
1168
+
1169
+ & .edge-top
1170
+ {
1171
+ top: 0.5rem;
1172
+ right: -50px;
1173
+ }
1174
+
1175
+ & .edge-bottom
1176
+ {
1177
+ bottom: 0.5rem;
1178
+ right: -50px;
1179
+ }
1180
+ }
1181
+
1182
+ & .config-pane
1183
+ {
1184
+ position: relative;
1185
+ width: var(--config-pane-width);
1186
+ min-width: var(--config-pane-width);
1187
+ transition: all 0.3s ease;
1188
+
1189
+ &.pane-hidden
1190
+ {
1191
+ margin-right: calc(-1 * var(--config-pane-width));
1192
+ }
1193
+
1194
+ &:has(> .panel-bar > .rules-panel.expanded)
1195
+ {
1196
+ width: var(--config-pane-expanded-width);
1197
+ }
1198
+
1199
+ & .edge-top
1200
+ {
1201
+ top: 0.5rem;
1202
+ left: -50px;
1203
+ }
1204
+
1205
+ & .edge-bottom
1206
+ {
1207
+ bottom: 0.5rem;
1208
+ left: -50px;
1209
+ }
1210
+
1211
+ & .field-options
1212
+ {
1213
+ display: flex;
1214
+ flex-direction: column;
1215
+ width: 100%;
1216
+ gap: 2px;
1217
+ font-size: 0.8rem;
1218
+ }
1219
+
1220
+ & .option-header,
1221
+ & .option-item
1222
+ {
1223
+ display: grid;
1224
+ position: relative;
1225
+ grid-template-columns: 32px 2fr 2fr 1fr 1fr 32px;
1226
+ align-items: center;
1227
+
1228
+ & > div
1229
+ {
1230
+ padding: 4px;
1231
+ vertical-align: middle;
1232
+
1233
+ &:first-child,
1234
+ &:last-child
1235
+ {
1236
+ width: 32px;
1237
+ }
1238
+ }
1239
+ }
1240
+
1241
+ & .option-header > div
1242
+ {
1243
+ font-weight: bold;
1244
+ text-align: left;
1245
+ white-space: nowrap;
1246
+ overflow: hidden;
1247
+ text-overflow: ellipsis;
1248
+ }
1249
+
1250
+ & .option-item
1251
+ {
1252
+ border-top-style: solid;
1253
+ border-radius: 0;
1254
+ padding: 2px 0;
1255
+
1256
+ & > div
1257
+ {
1258
+ & input[type="text"]
1259
+ {
1260
+ width: 100%;
1261
+ box-sizing: border-box;
1262
+ padding: 4px;
1263
+ min-width: 0;
1264
+ }
1265
+
1266
+ & input[type="checkbox"],
1267
+ & input[type="radio"]
1268
+ {
1269
+ display: block;
1270
+ margin: 0 auto;
1271
+ }
1272
+
1273
+ &:last-child
1274
+ {
1275
+ text-align: center;
1276
+ padding: 4px;
1277
+ }
1278
+ }
1279
+ }
1280
+
1281
+ & .option-new
1282
+ {
1283
+ opacity: 0.6;
1284
+ }
1285
+
1286
+ & .config-choice-group
1287
+ {
1288
+ display: flex;
1289
+
1290
+ & > .form-field
1291
+ {
1292
+ flex: 1 0 25%;
1293
+ }
1294
+ }
1295
+
1296
+ & .button.more-settings
1297
+ {
1298
+ margin-top: 10px;
1299
+ margin-bottom: 10px;
1300
+ display: flex;
1301
+ }
1302
+
1303
+ & .form-field .combo-box
1304
+ {
1305
+ width: 100%;
1306
+ }
1307
+
1308
+ & .combo-box,
1309
+ & .numeric-box
1310
+ {
1311
+ margin-right: 4px;
1312
+ }
1313
+
1314
+ & .combo-box.val-compare-operator
1315
+ {
1316
+ width: 150px;
1317
+ }
1318
+
1319
+ & .combo-box.val-compare-field
1320
+ {
1321
+ width: calc(100% - 158px);
1322
+ }
1323
+
1324
+ & .allowed-list
1325
+ {
1326
+ & > .date-picker.theme,
1327
+ & > .time-picker.theme
1328
+ {
1329
+ display: inline-flex;
1330
+ }
1331
+
1332
+ & ul
1333
+ {
1334
+ list-style: none;
1335
+ margin: 10px;
1336
+
1337
+ & > li
1338
+ {
1339
+ padding: 5px;
1340
+ border-top-style: solid;
1341
+ border-radius: 0;
1342
+ }
1343
+ }
1344
+ }
1345
+ }
1346
+
1347
+ & .pane-hidden > .panel-bar.theme
1348
+ {
1349
+ box-shadow: none;
1350
+ }
1351
+
1352
+ & .edge-top,
1353
+ & .edge-bottom
1354
+ {
1355
+ position: absolute;
1356
+ z-index: 1;
1357
+ display: flex;
1358
+ flex-direction: column;
1359
+ }
1360
+
1361
+ & .panel-bar
1362
+ {
1363
+ & > .panel > header > span.title::before
1364
+ {
1365
+ content: '';
1366
+ font-family: 'UI';
1367
+ margin-right: 8px;
1368
+ }
1369
+
1370
+ & > .fields-panel > header > span.title::before
1371
+ {
1372
+ content: var(--cui-ico-table-list);
1373
+ }
1374
+
1375
+ & > .content-panel > header > span.title::before
1376
+ {
1377
+ content: var(--cui-ico-table-cells);
1378
+ }
1379
+
1380
+ & > .navigator-panel
1381
+ {
1382
+ & > header > span.title::before
1383
+ {
1384
+ font-family: 'ComponentIcons' !important;
1385
+ content: var(--cui-ico-com-menu-tree);
1386
+ }
1387
+
1388
+ & > .content > div:has(input)
1389
+ {
1390
+ position: sticky;
1391
+ top: 0px;
1392
+ padding: 10px;
1393
+ z-index: 2;
1394
+ }
1395
+ }
1396
+
1397
+ & > .fieldset-panel > header > span.title::before
1398
+ {
1399
+ content: var(--cui-ico-group);
1400
+ }
1401
+
1402
+ & > .field-panel > header > span.title::before
1403
+ {
1404
+ content: var(--cui-ico-text);
1405
+ }
1406
+
1407
+ & > .content-field-panel > header > span.title::before
1408
+ {
1409
+ font-family: 'ComponentIcons' !important;
1410
+ content: var(--cui-ico-com-editor);
1411
+ }
1412
+
1413
+ & > .spacer-field-panel > header > span.title::before
1414
+ {
1415
+ content: var(--cui-ico-divider);
1416
+ }
1417
+
1418
+ & > .field-options-panel > header > span.title::before
1419
+ {
1420
+ content: var(--cui-ico-checkbox);
1421
+ }
1422
+
1423
+ & > .component-panel > header > span.title::before
1424
+ {
1425
+ content: var(--cui-ico-cog);
1426
+ }
1427
+
1428
+ & > .validation-panel > header > span.title::before
1429
+ {
1430
+ font-family: 'ComponentIcons';
1431
+ content: var(--cui-ico-com-validator);
1432
+ }
1433
+
1434
+ & > .rules-panel
1435
+ {
1436
+ & > header > span.title::before
1437
+ {
1438
+ content: var(--cui-ico-chip);
1439
+ }
1440
+
1441
+ & > .content
1442
+ {
1443
+ counter-reset: rule-case-counter;
1444
+
1445
+ & > :first-child
1446
+ {
1447
+ margin-top: 0.5rem;
1448
+ }
1449
+
1450
+ & .rule-groups,
1451
+ & .actions
1452
+ {
1453
+ margin-top: 0.5rem;
1454
+ margin-bottom: 0.5rem;
1455
+ }
1456
+
1457
+ & .rule-case
1458
+ {
1459
+ counter-increment: rule-case-counter;
1460
+
1461
+ & > header
1462
+ {
1463
+ display: flex;
1464
+ align-items: center;
1465
+ border-bottom-style: solid;
1466
+ margin-bottom: 0.5rem;
1467
+
1468
+ & > span::after
1469
+ {
1470
+ content: ' #' counter(rule-case-counter);
1471
+ }
1472
+
1473
+ & > *
1474
+ {
1475
+ margin-left: 0.5rem;
1476
+ }
1477
+ }
1478
+
1479
+ & > div
1480
+ {
1481
+ padding: 10px;
1482
+ margin-left: 10px;
1483
+ border-style: solid;
1484
+
1485
+ & > .button.add
1486
+ {
1487
+ margin-top: 0.5rem;
1488
+ }
1489
+ }
1490
+ }
1491
+
1492
+ & .actions
1493
+ {
1494
+ counter-reset: action-counter;
1495
+
1496
+ & > header
1497
+ {
1498
+ display: flex;
1499
+ align-items: center;
1500
+ border-bottom-style: solid;
1501
+ margin-bottom: 0.5rem;
1502
+
1503
+ & > *
1504
+ {
1505
+ margin-left: 0.5rem;
1506
+ }
1507
+ }
1508
+
1509
+ & > .action
1510
+ {
1511
+ display: flex;
1512
+ align-items: center;
1513
+ flex-wrap: wrap;
1514
+ gap: 4px;
1515
+
1516
+ &::before
1517
+ {
1518
+ counter-increment: action-counter;
1519
+ content: '#' counter(action-counter) ' ';
1520
+ }
1521
+
1522
+ &.follow-up::before
1523
+ {
1524
+ content: "→ #" counter(action-counter) ' ';
1525
+ }
1526
+ }
1527
+ }
1528
+
1529
+ & .rule-groups
1530
+ {
1531
+ &:empty::before
1532
+ {
1533
+ content: attr(data-placeholder);
1534
+ display: block;
1535
+ font-style: italic;
1536
+ pointer-events: none;
1537
+ }
1538
+
1539
+ & > .rule-group
1540
+ {
1541
+ margin-bottom: 0.5rem;
1542
+ border-style: solid;
1543
+ padding: 4px;
1544
+ margin-bottom: 4px;
1545
+
1546
+ & > div.rules:not(:empty)
1547
+ {
1548
+ padding: 4px;
1549
+ margin-bottom: 4px;
1550
+ }
1551
+ }
1552
+ }
1553
+
1554
+ & .rule-value
1555
+ {
1556
+ display: inline-flex;
1557
+ }
1558
+
1559
+ & .action-value
1560
+ {
1561
+ display: flex;
1562
+ flex: 1;
1563
+ margin-bottom: 0.5rem;
1564
+
1565
+ & textarea
1566
+ {
1567
+ flex: 1;
1568
+ max-height: 100px;
1569
+ resize: vertical;
1570
+ }
1571
+ }
1572
+
1573
+ & .expression
1574
+ {
1575
+ flex: 1;
1576
+ display: flex;
1577
+ align-items: flex-start;
1578
+ gap: 4px;
1579
+
1580
+ & .expr-controls
1581
+ {
1582
+ display: flex;
1583
+ flex-direction: column;
1584
+ gap: 4px;
1585
+ }
1586
+ }
1587
+
1588
+ & .form-field.rule-case-trigger
1589
+ {
1590
+ margin-bottom: 0.5rem;
1591
+
1592
+ & .combo-box
1593
+ {
1594
+ width: 180px;
1595
+ }
1596
+ }
1597
+
1598
+ & .rule
1599
+ {
1600
+ display: flex;
1601
+ flex-wrap: wrap;
1602
+ align-items: flex-start;
1603
+
1604
+ & > .rule-value
1605
+ {
1606
+ flex: 1;
1607
+
1608
+ & > input
1609
+ {
1610
+ width: 100%;
1611
+ min-width: 0;
1612
+ }
1613
+ }
1614
+ }
1615
+
1616
+ & .combo-box
1617
+ {
1618
+ &.rule-field
1619
+ {
1620
+ width: 180px;
1621
+ }
1622
+
1623
+ &.rule-comparison-operator
1624
+ {
1625
+ width: 160px;
1626
+ }
1627
+
1628
+ &.logical-operator
1629
+ {
1630
+ width: 130px;
1631
+ }
1632
+ }
1633
+ }
1634
+ }
1635
+ }
1636
+
1637
+ & .icon.ico-validator::before
1638
+ {
1639
+ font-family: 'ComponentIcons';
1640
+ content: var(--cui-ico-com-validator);
1641
+ }
1642
+
1643
+ &:has(.build-pane.pane-hidden) .button.theme.toggle-build-pane .icon::before
1644
+ {
1645
+ content: var(--cui-ico-arrow-r-bracket);
1646
+ }
1647
+
1648
+ &:has(.config-pane.pane-hidden) .button.theme.toggle-config-pane .icon::before
1649
+ {
1650
+ content: var(--cui-ico-arrow-l-bracket);
1651
+ }
1652
+
1653
+ & .empty
1654
+ {
1655
+ font-style: italic;
1656
+ }
1657
+
1658
+ & .box
1659
+ {
1660
+ z-index: calc(var(--z-index) + 1);
1661
+ }
1662
+
1663
+ & .tooltip-manager.theme .box.tooltip.field-tooltip
1664
+ {
1665
+ z-index: calc(var(--z-index) + 2);
1666
+
1667
+ & > div.content
1668
+ {
1669
+ max-width: 300px;
1670
+ white-space: normal;
1671
+ }
1672
+ }
1673
+
1674
+ & .feedback
1675
+ {
1676
+ font-size: 0.85rem;
1677
+ }
1678
+
1679
+ & .save-status
1680
+ {
1681
+ display: inline-flex;
1682
+ align-items: center;
1683
+ white-space: nowrap;
1684
+ margin-right: 0.5rem;
1685
+
1686
+ & .spinner
1687
+ {
1688
+ align-items: center;
1689
+ justify-content: center;
1690
+ height: 16px;
1691
+ width: 16px;
1692
+ border-radius: 50%;
1693
+ border-width: 2px;
1694
+ border-style: solid;
1695
+ box-sizing: border-box;
1696
+ position: relative;
1697
+ font-family: sans-serif;
1698
+ font-size: 12px;
1699
+ display: inline-flex;
1700
+ animation: none;
1701
+ }
1702
+
1703
+ &.busy .spinner
1704
+ {
1705
+ animation: spin 0.8s linear infinite;
1706
+ }
1707
+
1708
+ &.success,
1709
+ &.failed
1710
+ {
1711
+ & .spinner
1712
+ {
1713
+ animation: none;
1714
+ }
1715
+ }
1716
+
1717
+ &.success
1718
+ {
1719
+ & .spinner::before
1720
+ {
1721
+ content: '';
1722
+ position: absolute;
1723
+ width: 3px;
1724
+ height: 6px;
1725
+ margin-top: -2px;
1726
+ border-style: solid;
1727
+ border-width: 0 2px 2px 0;
1728
+ transform: rotate(45deg) scale(0);
1729
+ transition: transform 0.3s ease;
1730
+ }
1731
+
1732
+ &.cui-animation
1733
+ {
1734
+ & .spinner::before
1735
+ {
1736
+ transform: rotate(45deg) scale(1);
1737
+ }
1738
+
1739
+ &::after
1740
+ {
1741
+ content: attr(data-success);
1742
+ opacity: 1;
1743
+ transition: opacity 0.3s ease;
1744
+ }
1745
+ }
1746
+ }
1747
+
1748
+ &.failed
1749
+ {
1750
+ & .spinner
1751
+ {
1752
+ &::before,
1753
+ &::after
1754
+ {
1755
+ content: '';
1756
+ position: absolute;
1757
+ width: 8px;
1758
+ height: 2px;
1759
+ top: 50%;
1760
+ left: 50%;
1761
+ transform-origin: center;
1762
+ transform: scale(0);
1763
+ transition: transform 0.3s ease;
1764
+ }
1765
+
1766
+ &::before
1767
+ {
1768
+ transform: translate(-50%, -50%) rotate(45deg) scale(0);
1769
+ }
1770
+
1771
+ &::after
1772
+ {
1773
+ transform: translate(-50%, -50%) rotate(-45deg) scale(0);
1774
+ }
1775
+ }
1776
+
1777
+ &.cui-animation
1778
+ {
1779
+ & .spinner
1780
+ {
1781
+ &::before,
1782
+ &::after
1783
+ {
1784
+ transform: translate(-50%, -50%) rotate(45deg) scale(1);
1785
+ }
1786
+
1787
+ &::after
1788
+ {
1789
+ transform: translate(-50%, -50%) rotate(-45deg) scale(1);
1790
+ }
1791
+ }
1792
+
1793
+ &::after
1794
+ {
1795
+ content: attr(data-failed);
1796
+ opacity: 1;
1797
+ transition: opacity 0.3s ease;
1798
+ }
1799
+ }
1800
+ }
1801
+
1802
+ &::after
1803
+ {
1804
+ opacity: 0;
1805
+ display: inline-block;
1806
+ font-size: 0.85rem;
1807
+ margin-left: 4px;
1808
+ }
1809
+
1810
+ &.busy::after
1811
+ {
1812
+ content: attr(data-busy);
1813
+ opacity: 1;
1814
+ }
1815
+
1816
+ &.cui-animation
1817
+ {
1818
+ opacity: 0;
1819
+ transition: opacity 1s 2s ease;
1820
+ }
1821
+ }
1822
+
1823
+ & .step-indicator
1824
+ {
1825
+ counter-reset: step-counter;
1826
+ display: flex;
1827
+ align-items: center;
1828
+ justify-content: space-around;
1829
+ position: relative;
1830
+ margin-top: 15px;
1831
+ margin-bottom: 30px;
1832
+ margin-left: 30px;
1833
+ margin-right: 30px;
1834
+
1835
+ & .step
1836
+ {
1837
+ flex: 1;
1838
+ height: 4px;
1839
+ display: flex;
1840
+ justify-content: right;
1841
+ align-items: center;
1842
+ position: relative;
1843
+ margin-left: 5px;
1844
+ transition: all 2s;
1845
+
1846
+ &:first-child
1847
+ {
1848
+ flex: 0;
1849
+ }
1850
+
1851
+ &::before
1852
+ {
1853
+ counter-increment: step-counter;
1854
+ content: counter(step-counter);
1855
+ display: flex;
1856
+ align-items: center;
1857
+ justify-content: center;
1858
+ border-radius: 100%;
1859
+ width: 30px;
1860
+ height: 30px;
1861
+ z-index: 1;
1862
+ }
1863
+
1864
+ &::after
1865
+ {
1866
+ content: '';
1867
+ position: absolute;
1868
+ left: 0;
1869
+ height: 4px;
1870
+ width: calc(100% - 35px);
1871
+ transition: all 2s;
1872
+ }
1873
+
1874
+ &.step-active
1875
+ {
1876
+ &::after
1877
+ {
1878
+ animation-name: width-animation;
1879
+ animation-duration: 1s;
1880
+ }
1881
+
1882
+ & > span
1883
+ {
1884
+ font-weight: bold;
1885
+ }
1886
+ }
1887
+
1888
+ & > span
1889
+ {
1890
+ position: absolute;
1891
+ bottom: -40px;
1892
+ left: calc(100% - 15px);
1893
+ transform: translateX(-50%);
1894
+ font-size: 0.85rem;
1895
+ white-space: nowrap;
1896
+ }
1897
+ }
1898
+ }
1899
+ }
1900
+
1901
+ @keyframes spin
1902
+ {
1903
+ to
1904
+ {
1905
+ transform: rotate(360deg);
1906
+ }
1907
+ }
1908
+
1909
+ @keyframes width-animation
1910
+ {
1911
+ from
1912
+ {
1913
+ width: 0px;
1914
+ }
1915
+
1916
+ to
1917
+ {
1918
+ width: calc(100% - 35px);
1919
+ }
1920
+ }
1921
+
1922
+ @media (max-width: 600px)
1923
+ {
1924
+ .form.theme .save-status
1925
+ {
1926
+ position: fixed;
1927
+ margin: 0;
1928
+ bottom: 12px;
1929
+ right: 12px;
1930
+ width: auto;
1931
+ padding: 6px 10px;
1932
+ z-index: 1;
1933
+ }
1934
+ }