@c8y/style 1023.30.0 → 1023.42.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 (265) hide show
  1. package/branding-login.less +1 -1
  2. package/helper-scripts/README-variable-imports.md +155 -0
  3. package/helper-scripts/README.md +104 -0
  4. package/helper-scripts/convert-scss-to-less.sh +512 -0
  5. package/helper-scripts/convert-stroke-icons-to-less.js +115 -0
  6. package/helper-scripts/remove-redundant-variable-imports.sh +80 -0
  7. package/helper-scripts/scss-to-less-skip +20 -0
  8. package/{sync-scss-to-less.sh → helper-scripts/sync-scss-to-less.sh} +2 -2
  9. package/helper-scripts/test-compile.sh +71 -0
  10. package/img/pie-chart-widget-pr.png +0 -0
  11. package/markdown-files/MANUAL-SYNC-FILES.md +56 -0
  12. package/package.json +2 -2
  13. package/styles/_login-app.less +34 -0
  14. package/styles/_login-app.scss +2 -2
  15. package/styles/_mixins.less +47 -0
  16. package/styles/_utilities.less +21 -0
  17. package/styles/_utilities.scss +1 -0
  18. package/styles/animations/_animate.less +18 -13
  19. package/styles/animations/_component-animations.less +18 -16
  20. package/styles/animations/_realtime-animation-list.less +11 -1
  21. package/styles/animations/_spinner-snake.less +17 -2
  22. package/styles/animations/_spinner.less +24 -6
  23. package/styles/base/_normalize.less +14 -0
  24. package/styles/base/_print.less +25 -12
  25. package/styles/base/_scaffolding.less +24 -28
  26. package/styles/base/_type.less +41 -19
  27. package/styles/components/_markdown-content.less +4 -1
  28. package/styles/components/_smartrules.less +14 -8
  29. package/styles/components/_smartrules.scss +6 -2
  30. package/styles/components/application-and-system/_c8y-cookie-banner.less +36 -0
  31. package/styles/components/{specialized → application-and-system}/_c8y-login.less +20 -6
  32. package/styles/components/data-display-and-visualization/_boxed-label.less +45 -0
  33. package/styles/components/data-display-and-visualization/_boxed-label.scss +46 -0
  34. package/styles/components/{specialized → data-display-and-visualization}/_c8y-data-explorer.less +37 -23
  35. package/styles/components/{specialized → data-display-and-visualization}/_c8y-datapoint-pill.less +29 -13
  36. package/styles/components/{specialized → data-display-and-visualization}/_c8y-pulse.less +33 -6
  37. package/styles/components/data-display-and-visualization/_range-display.less +25 -16
  38. package/styles/components/{specialized → data-display-and-visualization}/_smart-list-icon-label.less +19 -5
  39. package/styles/components/{specialized → data-display-and-visualization}/_status.less +16 -2
  40. package/styles/components/{specialized → data-display-and-visualization}/_statusContainer.less +16 -2
  41. package/styles/components/data-display-and-visualization/_timelines-chart.less +2 -0
  42. package/styles/components/data-display-and-visualization/lists/_c8y-data-point-list.less +10 -0
  43. package/styles/components/data-display-and-visualization/lists/_c8y-empty-state.less +26 -12
  44. package/styles/components/data-display-and-visualization/lists/_c8y-list-group.less +83 -43
  45. package/styles/components/data-display-and-visualization/lists/_cards-layout.less +38 -16
  46. package/styles/components/data-display-and-visualization/lists/_list-group.less +46 -28
  47. package/styles/components/data-display-and-visualization/lists/_smart-rules-template-list.less +12 -1
  48. package/styles/components/data-display-and-visualization/lists/{timeline-list.less → _timeline-list.less} +46 -24
  49. package/styles/components/data-display-and-visualization/tables/_data-grid.less +45 -25
  50. package/styles/components/data-display-and-visualization/tables/_resizable-grid.less +18 -5
  51. package/styles/components/data-display-and-visualization/tables/_tables.less +25 -9
  52. package/styles/components/data-input/_c8y-ai-chat.less +1 -0
  53. package/styles/components/{specialized → data-input}/_c8y-countdown-interval.less +15 -13
  54. package/styles/components/{specialized → data-input}/_c8y-range.less +22 -6
  55. package/styles/components/{specialized → data-input}/_dtm-icon-selector.less +17 -2
  56. package/styles/components/{specialized → data-input}/_dtm-icon-selector.scss +1 -2
  57. package/styles/components/{specialized → data-input}/_measurements-time-control.less +34 -6
  58. package/styles/components/{specialized → data-input}/_measurements-time-control.scss +14 -2
  59. package/styles/components/{specialized → data-input}/_search-header.less +22 -6
  60. package/styles/components/data-input/_static-assets-file-picker.less +22 -0
  61. package/styles/components/data-input/assets/_asset-property-list.less +38 -23
  62. package/styles/components/data-input/assets/_asset-table.less +21 -3
  63. package/styles/components/data-input/assets/_c8y-asset-notes.less +13 -1
  64. package/styles/components/data-input/assets/_c8y-asset-selector-miller.less +27 -8
  65. package/styles/components/data-input/assets/_c8y-asset-selector.less +32 -15
  66. package/styles/components/data-input/assets/_c8y-child-assets-selector.less +90 -9
  67. package/styles/components/{specialized → forms}/_c8y-schema-form.less +44 -17
  68. package/styles/components/{specialized → forms}/_c8y-schema-form.scss +15 -3
  69. package/styles/components/{specialized → navigation-and-layout}/_c8y-role-card.less +21 -5
  70. package/styles/components/{specialized → navigation-and-layout}/_c8y-scrollbar.less +24 -7
  71. package/styles/components/{specialized → navigation-and-layout}/_c8y-smart-rest-tab.less +21 -6
  72. package/styles/components/{specialized → navigation-and-layout}/_c8y-stepper.less +15 -1
  73. package/styles/components/{specialized → navigation-and-layout}/_c8y-user-roles.less +45 -28
  74. package/styles/components/{specialized → navigation-and-layout}/_device-software-tab.less +14 -0
  75. package/styles/components/navigation-and-layout/action-bars/_app-switcher.less +27 -5
  76. package/styles/components/navigation-and-layout/action-bars/_c8y-action-bar.less +49 -21
  77. package/styles/components/navigation-and-layout/cards/_card-dashboard.less +25 -4
  78. package/styles/components/navigation-and-layout/cards/_card-flip.less +41 -14
  79. package/styles/components/navigation-and-layout/cards/_card-grid.less +20 -4
  80. package/styles/components/navigation-and-layout/cards/_card.less +90 -75
  81. package/styles/components/navigation-and-layout/cards/_panels.less +38 -20
  82. package/styles/components/navigation-and-layout/navigation/_breadcrumbs.less +21 -39
  83. package/styles/components/navigation-and-layout/navigation/_c8y-nav-stacked.less +26 -14
  84. package/styles/components/navigation-and-layout/navigation/_main-header.less +41 -13
  85. package/styles/components/navigation-and-layout/navigation/_main-header.scss +1 -1
  86. package/styles/components/navigation-and-layout/navigation/_navbar.less +22 -25
  87. package/styles/components/navigation-and-layout/navigation/_navbar.scss +7 -7
  88. package/styles/components/navigation-and-layout/navigation/_navigator.less +71 -69
  89. package/styles/components/navigation-and-layout/navigation/_navs.less +13 -0
  90. package/styles/components/navigation-and-layout/navigation/_pagination.less +24 -5
  91. package/styles/components/navigation-and-layout/navigation/{steps-navbar.less → _steps-navbar.less} +7 -6
  92. package/styles/components/navigation-and-layout/navigation/_tabs.less +18 -14
  93. package/styles/components/navigation-and-layout/navigation/_tabs.scss +2 -2
  94. package/styles/components/{specialized → status-feedback-and-notifications}/_c8y-message-banner.less +14 -0
  95. package/styles/components/{specialized → status-feedback-and-notifications}/_code.less +18 -2
  96. package/styles/core/buttons/_button-groups.less +29 -79
  97. package/styles/core/buttons/_buttons.less +229 -198
  98. package/styles/core/buttons/_buttons.scss +6 -10
  99. package/styles/core/feedback/_alerts.less +52 -41
  100. package/styles/core/feedback/_badges.less +29 -17
  101. package/styles/core/feedback/_close.less +24 -7
  102. package/styles/core/feedback/_labels.less +21 -8
  103. package/styles/core/feedback/_progress-bars.less +24 -7
  104. package/styles/core/feedback/_tag.less +23 -6
  105. package/styles/core/feedback/_tooltip.less +44 -20
  106. package/styles/core/forms/_c8y-switch.less +39 -19
  107. package/styles/core/forms/_c8y-switch.scss +37 -29
  108. package/styles/core/forms/_file-picker.less +79 -61
  109. package/styles/core/forms/_forms.less +130 -133
  110. package/styles/core/forms/_input-groups.less +110 -59
  111. package/styles/core/forms/_input-groups.scss +21 -3
  112. package/styles/core/overlays/_c8y-dashboard-modal.less +25 -29
  113. package/styles/core/overlays/_c8y-wizard.less +38 -15
  114. package/styles/core/overlays/_dropdowns.less +86 -63
  115. package/styles/core/overlays/_modals.less +58 -40
  116. package/styles/core/overlays/_popovers.less +25 -9
  117. package/styles/dashboard/_availability-pie.less +3 -0
  118. package/styles/dashboard/_c8y-dashboard-style.less +61 -34
  119. package/styles/dashboard/_c8y-gauges.less +20 -4
  120. package/styles/dashboard/_dashboard-widgets.less +17 -4
  121. package/styles/dashboard/_info-gauge.less +20 -5
  122. package/styles/dashboard/_quick-links-widget.less +13 -3
  123. package/styles/{welcome-widget.less → dashboard/_welcome-widget.less} +21 -4
  124. package/styles/dashboard/{welcome.less → _welcome.less} +54 -45
  125. package/styles/icons/_c8y-glyphs.less +12 -1
  126. package/styles/icons/_c8y-glyphs.scss +2 -1
  127. package/styles/icons/_c8y-icons.less +214 -199
  128. package/styles/icons/_dlt-c8y-icons-stroke.less +7238 -1834
  129. package/styles/icons/_dlt-c8y-icons.less +14 -0
  130. package/styles/icons/_marker-icons.less +10 -0
  131. package/styles/index.less +160 -134
  132. package/styles/index.scss +53 -29
  133. package/styles/layout/_bottom-drawer.less +21 -7
  134. package/styles/layout/_c8y-help-drawer.less +30 -9
  135. package/styles/layout/_c8y-right-drawer.less +34 -19
  136. package/styles/layout/_c8y-top-drawer.less +43 -28
  137. package/styles/layout/_grid.less +18 -4
  138. package/styles/layout/_group-info.less +14 -2
  139. package/styles/layout/_layouts.less +48 -30
  140. package/styles/layout/_mcontainer.less +26 -12
  141. package/styles/layout/_page-tabs.less +115 -23
  142. package/styles/layout/_split-scroll.less +16 -4
  143. package/styles/layout/_split-view.less +19 -5
  144. package/styles/login-app-use.scss +2 -2
  145. package/styles/login-app.less +4 -4
  146. package/styles/mixins/_buttons.scss +1 -0
  147. package/styles/mixins/{color-mixins.less → _color-mixins.less} +2 -2
  148. package/styles/mixins/{element-queries.less → _element-queries.less} +2 -2
  149. package/styles/mixins/{forms.less → _forms.less} +1 -1
  150. package/styles/mixins/_gradients.less +117 -0
  151. package/styles/mixins/{grid-framework.less → _grid-framework.less} +21 -21
  152. package/styles/mixins/_icon-base.less +29 -0
  153. package/styles/mixins/{nav-vertical-align.less → _nav-vertical-align.less} +6 -2
  154. package/styles/mixins/_nav-vertical-align.scss +5 -2
  155. package/styles/mixins/{progress-bar.less → _progress-bar.less} +1 -1
  156. package/styles/mixins/{shadows-helper.less → _shadows-helper.less} +3 -5
  157. package/styles/mixins/_shadows-helper.scss +1 -4
  158. package/styles/mixins/{vendor-prefixes.less → _vendor-prefixes.less} +7 -22
  159. package/styles/mixins/_vendor-prefixes.scss +1 -17
  160. package/styles/utilities/_borders.less +21 -11
  161. package/styles/{components/specialized → utilities}/_c8y-utils.less +14 -0
  162. package/styles/{components/specialized → utilities}/_c8y-utils.scss +1 -1
  163. package/styles/utilities/_caret.less +18 -4
  164. package/styles/utilities/_container-queries.less +11 -3
  165. package/styles/utilities/_contextual-colors.less +48 -119
  166. package/styles/utilities/_display.less +26 -41
  167. package/styles/utilities/_elevation.less +17 -7
  168. package/styles/utilities/_flex-containers.less +10 -0
  169. package/styles/utilities/_flex-items.less +11 -0
  170. package/styles/utilities/_icon-utils.less +15 -3
  171. package/styles/utilities/_margins-paddings.less +23 -4
  172. package/styles/utilities/_overflows.less +10 -0
  173. package/styles/utilities/_position.less +11 -0
  174. package/styles/utilities/_quickfloats.less +20 -1
  175. package/styles/utilities/_separators.less +11 -0
  176. package/styles/utilities/_shadows.less +5 -49
  177. package/styles/{utilities.less → utilities/_sizing.less} +13 -21
  178. package/styles/utilities/_text-utils.less +35 -24
  179. package/styles/vendor/ace-editor/_ace-editor.less +1 -0
  180. package/styles/vendor/angular/_loading-bar.less +1 -0
  181. package/styles/vendor/angular/_ui-sortable.less +2 -1
  182. package/styles/vendor/angular/_uib-accordion.less +1 -0
  183. package/styles/{angular-ui-select/select.less → vendor/angular/angular-ui-select/_select.less} +2 -10
  184. package/styles/vendor/cdk/_cdk-drag.less +3 -0
  185. package/styles/vendor/cdk/_cdk-tree.less +6 -3
  186. package/styles/vendor/cdk/_cdk-virtual-scroll-window.less +1 -0
  187. package/styles/vendor/datepicker/_bs-datepicker.less +26 -6
  188. package/styles/vendor/datepicker/_uib-datepicker.less +37 -4
  189. package/styles/vendor/leaflet/_c8y-map-internal.less +44 -54
  190. package/styles/vendor/leaflet/_leaflet.less +4 -1
  191. package/styles/vendor/other/_colorpicker.less +3 -2
  192. package/styles/vendor/selectize/_c8y-selectize.less +33 -10
  193. package/variables/_color-defaults.less +29 -10
  194. package/variables/_color-defaults.scss +29 -10
  195. package/variables/_color-vars.less +37 -89
  196. package/variables/_color-vars.scss +19 -77
  197. package/variables/{login-vars.less → _login-vars.less} +3 -5
  198. package/variables/index.less +3 -3
  199. package/variables/tokens/{c8y-design-tokens-dark.less → _c8y-design-tokens-dark.less} +5 -1
  200. package/variables/tokens/{c8y-design-tokens.less → _c8y-design-tokens.less} +5 -1
  201. package/styles/components/specialized/_boxed-label.less +0 -21
  202. package/styles/components/specialized/_boxed-label.scss +0 -36
  203. package/styles/components/specialized/_c8y-cookie-banner.less +0 -22
  204. package/styles/components/specialized/_static-assets-file-picker.less +0 -8
  205. package/styles/dashboard/welcome-widget.less +0 -50
  206. package/styles/mixins/gradients.less +0 -142
  207. package/styles/mixins.less +0 -45
  208. package/styles/steps-navbar.less +0 -97
  209. package/styles/timeline-list.less +0 -210
  210. package/styles/vendor/angular/angular-ui-select/select.less +0 -161
  211. package/styles/welcome.less +0 -128
  212. /package/styles/components/{specialized → application-and-system}/_c8y-cookie-banner.scss +0 -0
  213. /package/styles/components/{specialized → application-and-system}/_c8y-login.scss +0 -0
  214. /package/styles/components/{specialized → data-display-and-visualization}/_c8y-data-explorer.scss +0 -0
  215. /package/styles/components/{specialized → data-display-and-visualization}/_c8y-datapoint-pill.scss +0 -0
  216. /package/styles/components/{specialized → data-display-and-visualization}/_c8y-pulse.scss +0 -0
  217. /package/styles/components/{specialized → data-display-and-visualization}/_smart-list-icon-label.scss +0 -0
  218. /package/styles/components/{specialized → data-display-and-visualization}/_status.scss +0 -0
  219. /package/styles/components/{specialized → data-display-and-visualization}/_statusContainer.scss +0 -0
  220. /package/styles/components/{specialized → data-input}/_c8y-countdown-interval.scss +0 -0
  221. /package/styles/components/{specialized → data-input}/_c8y-range.scss +0 -0
  222. /package/styles/components/{specialized → data-input}/_search-header.scss +0 -0
  223. /package/styles/components/{specialized → data-input}/_static-assets-file-picker.scss +0 -0
  224. /package/styles/components/{specialized → navigation-and-layout}/_c8y-role-card.scss +0 -0
  225. /package/styles/components/{specialized → navigation-and-layout}/_c8y-scrollbar.scss +0 -0
  226. /package/styles/components/{specialized → navigation-and-layout}/_c8y-smart-rest-tab.scss +0 -0
  227. /package/styles/components/{specialized → navigation-and-layout}/_c8y-stepper.scss +0 -0
  228. /package/styles/components/{specialized → navigation-and-layout}/_c8y-user-roles.scss +0 -0
  229. /package/styles/components/{specialized → navigation-and-layout}/_device-software-tab.scss +0 -0
  230. /package/styles/components/{specialized → status-feedback-and-notifications}/_c8y-message-banner.scss +0 -0
  231. /package/styles/components/{specialized → status-feedback-and-notifications}/_code.scss +0 -0
  232. /package/styles/mixins/{alert-variant.less → _alert-variant.less} +0 -0
  233. /package/styles/mixins/{animation.less → _animation.less} +0 -0
  234. /package/styles/mixins/{background-variant.less → _background-variant.less} +0 -0
  235. /package/styles/mixins/{border-radius.less → _border-radius.less} +0 -0
  236. /package/styles/mixins/{buttons.less → _buttons.less} +0 -0
  237. /package/styles/mixins/{c8y-scrollbar.less → _c8y-scrollbar.less} +0 -0
  238. /package/styles/mixins/{center-block.less → _center-block.less} +0 -0
  239. /package/styles/mixins/{clearfix.less → _clearfix.less} +0 -0
  240. /package/styles/mixins/{create-grid.less → _create-grid.less} +0 -0
  241. /package/styles/mixins/{grid.less → _grid.less} +0 -0
  242. /package/styles/mixins/{hide-scrollbars.less → _hide-scrollbars.less} +0 -0
  243. /package/styles/mixins/{hide-text.less → _hide-text.less} +0 -0
  244. /package/styles/mixins/{image.less → _image.less} +0 -0
  245. /package/styles/mixins/{labels.less → _labels.less} +0 -0
  246. /package/styles/mixins/{list-group.less → _list-group.less} +0 -0
  247. /package/styles/mixins/{nav-divider.less → _nav-divider.less} +0 -0
  248. /package/styles/mixins/{opacity.less → _opacity.less} +0 -0
  249. /package/styles/mixins/{pagination.less → _pagination.less} +0 -0
  250. /package/styles/mixins/{panels.less → _panels.less} +0 -0
  251. /package/styles/mixins/{reset-filter.less → _reset-filter.less} +0 -0
  252. /package/styles/mixins/{reset-text.less → _reset-text.less} +0 -0
  253. /package/styles/mixins/{resize.less → _resize.less} +0 -0
  254. /package/styles/mixins/{responsive-visibility.less → _responsive-visibility.less} +0 -0
  255. /package/styles/mixins/{size.less → _size.less} +0 -0
  256. /package/styles/mixins/{tab-focus.less → _tab-focus.less} +0 -0
  257. /package/styles/mixins/{table-row.less → _table-row.less} +0 -0
  258. /package/styles/mixins/{tag.less → _tag.less} +0 -0
  259. /package/styles/mixins/{text-emphasis.less → _text-emphasis.less} +0 -0
  260. /package/styles/mixins/{text-overflow.less → _text-overflow.less} +0 -0
  261. /package/variables/{login-vars.scss → _login-vars.scss} +0 -0
  262. /package/variables/{shadows.less → _shadows.less} +0 -0
  263. /package/variables/{shadows.scss → _shadows.scss} +0 -0
  264. /package/variables/tokens/{c8y-design-tokens-dark.scss → _c8y-design-tokens-dark.scss} +0 -0
  265. /package/variables/tokens/{c8y-design-tokens.scss → _c8y-design-tokens.scss} +0 -0
