@c8y/style 1023.14.76 → 1023.14.92

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 (264) 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 +502 -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/markdown-files/MANUAL-SYNC-FILES.md +56 -0
  11. package/package.json +2 -2
  12. package/styles/_login-app.less +34 -0
  13. package/styles/_login-app.scss +2 -2
  14. package/styles/_mixins.less +47 -0
  15. package/styles/_utilities.less +21 -0
  16. package/styles/_utilities.scss +1 -0
  17. package/styles/animations/_animate.less +18 -13
  18. package/styles/animations/_component-animations.less +18 -16
  19. package/styles/animations/_realtime-animation-list.less +11 -1
  20. package/styles/animations/_spinner-snake.less +17 -2
  21. package/styles/animations/_spinner.less +24 -6
  22. package/styles/base/_normalize.less +14 -0
  23. package/styles/base/_print.less +25 -12
  24. package/styles/base/_scaffolding.less +24 -28
  25. package/styles/base/_type.less +41 -19
  26. package/styles/components/_markdown-content.less +4 -1
  27. package/styles/components/_smartrules.less +14 -8
  28. package/styles/components/_smartrules.scss +6 -2
  29. package/styles/components/application-and-system/_c8y-cookie-banner.less +36 -0
  30. package/styles/components/{specialized → application-and-system}/_c8y-login.less +20 -6
  31. package/styles/components/data-display-and-visualization/_boxed-label.less +45 -0
  32. package/styles/components/data-display-and-visualization/_boxed-label.scss +46 -0
  33. package/styles/components/{specialized → data-display-and-visualization}/_c8y-data-explorer.less +76 -24
  34. package/styles/components/{specialized → data-display-and-visualization}/_c8y-data-explorer.scss +39 -1
  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 +88 -42
  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 -1
  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 +22 -49
  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 +39 -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 +34 -2
  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-datapoint-pill.scss +0 -0
  215. /package/styles/components/{specialized → data-display-and-visualization}/_c8y-pulse.scss +0 -0
  216. /package/styles/components/{specialized → data-display-and-visualization}/_smart-list-icon-label.scss +0 -0
  217. /package/styles/components/{specialized → data-display-and-visualization}/_status.scss +0 -0
  218. /package/styles/components/{specialized → data-display-and-visualization}/_statusContainer.scss +0 -0
  219. /package/styles/components/{specialized → data-input}/_c8y-countdown-interval.scss +0 -0
  220. /package/styles/components/{specialized → data-input}/_c8y-range.scss +0 -0
  221. /package/styles/components/{specialized → data-input}/_search-header.scss +0 -0
  222. /package/styles/components/{specialized → data-input}/_static-assets-file-picker.scss +0 -0
  223. /package/styles/components/{specialized → navigation-and-layout}/_c8y-role-card.scss +0 -0
  224. /package/styles/components/{specialized → navigation-and-layout}/_c8y-scrollbar.scss +0 -0
  225. /package/styles/components/{specialized → navigation-and-layout}/_c8y-smart-rest-tab.scss +0 -0
  226. /package/styles/components/{specialized → navigation-and-layout}/_c8y-stepper.scss +0 -0
  227. /package/styles/components/{specialized → navigation-and-layout}/_c8y-user-roles.scss +0 -0
  228. /package/styles/components/{specialized → navigation-and-layout}/_device-software-tab.scss +0 -0
  229. /package/styles/components/{specialized → status-feedback-and-notifications}/_c8y-message-banner.scss +0 -0
  230. /package/styles/components/{specialized → status-feedback-and-notifications}/_code.scss +0 -0
  231. /package/styles/mixins/{alert-variant.less → _alert-variant.less} +0 -0
  232. /package/styles/mixins/{animation.less → _animation.less} +0 -0
  233. /package/styles/mixins/{background-variant.less → _background-variant.less} +0 -0
  234. /package/styles/mixins/{border-radius.less → _border-radius.less} +0 -0
  235. /package/styles/mixins/{buttons.less → _buttons.less} +0 -0
  236. /package/styles/mixins/{c8y-scrollbar.less → _c8y-scrollbar.less} +0 -0
  237. /package/styles/mixins/{center-block.less → _center-block.less} +0 -0
  238. /package/styles/mixins/{clearfix.less → _clearfix.less} +0 -0
  239. /package/styles/mixins/{create-grid.less → _create-grid.less} +0 -0
  240. /package/styles/mixins/{grid.less → _grid.less} +0 -0
  241. /package/styles/mixins/{hide-scrollbars.less → _hide-scrollbars.less} +0 -0
  242. /package/styles/mixins/{hide-text.less → _hide-text.less} +0 -0
  243. /package/styles/mixins/{image.less → _image.less} +0 -0
  244. /package/styles/mixins/{labels.less → _labels.less} +0 -0
  245. /package/styles/mixins/{list-group.less → _list-group.less} +0 -0
  246. /package/styles/mixins/{nav-divider.less → _nav-divider.less} +0 -0
  247. /package/styles/mixins/{opacity.less → _opacity.less} +0 -0
  248. /package/styles/mixins/{pagination.less → _pagination.less} +0 -0
  249. /package/styles/mixins/{panels.less → _panels.less} +0 -0
  250. /package/styles/mixins/{reset-filter.less → _reset-filter.less} +0 -0
  251. /package/styles/mixins/{reset-text.less → _reset-text.less} +0 -0
  252. /package/styles/mixins/{resize.less → _resize.less} +0 -0
  253. /package/styles/mixins/{responsive-visibility.less → _responsive-visibility.less} +0 -0
  254. /package/styles/mixins/{size.less → _size.less} +0 -0
  255. /package/styles/mixins/{tab-focus.less → _tab-focus.less} +0 -0
  256. /package/styles/mixins/{table-row.less → _table-row.less} +0 -0
  257. /package/styles/mixins/{tag.less → _tag.less} +0 -0
  258. /package/styles/mixins/{text-emphasis.less → _text-emphasis.less} +0 -0
  259. /package/styles/mixins/{text-overflow.less → _text-overflow.less} +0 -0
  260. /package/variables/{login-vars.scss → _login-vars.scss} +0 -0
  261. /package/variables/{shadows.less → _shadows.less} +0 -0
  262. /package/variables/{shadows.scss → _shadows.scss} +0 -0
  263. /package/variables/tokens/{c8y-design-tokens-dark.scss → _c8y-design-tokens-dark.scss} +0 -0
  264. /package/variables/tokens/{c8y-design-tokens.scss → _c8y-design-tokens.scss} +0 -0
