cx 26.2.1 → 26.2.3

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 (324) hide show
  1. package/build/charts/Chart.d.ts.map +1 -1
  2. package/build/charts/Chart.js +5 -4
  3. package/build/charts/ColumnBarBase.d.ts +3 -3
  4. package/build/charts/ColumnBarBase.d.ts.map +1 -1
  5. package/build/charts/ColumnBarBase.js +1 -1
  6. package/build/charts/Legend.d.ts.map +1 -1
  7. package/build/charts/Legend.js +11 -4
  8. package/build/charts/Marker.d.ts +3 -3
  9. package/build/charts/Marker.d.ts.map +1 -1
  10. package/build/charts/MarkerLine.d.ts +7 -7
  11. package/build/charts/MarkerLine.d.ts.map +1 -1
  12. package/build/charts/MarkerLine.js +14 -10
  13. package/build/charts/PieChart.d.ts +4 -4
  14. package/build/charts/PieChart.d.ts.map +1 -1
  15. package/build/charts/PieChart.js +36 -14
  16. package/build/charts/PieLabel.d.ts.map +1 -1
  17. package/build/charts/PieLabel.js +2 -1
  18. package/build/charts/RangeMarker.d.ts +3 -3
  19. package/build/charts/RangeMarker.d.ts.map +1 -1
  20. package/build/charts/RangeMarker.js +1 -1
  21. package/build/charts/axis/TimeAxis.d.ts +3 -3
  22. package/build/charts/axis/TimeAxis.d.ts.map +1 -1
  23. package/build/charts/axis/TimeAxis.js +70 -21
  24. package/build/charts/helpers/ValueAtFinder.d.ts +1 -1
  25. package/build/charts/helpers/ValueAtFinder.d.ts.map +1 -1
  26. package/build/charts/helpers/ValueAtFinder.js +5 -2
  27. package/build/data/StructuredSelector.js +3 -4
  28. package/build/data/createAccessorModelProxy.d.ts +6 -11
  29. package/build/data/createAccessorModelProxy.d.ts.map +1 -1
  30. package/build/data/createAccessorModelProxy.js +1 -3
  31. package/build/svg/Ellipse.d.ts +5 -4
  32. package/build/svg/Ellipse.d.ts.map +1 -1
  33. package/build/svg/Ellipse.js +9 -6
  34. package/build/svg/Line.d.ts +1 -0
  35. package/build/svg/Line.d.ts.map +1 -1
  36. package/build/svg/Line.js +4 -1
  37. package/build/svg/Text.d.ts +12 -6
  38. package/build/svg/Text.d.ts.map +1 -1
  39. package/build/svg/Text.js +12 -4
  40. package/build/ui/Controller.d.ts +2 -0
  41. package/build/ui/Controller.d.ts.map +1 -1
  42. package/build/ui/Controller.js +3 -0
  43. package/build/ui/HoverSync.d.ts.map +1 -1
  44. package/build/ui/HoverSync.js +7 -2
  45. package/build/ui/Prop.d.ts +1 -1
  46. package/build/ui/Prop.d.ts.map +1 -1
  47. package/build/ui/Text.d.ts +3 -3
  48. package/build/ui/Text.d.ts.map +1 -1
  49. package/build/ui/Text.js +5 -5
  50. package/build/ui/adapter/GroupAdapter.d.ts.map +1 -1
  51. package/build/ui/adapter/GroupAdapter.js +20 -10
  52. package/build/ui/app/History.js +1 -1
  53. package/build/widgets/List.d.ts.map +1 -1
  54. package/build/widgets/List.js +6 -7
  55. package/build/widgets/drag-drop/DropZone.d.ts +3 -3
  56. package/build/widgets/drag-drop/DropZone.d.ts.map +1 -1
  57. package/build/widgets/form/Calendar.d.ts.map +1 -1
  58. package/build/widgets/form/Calendar.js +30 -11
  59. package/build/widgets/form/ColorField.d.ts.map +1 -1
  60. package/build/widgets/form/ColorField.js +16 -7
  61. package/build/widgets/form/DateTimeField.d.ts.map +1 -1
  62. package/build/widgets/form/DateTimeField.js +23 -10
  63. package/build/widgets/form/Field.d.ts +2 -0
  64. package/build/widgets/form/Field.d.ts.map +1 -1
  65. package/build/widgets/form/Field.js +11 -5
  66. package/build/widgets/form/LookupField.d.ts +1 -1
  67. package/build/widgets/form/LookupField.d.ts.map +1 -1
  68. package/build/widgets/form/LookupField.js +6 -6
  69. package/build/widgets/form/MonthField.d.ts.map +1 -1
  70. package/build/widgets/form/MonthField.js +15 -7
  71. package/build/widgets/form/MonthPicker.d.ts +1 -2
  72. package/build/widgets/form/MonthPicker.d.ts.map +1 -1
  73. package/build/widgets/form/MonthPicker.js +84 -41
  74. package/build/widgets/form/NumberField.d.ts +2 -0
  75. package/build/widgets/form/NumberField.d.ts.map +1 -1
  76. package/build/widgets/form/NumberField.js +45 -15
  77. package/build/widgets/form/TextField.d.ts +1 -9
  78. package/build/widgets/form/TextField.d.ts.map +1 -1
  79. package/build/widgets/form/TextField.js +1 -1
  80. package/build/widgets/grid/Grid.d.ts +2 -2
  81. package/build/widgets/grid/Grid.d.ts.map +1 -1
  82. package/build/widgets/grid/Grid.js +9 -4
  83. package/build/widgets/grid/Pagination.d.ts.map +1 -1
  84. package/build/widgets/grid/Pagination.js +4 -4
  85. package/build/widgets/grid/TreeNode.d.ts.map +1 -1
  86. package/build/widgets/grid/TreeNode.js +10 -2
  87. package/build/widgets/icons/folder.d.ts.map +1 -1
  88. package/build/widgets/icons/folder.js +1 -0
  89. package/build/widgets/icons/forward.d.ts.map +1 -1
  90. package/build/widgets/icons/forward.js +4 -3
  91. package/build/widgets/icons/loading.d.ts.map +1 -1
  92. package/build/widgets/icons/loading.js +6 -5
  93. package/build/widgets/icons/square.d.ts.map +1 -1
  94. package/build/widgets/icons/square.js +3 -3
  95. package/build/widgets/index.d.ts +3 -1
  96. package/build/widgets/index.d.ts.map +1 -1
  97. package/build/widgets/index.js +3 -1
  98. package/build/widgets/overlay/ContextMenu.d.ts.map +1 -1
  99. package/build/widgets/overlay/ContextMenu.js +2 -0
  100. package/build/widgets/overlay/Dropdown.d.ts +2 -1
  101. package/build/widgets/overlay/Dropdown.d.ts.map +1 -1
  102. package/build/widgets/overlay/Dropdown.js +75 -20
  103. package/build/widgets/overlay/MsgBox.d.ts +1 -0
  104. package/build/widgets/overlay/MsgBox.d.ts.map +1 -1
  105. package/build/widgets/overlay/MsgBox.js +2 -2
  106. package/build/widgets/overlay/Overlay.d.ts +32 -2
  107. package/build/widgets/overlay/Overlay.d.ts.map +1 -1
  108. package/build/widgets/overlay/Overlay.js +47 -16
  109. package/build/widgets/overlay/Toast.d.ts +1 -1
  110. package/build/widgets/overlay/Toast.d.ts.map +1 -1
  111. package/build/widgets/overlay/Toast.js +4 -1
  112. package/build/widgets/overlay/Tooltip.d.ts +6 -0
  113. package/build/widgets/overlay/Tooltip.d.ts.map +1 -1
  114. package/build/widgets/overlay/Tooltip.js +24 -9
  115. package/build/widgets/overlay/Window.d.ts.map +1 -1
  116. package/build/widgets/overlay/Window.js +24 -9
  117. package/dist/charts.css +325 -272
  118. package/dist/charts.js +11 -5
  119. package/dist/data.js +2 -2
  120. package/dist/manifest.js +892 -880
  121. package/dist/svg.css +14 -8
  122. package/dist/svg.js +9 -1
  123. package/dist/ui.js +29 -16
  124. package/dist/widgets.css +997 -294
  125. package/dist/widgets.js +317 -121
  126. package/package.json +1 -1
  127. package/src/charts/Bar.scss +13 -10
  128. package/src/charts/BarGraph.scss +31 -29
  129. package/src/charts/BubbleGraph.scss +11 -8
  130. package/src/charts/Chart.ts +5 -3
  131. package/src/charts/Column.scss +13 -10
  132. package/src/charts/ColumnBarBase.tsx +255 -230
  133. package/src/charts/ColumnGraph.scss +13 -11
  134. package/src/charts/Gridlines.scss +10 -8
  135. package/src/charts/Legend.scss +57 -50
  136. package/src/charts/Legend.tsx +257 -213
  137. package/src/charts/LegendEntry.scss +35 -29
  138. package/src/charts/LineGraph.scss +28 -25
  139. package/src/charts/Marker.scss +12 -10
  140. package/src/charts/Marker.tsx +3 -2
  141. package/src/charts/MarkerLine.scss +11 -8
  142. package/src/charts/MarkerLine.tsx +196 -177
  143. package/src/charts/PieChart.scss +12 -9
  144. package/src/charts/PieChart.tsx +717 -591
  145. package/src/charts/PieLabel.tsx +99 -81
  146. package/src/charts/Range.scss +11 -8
  147. package/src/charts/RangeMarker.tsx +204 -187
  148. package/src/charts/ScatterGraph.scss +12 -9
  149. package/src/charts/axis/Axis.scss +6 -5
  150. package/src/charts/axis/CategoryAxis.scss +10 -8
  151. package/src/charts/axis/NumericAxis.scss +9 -6
  152. package/src/charts/axis/TimeAxis.scss +9 -6
  153. package/src/charts/axis/TimeAxis.tsx +753 -637
  154. package/src/charts/axis/index.scss +4 -5
  155. package/src/charts/axis/variables.scss +4 -2
  156. package/src/charts/helpers/ValueAtFinder.ts +19 -5
  157. package/src/charts/index.scss +16 -19
  158. package/src/charts/maps.scss +0 -0
  159. package/src/charts/palette.scss +11 -31
  160. package/src/charts/palette.variables.scss +23 -0
  161. package/src/charts/variables.scss +35 -3
  162. package/src/data/StructuredSelector.ts +2 -2
  163. package/src/data/createAccessorModelProxy.ts +66 -74
  164. package/src/index.scss +5 -6
  165. package/src/maps.scss +5 -0
  166. package/src/svg/Ellipse.tsx +62 -55
  167. package/src/svg/Line.tsx +57 -42
  168. package/src/svg/Svg.scss +6 -6
  169. package/src/svg/Text.scss +19 -0
  170. package/src/svg/Text.tsx +172 -116
  171. package/src/svg/index.scss +3 -2
  172. package/src/svg/maps.scss +0 -0
  173. package/src/svg/variables.scss +0 -0
  174. package/src/ui/Container.spec.ts +59 -0
  175. package/src/ui/Controller.spec.tsx +30 -0
  176. package/src/ui/Controller.ts +5 -0
  177. package/src/ui/HoverSync.tsx +179 -147
  178. package/src/ui/Prop.ts +1 -1
  179. package/src/ui/Text.ts +12 -9
  180. package/src/ui/adapter/GroupAdapter.spec.ts +42 -0
  181. package/src/ui/adapter/GroupAdapter.ts +25 -14
  182. package/src/ui/app/History.ts +1 -1
  183. package/src/ui/index.scss +1 -1
  184. package/src/ui/layout/LabelsLeftLayout.scss +5 -7
  185. package/src/ui/layout/LabelsTopLayout.scss +4 -6
  186. package/src/ui/layout/index.scss +2 -3
  187. package/src/ui/maps.scss +0 -0
  188. package/src/ui/variables.scss +1 -2
  189. package/src/util/index.scss +4 -2
  190. package/src/util/maps.scss +1 -0
  191. package/src/util/scss/besm.scss +15 -0
  192. package/src/util/scss/calc.scss +103 -11
  193. package/src/util/scss/defaults.scss +24 -0
  194. package/src/util/scss/elements.scss +78 -0
  195. package/src/util/scss/global.scss +15 -0
  196. package/src/util/scss/include.scss +17 -9
  197. package/src/util/scss/index.scss +1 -9
  198. package/src/util/scss/maps.scss +2 -0
  199. package/src/util/scss/pad-size.scss +9 -0
  200. package/src/util/scss/padding.scss +6 -0
  201. package/src/util/scss/screen-size.scss +5 -0
  202. package/src/util/scss/variables.scss +6 -0
  203. package/src/util/variables.scss +1 -0
  204. package/src/variables.scss +5 -217
  205. package/src/widgets/Button.maps.scss +103 -0
  206. package/src/widgets/Button.scss +33 -9
  207. package/src/widgets/Button.variables.scss +8 -104
  208. package/src/widgets/CxCredit.scss +2 -0
  209. package/src/widgets/FlexBox.scss +16 -11
  210. package/src/widgets/Heading.scss +6 -0
  211. package/src/widgets/HighlightedSearchText.scss +8 -1
  212. package/src/widgets/Icon.scss +6 -0
  213. package/src/widgets/List.scss +7 -0
  214. package/src/widgets/List.tsx +6 -7
  215. package/src/widgets/ProgressBar.scss +9 -0
  216. package/src/widgets/Resizer.scss +9 -7
  217. package/src/widgets/Section.scss +53 -56
  218. package/src/widgets/animations.scss +4 -2
  219. package/src/widgets/box.scss +47 -0
  220. package/src/widgets/drag-drop/DragClone.scss +12 -4
  221. package/src/widgets/drag-drop/DragHandle.scss +12 -6
  222. package/src/widgets/drag-drop/DragSource.scss +12 -6
  223. package/src/widgets/drag-drop/DropZone.scss +9 -0
  224. package/src/widgets/drag-drop/DropZone.tsx +3 -3
  225. package/src/widgets/drag-drop/index.scss +4 -4
  226. package/src/widgets/drag-drop/maps.scss +7 -0
  227. package/src/widgets/drag-drop/variables.scss +8 -5
  228. package/src/widgets/form/Calendar.maps.scss +54 -0
  229. package/src/widgets/form/Calendar.scss +49 -11
  230. package/src/widgets/form/Calendar.tsx +755 -653
  231. package/src/widgets/form/Calendar.variables.scss +3 -46
  232. package/src/widgets/form/Checkbox.maps.scss +34 -0
  233. package/src/widgets/form/Checkbox.scss +14 -3
  234. package/src/widgets/form/Checkbox.variables.scss +4 -36
  235. package/src/widgets/form/ColorField.scss +21 -2
  236. package/src/widgets/form/ColorField.tsx +485 -431
  237. package/src/widgets/form/ColorPicker.maps.scss +21 -0
  238. package/src/widgets/form/ColorPicker.scss +26 -9
  239. package/src/widgets/form/ColorPicker.variables.scss +3 -16
  240. package/src/widgets/form/DateTimeField.scss +54 -21
  241. package/src/widgets/form/DateTimeField.tsx +697 -615
  242. package/src/widgets/form/DateTimePicker.scss +14 -4
  243. package/src/widgets/form/Field.maps.scss +122 -0
  244. package/src/widgets/form/Field.scss +54 -18
  245. package/src/widgets/form/Field.tsx +611 -504
  246. package/src/widgets/form/Field.variables.scss +46 -0
  247. package/src/widgets/form/HelpText.scss +8 -5
  248. package/src/widgets/form/Label.scss +10 -3
  249. package/src/widgets/form/LookupField.maps.scss +26 -0
  250. package/src/widgets/form/LookupField.scss +54 -24
  251. package/src/widgets/form/LookupField.tsx +25 -21
  252. package/src/widgets/form/MonthField.scss +48 -26
  253. package/src/widgets/form/MonthField.tsx +645 -567
  254. package/src/widgets/form/MonthPicker.maps.scss +50 -0
  255. package/src/widgets/form/MonthPicker.scss +44 -35
  256. package/src/widgets/form/MonthPicker.tsx +954 -724
  257. package/src/widgets/form/MonthPicker.variables.scss +24 -0
  258. package/src/widgets/form/NumberField.scss +19 -2
  259. package/src/widgets/form/NumberField.tsx +576 -466
  260. package/src/widgets/form/Radio.maps.scss +36 -0
  261. package/src/widgets/form/Radio.scss +12 -2
  262. package/src/widgets/form/Radio.variables.scss +3 -42
  263. package/src/widgets/form/Select.scss +25 -9
  264. package/src/widgets/form/Slider.scss +23 -14
  265. package/src/widgets/form/Switch.scss +18 -8
  266. package/src/widgets/form/TextArea.scss +14 -1
  267. package/src/widgets/form/TextField.scss +24 -3
  268. package/src/widgets/form/TextField.tsx +9 -21
  269. package/src/widgets/form/UploadButton.scss +14 -6
  270. package/src/widgets/form/ValidationError.scss +10 -6
  271. package/src/widgets/form/Wheel.scss +14 -4
  272. package/src/widgets/form/index.scss +22 -24
  273. package/src/widgets/form/maps.scss +81 -0
  274. package/src/widgets/form/variables.scss +111 -355
  275. package/src/widgets/grid/Grid.scss +19 -2
  276. package/src/widgets/grid/Grid.spec.ts +42 -0
  277. package/src/widgets/grid/Grid.tsx +15 -7
  278. package/src/widgets/grid/Pagination.scss +11 -2
  279. package/src/widgets/grid/Pagination.tsx +110 -102
  280. package/src/widgets/grid/TreeNode.scss +25 -8
  281. package/src/widgets/grid/TreeNode.tsx +127 -116
  282. package/src/widgets/grid/index.scss +3 -4
  283. package/src/widgets/grid/maps.scss +110 -0
  284. package/src/widgets/grid/variables.scss +48 -137
  285. package/src/widgets/icons/folder.tsx +1 -2
  286. package/src/widgets/icons/forward.tsx +23 -20
  287. package/src/widgets/icons/loading.tsx +22 -19
  288. package/src/widgets/icons/square.tsx +20 -17
  289. package/src/widgets/index.scss +16 -16
  290. package/src/widgets/index.ts +63 -58
  291. package/src/widgets/lists.scss +42 -0
  292. package/src/widgets/maps.scss +139 -0
  293. package/src/widgets/nav/Link.scss +14 -1
  294. package/src/widgets/nav/Menu.scss +13 -7
  295. package/src/widgets/nav/Menu.variables.scss +1 -12
  296. package/src/widgets/nav/MenuItem.scss +21 -6
  297. package/src/widgets/nav/Scroller.scss +11 -2
  298. package/src/widgets/nav/Tab.maps.scss +78 -0
  299. package/src/widgets/nav/Tab.scss +12 -6
  300. package/src/widgets/nav/Tab.variables.scss +7 -76
  301. package/src/widgets/nav/cover.scss +6 -4
  302. package/src/widgets/nav/index.scss +6 -6
  303. package/src/widgets/nav/maps.scss +32 -0
  304. package/src/widgets/nav/variables.scss +4 -11
  305. package/src/widgets/overlay/ContextMenu.ts +3 -0
  306. package/src/widgets/overlay/Dropdown.scss +47 -16
  307. package/src/widgets/overlay/Dropdown.tsx +851 -676
  308. package/src/widgets/overlay/MsgBox.tsx +125 -111
  309. package/src/widgets/overlay/Overlay.scss +60 -40
  310. package/src/widgets/overlay/Overlay.tsx +948 -800
  311. package/src/widgets/overlay/Toast.scss +42 -34
  312. package/src/widgets/overlay/Toast.ts +11 -1
  313. package/src/widgets/overlay/Tooltip.scss +27 -96
  314. package/src/widgets/overlay/Tooltip.tsx +376 -309
  315. package/src/widgets/overlay/Window.maps.scss +51 -0
  316. package/src/widgets/overlay/Window.scss +17 -17
  317. package/src/widgets/overlay/Window.tsx +291 -236
  318. package/src/widgets/overlay/Window.variables.scss +2 -43
  319. package/src/widgets/overlay/index.d.ts +11 -11
  320. package/src/widgets/overlay/index.scss +6 -15
  321. package/src/widgets/overlay/maps.scss +44 -0
  322. package/src/widgets/overlay/variables.scss +11 -42
  323. package/src/widgets/variables.scss +33 -117
  324. package/src/global.scss +0 -14