@@ -0,0 +1,80 @@
1
+ #!/bin/bash
2
+
3
+ # Remove redundant variable imports from LESS files
4
+ # Variables are imported at entry points (main.less, branding.less, login.less),
5
+ # so component files don't need to import them due to LESS's global scope.
6
+
7
+ set -e
8
+
9
+ cd "$(dirname "$0")/.."
10
+
11
+ echo "=============================================="
12
+ echo "Removing Redundant Variable Imports"
13
+ echo "=============================================="
14
+ echo ""
15
+ echo "LESS uses global scope, so variables imported at entry points"
16
+ echo "are available to all subsequent imports. This is different from"
17
+ echo "SCSS's @use module system which requires explicit imports."
18
+ echo ""
19
+
20
+ # Find all LESS files with variable imports (excluding entry points)
21
+ FILES=$(grep -rl '@import.*variables/index\.less' styles --include="*.less" 2>/dev/null || true)
22
+
23
+ # Exclude entry points that SHOULD keep variable imports
24
+ FILES=$(echo "$FILES" | grep -v "^styles/login-app\.less$" || true)
25
+ FILES=$(echo "$FILES" | grep -v "^styles/_login-app\.less$" || true)
26
+
27
+ if [ -z "$FILES" ]; then
28
+ echo "✅ No redundant variable imports found!"
29
+ exit 0
30
+ fi
31
+
32
+ COUNT=$(echo "$FILES" | wc -l | tr -d ' ')
33
+ echo "Found $COUNT file(s) with redundant variable imports:"
34
+ echo ""
35
+ echo "$FILES" | sed 's/^/ - /'
36
+ echo ""
37
+
38
+ read -p "Remove redundant imports from these files? [y/N] " -n 1 -r
39
+ echo ""
40
+
41
+ if [[ ! $REPLY =~ ^[Yy]$ ]]; then
42
+ echo "Cancelled - no changes made"
43
+ exit 0
44
+ fi
45
+
46
+ echo ""
47
+ echo "Removing redundant variable imports..."
48
+ echo ""
49
+
50
+ UPDATED=0
51
+
52
+ while IFS= read -r file; do
53
+ if [ -z "$file" ]; then
54
+ continue
55
+ fi
56
+
57
+ # Remove variable import lines
58
+ sed -i.bak -E '/@import[[:space:]]+.*variables\/index\.less/d' "$file"
59
+
60
+ # Check if file changed
61
+ if ! diff -q "$file" "$file.bak" >/dev/null 2>&1; then
62
+ echo " ✅ Updated: $file"
63
+ UPDATED=$((UPDATED + 1))
64
+ rm "$file.bak"
65
+ else
66
+ echo " ⏭️ Skipped (no changes): $file"
67
+ rm "$file.bak"
68
+ fi
69
+ done <<< "$FILES"
70
+
71
+ echo ""
72
+ echo "=============================================="
73
+ echo "✅ Updated $UPDATED file(s)"
74
+ echo "=============================================="
75
+ echo ""
76
+ echo "Next steps:"
77
+ echo "1. Run: npm test (to verify LESS/SCSS compilation)"
78
+ echo "2. Review changes: git diff"
79
+ echo "3. Commit if all looks good"
80
+ echo ""
@@ -0,0 +1,20 @@
1
+ # Files to skip during automatic SCSS to LESS conversion
2
+ # These files require manual synchronization due to complex syntax patterns
3
+
4
+ # Complex mixin calls with calc()/var() - converter cannot reliably handle parameter separators
5
+ styles/core/buttons/_buttons.scss
6
+
7
+ # Transform mixins that output CSS functions - converter confuses CSS function commas with mixin parameter separators
8
+ styles/mixins/_vendor-prefixes.scss
9
+
10
+ # LESS guard syntax - converter incorrectly changes LESS guards to @if
11
+ styles/components/application-and-system/_c8y-login.scss
12
+
13
+ # math.div() - converter incorrectly changes LESS division to SCSS math.div()
14
+ styles/components/data-input/_c8y-range.scss
15
+
16
+ # Non-existent mixin - converter incorrectly re-adds removed mixin calls
17
+ styles/components/data-input/_dtm-icon-selector.scss
18
+
19
+ # Complex @if/@else conditional logic - converter has basic guard support but may need manual review
20
+ styles/mixins/_shadows-helper.scss
@@ -62,8 +62,8 @@ if [ $NEEDS_SYNC -eq 1 ]; then
62
62
  echo "==================================="
