@c8y/style 1023.85.1 → 1023.88.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.
Files changed (41) hide show
  1. package/helper-scripts/convert-scss-to-less.sh +2 -4
  2. package/img/alarms/alarm-list-widget.png +0 -0
  3. package/img/asset-table-pr.png +0 -0
  4. package/img/data-points-list-widget.png +0 -0
  5. package/img/data-points-table-widget.png +0 -0
  6. package/img/datapoints-graph-widget.png +0 -0
  7. package/img/device-control-message-widget.png +0 -0
  8. package/img/event-list-widget.png +0 -0
  9. package/img/html-widget-pr.png +0 -0
  10. package/img/image-widget.png +0 -0
  11. package/img/info-gauge-widget-pr.png +0 -0
  12. package/img/kpi-widget.png +0 -0
  13. package/img/linear-gauge-widget-pr.png +0 -0
  14. package/img/map-widget-pr.png +0 -0
  15. package/img/markdown-widget.png +0 -0
  16. package/img/pie-chart-widget-pr.png +0 -0
  17. package/img/quick-links-widget.png +0 -0
  18. package/img/radial-gauge-pr.png +0 -0
  19. package/img/rotation-widget-pr.png +0 -0
  20. package/img/silo-widget-pr.png +0 -0
  21. package/img/welcome-widget-pr.png +0 -0
  22. package/markdown-files/data-prep-preview.md +54 -0
  23. package/package.json +1 -1
  24. package/styles/base/_type.less +0 -1
  25. package/styles/components/_markdown-content.less +21 -4
  26. package/styles/components/_markdown-content.scss +22 -0
  27. package/styles/components/data-display-and-visualization/lists/_c8y-list-group.less +4 -2
  28. package/styles/components/data-display-and-visualization/lists/_c8y-list-group.scss +4 -8
  29. package/styles/components/data-display-and-visualization/lists/_list-group.less +0 -1
  30. package/styles/components/navigation-and-layout/navigation/_pagination.less +0 -1
  31. package/styles/core/forms/_forms.less +0 -1
  32. package/styles/core/forms/_input-groups.less +0 -2
  33. package/styles/core/overlays/_c8y-dashboard-modal.less +0 -2
  34. package/styles/core/overlays/_c8y-wizard.less +0 -1
  35. package/styles/dashboard/_c8y-dashboard-style.less +26 -12
  36. package/styles/dashboard/_c8y-dashboard-style.scss +17 -6
  37. package/styles/icons/_c8y-icons.less +6 -1
  38. package/styles/icons/_c8y-icons.scss +5 -0
  39. package/styles/icons/_dlt-c8y-icons.less +0 -1
  40. package/styles/vendor/datepicker/_bs-datepicker.less +0 -1
  41. package/variables/_forms-vars.less +1 -0