@@ -237,8 +237,8 @@ export interface GridColumnConfig {
237
237
  editable?: boolean;
238
238
  editor?: React.ReactNode;
239
239
  footer?: GridColumnFooterConfig | StringProp | NumberProp | false;
240
- items?: React.ReactNode;
241
- children?: React.ReactNode;
240
+ items?: ChildNode | ChildNode[];
241
+ children?: ChildNode | ChildNode[];
242
242
  key?: string;
243
243
  pad?: boolean;
244
244
  sortField?: string;
@@ -521,7 +521,10 @@ export interface GridConfig<T = any> extends StyledContainerConfig {
521
521
  focusable?: boolean;
522
522
 
523
523
  /** Callback function to retrieve grouping data. */
524
- onGetGrouping?: (params: any, instance: Instance) => (string | GridGroupingConfig<T>)[];
524
+ onGetGrouping?: (
525
+ params: any,
526
+ instance: Instance,
527
+ ) => (string | GridGroupingConfig<T>)[];
525
528
 
526
529
  /** Callback function to dynamically calculate columns. */
527
530
  onGetColumns?: (
@@ -788,7 +791,8 @@ export class Grid<T = unknown> extends ContainerBase<
788
791
  instance: GridInstance,
789
792
  groupingData: any,
790
793
  ) {
791
- var row = this.row || {};
794
+ // Clone row to avoid mutating the original config
795
+ var row = { ...this.row };
792
796
  let columns = this.columns;
793
797
  if (this.onGetColumns) {
794
798
  let result = instance.invoke("onGetColumns", columnParams, instance);
@@ -812,9 +816,13 @@ export class Grid<T = unknown> extends ContainerBase<
812
816
  for (let i = 0; i < 10; i++) {
813
817
  let l = row["line" + i];
814
818
  if (l) {
815
- if (isArray(l.columns))
816
- for (let c = 0; c < l.columns.length; c++)
817
- l.columns[c].uniqueColumnId = `l${i}-${l.columns[c].key || c}`;
819
+ if (isArray(l.columns)) {
820
+ // Clone columns to avoid mutating the original config
821
+ l.columns = l.columns.map((col: any, c: number) => ({
822
+ ...col,
823
+ uniqueColumnId: `l${i}-${col.key || c}`,
824
+ }));
825
+ }
818
826
  lines.push(l);
819
827
  }
820
828
  }
@@ -1,4 +1,13 @@
1
+ @use "sass:math";
1
2
  @use "sass:map";
3
+ @use "../variables" as *;
4
+ @use "../maps" as *;
5
+ @use "../../util/scss/add-rules.scss" as *;
6
+ @use "../../util/scss/clockwise.scss" as *;
7
+ @use "../../util/scss/deep-merge.scss" as *;
8
+ @use "../../util/scss/calc.scss" as *;
9
+ @use "../../util/scss/besm.scss" as *;
10
+ @use "../../util/scss/include.scss" as *;
2
11
 
3
12
  @mixin cx-pagination(
4
13
  $name: "pagination",
@@ -100,9 +109,9 @@
100
109
  line-height: $icon-size;
101
110
  position: absolute;
102
111
  top: 50%;
103
- margin-top: -$icon-size * 0.5;
112
+ margin-top: cx-multiply($icon-size, -0.5);
104
113
  left: 50%;
105
- margin-left: -$icon-size * 0.5;
114
+ margin-left: cx-multiply($icon-size, -0.5);
106
115
  }
107
116
 
108
117
  .#{$element}#{$name}-icon-prev-page {
@@ -9,114 +9,122 @@ import { Instance } from "../../ui/Instance";
9
9
  import { RenderingContext } from "../../ui/RenderingContext";
10
10
 
11
11
  export interface PaginationConfig extends StyledContainerConfig {
12
- /** Current page number. */
13
- page?: NumberProp;
12
+ /** Current page number. */
13
+ page?: NumberProp;
14
14
 
15
- /** Total number of pages. */
16
- pageCount?: NumberProp;
15
+ /** Total number of pages. */
16
+ pageCount?: NumberProp;
17
17
 
18
- /** Number of page buttons to display. */
19
- length?: NumberProp;
18
+ /** Number of page buttons to display. */
19
+ length?: NumberProp;
20
20
  }
21
21
 
22
22
  export class Pagination extends Widget<PaginationConfig> {
23
- declare baseClass: string;
24
- declare length: number;
25
-
26
- constructor(config?: PaginationConfig) {
27
- super(config);
28
- }
29
-
30
- declareData() {
31
- super.declareData(
32
- {
33
- page: undefined,
34
- length: undefined,
35
- pageCount: undefined,
36
- },
37
- ...arguments,
23
+ declare baseClass: string;
24
+ declare length: number;
25
+
26
+ constructor(config?: PaginationConfig) {
27
+ super(config);
28
+ }
29
+
30
+ declareData() {
31
+ super.declareData(
32
+ {
33
+ page: undefined,
34
+ length: undefined,
35
+ pageCount: undefined,
36
+ },
37
+ ...arguments,
38
+ );
39
+ }
40
+
41
+ render(context: RenderingContext, instance: Instance, key: string) {
42
+ let { data } = instance;
43
+ let { page, pageCount, length } = data;
44
+ let { CSS, baseClass } = this;
45
+
46
+ if (!pageCount) pageCount = 1;
47
+
48
+ let minPage = Math.max(1, page - Math.floor(length / 2));
49
+ let maxPage = minPage + length - 1;
50
+
51
+ if (maxPage > pageCount) {
52
+ maxPage = Math.max(pageCount, length);
53
+ minPage = maxPage - length + 1;
54
+ }
55
+
56
+ let nextPageIcon = (
57
+ <ForwardIcon className={CSS.element(baseClass, "icon-next-page")} />
58
+ );
59
+ let prevPageIcon = (
60
+ <ForwardIcon className={CSS.element(baseClass, "icon-prev-page")} />
61
+ );
62
+
63
+ let pageBtns = [];
64
+
65
+ for (let p = minPage - 1; p <= maxPage + 1; p++) {
66
+ pageBtns.push(
67
+ <div
68
+ key={p < minPage ? "-1" : p > maxPage ? "-2" : p}
69
+ className={CSS.element(baseClass, "page", {
70
+ active: page == p,
71
+ disabled:
72
+ (p <= maxPage && p > pageCount) ||
73
+ (p < minPage && page == 1) ||
74
+ (p > maxPage && page + 1 > pageCount),
75
+ })}
76
+ onMouseDown={(e) => {
77
+ e.stopPropagation();
78
+ preventFocusOnTouch(e);
79
+ }}
80
+ onClick={(e) => {
81
+ this.setPage(
82
+ e,
83
+ instance,
84
+ p < minPage ? page - 1 : p > maxPage ? page + 1 : p,
85
+ );
86
+ }}
87
+ >
88
+ {p < minPage ? prevPageIcon : p > maxPage ? nextPageIcon : p}
89
+ </div>,
38
90
  );
39
- }
40
-
41
- render(context: RenderingContext, instance: Instance, key: string) {
42
- let { data } = instance;
43
- let { page, pageCount, length } = data;
44
- let { CSS, baseClass } = this;
45
-
46
- if (!pageCount) pageCount = 1;
47
-
48
- let minPage = Math.max(1, page - Math.floor(length / 2));
49
- let maxPage = minPage + length - 1;
50
-
51
- if (maxPage > pageCount) {
52
- maxPage = Math.max(pageCount, length);
53
- minPage = maxPage - length + 1;
54
- }
55
-
56
- let nextPageIcon = <ForwardIcon className={CSS.element(baseClass, "icon-next-page")} />;
57
- let prevPageIcon = <ForwardIcon className={CSS.element(baseClass, "icon-prev-page")} />;
58
-
59
- let pageBtns = [];
60
-
61
- for (let p = minPage - 1; p <= maxPage + 1; p++) {
62
- pageBtns.push(
63
- <li
64
- key={p < minPage ? "-1" : p > maxPage ? "-2" : p}
65
- className={CSS.element(baseClass, "page", {
66
- active: page == p,
67
- disabled:
68
- (p <= maxPage && p > pageCount) ||
69
- (p < minPage && page == 1) ||
70
- (p > maxPage && page + 1 > pageCount),
71
- })}
72
- onMouseDown={(e) => {
73
- e.stopPropagation();
74
- preventFocusOnTouch(e);
75
- }}
76
- onClick={(e) => {
77
- this.setPage(e, instance, p < minPage ? page - 1 : p > maxPage ? page + 1 : p);
78
- }}
79
- >
80
- {p < minPage ? prevPageIcon : p > maxPage ? nextPageIcon : p}
81
- </li>,
82
- );
83
- }
84
-
85
- return (
86
- <ul
87
- key={key}
88
- className={data.classNames}
89
- style={data.style}
90
- tabIndex={0}
91
- onKeyDown={(e) => {
92
- this.onKeyDown(e, instance);
93
- }}
94
- >
95
- {pageBtns}
96
- </ul>
97
- );
98
- }
99
-
100
- onKeyDown(e: React.KeyboardEvent, instance: Instance) {
101
- let { data } = instance;
102
- switch (e.keyCode) {
103
- case KeyCode.left:
104
- this.setPage(e, instance, data.page - 1);
105
- break;
106
-
107
- case KeyCode.right:
108
- this.setPage(e, instance, data.page + 1);
109
- break;
110
- }
111
- }
112
-
113
- setPage(e: React.SyntheticEvent, instance: Instance, page: number) {
114
- e.preventDefault();
115
- e.stopPropagation();
116
- let { data } = instance;
117
- let { pageCount } = data;
118
- if (page <= pageCount && page > 0) instance.set("page", page);
119
- }
91
+ }
92
+
93
+ return (
94
+ <div
95
+ key={key}
96
+ className={data.classNames}
97
+ style={data.style}
98
+ tabIndex={0}
99
+ onKeyDown={(e) => {
100
+ this.onKeyDown(e, instance);
101
+ }}
102
+ >
103
+ {pageBtns}
104
+ </div>
105
+ );
106
+ }
107
+
108
+ onKeyDown(e: React.KeyboardEvent, instance: Instance) {
109
+ let { data } = instance;
110
+ switch (e.keyCode) {
111
+ case KeyCode.left:
112
+ this.setPage(e, instance, data.page - 1);
113
+ break;
114
+
115
+ case KeyCode.right:
116
+ this.setPage(e, instance, data.page + 1);
117
+ break;
118
+ }
119
+ }
120
+
121
+ setPage(e: React.SyntheticEvent, instance: Instance, page: number) {
122
+ e.preventDefault();
123
+ e.stopPropagation();
124
+ let { data } = instance;
125
+ let { pageCount } = data;
126
+ if (page <= pageCount && page > 0) instance.set("page", page);
127
+ }
120
128
  }
121
129
 
122
130
  Pagination.prototype.baseClass = "pagination";
@@ -1,3 +1,13 @@
1
+ @use "sass:math";
2
+ @use "../box.scss" as *;
3
+ @use "../../util/scss/add-rules.scss" as *;
4
+ @use "../../util/scss/clockwise.scss" as *;
5
+ @use "../../util/scss/deep-merge.scss" as *;
6
+ @use "../../util/scss/calc.scss" as *;
7
+ @use "../../util/scss/besm.scss" as *;
8
+ @use "../../util/scss/include.scss" as *;
9
+ @use "../variables.scss" as *;
10
+ @use "../maps.scss" as *;
1
11
  @use "sass:map";
2
12
 
3
13
  @mixin cx-treenode(
@@ -13,11 +23,15 @@
13
23
  $mod: map.get($besm, mod);
14
24
 
15
25
  .#{$block}#{$name} {
16
- padding-left: $handle-size + $icon-size * 0.25;
26
+ padding-left: cx-calc($handle-size, cx-multiply($icon-size, 0.25));
17
27
  position: relative;
18
28
 
19
29
  &.#{$state}icon {
20
- padding-left: $handle-size + $icon-size + $icon-size * 0.25;
30
+ padding-left: cx-calc(
31
+ $handle-size,
32
+ $icon-size,
33
+ cx-multiply($icon-size, 0.25)
34
+ );
21
35
  }
22
36
 
23
37
  @for $i from 1 through 20 {
@@ -34,9 +48,9 @@
34
48
 
35
49
  left: 0;
36
50
  top: 50%;
37
- margin-top: -$handle-size * 0.5;
51
+ margin-top: cx-multiply($handle-size, -0.5);
38
52
  bottom: 0;
39
- width: $handle-size + $icon-size;
53
+ width: cx-calc($handle-size, $icon-size);
40
54
  height: $handle-size;
41
55
 
42
56
  &:hover {
@@ -53,8 +67,11 @@
53
67
  position: absolute;
54
68
  left: 0;
55
69
  top: 50%;
56
- margin-top: -$icon-size * 0.5;
57
- margin-left: ($handle-size - $icon-size) * 0.5;
70
+ margin-top: cx-multiply($icon-size, -0.5);
71
+ margin-left: cx-multiply(
72
+ cx-calc($handle-size, cx-multiply($icon-size, -1)),
73
+ 0.5
74
+ );
58
75
  height: $icon-size;
59
76
  width: $icon-size;
60
77
  line-height: $icon-size;
@@ -71,8 +88,8 @@
71
88
  position: absolute;
72
89
  left: 0;
73
90
  top: 50%;
74
- margin-top: -$icon-size * 0.5;
75
- margin-left: ($handle-size + $icon-size) * 0.5;
91
+ margin-top: cx-multiply($icon-size, -0.5);
92
+ margin-left: cx-multiply(cx-calc($handle-size, $icon-size), 0.5);
76
93
  height: $icon-size;
77
94
  width: $icon-size;
78
95
  line-height: $icon-size;
@@ -8,138 +8,149 @@ import { Instance } from "../../ui/Instance";
8
8
  import { RenderingContext } from "../../ui/RenderingContext";
9
9
 
10
10
  export interface TreeNodeConfig extends StyledContainerConfig {
11
- /** Indentation level of the node. */
12
- level?: NumberProp;
11
+ /** Indentation level of the node. */
12
+ level?: NumberProp;
13
13
 
14
- /** Set to `true` if the node is expanded. */
15
- expanded?: BooleanProp;
14
+ /** Set to `true` if the node is expanded. */
15
+ expanded?: BooleanProp;
16
16
 
17
- /** Set to `true` if the node is a leaf (has no children). */
18
- leaf?: BooleanProp;
17
+ /** Set to `true` if the node is a leaf (has no children). */
18
+ leaf?: BooleanProp;
19
19
 
20
- /** Text to be displayed. */
21
- text?: StringProp;
20
+ /** Text to be displayed. */
21
+ text?: StringProp;
22
22
 
23
- /** Set to `true` if the node is loading. */
24
- loading?: BooleanProp;
23
+ /** Set to `true` if the node is loading. */
24
+ loading?: BooleanProp;
25
25
 
26
- /** Icon to be displayed. */
27
- icon?: StringProp;
26
+ /** Icon to be displayed. */
27
+ icon?: StringProp;
28
28
 
29
- /** Icon for items (sets leafIcon). */
30
- itemIcon?: StringProp;
29
+ /** Icon for items (sets leafIcon). */
30
+ itemIcon?: StringProp;
31
31
 
32
- /** Icon for leaf nodes. */
33
- leafIcon?: StringProp;
32
+ /** Icon for leaf nodes. */
33
+ leafIcon?: StringProp;
34
34
 
35
- /** Icon displayed when the node is loading. */
36
- loadingIcon?: string;
35
+ /** Icon displayed when the node is loading. */
36
+ loadingIcon?: string;
37
37
 
38
- /** Icon for open folder. */
39
- openFolderIcon?: StringProp;
38
+ /** Icon for open folder. */
39
+ openFolderIcon?: StringProp;
40
40
 
41
- /** Icon for folder. */
42
- folderIcon?: StringProp;
41
+ /** Icon for folder. */
42
+ folderIcon?: StringProp;
43
43
 
44
- /** Set to `true` to hide the icon. */
45
- hideIcon?: boolean;
44
+ /** Set to `true` to hide the icon. */
45
+ hideIcon?: boolean;
46
46
 
47
- /** Set to `true` to hide the arrow. */
48
- hideArrow?: BooleanProp;
47
+ /** Set to `true` to hide the arrow. */
48
+ hideArrow?: BooleanProp;
49
49
  }
50
50
 
51
51
  export class TreeNode extends ContainerBase<TreeNodeConfig> {
52
- declare baseClass: string;
53
- declare itemIcon: string;
54
- declare leafIcon: string;
55
- declare loadingIcon: string;
56
- declare folderIcon: string;
57
- declare openFolderIcon: string;
58
- declare arrowIcon: string;
59
- declare hideIcon: boolean;
60
-
61
- constructor(config?: TreeNodeConfig) {
62
- super(config);
63
- }
64
-
65
- init() {
66
- if (this.itemIcon) this.leafIcon = this.itemIcon;
67
- super.init();
68
- }
69
-
70
- declareData() {
71
- super.declareData(
72
- {
73
- level: undefined,
74
- expanded: undefined,
75
- leaf: undefined,
76
- text: undefined,
77
- loading: undefined,
78
- icon: undefined,
79
- leafIcon: undefined,
80
- openFolderIcon: undefined,
81
- folderIcon: undefined,
82
- hideArrow: undefined,
83
- },
84
- ...arguments,
85
- );
86
- }
87
-
88
- prepareData(context: RenderingContext, instance: Instance) {
89
- let { data } = instance;
90
- data.stateMods = {
91
- expanded: data.expanded,
92
- loading: data.loading,
93
- leaf: data.leaf,
94
- folder: !data.leaf,
95
- icon: !this.hideIcon,
96
- };
97
- data.stateMods[`level-${data.level}`] = true;
98
- super.prepareData(context, instance);
99
- }
100
-
101
- render(context: RenderingContext, instance: Instance, key: string) {
102
- let { data } = instance;
103
- let { CSS, baseClass } = this;
104
-
105
- let icon = data.icon;
106
-
107
- if (!data.icon) {
108
- if (data.leaf) icon = data.leafIcon;
109
- else {
110
- if (data.loading) icon = this.loadingIcon;
111
- else if (data.expanded) icon = data.openFolderIcon || data.folderIcon;
112
- else icon = data.folderIcon;
113
- }
52
+ declare baseClass: string;
53
+ declare itemIcon: string;
54
+ declare leafIcon: string;
55
+ declare loadingIcon: string;
56
+ declare folderIcon: string;
57
+ declare openFolderIcon: string;
58
+ declare arrowIcon: string;
59
+ declare hideIcon: boolean;
60
+
61
+ constructor(config?: TreeNodeConfig) {
62
+ super(config);
63
+ }
64
+
65
+ init() {
66
+ if (this.itemIcon) this.leafIcon = this.itemIcon;
67
+ super.init();
68
+ }
69
+
70
+ declareData() {
71
+ super.declareData(
72
+ {
73
+ level: undefined,
74
+ expanded: undefined,
75
+ leaf: undefined,
76
+ text: undefined,
77
+ loading: undefined,
78
+ icon: undefined,
79
+ leafIcon: undefined,
80
+ openFolderIcon: undefined,
81
+ folderIcon: undefined,
82
+ hideArrow: undefined,
83
+ },
84
+ ...arguments,
85
+ );
86
+ }
87
+
88
+ prepareData(context: RenderingContext, instance: Instance) {
89
+ let { data } = instance;
90
+ data.stateMods = {
91
+ expanded: data.expanded,
92
+ loading: data.loading,
93
+ leaf: data.leaf,
94
+ folder: !data.leaf,
95
+ icon: !this.hideIcon,
96
+ };
97
+ data.stateMods[`level-${data.level}`] = true;
98
+ super.prepareData(context, instance);
99
+ }
100
+
101
+ render(context: RenderingContext, instance: Instance, key: string) {
102
+ let { data } = instance;
103
+ let { CSS, baseClass } = this;
104
+
105
+ let icon = data.icon;
106
+
107
+ if (!data.icon) {
108
+ if (data.leaf) icon = data.leafIcon;
109
+ else {
110
+ if (data.loading) icon = this.loadingIcon;
111
+ else if (data.expanded) icon = data.openFolderIcon || data.folderIcon;
112
+ else icon = data.folderIcon;
114
113
  }
115
-
116
- let arrowIcon = this.arrowIcon;
117
- if (this.hideIcon && data.loading) arrowIcon = this.loadingIcon;
118
-
119
- return (
120
- <div key={key} className={data.classNames} style={data.style}>
121
- <div
122
- className={CSS.element(baseClass, "handle")}
123
- onClick={(e) => this.toggle(e, instance)}
124
- onMouseDown={!this.hideIcon ? stopPropagation : undefined}
125
- >
126
- {!data.leaf && !data.hideArrow && Icon.render(arrowIcon, { className: CSS.element(baseClass, "arrow") })}
127
- {!this.hideIcon &&
128
- Icon.render(icon, {
129
- className: CSS.element(baseClass, "icon"),
130
- })}
131
- </div>
132
- <div>{data.text || this.renderChildren(context, instance)}</div>
133
- </div>
134
- );
135
- }
136
-
137
- toggle(e: React.MouseEvent, instance: Instance) {
138
- let { data } = instance;
139
- if (!data.leaf) instance.set("expanded", !data.expanded);
140
- e.preventDefault();
141
- e.stopPropagation();
142
- }
114
+ }
115
+
116
+ let arrowIcon = this.arrowIcon;
117
+ if (this.hideIcon && data.loading) arrowIcon = this.loadingIcon;
118
+
119
+ return (
120
+ <div key={key} className={data.classNames} style={data.style}>
121
+ <div
122
+ className={CSS.element(baseClass, "handle")}
123
+ onClick={(e) => this.toggle(e, instance)}
124
+ onMouseDown={
125
+ !this.hideIcon && !data.leaf
126
+ ? (e) => {
127
+ e.stopPropagation();
128
+ e.preventDefault();
129
+ }
130
+ : undefined
131
+ }
132
+ >
133
+ {!data.leaf &&
134
+ !data.hideArrow &&
135
+ Icon.render(arrowIcon, {
136
+ className: CSS.element(baseClass, "arrow"),
137
+ })}
138
+ {!this.hideIcon &&
139
+ Icon.render(icon, {
140
+ className: CSS.element(baseClass, "icon"),
141
+ })}
142
+ </div>
143
+ <div>{data.text || this.renderChildren(context, instance)}</div>
144
+ </div>
145
+ );
146
+ }
147
+
148
+ toggle(e: React.MouseEvent, instance: Instance) {
149
+ let { data } = instance;
150
+ if (!data.leaf) instance.set("expanded", !data.expanded);
151
+ e.preventDefault();
152
+ e.stopPropagation();
153
+ }
143
154
  }
144
155
 
145
156
  TreeNode.prototype.baseClass = "treenode";
@@ -1,4 +1,3 @@
1
-
2
- @import 'Pagination';
3
- @import 'TreeNode';
4
- @import 'Grid';
1
+ @use 'Pagination';
2
+ @use 'TreeNode';
3
+ @use 'Grid';