63
63
  echo ""
64
64
  echo "Options:"
65
- echo "1. Semi-automated: ./convert-scss-to-less.sh --all"
66
- echo "2. Single file: ./convert-scss-to-less.sh path/to/file.scss"
65
+ echo "1. Semi-automated: ./helper-scripts/convert-scss-to-less.sh --all"
66
+ echo "2. Single file: ./helper-scripts/convert-scss-to-less.sh path/to/file.scss"
67
67
  echo "3. Manually sync SCSS → LESS"
68
68
  echo "4. Ask Claude to sync for you"
69
69
  echo ""
@@ -0,0 +1,71 @@
1
+ #!/bin/bash
2
+
3
+ # Quick LESS/SCSS compilation test
4
+ # Tests that LESS and SCSS files compile without errors and produce similar output
5
+
6
+ set -e
7
+
8
+ cd "$(dirname "$0")"
9
+
10
+ echo "==========================================="
11
+ echo "Quick LESS/SCSS Compilation Test"
12
+ echo "==========================================="
13
+ echo ""
14
+
15
+ # Colors
16
+ RED='\033[0;31m'
17
+ GREEN='\033[0;32m'
18
+ YELLOW='\033[1;33m'
19
+ NC='\033[0m' # No Color
20
+
21
+ # Test LESS compilation
22
+ printf "${YELLOW}Testing LESS compilation...${NC}\n"
23
+ npx lessc main.less /tmp/test-main-less.css 2>/tmp/lessc-errors.log
24
+ if [ $? -eq 0 ]; then
25
+ LESS_SIZE=$(wc -c < /tmp/test-main-less.css | tr -d ' ')
26
+ LESS_SIZE_MB=$(echo "scale=1; $LESS_SIZE / 1024 / 1024" | bc)
27
+ printf "${GREEN}✓ LESS compilation successful${NC} (${LESS_SIZE_MB}M)\n"
28
+ else
29
+ printf "${RED}✗ LESS compilation failed${NC}\n"
30
+ cat /tmp/lessc-errors.log
31
+ exit 1
32
+ fi
33
+
34
+ # Test SCSS compilation
35
+ printf "${YELLOW}Testing SCSS compilation...${NC}\n"
36
+ npx sass main.scss /tmp/test-main-scss.css --no-source-map 2>/tmp/sass-errors.log
37
+ if [ $? -eq 0 ]; then
38
+ SCSS_SIZE=$(wc -c < /tmp/test-main-scss.css | tr -d ' ')
39
+ SCSS_SIZE_MB=$(echo "scale=1; $SCSS_SIZE / 1024 / 1024" | bc)
40
+ printf "${GREEN}✓ SCSS compilation successful${NC} (${SCSS_SIZE_MB}M)\n"
41
+ else
42
+ printf "${RED}✗ SCSS compilation failed${NC}\n"
43
+ cat /tmp/sass-errors.log
44
+ exit 1
45
+ fi
46
+
47
+ # Compare sizes (should be within 5%)
48
+ SIZE_DIFF=$(echo "scale=2; ($LESS_SIZE - $SCSS_SIZE) / $SCSS_SIZE * 100" | bc)
49
+ SIZE_DIFF_ABS=$(echo "$SIZE_DIFF" | tr -d '-')
50
+
51
+ echo ""
52
+ echo "==========================================="
53
+ printf "${YELLOW}Comparison:${NC}\n"
54
+ echo " LESS: ${LESS_SIZE_MB}M"
55
+ echo " SCSS: ${SCSS_SIZE_MB}M"
56
+ echo " Difference: ${SIZE_DIFF}%"
57
+ echo " Difference absolute: ${SIZE_DIFF_ABS}%"
58
+
59
+ if [ "$(echo "$SIZE_DIFF_ABS < 5" | bc -l)" -eq 1 ]; then
60
+ printf "${GREEN}✓ Output sizes match (within 5%%)${NC}\n"
61
+ else
62
+ printf "${RED}✗ Warning: Output sizes differ by more than 5%%${NC}\n"
63
+ fi
64
+
65
+ echo "==========================================="
66
+ echo ""
67
+ echo "Detailed warnings/deprecations:"
68
+ echo ""
69
+ cat /tmp/lessc-errors.log | head -20
70
+ echo ""
71
+ echo "Full logs: /tmp/lessc-errors.log, /tmp/sass-errors.log"
Binary file
@@ -0,0 +1,56 @@
1
+ # Files Requiring Manual SCSS/LESS Synchronization
2
+
3
+ This document lists files that cannot be automatically converted from SCSS to LESS due to complex syntax patterns.
4
+
5
+ ## Files List
6
+
7
+ ### `styles/core/buttons/_buttons.scss` / `_buttons.less`
8
+
9
+ **Reason**: Complex mixin calls with multiple parameters including CSS functions
10
+
11
+ **Issues**:
12
+ - `.button-size()` mixin calls have 6 parameters
13
+ - Contains `calc()` expressions as parameters
14
+ - Converter cannot reliably distinguish between:
15
+ - Parameter separator commas (need → semicolons for LESS)
16
+ - calc() function commas (must remain commas)
17
+ - Selector grouping commas (must remain commas)
18
+
19
+ **Manual sync required for**:
20
+ - Lines ~60: `.button-size(@btn-padding-vertical; calc(@btn-padding-horizontal * 2); ...)`
21
+ - Lines ~794-797: `.btn-lg { .button-size(...) }`
22
+ - Lines ~800-802: `.btn-sm { .button-size(...) }`
23
+ - Lines ~805-807: `.btn-xs { .button-size(...) }`
24
+
25
+ **Correct LESS syntax**:
26
+ ```less
27
+ .button-size(@param1; @param2; @param3; @param4; @param5; @param6);
28
+ ```
29
+
30
+ **Common mistakes**:
31
+ ```less
32
+ // WRONG - mixed separators
33
+ .button-size(@param1, @param2; @param3, @param4; @param5; @param6);
34
+
35
+ // WRONG - all commas
36
+ .button-size(@param1, @param2, @param3, @param4, @param5, @param6);
37
+ ```
38
+
39
+ ## How to Maintain These Files
40
+
41
+ 1. **Edit SCSS first**: Make changes to the `.scss` version
42
+ 2. **Manually sync to LESS**: Copy changes to `.less` version, converting:
43
+ - `$variable` → `@variable`
44
+ - `@include mixin()` → `.mixin()`
45
+ - `@mixin name()` → `.name()`
46
+ - Mixin params: commas → semicolons
47
+ - Keep calc/var/rgba commas as-is
48
+ 3. **Test compilation**: Run `npm test --workspace=@c8y/style` to verify both compile
49
+
50
+ ## Future Improvements
51
+
52
+ To make these files auto-convertible:
53
+ 1. Simplify mixin calls - put all parameters on one line
54
+ 2. Extract calc() to variables before passing to mixins
55
+ 3. Reduce number of mixin parameters
56
+
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@c8y/style",
3
- "version": "1023.30.0",
3
+ "version": "1023.42.1",
4
4
  "license": "Apache-2.0",