@@ -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"
@@ -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.14.76",
3
+ "version": "1023.14.92",
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.
@@ -1,7 +1,21 @@
1
+
2
+ /**
3
+ * Print Styles - Media query for print layouts
4
+ *
5
+ * Note: Most spacing values use @size-* tokens from the 8px base unit system.
6
+ *
7
+ * Intentionally hardcoded values:
8
+ * - transform: scale(0.97): Scale factor, not spacing
9
+ * - 1px borders: Standard border widths for print
10
+ * - z-index values: Stacking context for print layout
11
+ * - 100vw/99vh: Full viewport dimensions
12
+ * - orphans/widows: Typography print control
13
+ */
14
+
1
15
  @media print {
2
16
  body {
3
17
  --c8y-elevation-sm: 0 0 0 1px rgba(var(--c8y-elevation-color), 0.1);
4
- transform: scale(.97);
18
+ transform: scale(0.97);
5
19
  }
6
20
 
7
21
  *,
@@ -57,9 +71,9 @@
57
71
  }
58
72
 
59
73
  .btn,
60
- .dropup>.btn {
61
- >.caret {
62
- border-top-color: @black !important;
74
+ .dropup > .btn {
75
+ > .caret {
76
+ border-top-color: @black !important;
63
77
  }
64
78
  }
65
79
 
@@ -68,15 +82,14 @@
68
82
 
69
83
  td,
70
84
  th {
71
- background-color: @component-background-default !important;
85
+ background-color: @component-background-default !important;
72
86
  }
73
87
  }
74
88
 
75
89
  .table-bordered {
76
-
77
90
  th,
78
91
  td {
79
- border: 1px solid @gray-90 !important;
92
+ border: 1px solid @gray-90 !important;
80
93
  }
81
94
  }
82
95
 
@@ -93,13 +106,13 @@
93
106
  all: unset;
94
107
  margin-top: 0;
95
108
  margin-left: 0 !important;
96
- padding: 0 24px !important;
109
+ padding: 0 @size-24 !important;
97
110
 
98
111
  &:has(.dashboard) {
99
112
  padding: 0 !important;
100
113
  }
101
114
 
102
- >.container-fluid {
115
+ > .container-fluid {
103
116
  padding-bottom: 0;
104
117
  }
105
118
  }
@@ -116,11 +129,11 @@
116
129
  z-index: 1085 !important;
117
130
  overflow-y: auto;
118
131
  margin: 0 !important;
119
- padding-top: calc(@margin-base * 4) !important;
120
- padding-bottom: 24px !important;
132
+ padding-top: calc(@size-base * 4) !important;
133
+ padding-bottom: @size-24 !important;
121
134
  width: 100vw;
122
135
  height: 99vh;
123
- .c8y-scrollbar();
136
+ &:extend(.c8y-scrollbar);
124
137
 
125
138
  .dashboard {
126
139
  padding-bottom: 0 !important;