@@ -105,8 +105,7 @@ convert_syntax() {
105
105
  print_info "Removing SCSS-specific @use imports and redundant variable @use imports"
106
106
  fi
107
107
  content=$(echo "$content" | sed '/^@use[[:space:]]*["'"'"']sass:/d')
108
- content=$(echo "$content" | sed '/^@use[[:space:]]*["'"'"'][^"'"'"']*variables\/index["'"'"']/d')
109
- content=$(echo "$content" | sed '/^@use[[:space:]]*["'"'"'][^"'"'"']*variables\/_login-vars["'"'"']/d')
108
+ content=$(echo "$content" | sed '/^@use[[:space:]]*["'"'"'][^"'"'"']*variables\/[^"'"'"']*["'"'"']/d')
110
109
 
111
110
  # 0b. Convert string.unquote() to ~'' BEFORE other conversions
112
111
  if [[ $VERBOSE == true ]]; then
@@ -178,8 +177,7 @@ convert_syntax() {
178
177
  print_info "Removing redundant variable imports (LESS has global scope)"
179
178
  fi
180
179
  # Remove any import of variables/index.less or _login-vars.less
181
- content=$(echo "$content" | sed -E '/@import[[:space:]]+.*variables\/index\.less/d')
182
- content=$(echo "$content" | sed -E '/@import[[:space:]]+.*variables\/_login-vars\.less/d')
180
+ content=$(echo "$content" | sed -E '/@import[[:space:]]+.*variables\//d')
183
181
 
184
182
  # 1. Remove @content keyword (LESS doesn't support it)
185
183
  # Mixins with @content need manual expansion - just remove the keyword itself
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,54 @@
1
+  
2
+
3
+ ### Data Preparation
4
+
5
+  
6
+
7
+ Data Preparation provides an AI-assisted environment for creating and managing transformation rules that convert raw device messages into the Cumulocity data model.
8
+
9
+ IoT devices send data in many different formats, from simple JSON payloads to device-specific message structures. Data Preparation empowers you to standardize this data before it is used by Cumulocity applications and services.
10
+
11
+ Data Preparation uses smart functions to process incoming messages and produce Cumulocity-compliant measurements, events, alarms, or managed objects. The AI assistant helps you describe your business context and generate JavaScript-based transformation logic, which you can review, edit, test, and deploy as part of a rule.
12
+
13
+  
14
+
15
+ ### Prerequisites
16
+
17
+  
18
+
19
+ ✅ **AI Provider:**
20
+
21
+ - Enable the AI Agent Manager public preview (available next to this Data Preparation preview feature).
22
+ - Configure a global AI provider in the Agent Manager. See [Getting started by configuring a global provider](https://cumulocity.com/docs/ai/aim-introduction/#getting-started-by-configuring-a-global-provider).
23
+
24
+ ✅ **Permissions:**
25
+ To get started, ensure your user role is configured with the following ADMIN permissions:
26
+
27
+ - **Data Preparation rules** – Create, edit, and delete draft rules.
28
+ - **Data Preparation deployments** – Deploy rules in production.
29
+
30
+ By default, both permissions are included in the "Admin" role.
31
+
32
+  
33
+
34
+ ### Why use Data Preparation?
35
+
36
+  
37
+
38
+ ✅ **Convert raw device payloads:** Transform incoming messages into standard Cumulocity measurements, events, alarms, and managed objects.
39
+
40
+ ✅ **Use AI-assisted rule creation:** Describe the required transformation in natural language, or automatically generate the transformation from your device data.
41
+
42
+ ✅ **Validate before deployment:** Test transformations with sample payloads or live MQTT messages and compare the generated Cumulocity output before deploying.
43
+
44
+ ✅ **Process live MQTT traffic:** Deploy rules that listen to MQTT Service topics and process matching incoming messages automatically.
45
+
46
+ ✅ **Prepare data for use by other applications:** Normalize raw device messages into Cumulocity-compliant objects before they are used by applications such as Streaming Analytics.
47
+
48
+  
49
+
50
+ For step-by-step onboarding and first rule deployment, refer to the [Getting started](https://cumulocity.com/docs/data-preparation/getting-started-dataprep/#create-rule) section in the Data Preparation documentation.
51
+
52
+  
53
+
54
+ For more details, refer to the [Data Preparation documentation](https://cumulocity.com/docs/data-preparation/data-preparation-introduction/#datapreparation).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c8y/style",
3
- "version": "1023.85.1",
3
+ "version": "1023.88.1",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Cumulocity GmbH",
6
6
  "description": "Styles for Cumulocity IoT applications",
@@ -1,4 +1,3 @@
1
- @import "../../variables/_dlt-c8y-icons-vars.less";
2
1
  @import "../mixins/_text-overflow.less";
3
2
 
4
3
  /**
@@ -13,9 +13,6 @@
13
13
  * - Font-weight values (500, 600): Typography weights
14
14
  */
15
15
 
16
- // NOTE: SCSS mixin with @content removed - manually expanded below
17
- // @mixin heading-elements was used in SCSS but LESS doesn't support @content
18
-
19
16
  .markdown-content {
20
17
  h1,
21
18
  h2,
@@ -29,7 +26,6 @@
29
26
  max-width: 800px;
30
27
  }
31
28
 
32
- // Manually expanded from @include heading-elements mixin
33
29
  h1,
34
30
  h2,
35
31
  h3,
@@ -75,4 +71,25 @@
75
71
  opacity: 0.65;
76
72
  }
77
73
  }
74
+
75
+ table{
76
+ &:extend(.table);
77
+ }
78
+ }
79
+
80
+ // ignore max width when used in the widget
81
+ c8y-markdown-widget-view,
82
+ c8y-widget-preview{
83
+ .markdown-content {
84
+ h1,
85
+ h2,
86
+ h3,
87
+ h4,
88
+ h5,
89
+ p,
90
+ ul,
91
+ ol {
92
+ max-width: unset;
93
+ }
94
+ }
78
95
  }
@@ -1,5 +1,6 @@
1
1
  @use "../../variables/index" as *;
2
2
 
3
+ @use "data-display-and-visualization/tables/tables" as *;
3
4
  /**
4
5
  * Markdown Content - Styling for markdown rendered content
5
6
  *
@@ -79,4 +80,25 @@
79
80
  opacity: 0.65;
80
81
  }
81
82
  }
83
+
84
+ table{
85
+ @extend .table;
86
+ }
87
+ }
88
+
89
+ // ignore max width when used in the widget
90
+ c8y-markdown-widget-view,
91
+ c8y-widget-preview{
92
+ .markdown-content {
93
+ h1,
94
+ h2,
95
+ h3,
96
+ h4,
97
+ h5,
98
+ p,
99
+ ul,
100
+ ol {
101
+ max-width: unset;
102
+ }
103
+ }
82
104
  }
@@ -1,5 +1,4 @@
1
1
 
2
- @import "../../../../variables/_dlt-c8y-icons-vars.less";
3
2
  @import "../../../animations/_component-animations.less";
4
3
  @import "../../../core/buttons/_buttons.less";
5
4
  @import "../../../mixins/_tab-focus.less";
@@ -158,7 +157,7 @@
158
157
  > .expanded,
159
158
  &.expanded {
160
159
  background-color: @component-background-expanded;
161
- &:extend(.separator-bottom);
160
+ .separator-bottom();
162
161
  --c8y-nav-tabs-background-active: @{component-background-expanded};
163
162
 
164
163
  .c8y-list__item__title {
@@ -541,6 +540,9 @@ c8y-li-drag-handle, c8y-list-item-drag-handle {
541
540
  }
542
541
  .full-w-collapse &{
543
542
  padding: @component-padding;
543
+ c8y-widget-config-section &{
544
+ padding-top: 0;
545
+ }
544
546
  }
545
547
  }
546
548
 
@@ -4,7 +4,7 @@
4
4
  @use "../../../animations/component-animations";
5
5
  @use "../../../core/buttons/buttons";
6
6
  @use "../../../mixins/tab-focus";
7
-
7
+ @use "../../../utilities/separators";
8
8
  /**
9
9
  * C8Y List Group - Modern list component with flexible layouts
10
10
  *
@@ -542,6 +542,9 @@ c8y-li-drag-handle, c8y-list-item-drag-handle {
542
542
  }
543
543
  .full-w-collapse &{
544
544
  padding: $component-padding;
545
+ c8y-widget-config-section &{
546
+ padding-top: 0;
547
+ }
545
548
  }
546
549
  }
547
550
 
@@ -634,14 +637,7 @@ c8y-li-drag-handle, c8y-list-item-drag-handle {
634
637
  content: '';
635
638
  transition: top 0.35s linear;
636
639
  }
637
- //TODO: need to fix this when using the virtual scroll, for now let's leave it as is
638
- // &:first-child::before {
639
- // top: 50%;
640
- // }
641
640
 
642
- // &:last-of-type::before {
643
- // bottom: 50%;
644
- // }
645
641
  &::after {
646
642
  position: absolute;
647
643
  top: 50%;
@@ -1,4 +1,3 @@
1
- @import "../../../../variables/_dlt-c8y-icons-vars.less";
2
1
  @import "../../../mixins/_icon-base.less";
3
2
  @import "../../../mixins/_list-group.less";
4
3
  @import "../../../mixins/_tab-focus.less";
@@ -1,5 +1,4 @@
1
1
 
2
- @import "../../../../variables/_dlt-c8y-icons-vars.less";
3
2
  @import "../../../mixins/_icon-base.less";
4
3
  @import "../../../mixins/_pagination.less";
5
4
 
@@ -1,4 +1,3 @@
1
- @import "../../../variables/_dlt-c8y-icons-vars.less";
2
1
  @import "../../icons/_c8y-glyphs.less";
3
2
  @import "../../mixins/_c8y-scrollbar.less";
4
3
  @import "../../mixins/_forms.less";
@@ -1,5 +1,3 @@
1
- @import "../../../variables/_dlt-c8y-icons-vars.less";
2
-
3
1
  /**
4
2
  * Input Groups - Form input groups with addons and buttons
5
3
  *
@@ -1,6 +1,4 @@
1
1
 
2
- @import "../../../variables/_dlt-c8y-icons-vars.less";
3
-
4
2
  /**
5
3
  * C8Y Dashboard Modal - Dashboard selection modal styles
6
4
  *
@@ -1,4 +1,3 @@
1
- @import "../../../variables/_dlt-c8y-icons-vars.less";
2
1
  @import "../../mixins/_shadows-helper.less";
3
2
 
4
3
  /**
@@ -1,7 +1,5 @@
1
-
2
- @import "../../variables/_dlt-c8y-icons-vars.less";
3
- @import "../mixins/_c8y-scrollbar.less";
4
- @import "../mixins/_icon-base.less";
1
+ @import '../mixins/_c8y-scrollbar.less';
2
+ @import '../mixins/_icon-base.less';
5
3
 
6
4
  /**
7
5
  * Dashboard Styles - Grid-based dashboard layout with drag-and-drop
@@ -159,8 +157,6 @@ body.c8y-grid-dashboard > .card.card-dashboard.cdk-drag-preview {
159
157
  left: 0 !important;
160
158
  }
161
159
 
162
-
163
-
164
160
  .dashboard {
165
161
  top: 0;
166
162
  left: 0;
@@ -250,6 +246,25 @@ body fieldset > .dashboard-preview-slot {
250
246
  border: 0;
251
247
  padding: 0;
252
248
  margin: 0 !important;
249
+ flex-grow: 1;
250
+ min-height: 0;
251
+ grid-template-rows: repeat(1, 1fr);
252
+
253
+ .card-inner-scroll {
254
+ display: flex;
255
+ flex-direction: column;
256
+ overflow: hidden;
257
+
258
+ > * {
259
+ flex: 1 1 0;
260
+ min-height: 0;
261
+ }
262
+ }
263
+ c8y-local-controls,
264
+ c8y-global-context-widget-wrapper {
265
+ flex-grow: 0 !important;
266
+ min-height: min-content !important;
267
+ }
253
268
  }
254
269
 
255
270
  // title hidden
@@ -264,7 +279,6 @@ body fieldset > .dashboard-preview-slot {
264
279
  width: 100%;
265
280
  height: 0;
266
281
  border: 0;
267
- pointer-events: none;
268
282
  &:after {
269
283
  display: none;
270
284
  }
@@ -406,19 +420,19 @@ body fieldset > .dashboard-preview-slot {
406
420
  }
407
421
  }
408
422
  // Prevent interactions in dashboard preview slots except for maps
409
- .dashboard-preview-slot:not(:has(c8y-map)){
423
+ .dashboard-preview-slot:not(:has(c8y-map)) {
410
424
  pointer-events: none;
411
425
  cursor: forbidden;
412
426
  }
413
427
 
414
428
  // data-grid--custom-column-header- styles
415
429
  .dashboard-preview-slot,
416
- .card-dashboard{
417
- .table-data-grid-header > .h4{
430
+ .card-dashboard {
431
+ .table-data-grid-header > .h4 {
418
432
  display: none;
419
433
  }
420
- .content-fullpage{
421
- height: 100%!important;
434
+ .content-fullpage {
435
+ height: 100% !important;
422
436
  }
423
437
  c8y-asset-table-widget-view.hide-footer {
424
438
  .table-data-grid-footer {
@@ -252,6 +252,23 @@ body fieldset > .dashboard-preview-slot {
252
252
  border: 0;
253
253
  padding: 0;
254
254
  margin: 0 !important;
255
+ flex-grow: 1;
256
+ min-height: 0;
257
+ grid-template-rows: repeat(1, 1fr);
258
+
259
+ .card-inner-scroll {
260
+ display: flex;
261
+ flex-direction: column;
262
+
263
+ > * {
264
+ flex: 1 1 0;
265
+ min-height: 0;
266
+ }
267
+ }
268
+ c8y-local-controls, c8y-global-context-widget-wrapper {
269
+ flex-grow: 0!important;
270
+ min-height: min-content!important;
271
+ }
255
272
  }
256
273
 
257
274
  // title hidden
@@ -266,7 +283,6 @@ body fieldset > .dashboard-preview-slot {
266
283
  width: 100%;
267
284
  height: 0;
268
285
  border: 0;
269
- pointer-events: none;
270
286
  &:after {
271
287
  display: none;
272
288
  }
@@ -408,11 +424,6 @@ body fieldset > .dashboard-preview-slot {
408
424
  }
409
425
  }
410
426
 
411
- // Prevent interactions in dashboard preview slots except for maps
412
- .dashboard-preview-slot:not(:has(c8y-map)){
413
- pointer-events: none;
414
- cursor: forbidden;
415
- }
416
427
 
417
428
  // data-grid--custom-column-header- styles
418
429
  .dashboard-preview-slot,
@@ -1,5 +1,4 @@
1
1
 
2
- @import "../../variables/_dlt-c8y-icons-vars.less";
3
2
  @import "../mixins/_icon-base.less";
4
3
 
5
4
  /**
@@ -1204,4 +1203,10 @@ c8y-icon-selector-wrapper{
1204
1203
  &:hover .showOnHover{
1205
1204
  opacity: 1;
1206
1205
  }
1206
+
1207
+ .form-group-sm &{
1208
+ > div{
1209
+ min-height: @form-control-height-sm;
1210
+ }
1211
+ }
1207
1212
  }
@@ -1206,4 +1206,9 @@ c8y-icon-selector-wrapper{
1206
1206
  &:hover .showOnHover{
1207
1207
  opacity: 1;
1208
1208
  }
1209
+ .form-group-sm &{
1210
+ > div{
1211
+ min-height: $form-control-height-sm;
1212
+ }
1213
+ }
1209
1214
  }
@@ -1,5 +1,4 @@
1
1
 
2
- @import "../../variables/_dlt-c8y-icons-vars.less";
3
2
  @import "./_c8y-icons.less";
4
3
 
5
4
  /**
@@ -1,5 +1,4 @@
1
1
 
2
- @import "../../../variables/_dlt-c8y-icons-vars.less";
3
2
  @import "../../mixins/_color-mixins.less";
4
3
  @import "../../mixins/_icon-base.less";
5
4
  @import "../../mixins/_shadows-helper.less";
@@ -1,3 +1,4 @@
1
+
1
2
  // label
2
3
  @form-label-text-transform: var(--c8y-form-label-text-transform);
3
4
  @form-label-font-weight: var(--c8y-form-label-font-weight);