5
5
  "author": "Cumulocity GmbH",
6
6
  "description": "Styles for Cumulocity IoT applications",
7
7
  "main": "main.less",
8
8
  "scripts": {
9
- "test": "sh ./__tests__/generate-brandings.sh"
9
+ "test": "sh ./helper-scripts/test-compile.sh"
10
10
  },
11
11
  "keywords": [
12
12
  "Cumulocity",
@@ -0,0 +1,34 @@
1
+ @import '_mixins.less';
2
+ @import 'base/_normalize';
3
+ @import 'base/_print';
4
+
5
+ // TRANSITIONS & ANIMATION
6
+ @import 'animations/_component-animations';
7
+ @import 'animations/_animate';
8
+
9
+ // CORE CSS
10
+ @import 'base/_scaffolding';
11
+ @import 'core/feedback/_alerts';
12
+ @import 'core/feedback/_badges';
13
+ @import 'core/buttons/_buttons';
14
+ @import 'core/feedback/_close';
15
+ @import 'core/buttons/_button-groups';
16
+ @import 'components/status-feedback-and-notifications/_code';
17
+ @import 'core/feedback/_tag';
18
+ @import 'core/forms/_forms';
19
+ @import 'core/forms/_c8y-switch';
20
+ @import 'base/_type';
21
+ @import 'layout/_grid';
22
+
23
+ // @import 'layout/_grid';
24
+
25
+ @import 'core/forms/_input-groups';
26
+ @import 'components/application-and-system/_c8y-cookie-banner';
27
+
28
+ @import 'icons/_c8y-glyphs';
29
+ @import 'icons/_c8y-icons';
30
+ @import 'icons/_dlt-c8y-icons';
31
+ // @import 'icons/_dlt-c8y-icons-stroke';
32
+ @import '_utilities.less';
33
+
34
+ @import 'components/navigation-and-layout/action-bars/_app-switcher';
@@ -13,7 +13,7 @@
13
13
  @import 'core/buttons/_buttons';
14
14
  @import 'core/feedback/_close';
15
15
  @import 'core/buttons/_button-groups';
16
- @import 'components/specialized/_code';
16
+ @import 'components/status-feedback-and-notifications/_code';
17
17
  @import 'core/feedback/_tag';
18
18
  @import 'core/forms/_forms';
19
19
  @import 'core/forms/_c8y-switch';
@@ -23,7 +23,7 @@
23
23
  // @import 'layout/_grid';
24
24
 
25
25
  @import 'core/forms/_input-groups';
26
- @import 'components/specialized/_c8y-cookie-banner';
26
+ @import 'components/application-and-system/_c8y-cookie-banner';
27
27
 
28
28
  @import 'icons/_c8y-glyphs';
29
29
  @import 'icons/_c8y-icons';
@@ -0,0 +1,47 @@
1
+ // Utilities
2
+ @import 'mixins/_icon-base.less';
3
+ @import 'mixins/_hide-text.less';
4
+ @import 'mixins/_opacity.less';
5
+ @import 'mixins/_image.less';
6
+ /* Remove after Codex launch. will be replaced by Tag */
7
+ @import 'mixins/_labels.less';
8
+ @import 'mixins/_tag.less';
9
+ @import 'mixins/_reset-filter.less';
10
+ @import 'mixins/_resize.less';
11
+ @import 'mixins/_responsive-visibility.less';
12
+ @import 'mixins/_size.less';
13
+ @import 'mixins/_tab-focus.less';
14
+ @import 'mixins/_reset-text.less';
15
+ @import 'mixins/_text-emphasis.less';
16
+ @import 'mixins/_text-overflow.less';
17
+ @import 'mixins/_vendor-prefixes.less';
18
+ @import 'mixins/_color-mixins.less';
19
+ @import 'mixins/_animation.less';
20
+
21
+ // Components
22
+ @import 'mixins/_buttons.less';
23
+ @import 'mixins/_alert-variant.less';
24
+ @import 'mixins/_panels.less';
25
+ @import 'mixins/_pagination.less';
26
+ @import 'mixins/_list-group.less';
27
+ @import 'mixins/_nav-divider.less';
28
+ @import 'mixins/_forms.less';
29
+ @import 'mixins/_progress-bar.less';
30
+ @import 'mixins/_table-row.less';
31
+ @import 'mixins/_c8y-scrollbar.less';
32
+
33
+ // Skins
34
+ @import 'mixins/_background-variant.less';
35
+ @import 'mixins/_border-radius.less';
36
+ @import 'mixins/_gradients.less';
37
+
38
+ // Layout
39
+ @import 'mixins/_clearfix.less';
40
+ @import 'mixins/_center-block.less';
41
+ @import 'mixins/_nav-vertical-align.less';
42
+ @import 'mixins/_grid-framework.less';
43
+ @import 'mixins/_grid.less';
44
+ @import 'mixins/_hide-scrollbars.less';
45
+ @import 'mixins/_shadows-helper.less';
46
+ @import 'mixins/_element-queries.less';
47
+ @import 'mixins/_create-grid.less';
@@ -0,0 +1,21 @@
1
+ // Main utility classes
2
+
3
+ @import 'utilities/_caret';
4
+ @import 'utilities/_text-utils';
5
+ @import 'utilities/_contextual-colors';
6
+ @import 'utilities/_display';
7
+ @import 'utilities/_quickfloats';
8
+ @import 'utilities/_margins-paddings';
9
+ // Using the grid - mixins/
10
+ @import 'utilities/_flex-containers';
11
+ @import 'utilities/_flex-items';
12
+
13
+ @import 'utilities/_position';
14
+ @import 'utilities/_overflows';
15
+ @import 'utilities/_separators';
16
+ @import 'utilities/_borders';
17
+ @import 'utilities/_elevation';
18
+ @import 'utilities/_icon-utils';
19
+ @import 'utilities/_container-queries';
20
+ @import 'utilities/_sizing';
21
+ @import 'utilities/_c8y-utils';
@@ -19,3 +19,4 @@
19
19
  @use 'utilities/_icon-utils';
20
20
  @use 'utilities/_container-queries';
21
21
  @use 'utilities/_sizing';
22
+ @use 'utilities/_c8y-utils';
@@ -1,9 +1,22 @@
1
+
2
+ /**
3
+ * Animate - Third-party animation library (animate.css v3.6.1)
4
+ *
5
+ * Note: This is a third-party library (animate.css by Daniel Eden).
6
+ *
7
+ * Intentionally hardcoded values:
8
+ * - Animation durations (0.35s, 0.5s, 1s, 2s): Animation timing
9
+ * - Transform distances (-30px, -15px, -4px, -10px, 10px, -1px, 1px, ±2000px): Animation movement
10
+ * - Perspective (300px): 3D transform depth
11
+ * - Percentages and unitless values: Animation keyframe positions and opacity
12
+ * - Cubic-bezier values: Custom easing functions
13
+ */
14
+
1
15
  @charset "UTF-8";
2
- // c8y
3
- @ease_cubic: cubic-bezier(0.75, 0.01, 0.32, 0.99);
16
+
4
17
  .fadeAnim.ng-enter,
5
18
  .fadeAnim.ng-leave {
6
- transition: 0.5s linear all;
19
+ transition: 0.5s linear;
7
20
  }
8
21
 
9
22
  .fadeAnim.ng-enter,
@@ -36,8 +49,6 @@
36
49
  animation-iteration-count: infinite;
37
50
  }
