@c8y/style 1023.37.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 (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 +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/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 +37 -23
  34. package/styles/components/{specialized → data-display-and-visualization}/_c8y-datapoint-pill.less +29 -13
  35. package/styles/components/{specialized → data-display-and-visualization}/_c8y-pulse.less +33 -6
  36. package/styles/components/data-display-and-visualization/_range-display.less +25 -16
  37. package/styles/components/{specialized → data-display-and-visualization}/_smart-list-icon-label.less +19 -5
  38. package/styles/components/{specialized → data-display-and-visualization}/_status.less +16 -2
  39. package/styles/components/{specialized → data-display-and-visualization}/_statusContainer.less +16 -2
  40. package/styles/components/data-display-and-visualization/_timelines-chart.less +2 -0
  41. package/styles/components/data-display-and-visualization/lists/_c8y-data-point-list.less +10 -0
  42. package/styles/components/data-display-and-visualization/lists/_c8y-empty-state.less +26 -12
  43. package/styles/components/data-display-and-visualization/lists/_c8y-list-group.less +83 -43
  44. package/styles/components/data-display-and-visualization/lists/_cards-layout.less +38 -16
  45. package/styles/components/data-display-and-visualization/lists/_list-group.less +46 -28
  46. package/styles/components/data-display-and-visualization/lists/_smart-rules-template-list.less +12 -1
  47. package/styles/components/data-display-and-visualization/lists/{timeline-list.less → _timeline-list.less} +46 -24
  48. package/styles/components/data-display-and-visualization/tables/_data-grid.less +45 -25
  49. package/styles/components/data-display-and-visualization/tables/_resizable-grid.less +18 -5
  50. package/styles/components/data-display-and-visualization/tables/_tables.less +25 -9
  51. package/styles/components/data-input/_c8y-ai-chat.less +1 -0
  52. package/styles/components/{specialized → data-input}/_c8y-countdown-interval.less +15 -13
  53. package/styles/components/{specialized → data-input}/_c8y-range.less +22 -6
  54. package/styles/components/{specialized → data-input}/_dtm-icon-selector.less +17 -2
  55. package/styles/components/{specialized → data-input}/_dtm-icon-selector.scss +1 -2
  56. package/styles/components/{specialized → data-input}/_measurements-time-control.less +34 -6
  57. package/styles/components/{specialized → data-input}/_measurements-time-control.scss +14 -2
  58. package/styles/components/{specialized → data-input}/_search-header.less +22 -6
  59. package/styles/components/data-input/_static-assets-file-picker.less +22 -0
  60. package/styles/components/data-input/assets/_asset-property-list.less +38 -23
  61. package/styles/components/data-input/assets/_asset-table.less +21 -3
  62. package/styles/components/data-input/assets/_c8y-asset-notes.less +13 -1
  63. package/styles/components/data-input/assets/_c8y-asset-selector-miller.less +27 -8
  64. package/styles/components/data-input/assets/_c8y-asset-selector.less +32 -15
  65. package/styles/components/data-input/assets/_c8y-child-assets-selector.less +90 -9
  66. package/styles/components/{specialized → forms}/_c8y-schema-form.less +44 -17
  67. package/styles/components/{specialized → forms}/_c8y-schema-form.scss +15 -3
  68. package/styles/components/{specialized → navigation-and-layout}/_c8y-role-card.less +21 -5
  69. package/styles/components/{specialized → navigation-and-layout}/_c8y-scrollbar.less +24 -7
  70. package/styles/components/{specialized → navigation-and-layout}/_c8y-smart-rest-tab.less +21 -6
  71. package/styles/components/{specialized → navigation-and-layout}/_c8y-stepper.less +15 -1
  72. package/styles/components/{specialized → navigation-and-layout}/_c8y-user-roles.less +45 -28
  73. package/styles/components/{specialized → navigation-and-layout}/_device-software-tab.less +14 -0
  74. package/styles/components/navigation-and-layout/action-bars/_app-switcher.less +27 -5
  75. package/styles/components/navigation-and-layout/action-bars/_c8y-action-bar.less +49 -21
  76. package/styles/components/navigation-and-layout/cards/_card-dashboard.less +25 -4
  77. package/styles/components/navigation-and-layout/cards/_card-flip.less +41 -14
  78. package/styles/components/navigation-and-layout/cards/_card-grid.less +20 -4
  79. package/styles/components/navigation-and-layout/cards/_card.less +90 -75
  80. package/styles/components/navigation-and-layout/cards/_panels.less +38 -20
  81. package/styles/components/navigation-and-layout/navigation/_breadcrumbs.less +21 -39
  82. package/styles/components/navigation-and-layout/navigation/_c8y-nav-stacked.less +26 -14
  83. package/styles/components/navigation-and-layout/navigation/_main-header.less +41 -13
  84. package/styles/components/navigation-and-layout/navigation/_main-header.scss +1 -1
  85. package/styles/components/navigation-and-layout/navigation/_navbar.less +22 -25
  86. package/styles/components/navigation-and-layout/navigation/_navbar.scss +7 -7
  87. package/styles/components/navigation-and-layout/navigation/_navigator.less +71 -69
  88. package/styles/components/navigation-and-layout/navigation/_navs.less +13 -0
  89. package/styles/components/navigation-and-layout/navigation/_pagination.less +24 -5
  90. package/styles/components/navigation-and-layout/navigation/{steps-navbar.less → _steps-navbar.less} +7 -6
  91. package/styles/components/navigation-and-layout/navigation/_tabs.less +18 -14
  92. package/styles/components/navigation-and-layout/navigation/_tabs.scss +2 -2
  93. package/styles/components/{specialized → status-feedback-and-notifications}/_c8y-message-banner.less +14 -0
  94. package/styles/components/{specialized → status-feedback-and-notifications}/_code.less +18 -2
  95. package/styles/core/buttons/_button-groups.less +29 -79
  96. package/styles/core/buttons/_buttons.less +229 -198
  97. package/styles/core/buttons/_buttons.scss +6 -10
  98. package/styles/core/feedback/_alerts.less +52 -41
  99. package/styles/core/feedback/_badges.less +29 -17
  100. package/styles/core/feedback/_close.less +24 -7
  101. package/styles/core/feedback/_labels.less +21 -8
  102. package/styles/core/feedback/_progress-bars.less +24 -7
  103. package/styles/core/feedback/_tag.less +23 -6
  104. package/styles/core/feedback/_tooltip.less +44 -20
  105. package/styles/core/forms/_c8y-switch.less +39 -19
  106. package/styles/core/forms/_c8y-switch.scss +37 -29
  107. package/styles/core/forms/_file-picker.less +79 -61
  108. package/styles/core/forms/_forms.less +130 -133
  109. package/styles/core/forms/_input-groups.less +110 -59
  110. package/styles/core/forms/_input-groups.scss +21 -3
  111. package/styles/core/overlays/_c8y-dashboard-modal.less +25 -29
  112. package/styles/core/overlays/_c8y-wizard.less +38 -15
  113. package/styles/core/overlays/_dropdowns.less +86 -63
  114. package/styles/core/overlays/_modals.less +58 -40
  115. package/styles/core/overlays/_popovers.less +25 -9
  116. package/styles/dashboard/_availability-pie.less +3 -0
  117. package/styles/dashboard/_c8y-dashboard-style.less +61 -34
  118. package/styles/dashboard/_c8y-gauges.less +20 -4
  119. package/styles/dashboard/_dashboard-widgets.less +17 -4
  120. package/styles/dashboard/_info-gauge.less +20 -5
  121. package/styles/dashboard/_quick-links-widget.less +13 -3
  122. package/styles/{welcome-widget.less → dashboard/_welcome-widget.less} +21 -4
  123. package/styles/dashboard/{welcome.less → _welcome.less} +54 -45
  124. package/styles/icons/_c8y-glyphs.less +12 -1
  125. package/styles/icons/_c8y-glyphs.scss +2 -1
  126. package/styles/icons/_c8y-icons.less +214 -199
  127. package/styles/icons/_dlt-c8y-icons-stroke.less +7238 -1834
  128. package/styles/icons/_dlt-c8y-icons.less +14 -0
  129. package/styles/icons/_marker-icons.less +10 -0
  130. package/styles/index.less +160 -134
  131. package/styles/index.scss +53 -29
  132. package/styles/layout/_bottom-drawer.less +21 -7
  133. package/styles/layout/_c8y-help-drawer.less +30 -9
  134. package/styles/layout/_c8y-right-drawer.less +34 -19
  135. package/styles/layout/_c8y-top-drawer.less +43 -28
  136. package/styles/layout/_grid.less +18 -4
  137. package/styles/layout/_group-info.less +14 -2
  138. package/styles/layout/_layouts.less +48 -30
  139. package/styles/layout/_mcontainer.less +26 -12
  140. package/styles/layout/_page-tabs.less +115 -23
  141. package/styles/layout/_split-scroll.less +16 -4
  142. package/styles/layout/_split-view.less +19 -5
  143. package/styles/login-app-use.scss +2 -2
  144. package/styles/login-app.less +4 -4
  145. package/styles/mixins/_buttons.scss +1 -0
  146. package/styles/mixins/{color-mixins.less → _color-mixins.less} +2 -2
  147. package/styles/mixins/{element-queries.less → _element-queries.less} +2 -2
  148. package/styles/mixins/{forms.less → _forms.less} +1 -1
  149. package/styles/mixins/_gradients.less +117 -0
  150. package/styles/mixins/{grid-framework.less → _grid-framework.less} +21 -21
  151. package/styles/mixins/_icon-base.less +29 -0
  152. package/styles/mixins/{nav-vertical-align.less → _nav-vertical-align.less} +6 -2
  153. package/styles/mixins/_nav-vertical-align.scss +5 -2
  154. package/styles/mixins/{progress-bar.less → _progress-bar.less} +1 -1
  155. package/styles/mixins/{shadows-helper.less → _shadows-helper.less} +3 -5
  156. package/styles/mixins/_shadows-helper.scss +1 -4
  157. package/styles/mixins/{vendor-prefixes.less → _vendor-prefixes.less} +7 -22
  158. package/styles/mixins/_vendor-prefixes.scss +1 -17
  159. package/styles/utilities/_borders.less +21 -11
  160. package/styles/{components/specialized → utilities}/_c8y-utils.less +14 -0
  161. package/styles/{components/specialized → utilities}/_c8y-utils.scss +1 -1
  162. package/styles/utilities/_caret.less +18 -4
  163. package/styles/utilities/_container-queries.less +11 -3
  164. package/styles/utilities/_contextual-colors.less +48 -119
  165. package/styles/utilities/_display.less +26 -41
  166. package/styles/utilities/_elevation.less +17 -7
  167. package/styles/utilities/_flex-containers.less +10 -0
  168. package/styles/utilities/_flex-items.less +11 -0
  169. package/styles/utilities/_icon-utils.less +15 -3
  170. package/styles/utilities/_margins-paddings.less +23 -4
  171. package/styles/utilities/_overflows.less +10 -0
  172. package/styles/utilities/_position.less +11 -0
  173. package/styles/utilities/_quickfloats.less +20 -1
  174. package/styles/utilities/_separators.less +11 -0
  175. package/styles/utilities/_shadows.less +5 -49
  176. package/styles/{utilities.less → utilities/_sizing.less} +13 -21
  177. package/styles/utilities/_text-utils.less +35 -24
  178. package/styles/vendor/ace-editor/_ace-editor.less +1 -0
  179. package/styles/vendor/angular/_loading-bar.less +1 -0
  180. package/styles/vendor/angular/_ui-sortable.less +2 -1
  181. package/styles/vendor/angular/_uib-accordion.less +1 -0
  182. package/styles/{angular-ui-select/select.less → vendor/angular/angular-ui-select/_select.less} +2 -10
  183. package/styles/vendor/cdk/_cdk-drag.less +3 -0
  184. package/styles/vendor/cdk/_cdk-tree.less +6 -3
  185. package/styles/vendor/cdk/_cdk-virtual-scroll-window.less +1 -0
  186. package/styles/vendor/datepicker/_bs-datepicker.less +26 -6
  187. package/styles/vendor/datepicker/_uib-datepicker.less +37 -4
  188. package/styles/vendor/leaflet/_c8y-map-internal.less +44 -54
  189. package/styles/vendor/leaflet/_leaflet.less +4 -1
  190. package/styles/vendor/other/_colorpicker.less +3 -2
  191. package/styles/vendor/selectize/_c8y-selectize.less +33 -10
  192. package/variables/_color-defaults.less +29 -10
  193. package/variables/_color-defaults.scss +29 -10
  194. package/variables/_color-vars.less +37 -89
  195. package/variables/_color-vars.scss +19 -77
  196. package/variables/{login-vars.less → _login-vars.less} +3 -5
  197. package/variables/index.less +3 -3
  198. package/variables/tokens/{c8y-design-tokens-dark.less → _c8y-design-tokens-dark.less} +5 -1
  199. package/variables/tokens/{c8y-design-tokens.less → _c8y-design-tokens.less} +5 -1
  200. package/styles/components/specialized/_boxed-label.less +0 -21
  201. package/styles/components/specialized/_boxed-label.scss +0 -36
  202. package/styles/components/specialized/_c8y-cookie-banner.less +0 -22
  203. package/styles/components/specialized/_static-assets-file-picker.less +0 -8
  204. package/styles/dashboard/welcome-widget.less +0 -50
  205. package/styles/mixins/gradients.less +0 -142
  206. package/styles/mixins.less +0 -45
  207. package/styles/steps-navbar.less +0 -97
  208. package/styles/timeline-list.less +0 -210
  209. package/styles/vendor/angular/angular-ui-select/select.less +0 -161
  210. package/styles/welcome.less +0 -128
  211. /package/styles/components/{specialized → application-and-system}/_c8y-cookie-banner.scss +0 -0
  212. /package/styles/components/{specialized → application-and-system}/_c8y-login.scss +0 -0
  213. /package/styles/components/{specialized → data-display-and-visualization}/_c8y-data-explorer.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
@@ -1,4 +1,4 @@
1
- @import 'variables/login-vars.less';
1
+ @import 'variables/_login-vars.less';
2
2
 
3
3
  // font-faces are declared here so that font-files are not loaded in other brandings
4
4
  @import (css) '~@fontsource/public-sans/400.css';
@@ -0,0 +1,155 @@
1
+ # Variable Import Optimization for LESS
2
+
3
+ ## Background
4
+
5
+ LESS and SCSS handle imports differently:
6
+
7
+ - **SCSS `@use`**: Module system with **local scope** - each file must explicitly import what it needs
8
+ - **LESS `@import`**: **Global scope** - variables imported at entry points are available to all subsequent imports
9
+
10
+ ## The Issue
11
+
12
+ When migrating from LESS to SCSS (and back), we kept variable imports in every component file:
13
+
14
+ ```less
15
+ // Every component file had this:
16
+ @import "../../../variables/index.less";
17
+ ```
18
+
19
+ This was:
20
+ - ✅ **Necessary in SCSS** (module system requires explicit imports)
21
+ - ❌ **Redundant in LESS** (variables already available from entry points)
22
+
23
+ ## Entry Points Import Variables
24
+
25
+ All entry points already import variables at the top:
26
+
27
+ ```less
28
+ // main.less → branding.less
29
+ @import 'variables/index.less';
30
+
31
+ // login.less → branding-login.less
32
+ @import 'variables/_login-vars.less';
33
+ ```
34
+
35
+ Since LESS has global scope, **all subsequent imports** automatically have access to these variables.
36
+
37
+ ## Changes Made
38
+
39
+ ### 1. Updated Conversion Script
40
+
41
+ Modified `convert-scss-to-less.sh` to automatically remove variable imports from converted LESS files:
42
+
43
+ ```bash
44
+ # New section 0e - Remove redundant variable imports
45
+ content=$(echo "$content" | sed -E '/@import[[:space:]]+.*variables\/index\.less/d')
46
+ content=$(echo "$content" | sed -E '/@import[[:space:]]+.*variables\/_login-vars\.less/d')
47
+ ```
48
+
49
+ **Why**: Prevents the pre-commit hook from re-adding variable imports every time you commit SCSS changes.
50
+
51
+ ### 2. Created Cleanup Script
52
+
53
+ Created `remove-redundant-variable-imports.sh` to clean up existing LESS files:
54
+
55
+ ```bash
56
+ ./helper-scripts/remove-redundant-variable-imports.sh
57
+ ```
58
+
59
+ This script:
60
+ - Finds all LESS files with variable imports (except entry points)
61
+ - Shows a preview of files to be modified
62
+ - Asks for confirmation before making changes
63
+ - Removes redundant `@import` statements
64
+
65
+ ### 3. Files That SHOULD Keep Variable Imports
66
+
67
+ Only entry point files should import variables:
68
+
69
+ - ✅ `branding.less`
70
+ - ✅ `branding-login.less`
71
+ - ✅ `styles/login-app.less`
72
+
73
+ All other files (components, mixins, utilities) get variables from the entry point.
74
+
75
+ ## Benefits
76
+
77
+ 1. **Reduced file size**: ~150 files × 1 line = 150 lines removed
78
+ 2. **Clearer architecture**: Shows that LESS uses global scope
79
+ 3. **No accidental overrides**: Can't accidentally redefine variables in component files
80
+ 4. **Faster compilation**: Fewer imports to process
81
+ 5. **Easier maintenance**: One source of truth for variables
82
+
83
+ ## Migration Path
84
+
85
+ To remove redundant imports from existing LESS files:
86
+
87
+ ```bash
88
+ cd packages/style
89
+ ./helper-scripts/remove-redundant-variable-imports.sh
90
+ npm test # Verify compilation still works
91
+ git diff # Review changes
92
+ git add .
93
+ git commit -m "Remove redundant variable imports from LESS files"
94
+ ```
95
+
96
+ ## Future Commits
97
+
98
+ The pre-commit hook now automatically:
99
+ 1. Converts SCSS → LESS when you commit SCSS changes
100
+ 2. **Removes variable imports** from the LESS output
101
+ 3. Stages the updated LESS files
102
+ 4. Verifies both SCSS and LESS compile successfully
103
+
104
+ You don't need to do anything special - it's all automatic!
105
+
106
+ ## Technical Details
107
+
108
+ ### LESS Import Chain
109
+
110
+ ```
111
+ main.less
112
+ → branding.less
113
+ → variables/index.less ✅ (variables defined here)
114
+ → export.less
115
+ → styles/index.less
116
+ → _mixins.less (has access to variables)
117
+ → base/* (has access to variables)
118
+ → components/* (has access to variables)
119
+ ```
120
+
121
+ ### SCSS Module Chain
122
+
123
+ ```scss
124
+ main.scss
125
+ → branding.scss
126
+ → styles/index.scss
127
+ // Each file with @use has local scope:
128
+ → core/buttons/_buttons.scss
129
+ @use "../../../variables/index" as *; ✅ (needed)
130
+ ```
131
+
132
+ ## Why Not Remove from Mixins?
133
+
134
+ You might notice files like `_shadows-helper.less` import variables. These imports are technically redundant BUT:
135
+
136
+ - **All mixins are imported via `_mixins.less`** which is imported AFTER variables in the entry point
137
+ - **Variables are already available** when mixins are loaded
138
+ - **Could be removed** but kept for documentation/safety in case import order changes
139
+
140
+ ## FAQs
141
+
142
+ **Q: Won't my LESS files break without variable imports?**
143
+ A: No! LESS has global scope. Once variables are imported at the entry point, they're available everywhere.
144
+
145
+ **Q: What about SCSS files?**
146
+ A: SCSS files MUST keep their `@use` statements. The module system requires explicit imports.
147
+
148
+ **Q: Will the conversion script re-add them?**
149
+ A: No! The updated script automatically removes them during conversion.
150
+
151
+ **Q: What if I use a component file standalone?**
152
+ A: Component files should never be compiled standalone - they must go through an entry point (main.less or login.less).
153
+
154
+ **Q: Does this affect compilation?**
155
+ A: No impact! Both SCSS and LESS compile successfully. The output is identical (1.00% difference).
@@ -0,0 +1,104 @@
1
+ # Helper Scripts
2
+
3
+ Build and maintenance scripts for the @c8y/style package.
4
+
5
+ ## Scripts
6
+
7
+ ### `convert-scss-to-less.sh`
8
+ Semi-automated SCSS to LESS converter with syntax transformation.
9
+
10
+ **Usage:**
11
+ ```bash
12
+ # Convert all modified SCSS files
13
+ ./helper-scripts/convert-scss-to-less.sh --all
14
+
15
+ # Convert specific file (interactive)
16
+ ./helper-scripts/convert-scss-to-less.sh styles/path/to/file.scss
17
+
18
+ # Auto-convert without prompts (used by pre-commit hook)
19
+ ./helper-scripts/convert-scss-to-less.sh --yes --all
20
+
21
+ # Dry run (preview changes only)
22
+ ./helper-scripts/convert-scss-to-less.sh --dry-run styles/path/to/file.scss
23
+ ```
24
+
25
+ **Features:**
26
+ - Converts SCSS syntax to LESS (@use → @import, $var → @var, @mixin → .mixin)
27
+ - Transforms mixin parameter separators (commas → semicolons)
28
+ - Converts @extend to :extend() syntax
29
+ - Warns about complex patterns (@if/@else, @content)
30
+ - Respects skip list (`scss-to-less-skip`)
31
+ - Calls specialized converter for stroke icons
32
+ - Verifies compilation after conversion
33
+
34
+ ### `convert-stroke-icons-to-less.js`
35
+ Specialized Node.js converter for stroke icon files.
36
+
37
+ **Usage:**
38
+ ```bash
39
+ node ./helper-scripts/convert-stroke-icons-to-less.js
40
+ ```
41
+
42
+ **Purpose:**
43
+ - Handles complex stroke icon file conversion
44
+ - Called automatically by `convert-scss-to-less.sh` when processing icon files
45
+
46
+ ### `sync-scss-to-less.sh`
47
+ Checks if LESS files are in sync with modified SCSS files.
48
+
49
+ **Usage:**
50
+ ```bash
51
+ ./helper-scripts/sync-scss-to-less.sh
52
+ ```
53
+
54
+ **Purpose:**
55
+ - Detects when SCSS files have been modified
56
+ - Warns if corresponding LESS files haven't been updated
57
+ - Suggests conversion commands
58
+
59
+ ### `test-compile.sh`
60
+ Quick compilation test for both LESS and SCSS.
61
+
62
+ **Usage:**
63
+ ```bash
64
+ # Run directly
65
+ ./helper-scripts/test-compile.sh
66
+
67
+ # Or via npm
68
+ npm test
69
+ ```
70
+
71
+ **Checks:**
72
+ - LESS compilation succeeds
73
+ - SCSS compilation succeeds
74
+ - Output file sizes match (within 5%)
75
+ - Displays deprecation warnings
76
+
77
+ ## Configuration Files
78
+
79
+ ### `scss-to-less-skip`
80
+
81
+ Lists files that should NOT be automatically converted.
82
+
83
+ Files in this list require manual synchronization due to complex syntax patterns that the converter cannot reliably handle.
84
+
85
+ See `../markdown-files/MANUAL-SYNC-FILES.md` for details on manually maintained files.
86
+
87
+ ## Git Hook Integration
88
+
89
+ The `convert-scss-to-less.sh` script is automatically run by the pre-commit hook (`.husky/pre-commit`) when SCSS files are modified on `develop` or `feat/*` branches.
90
+
91
+ ## Directory Structure
92
+
93
+ ```
94
+ packages/style/
95
+ ├── helper-scripts/ # All build/maintenance scripts
96
+ │ ├── README.md # This file
97
+ │ ├── scss-to-less-skip # Config: files to skip during conversion
98
+ │ ├── convert-scss-to-less.sh # Main SCSS→LESS converter
99
+ │ ├── convert-stroke-icons-to-less.js # Specialized icon converter
100
+ │ ├── sync-scss-to-less.sh # Sync checker
101
+ │ └── test-compile.sh # Compilation test
102
+ └── markdown-files/ # Documentation
103
+ └── MANUAL-SYNC-FILES.md # Manual sync documentation
104
+ ```