light-chaser-pro 1.0.0

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 (730) hide show
  1. package/.trae/.ignore +1 -0
  2. package/LICENSE +21 -0
  3. package/README.md +99 -0
  4. package/UI_DESIGN_SPEC.md +130 -0
  5. package/deploy.bat +98 -0
  6. package/doc//344/277/256/345/244/215/347/224/273/345/270/203/350/207/252/351/200/202/345/272/224bug/350/203/214/345/220/216/347/232/204/347/220/206/350/256/272/347/237/245/350/257/206.md +291 -0
  7. package/light-chaser-app/.dockerignore +6 -0
  8. package/light-chaser-app/.eslintrc.cjs +19 -0
  9. package/light-chaser-app/Dockerfile +40 -0
  10. package/light-chaser-app/command.md +23 -0
  11. package/light-chaser-app/index.html +30 -0
  12. package/light-chaser-app/nginx.conf +31 -0
  13. package/light-chaser-app/package.json +74 -0
  14. package/light-chaser-app/public/favicon.ico +0 -0
  15. package/light-chaser-app/release.html +38 -0
  16. package/light-chaser-app/src/api/ReponseHandler.ts +49 -0
  17. package/light-chaser-app/src/api/RoleApi.ts +28 -0
  18. package/light-chaser-app/src/api/engineering/AbstractApi.ts +75 -0
  19. package/light-chaser-app/src/api/engineering/ApiManager.ts +26 -0
  20. package/light-chaser-app/src/api/engineering/BaseApi.ts +131 -0
  21. package/light-chaser-app/src/api/engineering/PureShowApi.ts +28 -0
  22. package/light-chaser-app/src/comps/antd/area-base/AntdBaseAreaConfig.tsx +269 -0
  23. package/light-chaser-app/src/comps/antd/area-base/AntdBaseAreaDefinition.ts +232 -0
  24. package/light-chaser-app/src/comps/antd/area-base/base-area.png +0 -0
  25. package/light-chaser-app/src/comps/antd/area-percent/AntdPercentAreaDefinition.ts +241 -0
  26. package/light-chaser-app/src/comps/antd/area-percent/percent-area.png +0 -0
  27. package/light-chaser-app/src/comps/antd/area-stack/AntdStackAreaDefinition.ts +212 -0
  28. package/light-chaser-app/src/comps/antd/area-stack/stack-area.png +0 -0
  29. package/light-chaser-app/src/comps/antd/bar-base/AntdBaseBarDefinition.ts +134 -0
  30. package/light-chaser-app/src/comps/antd/bar-base/base-bar.png +0 -0
  31. package/light-chaser-app/src/comps/antd/bar-group/AntdGroupBarDefinition.ts +160 -0
  32. package/light-chaser-app/src/comps/antd/bar-group/group-bar.png +0 -0
  33. package/light-chaser-app/src/comps/antd/bar-percent/AntdPercentBarController.ts +21 -0
  34. package/light-chaser-app/src/comps/antd/bar-percent/AntdPercentBarDefinition.ts +167 -0
  35. package/light-chaser-app/src/comps/antd/bar-percent/percent-bar.png +0 -0
  36. package/light-chaser-app/src/comps/antd/bar-range/AntdRangeBarDefinition.ts +180 -0
  37. package/light-chaser-app/src/comps/antd/bar-range/range-bar.png +0 -0
  38. package/light-chaser-app/src/comps/antd/bar-stack/AntdStackBarDefinition.ts +144 -0
  39. package/light-chaser-app/src/comps/antd/bar-stack/stack-bar.png +0 -0
  40. package/light-chaser-app/src/comps/antd/column-base/AntdBaseColumnDefinition.ts +144 -0
  41. package/light-chaser-app/src/comps/antd/column-base/base-column.png +0 -0
  42. package/light-chaser-app/src/comps/antd/column-group/AntdGroupColumnDefinition.ts +154 -0
  43. package/light-chaser-app/src/comps/antd/column-group/group-column.png +0 -0
  44. package/light-chaser-app/src/comps/antd/column-percent/AntdPercentColumnDefinition.ts +168 -0
  45. package/light-chaser-app/src/comps/antd/column-percent/percent-column.png +0 -0
  46. package/light-chaser-app/src/comps/antd/column-range/AntdRangeColumnDefinition.ts +178 -0
  47. package/light-chaser-app/src/comps/antd/column-range/range-column.png +0 -0
  48. package/light-chaser-app/src/comps/antd/column-stack/AntdStackColumnDefinition.ts +152 -0
  49. package/light-chaser-app/src/comps/antd/column-stack/stack-column.png +0 -0
  50. package/light-chaser-app/src/comps/antd/g2plot-custom/G2PlotCustomConfig.tsx +80 -0
  51. package/light-chaser-app/src/comps/antd/g2plot-custom/G2PlotCustomController.ts +83 -0
  52. package/light-chaser-app/src/comps/antd/g2plot-custom/G2PlotCustomDefinition.ts +160 -0
  53. package/light-chaser-app/src/comps/antd/g2plot-custom/g2-plot-custom.png +0 -0
  54. package/light-chaser-app/src/comps/antd/gauge/AntdGaugeConfig.tsx +423 -0
  55. package/light-chaser-app/src/comps/antd/gauge/AntdGaugeController.ts +110 -0
  56. package/light-chaser-app/src/comps/antd/gauge/AntdGaugeDefinition.ts +162 -0
  57. package/light-chaser-app/src/comps/antd/gauge/gauge.png +0 -0
  58. package/light-chaser-app/src/comps/antd/line-base/AntdBaseLineDefinition.ts +147 -0
  59. package/light-chaser-app/src/comps/antd/line-base/base-line.png +0 -0
  60. package/light-chaser-app/src/comps/antd/line-multi/AntdMultiLineConfig.tsx +241 -0
  61. package/light-chaser-app/src/comps/antd/line-multi/AntdMultiLineDefinition.ts +244 -0
  62. package/light-chaser-app/src/comps/antd/line-multi/multi-line.png +0 -0
  63. package/light-chaser-app/src/comps/antd/line-step/AntdStepLineDefinition.ts +171 -0
  64. package/light-chaser-app/src/comps/antd/line-step/step-line.png +0 -0
  65. package/light-chaser-app/src/comps/antd/liquid/AntdLiquidConfig.tsx +338 -0
  66. package/light-chaser-app/src/comps/antd/liquid/AntdLiquidController.ts +106 -0
  67. package/light-chaser-app/src/comps/antd/liquid/AntdLiquidDefinition.ts +152 -0
  68. package/light-chaser-app/src/comps/antd/liquid/liquid.png +0 -0
  69. package/light-chaser-app/src/comps/antd/pie/AntdPieController.ts +74 -0
  70. package/light-chaser-app/src/comps/antd/pie/AntdPieDefinition.ts +165 -0
  71. package/light-chaser-app/src/comps/antd/pie/AntdPieStyleConfig.tsx +528 -0
  72. package/light-chaser-app/src/comps/antd/pie/pie.png +0 -0
  73. package/light-chaser-app/src/comps/antd/radar/AntdRadarController.ts +110 -0
  74. package/light-chaser-app/src/comps/antd/radar/AntdRadarDefinition.ts +187 -0
  75. package/light-chaser-app/src/comps/antd/radar/AntdRadarStyleConfig.tsx +270 -0
  76. package/light-chaser-app/src/comps/antd/radar/radar.png +0 -0
  77. package/light-chaser-app/src/comps/antd/radial-bar-base/AntdBaseRadialBarController.ts +79 -0
  78. package/light-chaser-app/src/comps/antd/radial-bar-base/AntdBaseRadialBarDefinition.ts +124 -0
  79. package/light-chaser-app/src/comps/antd/radial-bar-base/AntdBaseRadialBarStyleConfig.tsx +275 -0
  80. package/light-chaser-app/src/comps/antd/radial-bar-base/base-radial-bar.png +0 -0
  81. package/light-chaser-app/src/comps/antd/ring-progress/AntdRingProgressConfig.tsx +334 -0
  82. package/light-chaser-app/src/comps/antd/ring-progress/AntdRingProgressController.ts +85 -0
  83. package/light-chaser-app/src/comps/antd/ring-progress/AntdRingProgressDefinition.ts +138 -0
  84. package/light-chaser-app/src/comps/antd/ring-progress/ring-progress.png +0 -0
  85. package/light-chaser-app/src/comps/antd/rose-base/AntdBaseRoseDefinition.ts +102 -0
  86. package/light-chaser-app/src/comps/antd/rose-base/base-rose.png +0 -0
  87. package/light-chaser-app/src/comps/antd/rose-group/AntdGroupRoseDefinition.ts +127 -0
  88. package/light-chaser-app/src/comps/antd/rose-group/group-rose.png +0 -0
  89. package/light-chaser-app/src/comps/antd/rose-stack/AntdStackRoseDefinition.ts +142 -0
  90. package/light-chaser-app/src/comps/antd/rose-stack/stack-rose.png +0 -0
  91. package/light-chaser-app/src/comps/antd/scatter-bubble/AntdScatterBubbleDefinition.ts +192 -0
  92. package/light-chaser-app/src/comps/antd/scatter-bubble/scatter-bubble.png +0 -0
  93. package/light-chaser-app/src/comps/antd/scatter-point/AntdScatterPointDefinition.ts +143 -0
  94. package/light-chaser-app/src/comps/antd/scatter-point/scatter-point.png +0 -0
  95. package/light-chaser-app/src/comps/antd/word-cloud/AntdWordCloudConfig.tsx +167 -0
  96. package/light-chaser-app/src/comps/antd/word-cloud/AntdWordCloudController.ts +75 -0
  97. package/light-chaser-app/src/comps/antd/word-cloud/AntdWordCloudDefinition.ts +198 -0
  98. package/light-chaser-app/src/comps/antd/word-cloud/word-cloud.png +0 -0
  99. package/light-chaser-app/src/comps/antd-common/AntdBaseDesignerController.ts +96 -0
  100. package/light-chaser-app/src/comps/antd-common/AntdCommonDefinition.ts +51 -0
  101. package/light-chaser-app/src/comps/antd-common/AntdCommonUtil.ts +27 -0
  102. package/light-chaser-app/src/comps/antd-common/area/AbstractAreaDefinition.ts +53 -0
  103. package/light-chaser-app/src/comps/antd-common/area/AntdAreaCommonConfig.tsx +276 -0
  104. package/light-chaser-app/src/comps/antd-common/area/AntdCommonAreaController.ts +108 -0
  105. package/light-chaser-app/src/comps/antd-common/bar/AbstractBarDefinition.ts +52 -0
  106. package/light-chaser-app/src/comps/antd-common/bar/AntdBarCommonConfig.tsx +177 -0
  107. package/light-chaser-app/src/comps/antd-common/bar/AntdCommonBarController.ts +98 -0
  108. package/light-chaser-app/src/comps/antd-common/column/AbstractColumnDefinition.ts +51 -0
  109. package/light-chaser-app/src/comps/antd-common/column/AntdColumnCommonConfig.tsx +185 -0
  110. package/light-chaser-app/src/comps/antd-common/column/AntdCommonColumnController.ts +99 -0
  111. package/light-chaser-app/src/comps/antd-common/config/AntdFragment.tsx +40 -0
  112. package/light-chaser-app/src/comps/antd-common/config/axis/AxisConfig.tsx +555 -0
  113. package/light-chaser-app/src/comps/antd-common/config/legend/AntdLegend.tsx +279 -0
  114. package/light-chaser-app/src/comps/antd-common/config/legend/Legend.less +68 -0
  115. package/light-chaser-app/src/comps/antd-common/config/tooltip/G2Tooltip.tsx +62 -0
  116. package/light-chaser-app/src/comps/antd-common/line/AbstractLineDefinition.ts +53 -0
  117. package/light-chaser-app/src/comps/antd-common/line/AntdCommonLineController.ts +109 -0
  118. package/light-chaser-app/src/comps/antd-common/line/AntdLineCommonConfig.tsx +229 -0
  119. package/light-chaser-app/src/comps/antd-common/rose/AbstractRoseDefinition.ts +52 -0
  120. package/light-chaser-app/src/comps/antd-common/rose/AntdCommonRoseController.ts +67 -0
  121. package/light-chaser-app/src/comps/antd-common/rose/AntdRoseCommonConfig.tsx +279 -0
  122. package/light-chaser-app/src/comps/antd-common/scatter/AbstractScatterDefinition.ts +51 -0
  123. package/light-chaser-app/src/comps/antd-common/scatter/AntdCommonScatterController.ts +96 -0
  124. package/light-chaser-app/src/comps/antd-common/scatter/AntdScatterCommonConfig.tsx +210 -0
  125. package/light-chaser-app/src/comps/antd-common/types.ts +82 -0
  126. package/light-chaser-app/src/comps/antd-common/util/G2ColorUtil.ts +129 -0
  127. package/light-chaser-app/src/comps/common-component/animation-config/AnimationConfig.less +23 -0
  128. package/light-chaser-app/src/comps/common-component/animation-config/AnimationConfig.tsx +26 -0
  129. package/light-chaser-app/src/comps/common-component/base-info/BaseInfo.tsx +238 -0
  130. package/light-chaser-app/src/comps/common-component/base-info/BaseInfoStore.ts +36 -0
  131. package/light-chaser-app/src/comps/common-component/config-code/ConfigCode.tsx +62 -0
  132. package/light-chaser-app/src/comps/common-component/data-config/DataConfig.tsx +130 -0
  133. package/light-chaser-app/src/comps/common-component/data-source-config/ApiDataConfig.tsx +285 -0
  134. package/light-chaser-app/src/comps/common-component/data-source-config/CommonApiConfig.tsx +210 -0
  135. package/light-chaser-app/src/comps/common-component/data-source-config/DataSourceConfig.less +19 -0
  136. package/light-chaser-app/src/comps/common-component/data-source-config/DataSourceConfig.tsx +151 -0
  137. package/light-chaser-app/src/comps/common-component/data-source-config/DatabaseConfig.tsx +241 -0
  138. package/light-chaser-app/src/comps/common-component/data-source-config/GlobalVariableConfig.tsx +178 -0
  139. package/light-chaser-app/src/comps/common-component/data-source-config/MQTTConfig.tsx +311 -0
  140. package/light-chaser-app/src/comps/common-component/data-source-config/StaticDataConfig.tsx +156 -0
  141. package/light-chaser-app/src/comps/common-component/data-source-config/WebSocketConfig.tsx +183 -0
  142. package/light-chaser-app/src/comps/common-component/filter-config/FilterConfig.less +18 -0
  143. package/light-chaser-app/src/comps/common-component/filter-config/FilterConfig.tsx +175 -0
  144. package/light-chaser-app/src/comps/common-component/floating-modal/FloatingModal.less +116 -0
  145. package/light-chaser-app/src/comps/common-component/floating-modal/FloatingModal.tsx +166 -0
  146. package/light-chaser-app/src/comps/common-component/schema-fragment/SchemaFragment.ts +137 -0
  147. package/light-chaser-app/src/comps/common-component/theme-config/ThemeConfig.tsx +57 -0
  148. package/light-chaser-app/src/comps/common-component/theme-config/theme-editor/ThemeEditor.less +189 -0
  149. package/light-chaser-app/src/comps/common-component/theme-config/theme-editor/ThemeEditor.tsx +199 -0
  150. package/light-chaser-app/src/comps/common-component/theme-config/theme-item/ColorPreviewItem.less +16 -0
  151. package/light-chaser-app/src/comps/common-component/theme-config/theme-item/ColorPreviewItem.tsx +16 -0
  152. package/light-chaser-app/src/comps/common-component/theme-config/theme-item/ThemeItem.less +82 -0
  153. package/light-chaser-app/src/comps/common-component/theme-config/theme-item/ThemeItem.tsx +66 -0
  154. package/light-chaser-app/src/comps/common-component/theme-config/theme-list/ThemeList.tsx +66 -0
  155. package/light-chaser-app/src/comps/echarts/EChartsConfig.tsx +80 -0
  156. package/light-chaser-app/src/comps/echarts/EChartsController.ts +121 -0
  157. package/light-chaser-app/src/comps/echarts/EChartsCustomDataUpdateConfig.tsx +80 -0
  158. package/light-chaser-app/src/comps/echarts/EChartsDefinition.ts +186 -0
  159. package/light-chaser-app/src/comps/echarts/echarts.png +0 -0
  160. package/light-chaser-app/src/comps/group-layer/GroupLayer.tsx +90 -0
  161. package/light-chaser-app/src/comps/group-layer/GroupLayerController.ts +64 -0
  162. package/light-chaser-app/src/comps/group-layer/GroupLayerDefinition.ts +95 -0
  163. package/light-chaser-app/src/comps/lc/base-button/BaseButtonComponent.less +105 -0
  164. package/light-chaser-app/src/comps/lc/base-button/BaseButtonComponent.tsx +81 -0
  165. package/light-chaser-app/src/comps/lc/base-button/BaseButtonConfig.tsx +186 -0
  166. package/light-chaser-app/src/comps/lc/base-button/BaseButtonController.ts +75 -0
  167. package/light-chaser-app/src/comps/lc/base-button/BaseButtonDefinition.ts +112 -0
  168. package/light-chaser-app/src/comps/lc/base-button/base-button.png +0 -0
  169. package/light-chaser-app/src/comps/lc/base-color-block/BaseColorBlockComponent.tsx +65 -0
  170. package/light-chaser-app/src/comps/lc/base-color-block/BaseColorBlockConfig.tsx +97 -0
  171. package/light-chaser-app/src/comps/lc/base-color-block/BaseColorBlockController.ts +69 -0
  172. package/light-chaser-app/src/comps/lc/base-color-block/BaseColorBlockDefinition.ts +95 -0
  173. package/light-chaser-app/src/comps/lc/base-color-block/base-color-block.png +0 -0
  174. package/light-chaser-app/src/comps/lc/base-iframe/BaseIframeComponent.tsx +65 -0
  175. package/light-chaser-app/src/comps/lc/base-iframe/BaseIframeConfig.tsx +45 -0
  176. package/light-chaser-app/src/comps/lc/base-iframe/BaseIframeController.ts +57 -0
  177. package/light-chaser-app/src/comps/lc/base-iframe/BaseIframeDefinition.ts +77 -0
  178. package/light-chaser-app/src/comps/lc/base-iframe/base-iframe.png +0 -0
  179. package/light-chaser-app/src/comps/lc/base-image/BaseImageComponent.tsx +86 -0
  180. package/light-chaser-app/src/comps/lc/base-image/BaseImageConfig.tsx +100 -0
  181. package/light-chaser-app/src/comps/lc/base-image/BaseImageController.ts +72 -0
  182. package/light-chaser-app/src/comps/lc/base-image/BaseImageDefinition.ts +89 -0
  183. package/light-chaser-app/src/comps/lc/base-image/baseImage.png +0 -0
  184. package/light-chaser-app/src/comps/lc/base-input/BaseInputComponent.less +44 -0
  185. package/light-chaser-app/src/comps/lc/base-input/BaseInputComponent.tsx +92 -0
  186. package/light-chaser-app/src/comps/lc/base-input/BaseInputConfig.tsx +173 -0
  187. package/light-chaser-app/src/comps/lc/base-input/BaseInputController.ts +77 -0
  188. package/light-chaser-app/src/comps/lc/base-input/BaseInputDefinition.ts +114 -0
  189. package/light-chaser-app/src/comps/lc/base-input/base-input.png +0 -0
  190. package/light-chaser-app/src/comps/lc/base-select/BaseSelectComponent.less +17 -0
  191. package/light-chaser-app/src/comps/lc/base-select/BaseSelectComponent.tsx +91 -0
  192. package/light-chaser-app/src/comps/lc/base-select/BaseSelectConfig.tsx +182 -0
  193. package/light-chaser-app/src/comps/lc/base-select/BaseSelectController.ts +92 -0
  194. package/light-chaser-app/src/comps/lc/base-select/BaseSelectDefinition.ts +116 -0
  195. package/light-chaser-app/src/comps/lc/base-select/base-select.png +0 -0
  196. package/light-chaser-app/src/comps/lc/base-switch/BaseSwitchComponent.less +9 -0
  197. package/light-chaser-app/src/comps/lc/base-switch/BaseSwitchComponent.tsx +190 -0
  198. package/light-chaser-app/src/comps/lc/base-switch/BaseSwitchController.ts +104 -0
  199. package/light-chaser-app/src/comps/lc/base-switch/BaseSwitchDefinition.ts +134 -0
  200. package/light-chaser-app/src/comps/lc/base-switch/BaseSwitchStyleConfig.tsx +187 -0
  201. package/light-chaser-app/src/comps/lc/base-switch/base-switch.png +0 -0
  202. package/light-chaser-app/src/comps/lc/base-tab/BaseTabComponent.less +90 -0
  203. package/light-chaser-app/src/comps/lc/base-tab/BaseTabComponent.tsx +240 -0
  204. package/light-chaser-app/src/comps/lc/base-tab/BaseTabController.ts +112 -0
  205. package/light-chaser-app/src/comps/lc/base-tab/BaseTabDefinition.ts +137 -0
  206. package/light-chaser-app/src/comps/lc/base-tab/BaseTabStyleConfig.tsx +278 -0
  207. package/light-chaser-app/src/comps/lc/base-tab/tab.jpg +0 -0
  208. package/light-chaser-app/src/comps/lc/base-table/BaseTableComponent.less +55 -0
  209. package/light-chaser-app/src/comps/lc/base-table/BaseTableComponent.tsx +214 -0
  210. package/light-chaser-app/src/comps/lc/base-table/BaseTableConfig.tsx +252 -0
  211. package/light-chaser-app/src/comps/lc/base-table/BaseTableController.ts +72 -0
  212. package/light-chaser-app/src/comps/lc/base-table/BaseTableDefinition.ts +185 -0
  213. package/light-chaser-app/src/comps/lc/base-table/base-table.png +0 -0
  214. package/light-chaser-app/src/comps/lc/base-text/BaseTextComponent.less +57 -0
  215. package/light-chaser-app/src/comps/lc/base-text/BaseTextComponent.tsx +124 -0
  216. package/light-chaser-app/src/comps/lc/base-text/BaseTextConfig.tsx +255 -0
  217. package/light-chaser-app/src/comps/lc/base-text/BaseTextController.ts +79 -0
  218. package/light-chaser-app/src/comps/lc/base-text/BaseTextDefinition.ts +102 -0
  219. package/light-chaser-app/src/comps/lc/base-text/base-text.png +0 -0
  220. package/light-chaser-app/src/comps/lc/base-video/BaseVideoComponent.tsx +64 -0
  221. package/light-chaser-app/src/comps/lc/base-video/BaseVideoConfig.tsx +43 -0
  222. package/light-chaser-app/src/comps/lc/base-video/BaseVideoController.ts +68 -0
  223. package/light-chaser-app/src/comps/lc/base-video/BaseVideoDefinition.ts +86 -0
  224. package/light-chaser-app/src/comps/lc/base-video/baseVideo.png +0 -0
  225. package/light-chaser-app/src/comps/lc/carousel/CarouselComponent.less +17 -0
  226. package/light-chaser-app/src/comps/lc/carousel/CarouselComponent.tsx +80 -0
  227. package/light-chaser-app/src/comps/lc/carousel/CarouselConfig.tsx +69 -0
  228. package/light-chaser-app/src/comps/lc/carousel/CarouselController.ts +62 -0
  229. package/light-chaser-app/src/comps/lc/carousel/CarouselDefinition.ts +91 -0
  230. package/light-chaser-app/src/comps/lc/carousel/carousel.png +0 -0
  231. package/light-chaser-app/src/comps/lc/date-time/DateTimeComponent.less +16 -0
  232. package/light-chaser-app/src/comps/lc/date-time/DateTimeComponent.tsx +106 -0
  233. package/light-chaser-app/src/comps/lc/date-time/DateTimeConfig.tsx +163 -0
  234. package/light-chaser-app/src/comps/lc/date-time/DateTimeController.ts +70 -0
  235. package/light-chaser-app/src/comps/lc/date-time/DateTimeDefinition.ts +93 -0
  236. package/light-chaser-app/src/comps/lc/date-time/date-time.png +0 -0
  237. package/light-chaser-app/src/comps/lc/date-time-picker/DateTimePickerComponent.less +15 -0
  238. package/light-chaser-app/src/comps/lc/date-time-picker/DateTimePickerComponent.tsx +259 -0
  239. package/light-chaser-app/src/comps/lc/date-time-picker/DateTimePickerConfig.tsx +219 -0
  240. package/light-chaser-app/src/comps/lc/date-time-picker/DateTimePickerController.ts +114 -0
  241. package/light-chaser-app/src/comps/lc/date-time-picker/DateTimePickerDefinition.ts +170 -0
  242. package/light-chaser-app/src/comps/lc/date-time-picker/datetime-picker.jpg +0 -0
  243. package/light-chaser-app/src/comps/lc/digital-flipper/DigitalFlipperComponent.tsx +106 -0
  244. package/light-chaser-app/src/comps/lc/digital-flipper/DigitalFlipperConfig.tsx +197 -0
  245. package/light-chaser-app/src/comps/lc/digital-flipper/DigitalFlipperController.ts +76 -0
  246. package/light-chaser-app/src/comps/lc/digital-flipper/DigitalFlipperDefinition.ts +99 -0
  247. package/light-chaser-app/src/comps/lc/digital-flipper/digital-flipper.png +0 -0
  248. package/light-chaser-app/src/comps/lc/flv-player/FlvPlayerComponent.tsx +89 -0
  249. package/light-chaser-app/src/comps/lc/flv-player/FlvPlayerConfig.tsx +44 -0
  250. package/light-chaser-app/src/comps/lc/flv-player/FlvPlayerController.ts +56 -0
  251. package/light-chaser-app/src/comps/lc/flv-player/FlvPlayerDefinition.ts +89 -0
  252. package/light-chaser-app/src/comps/lc/flv-player/flv-player.png +0 -0
  253. package/light-chaser-app/src/comps/lc/four-angle-glow-border/FourAngleGloeBorder.less +64 -0
  254. package/light-chaser-app/src/comps/lc/four-angle-glow-border/FourAngleGlowBorder.tsx +64 -0
  255. package/light-chaser-app/src/comps/lc/four-angle-glow-border/FourAngleGlowBorderConfig.tsx +67 -0
  256. package/light-chaser-app/src/comps/lc/four-angle-glow-border/FourAngleGlowBorderController.ts +71 -0
  257. package/light-chaser-app/src/comps/lc/four-angle-glow-border/FourAngleGlowBorderDefinition.ts +91 -0
  258. package/light-chaser-app/src/comps/lc/four-angle-glow-border/four-angle-glow-border.png +0 -0
  259. package/light-chaser-app/src/comps/lc/hls-player/HlsPlayerComponent.tsx +90 -0
  260. package/light-chaser-app/src/comps/lc/hls-player/HlsPlayerConfig.tsx +44 -0
  261. package/light-chaser-app/src/comps/lc/hls-player/HlsPlayerController.ts +51 -0
  262. package/light-chaser-app/src/comps/lc/hls-player/HlsPlayerDefinition.ts +89 -0
  263. package/light-chaser-app/src/comps/lc/hls-player/hls-player.png +0 -0
  264. package/light-chaser-app/src/comps/lc/screen-reference/ScreenReferenceComponent.tsx +144 -0
  265. package/light-chaser-app/src/comps/lc/screen-reference/ScreenReferenceConfig.tsx +63 -0
  266. package/light-chaser-app/src/comps/lc/screen-reference/ScreenReferenceController.ts +55 -0
  267. package/light-chaser-app/src/comps/lc/screen-reference/ScreenReferenceDefinition.ts +89 -0
  268. package/light-chaser-app/src/comps/lc/screen-reference/screen-reference.png +0 -0
  269. package/light-chaser-app/src/comps/lc/text-scroller/TextScrollerComponent.less +41 -0
  270. package/light-chaser-app/src/comps/lc/text-scroller/TextScrollerComponent.tsx +82 -0
  271. package/light-chaser-app/src/comps/lc/text-scroller/TextScrollerConfig.tsx +115 -0
  272. package/light-chaser-app/src/comps/lc/text-scroller/TextScrollerController.ts +71 -0
  273. package/light-chaser-app/src/comps/lc/text-scroller/TextScrollerDefinition.ts +89 -0
  274. package/light-chaser-app/src/comps/lc/text-scroller/text-scroller.png +0 -0
  275. package/light-chaser-app/src/comps/loop-container/LoopContainer.less +26 -0
  276. package/light-chaser-app/src/comps/loop-container/LoopContainer.tsx +69 -0
  277. package/light-chaser-app/src/comps/loop-container/LoopContainerConfig.tsx +84 -0
  278. package/light-chaser-app/src/comps/loop-container/LoopContainerController.ts +115 -0
  279. package/light-chaser-app/src/comps/loop-container/LoopContainerDefinition.ts +127 -0
  280. package/light-chaser-app/src/comps/map/AMapComponent.less +27 -0
  281. package/light-chaser-app/src/comps/map/AMapComponent.tsx +79 -0
  282. package/light-chaser-app/src/comps/map/AMapConfig.tsx +103 -0
  283. package/light-chaser-app/src/comps/map/AMapController.ts +57 -0
  284. package/light-chaser-app/src/comps/map/AMapDefinition.ts +104 -0
  285. package/light-chaser-app/src/comps/map/AMapScaleObserver.ts +44 -0
  286. package/light-chaser-app/src/comps/map/MapLoader.ts +61 -0
  287. package/light-chaser-app/src/comps/map/a-map.d.ts +22 -0
  288. package/light-chaser-app/src/comps/map/a-map.png +0 -0
  289. package/light-chaser-app/src/constant/GlobalConstant.ts +17 -0
  290. package/light-chaser-app/src/designer/Designer.tsx +146 -0
  291. package/light-chaser-app/src/designer/blueprint/BPCanvas.less +24 -0
  292. package/light-chaser-app/src/designer/blueprint/BPCanvas.tsx +79 -0
  293. package/light-chaser-app/src/designer/blueprint/BluePrint.tsx +39 -0
  294. package/light-chaser-app/src/designer/blueprint/IBPTyps.ts +27 -0
  295. package/light-chaser-app/src/designer/blueprint/bp-context-menu/BpContextMenu.tsx +112 -0
  296. package/light-chaser-app/src/designer/blueprint/core/BPExecutor.ts +43 -0
  297. package/light-chaser-app/src/designer/blueprint/core/BPTask.ts +67 -0
  298. package/light-chaser-app/src/designer/blueprint/drag/BPMovable.tsx +89 -0
  299. package/light-chaser-app/src/designer/blueprint/drag/BPSelectable.tsx +75 -0
  300. package/light-chaser-app/src/designer/blueprint/footer/BPFooter.less +268 -0
  301. package/light-chaser-app/src/designer/blueprint/footer/BPFooter.tsx +172 -0
  302. package/light-chaser-app/src/designer/blueprint/header/BPHeader.less +41 -0
  303. package/light-chaser-app/src/designer/blueprint/header/BPHeader.tsx +31 -0
  304. package/light-chaser-app/src/designer/blueprint/left/BPLeft.less +262 -0
  305. package/light-chaser-app/src/designer/blueprint/left/BPLeft.tsx +245 -0
  306. package/light-chaser-app/src/designer/blueprint/left/BPLeftStore.ts +44 -0
  307. package/light-chaser-app/src/designer/blueprint/line/LineLayer.tsx +301 -0
  308. package/light-chaser-app/src/designer/blueprint/manager/BluePrintManager.ts +503 -0
  309. package/light-chaser-app/src/designer/blueprint/manager/BluePrintPageManager.ts +94 -0
  310. package/light-chaser-app/src/designer/blueprint/node/BPNode.less +154 -0
  311. package/light-chaser-app/src/designer/blueprint/node/BPNode.tsx +77 -0
  312. package/light-chaser-app/src/designer/blueprint/node/NodeLayer.tsx +43 -0
  313. package/light-chaser-app/src/designer/blueprint/node/core/AbstractBPNodeController.ts +48 -0
  314. package/light-chaser-app/src/designer/blueprint/node/core/impl/condition/BPConditionNodeController.ts +108 -0
  315. package/light-chaser-app/src/designer/blueprint/node/core/impl/condition/ConditionNodeConfig.tsx +39 -0
  316. package/light-chaser-app/src/designer/blueprint/node/core/impl/global/BPGlobalNodeController.ts +67 -0
  317. package/light-chaser-app/src/designer/blueprint/node/core/impl/global-variable/BPGlobalVariableNodeController.ts +92 -0
  318. package/light-chaser-app/src/designer/blueprint/node/core/impl/layer/BPLayerNodeController.ts +95 -0
  319. package/light-chaser-app/src/designer/blueprint/node/core/impl/logical-process/BPLogicalProcessNodeController.ts +102 -0
  320. package/light-chaser-app/src/designer/blueprint/node/core/impl/logical-process/LogicalProcessNodeConfig.tsx +39 -0
  321. package/light-chaser-app/src/designer/blueprint/node/core/impl/mqtt/BPMqttNodeController.ts +165 -0
  322. package/light-chaser-app/src/designer/blueprint/node/core/impl/mqtt/MqttNodeConfig.tsx +33 -0
  323. package/light-chaser-app/src/designer/blueprint/node/core/impl/popup-box/BPPopupBoxNodeController.ts +79 -0
  324. package/light-chaser-app/src/designer/blueprint/node/core/impl/popup-box/ModalRenderUtil.tsx +181 -0
  325. package/light-chaser-app/src/designer/blueprint/node/core/impl/popup-box/PopupBoxNodeConfig.tsx +84 -0
  326. package/light-chaser-app/src/designer/blueprint/node/core/impl/timer/BPTimerNodeController.ts +73 -0
  327. package/light-chaser-app/src/designer/blueprint/node/core/impl/timer/TimerNodeConfig.tsx +51 -0
  328. package/light-chaser-app/src/designer/blueprint/node/core/impl/visible/BPVisibleNodeController.ts +93 -0
  329. package/light-chaser-app/src/designer/blueprint/node/core/impl/visible/VisibleNodeConfig.tsx +60 -0
  330. package/light-chaser-app/src/designer/blueprint/node/core/impl/websocket/BPWebSocketNodeController.ts +129 -0
  331. package/light-chaser-app/src/designer/blueprint/node/core/impl/websocket/WebSocketNodeConfig.tsx +33 -0
  332. package/light-chaser-app/src/designer/blueprint/node/core/node-container/BPNodeContainer.less +25 -0
  333. package/light-chaser-app/src/designer/blueprint/node/core/node-container/BPNodeContainer.tsx +87 -0
  334. package/light-chaser-app/src/designer/blueprint/right/BPRight.less +181 -0
  335. package/light-chaser-app/src/designer/blueprint/right/BPRight.tsx +66 -0
  336. package/light-chaser-app/src/designer/blueprint/right/BPRightStore.ts +34 -0
  337. package/light-chaser-app/src/designer/blueprint/util/BpCanvasUtil.ts +254 -0
  338. package/light-chaser-app/src/designer/blueprint/util/EventUtil.ts +60 -0
  339. package/light-chaser-app/src/designer/canvas/DesignerCanvas.tsx +73 -0
  340. package/light-chaser-app/src/designer/canvas/DesignerDragScaleContainer.tsx +77 -0
  341. package/light-chaser-app/src/designer/canvas/DesignerRuler.tsx +164 -0
  342. package/light-chaser-app/src/designer/event/ContextMenuStore.ts +71 -0
  343. package/light-chaser-app/src/designer/footer/DesignerFooter.less +110 -0
  344. package/light-chaser-app/src/designer/footer/DesignerFooter.tsx +125 -0
  345. package/light-chaser-app/src/designer/footer/FooterStore.ts +56 -0
  346. package/light-chaser-app/src/designer/footer/auto-save/AutoSaveManager.ts +130 -0
  347. package/light-chaser-app/src/designer/footer/auto-save/EnhanceFetch.ts +41 -0
  348. package/light-chaser-app/src/designer/footer/auto-save/RestoreLocalStorage.less +80 -0
  349. package/light-chaser-app/src/designer/footer/auto-save/RestoreLocalStorage.tsx +158 -0
  350. package/light-chaser-app/src/designer/footer/cover/CoverConfig.less +131 -0
  351. package/light-chaser-app/src/designer/footer/cover/CoverConfig.tsx +113 -0
  352. package/light-chaser-app/src/designer/footer/hotkey-des/HotKeyDes.less +63 -0
  353. package/light-chaser-app/src/designer/footer/hotkey-des/HotKeyDes.tsx +111 -0
  354. package/light-chaser-app/src/designer/header/DesignerHeader.less +132 -0
  355. package/light-chaser-app/src/designer/header/DesignerHeader.tsx +172 -0
  356. package/light-chaser-app/src/designer/header/DesignerHeaderStore.ts +30 -0
  357. package/light-chaser-app/src/designer/header/items/blue-print/BluePrintHdImpl.tsx +32 -0
  358. package/light-chaser-app/src/designer/header/items/canvas/CanvasHdConfigImpl.less +180 -0
  359. package/light-chaser-app/src/designer/header/items/canvas/CanvasHdConfigImpl.tsx +128 -0
  360. package/light-chaser-app/src/designer/header/items/canvas/CanvasManager.ts +55 -0
  361. package/light-chaser-app/src/designer/header/items/global-filter/GlobalFilterConfigImpl.tsx +42 -0
  362. package/light-chaser-app/src/designer/header/items/project/ProjectHdItemImpl.less +34 -0
  363. package/light-chaser-app/src/designer/header/items/project/ProjectHdItemImpl.tsx +64 -0
  364. package/light-chaser-app/src/designer/header/items/project/ProjectManager.ts +56 -0
  365. package/light-chaser-app/src/designer/header/items/release/ReleaseHdConfigImpl.less +205 -0
  366. package/light-chaser-app/src/designer/header/items/release/ReleaseHdConfigImpl.tsx +189 -0
  367. package/light-chaser-app/src/designer/header/items/theme/ThemeHdItem.less +161 -0
  368. package/light-chaser-app/src/designer/header/items/theme/ThemeHdItemImpl.tsx +76 -0
  369. package/light-chaser-app/src/designer/header/items/theme/ThemeManager.ts +81 -0
  370. package/light-chaser-app/src/designer/left/DesignerLeft.less +15 -0
  371. package/light-chaser-app/src/designer/left/DesignerLeft.tsx +55 -0
  372. package/light-chaser-app/src/designer/left/DesignerLeftStore.ts +40 -0
  373. package/light-chaser-app/src/designer/left/compoent-lib/ComponentCategorize.ts +135 -0
  374. package/light-chaser-app/src/designer/left/compoent-lib/ComponentList.less +129 -0
  375. package/light-chaser-app/src/designer/left/compoent-lib/ComponentList.tsx +89 -0
  376. package/light-chaser-app/src/designer/left/compoent-lib/ComponentListStore.ts +64 -0
  377. package/light-chaser-app/src/designer/left/compoent-lib/list/CompList.less +112 -0
  378. package/light-chaser-app/src/designer/left/compoent-lib/list/CompList.tsx +155 -0
  379. package/light-chaser-app/src/designer/left/designer-left-menus/LeftMenus.less +63 -0
  380. package/light-chaser-app/src/designer/left/designer-left-menus/LeftMenus.tsx +87 -0
  381. package/light-chaser-app/src/designer/left/filter-lilst/AddFilterDialog.tsx +76 -0
  382. package/light-chaser-app/src/designer/left/filter-lilst/FilterList.less +105 -0
  383. package/light-chaser-app/src/designer/left/filter-lilst/FilterList.tsx +65 -0
  384. package/light-chaser-app/src/designer/left/global-variable/GlobalVariable.less +231 -0
  385. package/light-chaser-app/src/designer/left/global-variable/GlobalVariable.ts +151 -0
  386. package/light-chaser-app/src/designer/left/global-variable/GlobalVariableEditPanel.tsx +79 -0
  387. package/light-chaser-app/src/designer/left/global-variable/GlobalVariableList.tsx +89 -0
  388. package/light-chaser-app/src/designer/left/global-variable/parse/ComponentDataGvParser.ts +298 -0
  389. package/light-chaser-app/src/designer/left/layer-list/CanvasRender.ts +69 -0
  390. package/light-chaser-app/src/designer/left/layer-list/DesignerRender.ts +70 -0
  391. package/light-chaser-app/src/designer/left/layer-list/LayerList.less +371 -0
  392. package/light-chaser-app/src/designer/left/layer-list/LayerList.tsx +129 -0
  393. package/light-chaser-app/src/designer/left/layer-list/LayerListStore.ts +197 -0
  394. package/light-chaser-app/src/designer/left/layer-list/LayerRender.ts +67 -0
  395. package/light-chaser-app/src/designer/left/layer-list/item/BaseLayer.tsx +125 -0
  396. package/light-chaser-app/src/designer/left/layer-list/item/LayerGroupItem.tsx +61 -0
  397. package/light-chaser-app/src/designer/left/layer-list/item/LayerItem.tsx +48 -0
  398. package/light-chaser-app/src/designer/left/layer-list/search-layer/SearchLayer.less +121 -0
  399. package/light-chaser-app/src/designer/left/layer-list/search-layer/SearchLayer.tsx +82 -0
  400. package/light-chaser-app/src/designer/left/layer-list/util/LayerUtil.ts +370 -0
  401. package/light-chaser-app/src/designer/left/source-list/SourceList.less +99 -0
  402. package/light-chaser-app/src/designer/left/source-list/SourceList.tsx +50 -0
  403. package/light-chaser-app/src/designer/left/source-list/image-source/ImageSource.less +139 -0
  404. package/light-chaser-app/src/designer/left/source-list/image-source/ImageSource.tsx +155 -0
  405. package/light-chaser-app/src/designer/left/sub-project/SubProject.less +200 -0
  406. package/light-chaser-app/src/designer/left/sub-project/SubProject.tsx +231 -0
  407. package/light-chaser-app/src/designer/left/template-lib/TemplateLib.less +226 -0
  408. package/light-chaser-app/src/designer/left/template-lib/TemplateLib.tsx +165 -0
  409. package/light-chaser-app/src/designer/loader/DesignerLoader.ts +334 -0
  410. package/light-chaser-app/src/designer/loader/EditDesignerLoader.ts +75 -0
  411. package/light-chaser-app/src/designer/loader/PureReleaseDesignerLoader.ts +123 -0
  412. package/light-chaser-app/src/designer/loader/ReleaseDesignerLoader.ts +129 -0
  413. package/light-chaser-app/src/designer/loader/ViewDesignerLoader.ts +57 -0
  414. package/light-chaser-app/src/designer/manager/DesignerManager.ts +96 -0
  415. package/light-chaser-app/src/designer/manager/FilterManager.ts +69 -0
  416. package/light-chaser-app/src/designer/manager/GlobalFilterManger.ts +69 -0
  417. package/light-chaser-app/src/designer/manager/GlobalVariableManager.ts +148 -0
  418. package/light-chaser-app/src/designer/manager/LayerManager.ts +170 -0
  419. package/light-chaser-app/src/designer/manager/ManagerStore.ts +93 -0
  420. package/light-chaser-app/src/designer/manager/core/AbstractManager.ts +18 -0
  421. package/light-chaser-app/src/designer/operate-provider/EventOperateStore.ts +150 -0
  422. package/light-chaser-app/src/designer/operate-provider/canvas-context-menu/CanvasContextMenu.tsx +204 -0
  423. package/light-chaser-app/src/designer/operate-provider/hot-key/HotKey.tsx +51 -0
  424. package/light-chaser-app/src/designer/operate-provider/hot-key/HotKeyConfig.ts +226 -0
  425. package/light-chaser-app/src/designer/operate-provider/hot-key/HotKeyImpl.ts +871 -0
  426. package/light-chaser-app/src/designer/operate-provider/hot-key/HotKeyType.ts +29 -0
  427. package/light-chaser-app/src/designer/operate-provider/movable/DesignerMovable.less +19 -0
  428. package/light-chaser-app/src/designer/operate-provider/movable/DesignerMovable.tsx +461 -0
  429. package/light-chaser-app/src/designer/operate-provider/movable/DesignerSelectable.tsx +123 -0
  430. package/light-chaser-app/src/designer/operate-provider/scale/ScaleCore.ts +43 -0
  431. package/light-chaser-app/src/designer/operate-provider/undo-redo/HistoryOperator.ts +37 -0
  432. package/light-chaser-app/src/designer/operate-provider/undo-redo/HistoryQueue.ts +170 -0
  433. package/light-chaser-app/src/designer/operate-provider/undo-redo/HistoryRecordOperateProxy.ts +1740 -0
  434. package/light-chaser-app/src/designer/operate-provider/undo-redo/OperateType.ts +183 -0
  435. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/AbstractRollback.ts +27 -0
  436. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/AddRollbackImpl.ts +89 -0
  437. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/DelRollbackImpl.ts +99 -0
  438. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/DragRollbackImpl.ts +59 -0
  439. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/HideRollbackImpl.ts +61 -0
  440. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/LockRollbackImpl.ts +57 -0
  441. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/OrderRollbackImpl.ts +34 -0
  442. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/ResizeRollbackImpl.ts +59 -0
  443. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/RotateRollbackImpl.ts +58 -0
  444. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/StyleRollbackImpl.ts +62 -0
  445. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/UpdLayerGroupRollbackImpl.ts +62 -0
  446. package/light-chaser-app/src/designer/operate-provider/undo-redo/core/index.ts +37 -0
  447. package/light-chaser-app/src/designer/release/DesignerRelease.less +41 -0
  448. package/light-chaser-app/src/designer/release/DesignerRelease.tsx +91 -0
  449. package/light-chaser-app/src/designer/right/ConfigContent.tsx +186 -0
  450. package/light-chaser-app/src/designer/right/DesignerRight.less +325 -0
  451. package/light-chaser-app/src/designer/right/DesignerRight.tsx +28 -0
  452. package/light-chaser-app/src/designer/right/MenuList.tsx +70 -0
  453. package/light-chaser-app/src/designer/right/MenuType.ts +23 -0
  454. package/light-chaser-app/src/designer/right/RightStore.ts +122 -0
  455. package/light-chaser-app/src/designer/right/status-list/ComponentStatusList.tsx +73 -0
  456. package/light-chaser-app/src/designer/right/status-list/StatusListStore.ts +175 -0
  457. package/light-chaser-app/src/designer/right/util.ts +53 -0
  458. package/light-chaser-app/src/designer/store/RuntimeStore.ts +32 -0
  459. package/light-chaser-app/src/designer/style/DesignerGlobalStyle.less +75 -0
  460. package/light-chaser-app/src/designer/view/DesignerView.less +41 -0
  461. package/light-chaser-app/src/designer/view/DesignerView.tsx +61 -0
  462. package/light-chaser-app/src/framework/cache/AbstractCache.ts +38 -0
  463. package/light-chaser-app/src/framework/cache/ImageSourceCache.ts +23 -0
  464. package/light-chaser-app/src/framework/cache/LocalCoverCache.ts +29 -0
  465. package/light-chaser-app/src/framework/context-menu/ContextMenu.less +57 -0
  466. package/light-chaser-app/src/framework/context-menu/ContextMenu.tsx +76 -0
  467. package/light-chaser-app/src/framework/convert/AbstractConvert.ts +31 -0
  468. package/light-chaser-app/src/framework/core/AbstractController.ts +76 -0
  469. package/light-chaser-app/src/framework/core/AbstractDefinition.ts +77 -0
  470. package/light-chaser-app/src/framework/core/AbstractDesignerController.ts +129 -0
  471. package/light-chaser-app/src/framework/core/AbstractDesignerDefinition.ts +136 -0
  472. package/light-chaser-app/src/framework/core/AbstractScaleObserver.ts +15 -0
  473. package/light-chaser-app/src/framework/core/ComponentContainer.tsx +130 -0
  474. package/light-chaser-app/src/framework/core/ScaleAction.ts +33 -0
  475. package/light-chaser-app/src/framework/core/tools/ComponentDataUpdater.ts +260 -0
  476. package/light-chaser-app/src/framework/drag-scale/DragAddProvider.ts +45 -0
  477. package/light-chaser-app/src/framework/drag-scale/DragScaleProvider.tsx +202 -0
  478. package/light-chaser-app/src/framework/screen-fit/ScreenFit.less +25 -0
  479. package/light-chaser-app/src/framework/screen-fit/ScreenFit.tsx +177 -0
  480. package/light-chaser-app/src/global/ExportEditGlobalMember.ts +54 -0
  481. package/light-chaser-app/src/global/ExportViewGlobalMember.ts +40 -0
  482. package/light-chaser-app/src/global/GlobalConstants.ts +16 -0
  483. package/light-chaser-app/src/images/lock.svg +23 -0
  484. package/light-chaser-app/src/images/login-logo.png +0 -0
  485. package/light-chaser-app/src/images/logo.png +0 -0
  486. package/light-chaser-app/src/images/user.svg +23 -0
  487. package/light-chaser-app/src/index.less +359 -0
  488. package/light-chaser-app/src/index.tsx +47 -0
  489. package/light-chaser-app/src/pages/auth-reminder/AuthReminders.less +218 -0
  490. package/light-chaser-app/src/pages/auth-reminder/AuthReminders.tsx +174 -0
  491. package/light-chaser-app/src/pages/auth-reminder/AuthRemindersStore.ts +30 -0
  492. package/light-chaser-app/src/pages/designer/DesignerPage.tsx +18 -0
  493. package/light-chaser-app/src/pages/home/Home.less +123 -0
  494. package/light-chaser-app/src/pages/home/Home.tsx +81 -0
  495. package/light-chaser-app/src/pages/home/api-management/ApiEditPanel.tsx +79 -0
  496. package/light-chaser-app/src/pages/home/api-management/ApiManagement.module.less +234 -0
  497. package/light-chaser-app/src/pages/home/api-management/ApiManagement.tsx +152 -0
  498. package/light-chaser-app/src/pages/home/api-management/ApiManagementStore.ts +187 -0
  499. package/light-chaser-app/src/pages/home/database/DataBaseList.module.less +369 -0
  500. package/light-chaser-app/src/pages/home/database/DataBaseList.tsx +264 -0
  501. package/light-chaser-app/src/pages/home/database/DataBasePanel.less +170 -0
  502. package/light-chaser-app/src/pages/home/database/DataBasePanel.tsx +172 -0
  503. package/light-chaser-app/src/pages/home/database/DataBaseStore.ts +220 -0
  504. package/light-chaser-app/src/pages/home/dynamic-script/DynamicScriptList.module.less +305 -0
  505. package/light-chaser-app/src/pages/home/dynamic-script/DynamicScriptList.tsx +248 -0
  506. package/light-chaser-app/src/pages/home/dynamic-script/DynamicScriptManagement.tsx +19 -0
  507. package/light-chaser-app/src/pages/home/dynamic-script/DynamicScriptManagementStore.ts +192 -0
  508. package/light-chaser-app/src/pages/home/font-management/FontManagement.module.less +281 -0
  509. package/light-chaser-app/src/pages/home/font-management/FontManagement.tsx +218 -0
  510. package/light-chaser-app/src/pages/home/font-management/FontManagementStore.ts +153 -0
  511. package/light-chaser-app/src/pages/home/image/default-snapshot.jpg +0 -0
  512. package/light-chaser-app/src/pages/home/menus/HomeMenus.less +175 -0
  513. package/light-chaser-app/src/pages/home/menus/HomeMenus.tsx +148 -0
  514. package/light-chaser-app/src/pages/home/more-info/MoreInfo.module.less +154 -0
  515. package/light-chaser-app/src/pages/home/more-info/MoreInfo.tsx +71 -0
  516. package/light-chaser-app/src/pages/home/page-container/PageContainer.less +130 -0
  517. package/light-chaser-app/src/pages/home/page-container/PageContainer.tsx +41 -0
  518. package/light-chaser-app/src/pages/home/project-list/CloneProjectDialog.tsx +43 -0
  519. package/light-chaser-app/src/pages/home/project-list/DelProjectDialog.tsx +37 -0
  520. package/light-chaser-app/src/pages/home/project-list/NewProjectDialog.less +262 -0
  521. package/light-chaser-app/src/pages/home/project-list/NewProjectDialog.tsx +152 -0
  522. package/light-chaser-app/src/pages/home/project-list/ProjectItem.less +192 -0
  523. package/light-chaser-app/src/pages/home/project-list/ProjectItem.tsx +136 -0
  524. package/light-chaser-app/src/pages/home/project-list/ProjectList.less +137 -0
  525. package/light-chaser-app/src/pages/home/project-list/ProjectList.tsx +180 -0
  526. package/light-chaser-app/src/pages/home/project-management/ProjectManagement.tsx +18 -0
  527. package/light-chaser-app/src/pages/home/project-setting/ProjectSetting.less +39 -0
  528. package/light-chaser-app/src/pages/home/project-setting/ProjectSetting.tsx +39 -0
  529. package/light-chaser-app/src/pages/home/release-management/ReleaseEditPanel.tsx +62 -0
  530. package/light-chaser-app/src/pages/home/release-management/ReleaseManagement.module.less +216 -0
  531. package/light-chaser-app/src/pages/home/release-management/ReleaseManagement.tsx +213 -0
  532. package/light-chaser-app/src/pages/home/release-management/ReleaseStore.ts +138 -0
  533. package/light-chaser-app/src/pages/home/remote-component/RemoteComponentManagement.module.less +290 -0
  534. package/light-chaser-app/src/pages/home/remote-component/RemoteComponentManagement.tsx +244 -0
  535. package/light-chaser-app/src/pages/home/remote-component/RemoteComponentStore.ts +143 -0
  536. package/light-chaser-app/src/pages/home/resource-management/ResourceManagement.tsx +18 -0
  537. package/light-chaser-app/src/pages/home/server-list/ServerProjectList.tsx +21 -0
  538. package/light-chaser-app/src/pages/home/setting/Setting.module.less +298 -0
  539. package/light-chaser-app/src/pages/home/setting/Setting.tsx +123 -0
  540. package/light-chaser-app/src/pages/home/template-market/TemplateMarket.tsx +22 -0
  541. package/light-chaser-app/src/pages/home/user-info/UserInfo.less +279 -0
  542. package/light-chaser-app/src/pages/home/user-info/UserInfo.tsx +186 -0
  543. package/light-chaser-app/src/pages/home/user-management/UserManagement.module.less +211 -0
  544. package/light-chaser-app/src/pages/home/user-management/UserManagement.tsx +209 -0
  545. package/light-chaser-app/src/pages/home/user-management/UserManagementStore.ts +183 -0
  546. package/light-chaser-app/src/pages/home/user-management/UserPanel.tsx +113 -0
  547. package/light-chaser-app/src/pages/login/Login.less +282 -0
  548. package/light-chaser-app/src/pages/login/Login.tsx +77 -0
  549. package/light-chaser-app/src/pages/login/ServiceTerms.tsx +118 -0
  550. package/light-chaser-app/src/pages/login/bg.png +0 -0
  551. package/light-chaser-app/src/pages/preview/DesignerViewPage.tsx +18 -0
  552. package/light-chaser-app/src/pages/release/DesignerReleasePage.tsx +19 -0
  553. package/light-chaser-app/src/pages/result/Error.tsx +24 -0
  554. package/light-chaser-app/src/pages/result/NoAuth.tsx +24 -0
  555. package/light-chaser-app/src/pages/result/NotFound.tsx +24 -0
  556. package/light-chaser-app/src/pureRelease/home/PureHome.less +100 -0
  557. package/light-chaser-app/src/pureRelease/home/PureHome.tsx +90 -0
  558. package/light-chaser-app/src/pureRelease/index.less +335 -0
  559. package/light-chaser-app/src/pureRelease/index.tsx +59 -0
  560. package/light-chaser-app/src/pureRelease/list/PureList.less +173 -0
  561. package/light-chaser-app/src/pureRelease/list/PureList.tsx +118 -0
  562. package/light-chaser-app/src/pureRelease/release/PureRelease.less +41 -0
  563. package/light-chaser-app/src/pureRelease/release/PureRelease.tsx +53 -0
  564. package/light-chaser-app/src/router/AuthGuard.tsx +48 -0
  565. package/light-chaser-app/src/router/router.tsx +76 -0
  566. package/light-chaser-app/src/test/Demo.tsx +22 -0
  567. package/light-chaser-app/src/test/DemoMain.less +47 -0
  568. package/light-chaser-app/src/test/DemoStore.ts +51 -0
  569. package/light-chaser-app/src/test/alone-store-demo/AloneStore.ts +28 -0
  570. package/light-chaser-app/src/test/alone-store-demo/TestStoreA.tsx +28 -0
  571. package/light-chaser-app/src/test/alone-store-demo/TestStoreB.tsx +28 -0
  572. package/light-chaser-app/src/test/canvas-grid-animation/CanvasGridAnimation.tsx +59 -0
  573. package/light-chaser-app/src/test/drag-demo/LayerDemo.less +35 -0
  574. package/light-chaser-app/src/test/drag-demo/LayerDemo.tsx +53 -0
  575. package/light-chaser-app/src/test/drag-demo/LayerDemoStore.ts +33 -0
  576. package/light-chaser-app/src/test/drag-demo/MovableDemo.tsx +77 -0
  577. package/light-chaser-app/src/test/drag-demo/SelectableDemo.tsx +75 -0
  578. package/light-chaser-app/src/test/other-designer/_demo.js +99 -0
  579. package/light-chaser-app/src/test/test-json-schema/JsonSchemaDemo.tsx +120 -0
  580. package/light-chaser-app/src/theme/AntdTheme.ts +1285 -0
  581. package/light-chaser-app/src/theme/default.less +41 -0
  582. package/light-chaser-app/src/util/AuthFetchUtil.ts +37 -0
  583. package/light-chaser-app/src/util/BoundsValidatorUtil.ts +27 -0
  584. package/light-chaser-app/src/util/ControllerUtil.ts +14 -0
  585. package/light-chaser-app/src/util/CoordinateUtil.ts +105 -0
  586. package/light-chaser-app/src/util/DataUtil.ts +111 -0
  587. package/light-chaser-app/src/util/DomUtil.ts +57 -0
  588. package/light-chaser-app/src/util/EnvUtil.ts +27 -0
  589. package/light-chaser-app/src/util/FetchUtil.ts +193 -0
  590. package/light-chaser-app/src/util/HybridCryptoUtil.ts +137 -0
  591. package/light-chaser-app/src/util/LogoUtil.ts +34 -0
  592. package/light-chaser-app/src/util/ProjectUtil.ts +209 -0
  593. package/light-chaser-app/src/util/RequestAnimationFrameUtil.ts +31 -0
  594. package/light-chaser-app/src/util/TextUtil.ts +63 -0
  595. package/light-chaser-app/src/util/Tooles.ts +45 -0
  596. package/light-chaser-app/src/vite-env.d.ts +53 -0
  597. package/light-chaser-app/tsconfig.json +40 -0
  598. package/light-chaser-app/tsconfig.node.json +15 -0
  599. package/light-chaser-app/vite.base.config.ts +23 -0
  600. package/light-chaser-app/vite.build.config.ts +18 -0
  601. package/light-chaser-app/vite.dev.config.ts +43 -0
  602. package/light-chaser-app/vite.pure.release.config.ts +41 -0
  603. package/light-chaser-cli/bin/index.js +176 -0
  604. package/light-chaser-cli/config/vite.config.dev.js +24 -0
  605. package/light-chaser-cli/config/vite.config.prod.js +47 -0
  606. package/light-chaser-cli/package.json +41 -0
  607. package/light-chaser-cli/page/index.html +36 -0
  608. package/light-chaser-cli/pnpm-lock.yaml +494 -0
  609. package/light-chaser-cli/template/index.html +35 -0
  610. package/light-chaser-cli/template/package.json +38 -0
  611. package/light-chaser-cli/template/src/components/remote-button/base-button.png +0 -0
  612. package/light-chaser-cli/template/src/components/remote-button/component.module.less +105 -0
  613. package/light-chaser-cli/template/src/components/remote-button/component.tsx +82 -0
  614. package/light-chaser-cli/template/src/components/remote-button/config.tsx +179 -0
  615. package/light-chaser-cli/template/src/components/remote-button/controller.ts +108 -0
  616. package/light-chaser-cli/template/src/components/remote-button/definition.ts +125 -0
  617. package/light-chaser-cli/template/src/index.module.less +89 -0
  618. package/light-chaser-cli/template/src/index.tsx +140 -0
  619. package/light-chaser-cli/template/src/vite-env.d.ts +22 -0
  620. package/light-chaser-cli/template/tsconfig.json +39 -0
  621. package/light-chaser-cli/template/tsconfig.node.json +11 -0
  622. package/light-chaser-interface/README.md +3 -0
  623. package/light-chaser-interface/lib/AbstractController.ts +69 -0
  624. package/light-chaser-interface/lib/AbstractDefinition.ts +84 -0
  625. package/light-chaser-interface/lib/AbstractDesignerController.ts +80 -0
  626. package/light-chaser-interface/lib/AbstractDesignerDefinition.ts +71 -0
  627. package/light-chaser-interface/lib/BPExecutor.ts +28 -0
  628. package/light-chaser-interface/lib/ConfigComponents.tsx +40 -0
  629. package/light-chaser-interface/lib/main.ts +17 -0
  630. package/light-chaser-interface/package.json +46 -0
  631. package/light-chaser-interface/tsconfig-build.json +6 -0
  632. package/light-chaser-interface/tsconfig.json +40 -0
  633. package/light-chaser-interface/tsconfig.node.json +15 -0
  634. package/light-chaser-interface/vite.config.ts +22 -0
  635. package/light-chaser-types/package.json +38 -0
  636. package/light-chaser-types/tsconfig-build.json +6 -0
  637. package/light-chaser-types/tsconfig.json +41 -0
  638. package/light-chaser-types/tsconfig.node.json +12 -0
  639. package/light-chaser-types/types/BluePrintTypes.ts +85 -0
  640. package/light-chaser-types/types/CanvasTypes.ts +33 -0
  641. package/light-chaser-types/types/ComponentTypes.ts +100 -0
  642. package/light-chaser-types/types/DataSourceTypes.ts +96 -0
  643. package/light-chaser-types/types/DesignerToolsTypes.ts +18 -0
  644. package/light-chaser-types/types/DesignerTypes.ts +136 -0
  645. package/light-chaser-types/types/FilterTypes.ts +44 -0
  646. package/light-chaser-types/types/GlobalVariableTypes.ts +43 -0
  647. package/light-chaser-types/types/LayerTypes.ts +90 -0
  648. package/light-chaser-types/types/ReleaseTypes.ts +22 -0
  649. package/light-chaser-types/types/ThemeTypes.ts +34 -0
  650. package/light-chaser-types/types/main.ts +69 -0
  651. package/light-chaser-types/vite.config.ts +14 -0
  652. package/light-chaser-ui/index.html +24 -0
  653. package/light-chaser-ui/lib/accordion/Accordion.less +158 -0
  654. package/light-chaser-ui/lib/accordion/Accordion.tsx +43 -0
  655. package/light-chaser-ui/lib/accordion/IAccordionType.ts +35 -0
  656. package/light-chaser-ui/lib/accordion/SubAccordion.tsx +44 -0
  657. package/light-chaser-ui/lib/button/Button.tsx +37 -0
  658. package/light-chaser-ui/lib/card-panel/CardPanel.less +32 -0
  659. package/light-chaser-ui/lib/card-panel/CardPanel.tsx +36 -0
  660. package/light-chaser-ui/lib/checkbox/CheckBox.tsx +42 -0
  661. package/light-chaser-ui/lib/code-editor/CodeEditor.tsx +55 -0
  662. package/light-chaser-ui/lib/code-editor/FullEditor.tsx +45 -0
  663. package/light-chaser-ui/lib/code-editor/MonacoEditor.less +35 -0
  664. package/light-chaser-ui/lib/code-editor/MonacoEditor.tsx +83 -0
  665. package/light-chaser-ui/lib/color-mode/ColorMode.less +20 -0
  666. package/light-chaser-ui/lib/color-mode/ColorMode.tsx +80 -0
  667. package/light-chaser-ui/lib/color-picker/ColorPicker.less +104 -0
  668. package/light-chaser-ui/lib/color-picker/ColorPicker.tsx +315 -0
  669. package/light-chaser-ui/lib/color-picker/RecentColors.ts +46 -0
  670. package/light-chaser-ui/lib/colors-picker/ColorsPicker.less +77 -0
  671. package/light-chaser-ui/lib/colors-picker/ColorsPicker.tsx +78 -0
  672. package/light-chaser-ui/lib/control-group/ControlGroup.less +49 -0
  673. package/light-chaser-ui/lib/control-group/ControlGroup.tsx +101 -0
  674. package/light-chaser-ui/lib/frame-layout/FrameLayout.less +47 -0
  675. package/light-chaser-ui/lib/frame-layout/FrameLayout.tsx +42 -0
  676. package/light-chaser-ui/lib/grid/Grid.less +20 -0
  677. package/light-chaser-ui/lib/grid/Grid.tsx +33 -0
  678. package/light-chaser-ui/lib/group-button/GroupButton.less +52 -0
  679. package/light-chaser-ui/lib/group-button/GroupButton.tsx +54 -0
  680. package/light-chaser-ui/lib/gui/GUITheme.ts +547 -0
  681. package/light-chaser-ui/lib/gui/LCGUI.tsx +186 -0
  682. package/light-chaser-ui/lib/gui/LCGUIUtil.ts +108 -0
  683. package/light-chaser-ui/lib/imag-upload/ImageUpload.less +26 -0
  684. package/light-chaser-ui/lib/imag-upload/ImageUpload.tsx +102 -0
  685. package/light-chaser-ui/lib/input/Input.tsx +48 -0
  686. package/light-chaser-ui/lib/input/NumberInput.tsx +52 -0
  687. package/light-chaser-ui/lib/loading/Loading.less +211 -0
  688. package/light-chaser-ui/lib/loading/Loading.tsx +38 -0
  689. package/light-chaser-ui/lib/main.ts +71 -0
  690. package/light-chaser-ui/lib/message/GlobalMessage.tsx +44 -0
  691. package/light-chaser-ui/lib/message/GlobalModal.tsx +44 -0
  692. package/light-chaser-ui/lib/radio/Radio.tsx +53 -0
  693. package/light-chaser-ui/lib/searchable-select/SearchableSelect.tsx +239 -0
  694. package/light-chaser-ui/lib/select/Select.tsx +89 -0
  695. package/light-chaser-ui/lib/slider/Slider.tsx +51 -0
  696. package/light-chaser-ui/lib/switch/Switch.tsx +42 -0
  697. package/light-chaser-ui/lib/text-area/TextArea.tsx +49 -0
  698. package/light-chaser-ui/lib/text-only/TextOnly.tsx +25 -0
  699. package/light-chaser-ui/lib/types.ts +257 -0
  700. package/light-chaser-ui/lib/ui-container/UIContainer.less +44 -0
  701. package/light-chaser-ui/lib/ui-container/UIContainer.tsx +40 -0
  702. package/light-chaser-ui/lib/ui-map.ts +59 -0
  703. package/light-chaser-ui/package.json +57 -0
  704. package/light-chaser-ui/public/favicon.ico +0 -0
  705. package/light-chaser-ui/src/test.tsx +24 -0
  706. package/light-chaser-ui/tsconfig-build.json +6 -0
  707. package/light-chaser-ui/tsconfig.json +42 -0
  708. package/light-chaser-ui/tsconfig.node.json +12 -0
  709. package/light-chaser-ui/vite.config.ts +25 -0
  710. package/light-chaser-util/lib/AuthTools.ts +75 -0
  711. package/light-chaser-util/lib/Base64Util.ts +31 -0
  712. package/light-chaser-util/lib/ColorUtil.ts +110 -0
  713. package/light-chaser-util/lib/ComponentUtil.ts +45 -0
  714. package/light-chaser-util/lib/FileUtil.ts +49 -0
  715. package/light-chaser-util/lib/IdGenerate.ts +23 -0
  716. package/light-chaser-util/lib/ObjectUtil.ts +130 -0
  717. package/light-chaser-util/lib/SafeEvalUtil.ts +63 -0
  718. package/light-chaser-util/lib/URLUtil.ts +27 -0
  719. package/light-chaser-util/lib/main.ts +21 -0
  720. package/light-chaser-util/package.json +40 -0
  721. package/light-chaser-util/src/test.ts +12 -0
  722. package/light-chaser-util/tsconfig-build.json +6 -0
  723. package/light-chaser-util/tsconfig.json +36 -0
  724. package/light-chaser-util/vite.config.ts +18 -0
  725. package/package.json +12 -0
  726. package/pnpm-workspace.yaml +7 -0
  727. package/prompt/UI/344/274/230/345/214/226/346/217/220/347/244/272/350/257/215.md +144 -0
  728. package/prompt//347/273/204/344/273/266/345/274/200/345/217/221/346/217/220/347/244/272/350/257/215.md +1090 -0
  729. package/prompt//351/200/273/350/276/221/344/274/230/345/214/226/346/217/220/347/244/272/350/257/215.md +98 -0
  730. package/prompt//351/205/215/347/275/256/351/241/271/347/224/237/346/210/220/345/267/245/344/275/234/346/265/201.md +401 -0