38
51
 
39
-
40
-
41
52
  @keyframes bounce {
42
53
  from,
43
54
  20%,
@@ -172,16 +183,10 @@
172
183
  }
173
184
 
174
185
  .vibrate {
175
- // -webkit-animation: vibrate 2s cubic-bezier(0.36, 0.07, 0.19, 0.97) ;
176
- // animation: vibrate 2s cubic-bezier(0.36, 0.07, 0.19, 0.97);
177
- // -webkit-transform: translate3d(0, 0, 0);
178
- // transform: translate3d(0, 0, 0);
179
- // -webkit-backface-visibility: hidden;
180
- // backface-visibility: hidden;
181
186
  perspective: 300px;
182
- transition-duration: 2s;
183
- transition-timing-function: cubic-bezier(0.36, 0.07, 0.19, 0.97);
184
187
  animation-name: vibrate;
188
+ transition-duration: 2s;
189
+ transition-timing-function: cubic-bezier(0.36, 0.07, 0.19, 0.97);
185
190
  }
186
191
 
187
192
 
@@ -1,3 +1,15 @@
1
+ @import "../mixins/_vendor-prefixes.less";
2
+
3
+ /**
4
+ * Component Animations - Fade, collapse, and pulse animations
5
+ *
6
+ * Note: Uses color tokens for background colors.
7
+ *
8
+ * Intentionally hardcoded values:
9
+ * - Animation/transition durations (0.15s, 0.35s, 1s): Animation timing
10
+ * - Percentages in keyframes: Animation keyframe positions
11
+ */
12
+
1
13
  // We don't use the `.opacity()` mixin here since it causes a bug with text
2
14
  // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
3
15
  .fade {
@@ -28,28 +40,18 @@
28
40
  width: 100%;
29
41
  height: 0;
30
42
 
31
- .transition-property(~'height, visibility');
32
- .transition-duration(0.35s);
33
- .transition-timing-function(ease);
43
+ transition-property: height, visibility;
44
+ transition-duration: 0.35s;
45
+ transition-timing-function: ease;
34
46
  }
35
47
 
36
- .component-pulse {
37
- -webkit-animation-name: pulseComponent;
48
+ .component-pulse() {
38
49
  animation-name: pulseComponent;
39
50
  animation-duration: 1s;
40
51
  }
41
52
 
42
- @-webkit-keyframes pulseComponent {
43
- 0%,
44
- 20%,
45
- 50% {
46
- background-color: @component-realtime-added;
47
- }
48
-
49
- 35%,
50
- 100% {
51
- background-color: @component-background-default;
52
- }
53
+ .component-pulse {
54
+ .component-pulse();
53
55
  }
54
56
 
55
57
  @keyframes pulseComponent {
@@ -1,7 +1,17 @@
1
+
2
+ /**
3
+ * Realtime Animation List - Real-time data update animations
4
+ *
5
+ * Note: Uses color tokens for background transitions.
6
+ *
7
+ * Intentionally hardcoded values:
8
+ * - Transition duration (1s): Animation timing for real-time updates
9
+ */
10
+
1
11
  .realtime-animation-list.ng-enter,
2
12
  .realtime-animation-list.ng-change {
3
13
  background-color: @component-realtime-added;
4
- transition: 1s linear all;
14
+ transition: 1s linear;
5
15
  }
6
16
 
7
17
  .realtime-animation-list.ng-enter-active,
@@ -1,6 +1,21 @@
1
+
2
+ /**
3
+ * Spinner Snake - Rotating spinner/loader animation
4
+ *
5
+ * Note: Uses color tokens (@component-brand-primary; @body-background-color; @component-background-default).
6
+ * Uses @size-16 for margin.
7
+ *
8
+ * Intentionally hardcoded values:
9
+ * - em-based values (4em, 0.6em, 2.2em, etc.): Relative sizing for scalable spinner
10
+ * - Animation durations (1s, 1.95s) and delays (0.75s): Animation timing
11
+ * - Negative text-indent (-99999em): Text hiding technique
12
+ * - Rotation degrees (0deg, 360deg): Animation angles
13
+ * - Percentages: Keyframe positions
14
+ */
15
+
1
16
  .spinner-snake {
2
17
  position: relative;
3
- margin: 16px auto;
18
+ margin: @size-16 auto;
4
19
  width: 4em;
5
20
  height: 4em;
6
21
  min-width: 4em;
@@ -31,7 +46,7 @@
31
46
 
32
47
  .card &,
33
48
  .modal &,
34
- .table-data-grid__loading--loader &{
49
+ .table-data-grid__loading--loader & {
35
50
  background: @component-background-default;
36
51
  }
37
52
  }
@@ -1,3 +1,21 @@
1
+ @import "../mixins/_vendor-prefixes.less";
2
+
3
+ /**
4
+ * Spinner - Rectangle bar spinner/loader animation
5
+ *
6
+ * Note: Uses color tokens (@text-muted; @spinner-color) and @size-* tokens where applicable.
7
+ *
8
+ * Intentionally hardcoded values:
9
+ * - Spinner dimensions (50px, 40px, 30px, 60px, 45px): Component-specific sizes
10
+ * - Padding values (45px, 35px, 11px): Component-specific positioning offsets
11
+ * - Negative margins (-25px, -15px, -28px): Centering calculations (half of width/height)
12
+ * - Bar width (6px): Spinner bar width (off-grid)
13
+ * - Animation duration (1.2s) and delays (-1.1s to -0.8s): Animation timing
14
+ * - Transform scale (0.5): Size reduction for button variant
15
+ * - RGBA background: Semi-transparent overlay
16
+ * - Percentages and unitless scale values: Animation and transform values
17
+ */
18
+
1
19
  c8y-rectangle-spinner,
2
20
  .c8y-rectangle-spinner {
3
21
  position: relative;
@@ -37,7 +55,7 @@ c8y-rectangle-spinner,
37
55
  }
38
56
 
39
57
  &.spinner-xs {
40
- padding-top: 5px;
58
+ padding-top: @size-5;
41
59
  padding-left: 35px;
42
60
  }
43
61
  }
@@ -51,7 +69,7 @@ c8y-rectangle-spinner,
51
69
  width: 50px;
52
70
  height: 40px;
53
71
  text-align: center;
54
- font-size: 10px;
72
+ font-size: @size-10;
55
73
  opacity: 0.5;
56
74
 
57
75
  &.spinner-xs,
@@ -61,7 +79,7 @@ c8y-rectangle-spinner,
61
79
 
62
80
  > div {
63
81
  margin: 0;
64
- width: 4px;
82
+ width: @size-4;
65
83
  }
66
84
  }
67
85
  }
@@ -116,8 +134,8 @@ c8y-rectangle-spinner,
116
134
  background-color: rgba(255, 255, 255, 0.7);
117
135
 
118
136
  .grid-stack-item & {
119
- right: 10px;
120
- left: 10px;
137
+ right: @size-10;
138
+ left: @size-10;
121
139
  }
122
140
 
123
141
  .spinner {
@@ -134,7 +152,7 @@ c8y-rectangle-spinner,
134
152
  vertical-align: middle;
135
153
 
136
154
  .spinner {
137
- .translate(0, -50%);
155
+ transform: translateY(-50%);
138
156
  }
139
157
  }
140
158
 
@@ -1,3 +1,17 @@
1
+
2
+ /**
3
+ * Normalize.css v3.0.3 - Third-party CSS reset library
4
+ *
5
+ * Note: This file is intentionally left unmodified from the original normalize.css.
6
+ * All hardcoded values are part of the standard CSS reset specification.
7
+ *
8
+ * Intentionally hardcoded values (as per normalize.css specification):
9
+ * - All margin/padding values (0, em-based, px-based): Standard reset values
10
+ * - Relative units (em, %): Proportional scaling for cross-browser consistency
11
+ * - 1px and 2px values: Standard border and spacing values for reset
12
+ * - Line-height values: Typography reset specifications
13
+ */
14
+
1
15
  /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
2
16
 
3
17
  // 1. Set default font family to sans-serif.