@@ -0,0 +1,1090 @@
1
+ ## 项目基础信息
2
+
3
+ 技术栈锁定:React 18 + TypeScript 5 + MobX + AntD 5.20.0 + Less + Vite 5
4
+ 项目类型:数据可视化编辑器(类DataV/EasyV),支持拖拽组件和多数据源
5
+ 响应式:项目为PC端设计软件,不考虑响应式效果
6
+
7
+ ## 项目依赖
8
+
9
+ ```json
10
+ "dependencies": {
11
+ "@antv/g-base": "^0.5.15",
12
+ "@antv/g2plot": "^2.4.31",
13
+ "@icon-park/react": "^1.4.2",
14
+ "@monaco-editor/react": "^4.6.0",
15
+ "@scena/react-ruler": "^0.17.1",
16
+ "antd": "^6.1.1",
17
+ "countup.js": "^2.8.0",
18
+ "crypto-js": "^4.2.0",
19
+ "echarts": "^5.5.1",
20
+ "ezuikit-js": "^7.7.10",
21
+ "flv.js": "^1.6.2",
22
+ "hls.js": "^1.5.11",
23
+ "hotkeys-js": "^3.13.15",
24
+ "jsencrypt": "^3.3.2",
25
+ "light-chaser-types": "workspace:^",
26
+ "light-chaser-ui": "workspace:^",
27
+ "light-chaser-util": "workspace:^",
28
+ "localforage": "^1.10.0",
29
+ "lodash": "^4.17.21",
30
+ "mobx": "^6.7.0",
31
+ "mobx-react": "^7.6.0",
32
+ "monaco-editor": "^0.44.0",
33
+ "mqtt": "^5.10.1",
34
+ "nprogress": "^0.2.0",
35
+ "odometer_countup": "^1.0.4",
36
+ "pixi.js": "^8.4.1",
37
+ "react": "18.2.0",
38
+ "react-dom": "18.2.0",
39
+ "react-moveable": "^0.54.1",
40
+ "react-router-dom": "^6.21.0",
41
+ "react-selecto": "^1.22.6",
42
+ "react-timer-hook": "^3.0.7"
43
+ }
44
+ ```
45
+
46
+ ## 绝对禁令(违规立即终止):
47
+
48
+ 1. 禁止引入新依赖(除非明确要求)
49
+ 2. 禁止修改现有状态管理逻辑
50
+ 3. 禁止删除已有代码注释
51
+ 4. 禁止使用未授权的第三方库
52
+
53
+ ## 代码风格(严格遵循):
54
+
55
+ 参考我提供的代码案例,输出的代码风格应该和我提供的代码案例一致。尤其是换行、缩进。必须跟我提供的案例代码一样
56
+
57
+ ## 风格样式要求(严格遵循)
58
+
59
+ 注意事项:整个项目的组件风格已经通过Antd的ConfigProvider配置定制过(后续改造组件的过程中要考虑这一点)
60
+
61
+ ---
62
+
63
+ 1. 主题与配色
64
+
65
+ - 整体深色主题与高对比亮色点缀
66
+ - 主色板:#1E1E2F(背景)、#2C2C3E(容器)、#4FB8FF(主高亮)、#3CED92(成功指示)、#FF6E6E(警示)
67
+ - 辅助色板:#A0A0B2(次级文字)、#FFFFFF(主要文字)
68
+ - 冷暖对比:蓝绿系高亮对比红橙系警示
69
+
70
+ 2. 布局与排版
71
+
72
+ - 响应式 12 列网格,最大宽度 1200px,手机至桌面自动适配
73
+ - 间距:主轴 24px、次轴 16px、容器内边 20px
74
+ - 字体:无衬线(Inter / Roboto / Helvetica Neue)
75
+ - 字号层级:
76
+ 1. 页面标题 24px / Bold / 行高32px
77
+ 2. 区块标题 18px / Semibold / 行高28px
78
+ 3. 正文说明 14px / Regular / 行高20px
79
+ 4. 辅助信息 12px / Regular / 行高16px
80
+
81
+ 3. UI 组件与形态
82
+
83
+ - 卡片:圆角8px、柔和阴影 (0 2px 8px rgba(0,0,0,0.3))
84
+ - 按钮:
85
+ - 主按钮:#4FB8FF 背景、白色文字、圆角4px、12×24px 内边
86
+ - 次按钮:透明背景、#4FB8FF 边框/文字、圆角4px
87
+ - 输入框:#2C2C3E 背景、1px #3A3A4E 边框、4px 圆角
88
+ - 图标:24px 线性描边、2px 统一粗细
89
+
90
+ 4. 交互动效
91
+
92
+ - 悬停:边框/背景高亮 10% 亮度提升
93
+ - 激活:深暗 10% 并加粗边框
94
+ - 切换/加载:0.2s 透明度与位移过渡
95
+ - 提示框:#2C2C3E 背景 + 白字,圆角4px,阴影 0 1px 4px rgba(0,0,0,0.4)
96
+
97
+ 5. 可访问性与响应式
98
+
99
+ - 文本对比度符合 WCAG AA
100
+ - 键盘可操作、焦点态明显(2px #4FB8FF 高光)
101
+ - 屏幕阅读器友好:合理语义、ARIA 标签
102
+ - 多语言支持:自动换行、字符兼容
103
+
104
+ ---
105
+
106
+ **总结**
107
+
108
+ “深色简约主题;高对比亮色点缀;12 列响应式网格;无衬线字体;圆角卡片与柔和阴影;主/次按钮样式统一;线性 24px 图标;细节交互动效 0.2s 过渡;WCAG AA 对比度;键盘/屏幕阅读器支持;现代专业风格,全项目通用界面设计。”
109
+
110
+ ---
111
+
112
+ ## 可参考的上下文
113
+
114
+ #### 样式文件
115
+
116
+ ```less
117
+ .switch-component {
118
+ width: 100%;
119
+ height: 100%;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: flex-start;
123
+ padding: 4px 0;
124
+
125
+ // 自定义 AntD 开关样式
126
+ .ant-switch {
127
+ transition: all 0.2s ease-in-out;
128
+ background-color: var(--unCheckedBackgroundColor, #4c4c5e) !important;
129
+ border: var(--borderWidth, 0) solid var(--borderColor, transparent) !important;
130
+ border-radius: var(--borderRadius, 16px) !important;
131
+
132
+ // 开关把手样式
133
+ .ant-switch-handle {
134
+ transition: all 0.2s ease-in-out;
135
+
136
+ &::before {
137
+ background-color: var(--unCheckedHandleColor, #ffffff);
138
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
139
+ }
140
+ }
141
+
142
+ // 内部文本样式
143
+ .ant-switch-inner {
144
+ color: #ffffff;
145
+ font-size: 12px;
146
+ font-weight: 500;
147
+ transition: all 0.2s ease-in-out;
148
+ }
149
+
150
+ // 选中状态
151
+ &.ant-switch-checked {
152
+ background-color: var(--checkedBackgroundColor, #4fb8ff) !important;
153
+ border-color: var(--borderColor, transparent) !important;
154
+
155
+ .ant-switch-handle {
156
+ &::before {
157
+ background-color: var(--checkedHandleColor, #ffffff);
158
+ }
159
+ }
160
+
161
+ .ant-switch-inner {
162
+ color: #ffffff;
163
+ }
164
+ }
165
+
166
+ // 悬停状态
167
+ &:hover:not(.ant-switch-disabled) {
168
+ background-color: var(--backgroundColorHover, #343447) !important;
169
+ border-color: var(--borderColorHover, #4fb8ff) !important;
170
+ border-width: var(--borderWidthHover, 2px) !important;
171
+ border-radius: var(--borderRadiusHover, 16px) !important;
172
+ }
173
+
174
+ // 禁用状态
175
+ &.ant-switch-disabled {
176
+ opacity: 0.5;
177
+ cursor: not-allowed;
178
+ }
179
+
180
+ // 加载状态
181
+ &.ant-switch-loading {
182
+ opacity: 0.7;
183
+ }
184
+
185
+ // 小尺寸
186
+ &.ant-switch-small {
187
+ min-width: 28px;
188
+ height: 16px;
189
+ line-height: 16px;
190
+
191
+ .ant-switch-handle {
192
+ width: 12px;
193
+ height: 12px;
194
+ }
195
+
196
+ .ant-switch-inner {
197
+ font-size: 10px;
198
+ }
199
+ }
200
+
201
+ // 默认尺寸
202
+ &:not(.ant-switch-small) {
203
+ min-width: 44px;
204
+ height: 22px;
205
+ line-height: 22px;
206
+
207
+ .ant-switch-handle {
208
+ width: 18px;
209
+ height: 18px;
210
+ }
211
+ }
212
+ }
213
+
214
+ // 标签样式
215
+ .switch-label {
216
+ color: var(--labelColor, #ffffff);
217
+ font-size: var(--labelFontSize, 14px);
218
+ font-weight: var(--labelFontWeight, 400);
219
+ font-family: var(--fontFamily, inherit);
220
+ cursor: pointer;
221
+ transition: color 0.2s ease-in-out;
222
+ user-select: none;
223
+
224
+ &:hover {
225
+ color: #4fb8ff;
226
+ }
227
+
228
+ // 禁用状态
229
+ &.disabled {
230
+ color: #a0a0b2;
231
+ cursor: not-allowed;
232
+
233
+ &:hover {
234
+ color: #a0a0b2;
235
+ }
236
+ }
237
+ }
238
+
239
+ // 聚焦状态
240
+ .ant-switch:focus-visible {
241
+ outline: 2px solid rgba(79, 184, 255, 0.5);
242
+ outline-offset: 2px;
243
+ }
244
+ }
245
+ ```
246
+
247
+ #### 组件文件
248
+
249
+ ```tsx
250
+ import {ForwardedRef, forwardRef, useEffect, useImperativeHandle, useRef, useState} from 'react';
251
+ import {ComponentBaseProps} from "light-chaser-types/types/ComponentTypes.ts";
252
+ import './BaseSwitchComponent.less';
253
+ import {ConfigProvider, Switch, SwitchProps} from 'antd';
254
+
255
+ // 组件样式接口定义
256
+ export interface SwitchComponentStyle {
257
+ // 基础样式
258
+ color?: string;
259
+ fontSize?: number;
260
+ fontWeight?: number;
261
+ fontFamily?: string;
262
+ backgroundColor?: string;
263
+ borderRadius?: number;
264
+ borderWidth?: number;
265
+ borderColor?: string;
266
+ borderStyle?: string;
267
+
268
+ // 开关特有样式
269
+ checkedBackgroundColor?: string;
270
+ unCheckedBackgroundColor?: string;
271
+ checkedHandleColor?: string;
272
+ unCheckedHandleColor?: string;
273
+ switchSize?: 'default' | 'small';
274
+ loading?: boolean;
275
+ disabled?: boolean;
276
+
277
+ // 标签样式
278
+ label?: string;
279
+ checkedLabel?: string;
280
+ unCheckedLabel?: string;
281
+ labelPosition?: 'left' | 'right';
282
+ labelColor?: string;
283
+ labelFontSize?: number;
284
+ labelFontWeight?: number;
285
+
286
+ // 悬停样式
287
+ backgroundColorHover?: string;
288
+ borderRadiusHover?: number;
289
+ borderWidthHover?: number;
290
+ borderColorHover?: string;
291
+ }
292
+
293
+ // 组件属性接口定义
294
+ export interface SwitchComponentProps extends ComponentBaseProps {
295
+ style?: SwitchComponentStyle;
296
+ // 值相关属性
297
+ value?: boolean;
298
+ defaultValue?: boolean;
299
+ }
300
+
301
+ // 组件引用接口定义
302
+ export interface SwitchComponentRef {
303
+ updateConfig: (newConfig: SwitchComponentProps) => void;
304
+ // eslint-disable-next-line @typescript-eslint/ban-types
305
+ setEventHandler: (eventMap: Record<string, Function>) => void;
306
+ getValue: () => boolean | undefined;
307
+ setValue: (value: boolean) => void;
308
+ toggle: () => void;
309
+ changeVisible: (visible: boolean) => void;
310
+ }
311
+
312
+ // 开关组件实现
313
+ export const SwitchComponent = forwardRef((
314
+ props: SwitchComponentProps,
315
+ ref: ForwardedRef<SwitchComponentRef>
316
+ ) => {
317
+ const [config, setConfig] = useState<SwitchComponentProps>({...props});
318
+ const [visible, setVisible] = useState(true);
319
+ const {style, value, defaultValue} = config;
320
+ // eslint-disable-next-line @typescript-eslint/ban-types
321
+ const eventHandlerMap = useRef<Record<string, Function>>({});
322
+ const containerRef = useRef<HTMLDivElement>(null);
323
+
324
+ // 获取当前值
325
+ const getCurrentValue = () => {
326
+ return value ?? defaultValue ?? false;
327
+ };
328
+
329
+ // 暴露组件方法给外部调用
330
+ useImperativeHandle(ref, () => ({
331
+ updateConfig: (newConfig) => {
332
+ setConfig({...newConfig});
333
+ updateCustomStyle(newConfig?.style ?? {});
334
+ },
335
+ setEventHandler: (eventMap) => eventHandlerMap.current = eventMap,
336
+ getValue: () => value,
337
+ setValue: (newValue) => {
338
+ setConfig(prev => ({
339
+ ...prev,
340
+ value: newValue
341
+ }));
342
+ if ('valueChange' in eventHandlerMap.current) {
343
+ eventHandlerMap.current['valueChange'](newValue);
344
+ }
345
+ },
346
+ toggle: () => {
347
+ const currentValue = getCurrentValue();
348
+ const newValue = !currentValue;
349
+ setConfig(prev => ({
350
+ ...prev,
351
+ value: newValue
352
+ }));
353
+ if ('toggle' in eventHandlerMap.current) {
354
+ eventHandlerMap.current['toggle'](newValue);
355
+ }
356
+ if ('valueChange' in eventHandlerMap.current) {
357
+ eventHandlerMap.current['valueChange'](newValue);
358
+ }
359
+ },
360
+ changeVisible: (visible) => setVisible(visible)
361
+ }));
362
+
363
+ // 更新自定义 CSS 变量
364
+ const updateCustomStyle = (styleConfig: SwitchComponentStyle) => {
365
+ const {
366
+ backgroundColorHover = '#343447',
367
+ borderColorHover = '#4fb8ff',
368
+ borderRadiusHover = 4,
369
+ borderWidthHover = 2
370
+ } = styleConfig ?? {};
371
+
372
+ if (containerRef.current) {
373
+ containerRef.current.style.setProperty("--backgroundColorHover", backgroundColorHover);
374
+ containerRef.current.style.setProperty("--borderRadiusHover", `${borderRadiusHover}px`);
375
+ containerRef.current.style.setProperty("--borderWidthHover", `${borderWidthHover}px`);
376
+ containerRef.current.style.setProperty("--borderColorHover", borderColorHover);
377
+ }
378
+ };
379
+
380
+ // 处理开关状态变化
381
+ const handleChange = (checked: boolean) => {
382
+ setConfig(prev => ({
383
+ ...prev,
384
+ value: checked
385
+ }));
386
+
387
+ // 触发值改变事件
388
+ if ('change' in eventHandlerMap.current) {
389
+ eventHandlerMap.current['change'](checked);
390
+ }
391
+
392
+ // 触发值变化事件
393
+ if ('valueChange' in eventHandlerMap.current) {
394
+ eventHandlerMap.current['valueChange'](checked);
395
+ }
396
+
397
+ // 触发点击事件
398
+ if ('click' in eventHandlerMap.current) {
399
+ eventHandlerMap.current['click'](checked);
400
+ }
401
+
402
+ // 根据状态触发开/关事件
403
+ if (checked && 'on' in eventHandlerMap.current) {
404
+ eventHandlerMap.current['on']();
405
+ }
406
+ if (!checked && 'off' in eventHandlerMap.current) {
407
+ eventHandlerMap.current['off']();
408
+ }
409
+ };
410
+
411
+ // 初始化样式
412
+ useEffect(() => {
413
+ updateCustomStyle(style ?? {});
414
+ }, []);
415
+
416
+ // 构建 AntD Switch 的 props
417
+ const switchProps: SwitchProps = {
418
+ checked: value ?? defaultValue ?? false,
419
+ onChange: handleChange,
420
+ size: style?.switchSize || 'default',
421
+ loading: style?.loading ?? false,
422
+ disabled: style?.disabled ?? false,
423
+ checkedChildren: style?.checkedLabel || '',
424
+ unCheckedChildren: style?.unCheckedLabel || '',
425
+ style: {
426
+ backgroundColor: style?.unCheckedBackgroundColor || '#4c4c5e',
427
+ borderRadius: style?.borderRadius || 16,
428
+ borderWidth: style?.borderWidth || 0,
429
+ borderColor: style?.borderColor || 'transparent',
430
+ borderStyle: style?.borderStyle || 'solid',
431
+ },
432
+ };
433
+
434
+ // 构建自定义样式对象
435
+ const customStyles = {
436
+ // 开关容器样式
437
+ container: {
438
+ display: 'flex',
439
+ alignItems: 'center',
440
+ gap: '8px',
441
+ width: '100%',
442
+ height: '100%',
443
+ },
444
+ // 标签样式
445
+ label: {
446
+ color: style?.labelColor || '#ffffff',
447
+ fontSize: style?.labelFontSize || 14,
448
+ fontWeight: style?.labelFontWeight || 400,
449
+ fontFamily: style?.fontFamily || 'inherit',
450
+ cursor: style?.disabled ? 'not-allowed' : 'pointer',
451
+ }
452
+ };
453
+
454
+ return visible ? (
455
+ <div className="switch-component" ref={containerRef}>
456
+ <ConfigProvider
457
+ theme={{
458
+ components: {
459
+ Switch: {
460
+ handleBg: style?.unCheckedHandleColor || '#ffffff',
461
+ colorPrimary: style?.checkedBackgroundColor || '#4fb8ff',
462
+ colorPrimaryHover: style?.checkedBackgroundColor ?
463
+ `${style.checkedBackgroundColor}1a` : '#4fb8ff1a',
464
+ colorTextQuaternary: style?.unCheckedBackgroundColor || '#4c4c5e',
465
+ colorTextTertiary: style?.checkedBackgroundColor || '#4fb8ff',
466
+ }
467
+ }
468
+ }}
469
+ >
470
+ <div style={customStyles.container}>
471
+ {/* 左侧标签 */}
472
+ {style?.labelPosition !== 'right' && style?.label && (
473
+ <span
474
+ style={customStyles.label}
475
+ onClick={() => !style?.disabled && handleChange(!getCurrentValue())}
476
+ >
477
+ {style.label}
478
+ </span>
479
+ )}
480
+
481
+ {/* 开关组件 */}
482
+ <Switch {...switchProps} />
483
+
484
+ {/* 右侧标签 */}
485
+ {style?.labelPosition === 'right' && style?.label && (
486
+ <span
487
+ style={customStyles.label}
488
+ onClick={() => !style?.disabled && handleChange(!getCurrentValue())}
489
+ >
490
+ {style.label}
491
+ </span>
492
+ )}
493
+ </div>
494
+ </ConfigProvider>
495
+ </div>
496
+ ) : null;
497
+ });
498
+
499
+ export default SwitchComponent;
500
+ ```
501
+
502
+ #### 配置文件
503
+
504
+ ```tsx
505
+ import React from 'react';
506
+ import {ConfigType} from "../../../designer/right/ConfigContent";
507
+ import {FieldChangeData, LCGUI} from "light-chaser-ui/lib/gui/LCGUI.tsx";
508
+ import {Control} from "light-chaser-ui/lib/types.ts";
509
+ import {SwitchController} from "./BaseTabController.ts";
510
+
511
+ export const SwitchStyleConfig: React.FC<ConfigType<SwitchController>> = ({controller}) => {
512
+ const {style, defaultValue} = controller.getConfig()!;
513
+
514
+ const onFieldChange = (fieldChangeData: FieldChangeData) => {
515
+ const {dataFragment} = fieldChangeData;
516
+ controller.update(dataFragment!);
517
+ };
518
+
519
+ const schema: Control[] = [
520
+ {
521
+ type: 'accordion',
522
+ label: '基础设置',
523
+ children: [
524
+ {
525
+ type: 'grid',
526
+ key: 'style',
527
+ children: [
528
+ {
529
+ key: 'switchSize',
530
+ type: 'select',
531
+ label: '开关尺寸',
532
+ value: style?.switchSize || 'default',
533
+ config: {
534
+ options: [
535
+ {label: '默认', value: 'default'},
536
+ {label: '小号', value: 'small'},
537
+ ]
538
+ }
539
+ },
540
+ {
541
+ key: 'label',
542
+ type: 'input',
543
+ label: '标签文本',
544
+ value: style?.label || '',
545
+ },
546
+ {
547
+ key: 'labelPosition',
548
+ type: 'select',
549
+ label: '标签位置',
550
+ value: style?.labelPosition || 'left',
551
+ config: {
552
+ options: [
553
+ {label: '左侧', value: 'left'},
554
+ {label: '右侧', value: 'right'},
555
+ ]
556
+ }
557
+ },
558
+ {
559
+ key: 'checkedLabel',
560
+ type: 'input',
561
+ label: '开启时文本',
562
+ value: style?.checkedLabel || '',
563
+ },
564
+ {
565
+ key: 'unCheckedLabel',
566
+ type: 'input',
567
+ label: '关闭时文本',
568
+ value: style?.unCheckedLabel || '',
569
+ },
570
+ {
571
+ key: 'defaultValue',
572
+ type: 'switch',
573
+ label: '默认状态',
574
+ value: defaultValue as boolean,
575
+ },
576
+ ]
577
+ },
578
+ {
579
+ type: 'grid',
580
+ key: 'style',
581
+ children: [
582
+ {
583
+ key: 'loading',
584
+ type: 'switch',
585
+ label: '加载状态',
586
+ value: style?.loading ?? false,
587
+ },
588
+ {
589
+ key: 'disabled',
590
+ type: 'switch',
591
+ label: '禁用状态',
592
+ value: style?.disabled ?? false,
593
+ },
594
+ ]
595
+ },
596
+ ]
597
+ },
598
+ {
599
+ type: 'accordion',
600
+ label: '颜色样式',
601
+ children: [
602
+ {
603
+ type: 'grid',
604
+ key: 'style',
605
+ children: [
606
+ {
607
+ key: 'checkedBackgroundColor',
608
+ type: 'color-picker',
609
+ label: '开启背景色',
610
+ value: style?.checkedBackgroundColor || '#4fb8ff',
611
+ config: {
612
+ showText: true,
613
+ }
614
+ },
615
+ {
616
+ key: 'unCheckedBackgroundColor',
617
+ type: 'color-picker',
618
+ label: '关闭背景色',
619
+ value: style?.unCheckedBackgroundColor || '#4c4c5e',
620
+ config: {
621
+ showText: true,
622
+ }
623
+ },
624
+ {
625
+ key: 'checkedHandleColor',
626
+ type: 'color-picker',
627
+ label: '开启把手色',
628
+ value: style?.checkedHandleColor || '#ffffff',
629
+ config: {
630
+ showText: true,
631
+ }
632
+ },
633
+ {
634
+ key: 'unCheckedHandleColor',
635
+ type: 'color-picker',
636
+ label: '关闭把手色',
637
+ value: style?.unCheckedHandleColor || '#ffffff',
638
+ config: {
639
+ showText: true,
640
+ }
641
+ },
642
+ ]
643
+ },
644
+ ]
645
+ },
646
+ {
647
+ type: 'accordion',
648
+ label: '文本样式',
649
+ children: [
650
+ {
651
+ type: 'grid',
652
+ key: 'style',
653
+ children: [
654
+ {
655
+ key: 'fontSize',
656
+ type: 'number-input',
657
+ label: '标签字号',
658
+ value: style?.fontSize || 14,
659
+ config: {min: 8, max: 72}
660
+ },
661
+ {
662
+ key: 'fontWeight',
663
+ type: 'number-input',
664
+ label: '标签字重',
665
+ value: style?.fontWeight || 400,
666
+ config: {
667
+ min: 100,
668
+ max: 900,
669
+ step: 100
670
+ }
671
+ },
672
+ {
673
+ key: 'fontFamily',
674
+ type: 'select',
675
+ label: '标签字体',
676
+ value: style?.fontFamily,
677
+ config: {
678
+ options: window.LC_ENV.fonts,
679
+ }
680
+ },
681
+ {
682
+ key: 'color',
683
+ type: 'color-picker',
684
+ label: '标签颜色',
685
+ value: style?.color || '#ffffff',
686
+ config: {
687
+ showText: true,
688
+ }
689
+ },
690
+ {
691
+ key: 'labelColor',
692
+ type: 'color-picker',
693
+ label: '标签文字色',
694
+ value: style?.labelColor || '#ffffff',
695
+ config: {
696
+ showText: true,
697
+ }
698
+ },
699
+ {
700
+ key: 'labelFontSize',
701
+ type: 'number-input',
702
+ label: '标签文字大小',
703
+ value: style?.labelFontSize || 14,
704
+ config: {min: 8, max: 72}
705
+ },
706
+ {
707
+ key: 'labelFontWeight',
708
+ type: 'number-input',
709
+ label: '标签文字粗细',
710
+ value: style?.labelFontWeight || 400,
711
+ config: {
712
+ min: 100,
713
+ max: 900,
714
+ step: 100
715
+ }
716
+ },
717
+ ]
718
+ },
719
+ ]
720
+ },
721
+ {
722
+ type: 'accordion',
723
+ label: '边框样式',
724
+ children: [
725
+ {
726
+ type: 'grid',
727
+ key: 'style',
728
+ children: [
729
+ {
730
+ key: 'backgroundColor',
731
+ type: 'color-picker',
732
+ label: '容器背景色',
733
+ value: style?.backgroundColor || 'transparent',
734
+ config: {
735
+ showText: true,
736
+ }
737
+ },
738
+ {
739
+ key: 'borderRadius',
740
+ type: 'number-input',
741
+ label: '开关圆角',
742
+ value: style?.borderRadius || 16,
743
+ config: {min: 0, max: 50}
744
+ },
745
+ {
746
+ key: 'borderWidth',
747
+ type: 'number-input',
748
+ label: '边框宽度',
749
+ value: style?.borderWidth || 0,
750
+ config: {min: 0, max: 10}
751
+ },
752
+ {
753
+ key: 'borderColor',
754
+ type: 'color-picker',
755
+ label: '边框颜色',
756
+ value: style?.borderColor || 'transparent',
757
+ config: {showText: true}
758
+ },
759
+ {
760
+ key: 'borderStyle',
761
+ type: 'select',
762
+ label: '边框样式',
763
+ value: style?.borderStyle || 'solid',
764
+ config: {
765
+ options: [
766
+ {label: '无边框', value: 'none'},
767
+ {label: '实线', value: 'solid'},
768
+ {label: '虚线', value: 'dashed'},
769
+ {label: '点线', value: 'dotted'},
770
+ {label: '双线', value: 'double'},
771
+ ]
772
+ }
773
+ },
774
+ ]
775
+ },
776
+ ]
777
+ },
778
+ {
779
+ type: 'accordion',
780
+ label: '悬停样式',
781
+ children: [
782
+ {
783
+ type: 'grid',
784
+ key: 'style',
785
+ children: [
786
+ {
787
+ key: 'backgroundColorHover',
788
+ type: 'color-picker',
789
+ label: '悬停背景色',
790
+ value: style?.backgroundColorHover || '#343447',
791
+ config: {
792
+ showText: true,
793
+ }
794
+ },
795
+ {
796
+ key: 'borderRadiusHover',
797
+ type: 'number-input',
798
+ label: '悬停圆角',
799
+ value: style?.borderRadiusHover || 16,
800
+ config: {min: 0, max: 50}
801
+ },
802
+ {
803
+ key: 'borderWidthHover',
804
+ type: 'number-input',
805
+ label: '悬停边框宽度',
806
+ value: style?.borderWidthHover || 2,
807
+ config: {min: 0, max: 10}
808
+ },
809
+ {
810
+ key: 'borderColorHover',
811
+ type: 'color-picker',
812
+ label: '悬停边框颜色',
813
+ value: style?.borderColorHover || '#4fb8ff',
814
+ config: {showText: true}
815
+ },
816
+ ]
817
+ },
818
+ ]
819
+ }
820
+ ];
821
+
822
+ return (
823
+ <div style={{padding: 10}}>
824
+ <LCGUI schema={schema} onFieldChange={onFieldChange}/>
825
+ </div>
826
+ );
827
+ };
828
+ ```
829
+
830
+ #### Controller文件
831
+
832
+ ```ts
833
+ import SwitchComponent, {SwitchComponentProps, SwitchComponentRef} from "./BaseTabComponent.tsx";
834
+ import {UpdateOptions} from "../../../framework/core/AbstractController";
835
+ import AbstractDesignerController from "../../../framework/core/AbstractDesignerController";
836
+ import ComponentUtil from "light-chaser-util/lib/ComponentUtil.ts";
837
+ import ObjectUtil from "../../../../../light-chaser-util/lib/ObjectUtil.ts";
838
+ import BPExecutor from "../../../designer/blueprint/core/BPExecutor";
839
+ import {IThemeItem} from "light-chaser-types/types/ThemeTypes.ts";
840
+
841
+ export class SwitchController extends AbstractDesignerController<SwitchComponentRef, SwitchComponentProps> {
842
+
843
+ async create(container: HTMLElement, config: SwitchComponentProps, bpExecutor: BPExecutor, index?: number): Promise<void> {
844
+ await super.create(container, config, bpExecutor, index);
845
+ this.instance = await ComponentUtil.createAndRender<SwitchComponentRef>(container, SwitchComponent, config);
846
+ }
847
+
848
+ setVisible(visible: boolean): void {
849
+ this.instance?.changeVisible(visible);
850
+ }
851
+
852
+ destroy(): void {
853
+ this.instance = null;
854
+ this.config = null;
855
+ this.componentDataUpdater?.destroy();
856
+ }
857
+
858
+ getConfig(): SwitchComponentProps | null {
859
+ return this.config;
860
+ }
861
+
862
+ changeData(data: any) {
863
+ if (typeof data === "boolean")
864
+ this.instance?.setValue(data);
865
+ }
866
+
867
+ update(config: SwitchComponentProps, upOp?: UpdateOptions | undefined): void {
868
+ this.config = ObjectUtil.merge(this.config, config);
869
+ upOp = upOp || {reRender: true};
870
+ if (upOp.reRender)
871
+ this.instance?.updateConfig(this.config!);
872
+ }
873
+
874
+ registerEvent() {
875
+ if (this.instance) {
876
+ const nodeId = this.config?.base?.id ?? "";
877
+ const executor = this.bpExecutor;
878
+ this.instance.setEventHandler({
879
+ change: (value: boolean) => executor?.triggerComponentEvent(nodeId!, "change", value),
880
+ click: (value: boolean) => executor?.triggerComponentEvent(nodeId!, "click", value),
881
+ on: () => executor?.triggerComponentEvent(nodeId!, "on", this.config),
882
+ off: () => executor?.triggerComponentEvent(nodeId!, "off", this.config),
883
+ toggle: (value: boolean) => executor?.triggerComponentEvent(nodeId!, "toggle", value),
884
+ valueChange: (value: boolean) => executor?.triggerComponentEvent(nodeId!, "valueChange", value),
885
+ });
886
+ }
887
+ }
888
+
889
+ updateTheme(newTheme: IThemeItem) {
890
+ if (!newTheme || !this.config?.style) return;
891
+ const styleConfig = this.config?.style;
892
+ const {colors: {supplementSecond, main, supplementFirst, mainText}} = newTheme;
893
+
894
+ // 更新文本相关颜色
895
+ if (styleConfig?.color)
896
+ styleConfig.color = mainText ?? '#ffffff';
897
+
898
+ if (styleConfig?.labelColor)
899
+ styleConfig.labelColor = mainText ?? '#ffffff';
900
+
901
+ // 更新背景颜色
902
+ if (styleConfig?.backgroundColor)
903
+ styleConfig.backgroundColor = supplementFirst ?? 'transparent';
904
+
905
+ // 更新开关状态颜色
906
+ if (styleConfig?.checkedBackgroundColor)
907
+ styleConfig.checkedBackgroundColor = main ?? '#4fb8ff';
908
+
909
+ if (styleConfig?.unCheckedBackgroundColor)
910
+ styleConfig.unCheckedBackgroundColor = supplementFirst ?? '#4c4c5e';
911
+
912
+ // 更新边框颜色
913
+ if (styleConfig?.borderColor)
914
+ styleConfig.borderColor = supplementFirst ?? 'transparent';
915
+
916
+ // 更新悬停样式
917
+ if (styleConfig?.backgroundColorHover)
918
+ styleConfig.backgroundColorHover = supplementSecond ?? '#343447';
919
+
920
+ if (styleConfig?.borderColorHover)
921
+ styleConfig.borderColorHover = main ?? '#4fb8ff';
922
+
923
+ // 重新渲染
924
+ this.update({style: styleConfig}, {reRender: true});
925
+ }
926
+ }
927
+ ```
928
+
929
+ #### Definition文件
930
+
931
+ ```ts
932
+ import React from 'react';
933
+ import {BaseInfoType, MenuToConfigMappingType} from "light-chaser-types/types/ComponentTypes.ts";
934
+ import {SwitchController} from "./BaseTabController.ts";
935
+ import {SwitchComponentProps} from "./BaseTabComponent.tsx";
936
+ import SwitchImg from './datetime-picker.jpg';
937
+ import AbstractDesignerDefinition from "../../../framework/core/AbstractDesignerDefinition.ts";
938
+ import {ClazzTemplate} from "light-chaser-types/types/DesignerToolsTypes.ts";
939
+ import {EventInfo} from "light-chaser-types/types/BluePrintTypes.ts";
940
+
941
+ // 懒加载配置组件
942
+ const BaseInfo = React.lazy(() => import("../../common-component/base-info/BaseInfo"));
943
+ const ThemeConfig = React.lazy(() => import("../../common-component/theme-config/ThemeConfig.tsx"));
944
+ const AnimationConfig = React.lazy(() => import("../../common-component/animation-config/AnimationConfig.tsx"));
945
+ const DataConfig = React.lazy(() => import("../../common-component/data-config/DataConfig.tsx"));
946
+ const FilterConfig = React.lazy(() => import("../../common-component/filter-config/FilterConfig.tsx"));
947
+ const SwitchStyleConfig = React.lazy(() => import("./BaseTabStyleConfig.tsx").then((module) => ({default: module.SwitchStyleConfig})));
948
+
949
+ export default class SwitchDefinition extends AbstractDesignerDefinition<SwitchController, SwitchComponentProps> {
950
+
951
+ getBaseInfo(): BaseInfoType {
952
+ return {
953
+ compName: "开关组件",
954
+ compKey: "Switch",
955
+ categorize: "web",
956
+ width: 120,
957
+ height: 32,
958
+ };
959
+ }
960
+
961
+ getChartImg(): string | null {
962
+ return SwitchImg;
963
+ }
964
+
965
+ getController(): ClazzTemplate<SwitchController> | null {
966
+ return SwitchController;
967
+ }
968
+
969
+ getInitConfig(): SwitchComponentProps {
970
+ return {
971
+ base: {
972
+ id: "",
973
+ name: '开关组件',
974
+ type: 'Switch',
975
+ },
976
+ style: {
977
+ // 基础样式
978
+ color: '#ffffff',
979
+ fontSize: 14,
980
+ fontWeight: 400,
981
+ fontFamily: 'PingFang SC',
982
+ backgroundColor: 'transparent',
983
+ borderRadius: 16,
984
+ borderWidth: 0,
985
+ borderColor: 'transparent',
986
+ borderStyle: 'solid',
987
+
988
+ // 开关特有样式
989
+ checkedBackgroundColor: '#4fb8ff',
990
+ unCheckedBackgroundColor: '#4c4c5e',
991
+ checkedHandleColor: '#ffffff',
992
+ unCheckedHandleColor: '#ffffff',
993
+ switchSize: 'default',
994
+ loading: false,
995
+ disabled: false,
996
+
997
+ // 标签样式
998
+ label: '开关',
999
+ checkedLabel: '',
1000
+ unCheckedLabel: '',
1001
+ labelPosition: 'left',
1002
+ labelColor: '#ffffff',
1003
+ labelFontSize: 14,
1004
+ labelFontWeight: 400,
1005
+
1006
+ // 悬停样式
1007
+ backgroundColorHover: '#343447',
1008
+ borderRadiusHover: 16,
1009
+ borderWidthHover: 0,
1010
+ borderColorHover: '#4fb8ff',
1011
+ },
1012
+ data: {
1013
+ sourceType: 'static',
1014
+ value: false
1015
+ },
1016
+ filter: {
1017
+ enable: false,
1018
+ blur: 0,
1019
+ brightness: 1,
1020
+ contrast: 1,
1021
+ opacity: 1,
1022
+ saturate: 1,
1023
+ hueRotate: 0
1024
+ }
1025
+ };
1026
+ }
1027
+
1028
+ getMenuToConfigContentMap(): MenuToConfigMappingType {
1029
+ return {
1030
+ base: BaseInfo,
1031
+ style: SwitchStyleConfig,
1032
+ animation: AnimationConfig,
1033
+ theme: ThemeConfig,
1034
+ filter: FilterConfig,
1035
+ data: DataConfig
1036
+ };
1037
+ }
1038
+
1039
+ getEventList(): EventInfo[] {
1040
+ const events = super.getEventList();
1041
+ return events.concat([
1042
+ {
1043
+ id: "change",
1044
+ name: "状态改变时",
1045
+ },
1046
+ {
1047
+ id: "click",
1048
+ name: "点击时",
1049
+ },
1050
+ {
1051
+ id: "on",
1052
+ name: "开启时",
1053
+ },
1054
+ {
1055
+ id: "off",
1056
+ name: "关闭时",
1057
+ },
1058
+ {
1059
+ id: "toggle",
1060
+ name: "切换时",
1061
+ },
1062
+ {
1063
+ id: "valueChange",
1064
+ name: "值变化时",
1065
+ }
1066
+ ]);
1067
+ }
1068
+ }
1069
+ ```
1070
+
1071
+ ## 需求描述
1072
+
1073
+ 这是我项目中的其中一个组件的代码。现在,我需要你参考这个代码,为我编写新的组件。你需要给我提供完整的代码。
1074
+
1075
+ 要求:
1076
+
1077
+ - 实现一个按钮组(选项卡)组件。
1078
+ - 按钮组组件要支持单选和多选两种模式
1079
+ - 按钮组中的每个按钮以及按钮组的容器对应的边距、背景色、边框、阴影等一系列css样式都要可配置化
1080
+ - 组件要提供方法支持显示隐藏组件
1081
+ - 组件的默认UI样式要符合我上面要求的UI设计哲学
1082
+ - 不可以使用已有的组件库二次开发,要从零开始实现
1083
+ - 提供详细完整的注释说明
1084
+ - 你需要给我提供至少5个文件的代码,分开输出。文件名分别为:
1085
+ - BaseTabComponent.less
1086
+ - BaseTabComponent.tsx
1087
+ - BaseTabController.ts
1088
+ - BaseTabDefinition.ts
1089
+ - BaseTabStyleConfig.tsx
1090
+