@gravity-ui/dashkit 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/LICENSE +21 -0
  3. package/README.md +364 -0
  4. package/build/cjs/components/DashKit/DashKit.d.ts +50 -0
  5. package/build/cjs/components/DashKit/DashKit.js +70 -0
  6. package/build/cjs/components/DashKit/index.d.ts +1 -0
  7. package/build/cjs/components/DashKit/index.js +4 -0
  8. package/build/cjs/components/DashKitView/DashKitView.css +4 -0
  9. package/build/cjs/components/DashKitView/DashKitView.d.ts +3 -0
  10. package/build/cjs/components/DashKitView/DashKitView.js +23 -0
  11. package/build/cjs/components/GridItem/GridItem.css +83 -0
  12. package/build/cjs/components/GridItem/GridItem.d.ts +3 -0
  13. package/build/cjs/components/GridItem/GridItem.js +70 -0
  14. package/build/cjs/components/GridLayout/GridLayout.d.ts +25 -0
  15. package/build/cjs/components/GridLayout/GridLayout.js +89 -0
  16. package/build/cjs/components/Item/Item.css +19 -0
  17. package/build/cjs/components/Item/Item.d.ts +67 -0
  18. package/build/cjs/components/Item/Item.js +23 -0
  19. package/build/cjs/components/MobileLayout/MobileLayout.css +10 -0
  20. package/build/cjs/components/MobileLayout/MobileLayout.d.ts +16 -0
  21. package/build/cjs/components/MobileLayout/MobileLayout.js +54 -0
  22. package/build/cjs/components/MobileLayout/helpers.d.ts +3 -0
  23. package/build/cjs/components/MobileLayout/helpers.js +32 -0
  24. package/build/cjs/components/OverlayControls/OverlayControls.css +28 -0
  25. package/build/cjs/components/OverlayControls/OverlayControls.d.ts +54 -0
  26. package/build/cjs/components/OverlayControls/OverlayControls.js +212 -0
  27. package/build/cjs/components/index.d.ts +1 -0
  28. package/build/cjs/components/index.js +4 -0
  29. package/build/cjs/constants/common.d.ts +7 -0
  30. package/build/cjs/constants/common.js +10 -0
  31. package/build/cjs/constants/index.d.ts +1 -0
  32. package/build/cjs/constants/index.js +4 -0
  33. package/build/cjs/context/DashKitContext.d.ts +2 -0
  34. package/build/cjs/context/DashKitContext.js +7 -0
  35. package/build/cjs/hocs/prepareItem.d.ts +66 -0
  36. package/build/cjs/hocs/prepareItem.js +66 -0
  37. package/build/cjs/hocs/withContext.d.ts +165 -0
  38. package/build/cjs/hocs/withContext.js +203 -0
  39. package/build/cjs/hooks/useCalcLayout.d.ts +13 -0
  40. package/build/cjs/hooks/useCalcLayout.js +31 -0
  41. package/build/cjs/i18n/en.json +8 -0
  42. package/build/cjs/i18n/index.d.ts +4 -0
  43. package/build/cjs/i18n/index.js +19 -0
  44. package/build/cjs/i18n/ru.json +8 -0
  45. package/build/cjs/icons/CloseIcon.d.ts +2 -0
  46. package/build/cjs/icons/CloseIcon.js +10 -0
  47. package/build/cjs/icons/CogIcon.d.ts +2 -0
  48. package/build/cjs/icons/CogIcon.js +10 -0
  49. package/build/cjs/icons/CopyIcon.d.ts +2 -0
  50. package/build/cjs/icons/CopyIcon.js +10 -0
  51. package/build/cjs/icons/DeleteIcon.d.ts +2 -0
  52. package/build/cjs/icons/DeleteIcon.js +12 -0
  53. package/build/cjs/icons/DotsIcon.d.ts +2 -0
  54. package/build/cjs/icons/DotsIcon.js +10 -0
  55. package/build/cjs/icons/TickIcon.d.ts +2 -0
  56. package/build/cjs/icons/TickIcon.js +10 -0
  57. package/build/cjs/icons/WarningIcon.d.ts +2 -0
  58. package/build/cjs/icons/WarningIcon.js +10 -0
  59. package/build/cjs/index.d.ts +5 -0
  60. package/build/cjs/index.js +8 -0
  61. package/build/cjs/plugins/Text/Text.css +34 -0
  62. package/build/cjs/plugins/Text/Text.d.ts +52 -0
  63. package/build/cjs/plugins/Text/Text.js +119 -0
  64. package/build/cjs/plugins/Title/Title.css +24 -0
  65. package/build/cjs/plugins/Title/Title.d.ts +14 -0
  66. package/build/cjs/plugins/Title/Title.js +25 -0
  67. package/build/cjs/shared/constants/common.d.ts +2 -0
  68. package/build/cjs/shared/constants/common.js +5 -0
  69. package/build/cjs/shared/constants/index.d.ts +1 -0
  70. package/build/cjs/shared/constants/index.js +4 -0
  71. package/build/cjs/shared/index.d.ts +4 -0
  72. package/build/cjs/shared/index.js +7 -0
  73. package/build/cjs/shared/modules/__tests__/helpers.test.d.ts +1 -0
  74. package/build/cjs/shared/modules/__tests__/helpers.test.js +217 -0
  75. package/build/cjs/shared/modules/helpers.d.ts +42 -0
  76. package/build/cjs/shared/modules/helpers.js +172 -0
  77. package/build/cjs/shared/modules/index.d.ts +2 -0
  78. package/build/cjs/shared/modules/index.js +5 -0
  79. package/build/cjs/shared/modules/state-and-params.d.ts +16 -0
  80. package/build/cjs/shared/modules/state-and-params.js +94 -0
  81. package/build/cjs/shared/types/common.d.ts +5 -0
  82. package/build/cjs/shared/types/common.js +2 -0
  83. package/build/cjs/shared/types/config.d.ts +49 -0
  84. package/build/cjs/shared/types/config.js +2 -0
  85. package/build/cjs/shared/types/index.d.ts +4 -0
  86. package/build/cjs/shared/types/index.js +7 -0
  87. package/build/cjs/shared/types/plugin.d.ts +8 -0
  88. package/build/cjs/shared/types/plugin.js +2 -0
  89. package/build/cjs/shared/types/state-and-params.d.ts +22 -0
  90. package/build/cjs/shared/types/state-and-params.js +3 -0
  91. package/build/cjs/shared/units/__tests__/state-and-params.test.d.ts +241 -0
  92. package/build/cjs/shared/units/__tests__/state-and-params.test.js +299 -0
  93. package/build/cjs/shared/units/datalens/index.d.ts +5 -0
  94. package/build/cjs/shared/units/datalens/index.js +25 -0
  95. package/build/cjs/shared/units/index.d.ts +1 -0
  96. package/build/cjs/shared/units/index.js +4 -0
  97. package/build/cjs/typings/common.d.ts +32 -0
  98. package/build/cjs/typings/common.js +2 -0
  99. package/build/cjs/typings/config.d.ts +7 -0
  100. package/build/cjs/typings/config.js +2 -0
  101. package/build/cjs/typings/global.d.ts +7 -0
  102. package/build/cjs/typings/index.d.ts +3 -0
  103. package/build/cjs/typings/index.js +6 -0
  104. package/build/cjs/typings/plugin.d.ts +39 -0
  105. package/build/cjs/typings/plugin.js +2 -0
  106. package/build/cjs/utils/__tests__/mock.test.d.ts +1 -0
  107. package/build/cjs/utils/__tests__/mock.test.js +8 -0
  108. package/build/cjs/utils/configure.d.ts +9 -0
  109. package/build/cjs/utils/configure.js +21 -0
  110. package/build/cjs/utils/i18n.d.ts +7 -0
  111. package/build/cjs/utils/i18n.js +13 -0
  112. package/build/cjs/utils/index.d.ts +3 -0
  113. package/build/cjs/utils/index.js +6 -0
  114. package/build/cjs/utils/register-manager.d.ts +46 -0
  115. package/build/cjs/utils/register-manager.js +58 -0
  116. package/build/cjs/utils/update-manager.d.ts +37 -0
  117. package/build/cjs/utils/update-manager.js +274 -0
  118. package/build/esm/components/DashKit/DashKit.d.ts +50 -0
  119. package/build/esm/components/DashKit/DashKit.js +65 -0
  120. package/build/esm/components/DashKit/index.d.ts +1 -0
  121. package/build/esm/components/DashKit/index.js +1 -0
  122. package/build/esm/components/DashKitView/DashKitView.css +4 -0
  123. package/build/esm/components/DashKitView/DashKitView.d.ts +3 -0
  124. package/build/esm/components/DashKitView/DashKitView.js +21 -0
  125. package/build/esm/components/GridItem/GridItem.css +83 -0
  126. package/build/esm/components/GridItem/GridItem.d.ts +3 -0
  127. package/build/esm/components/GridItem/GridItem.js +68 -0
  128. package/build/esm/components/GridLayout/GridLayout.d.ts +25 -0
  129. package/build/esm/components/GridLayout/GridLayout.js +85 -0
  130. package/build/esm/components/Item/Item.css +19 -0
  131. package/build/esm/components/Item/Item.d.ts +67 -0
  132. package/build/esm/components/Item/Item.js +21 -0
  133. package/build/esm/components/MobileLayout/MobileLayout.css +10 -0
  134. package/build/esm/components/MobileLayout/MobileLayout.d.ts +16 -0
  135. package/build/esm/components/MobileLayout/MobileLayout.js +51 -0
  136. package/build/esm/components/MobileLayout/helpers.d.ts +3 -0
  137. package/build/esm/components/MobileLayout/helpers.js +28 -0
  138. package/build/esm/components/OverlayControls/OverlayControls.css +28 -0
  139. package/build/esm/components/OverlayControls/OverlayControls.d.ts +55 -0
  140. package/build/esm/components/OverlayControls/OverlayControls.js +209 -0
  141. package/build/esm/components/index.d.ts +1 -0
  142. package/build/esm/components/index.js +1 -0
  143. package/build/esm/constants/common.d.ts +7 -0
  144. package/build/esm/constants/common.js +7 -0
  145. package/build/esm/constants/index.d.ts +1 -0
  146. package/build/esm/constants/index.js +1 -0
  147. package/build/esm/context/DashKitContext.d.ts +2 -0
  148. package/build/esm/context/DashKitContext.js +3 -0
  149. package/build/esm/hocs/prepareItem.d.ts +66 -0
  150. package/build/esm/hocs/prepareItem.js +61 -0
  151. package/build/esm/hocs/withContext.d.ts +165 -0
  152. package/build/esm/hocs/withContext.js +198 -0
  153. package/build/esm/hooks/useCalcLayout.d.ts +13 -0
  154. package/build/esm/hooks/useCalcLayout.js +26 -0
  155. package/build/esm/i18n/en.json +8 -0
  156. package/build/esm/i18n/index.d.ts +4 -0
  157. package/build/esm/i18n/index.js +15 -0
  158. package/build/esm/i18n/ru.json +8 -0
  159. package/build/esm/icons/CloseIcon.d.ts +2 -0
  160. package/build/esm/icons/CloseIcon.js +5 -0
  161. package/build/esm/icons/CogIcon.d.ts +2 -0
  162. package/build/esm/icons/CogIcon.js +5 -0
  163. package/build/esm/icons/CopyIcon.d.ts +2 -0
  164. package/build/esm/icons/CopyIcon.js +5 -0
  165. package/build/esm/icons/DeleteIcon.d.ts +2 -0
  166. package/build/esm/icons/DeleteIcon.js +7 -0
  167. package/build/esm/icons/DotsIcon.d.ts +2 -0
  168. package/build/esm/icons/DotsIcon.js +5 -0
  169. package/build/esm/icons/TickIcon.d.ts +2 -0
  170. package/build/esm/icons/TickIcon.js +5 -0
  171. package/build/esm/icons/WarningIcon.d.ts +2 -0
  172. package/build/esm/icons/WarningIcon.js +5 -0
  173. package/build/esm/index.d.ts +5 -0
  174. package/build/esm/index.js +5 -0
  175. package/build/esm/plugins/Text/Text.css +34 -0
  176. package/build/esm/plugins/Text/Text.d.ts +53 -0
  177. package/build/esm/plugins/Text/Text.js +115 -0
  178. package/build/esm/plugins/Title/Title.css +24 -0
  179. package/build/esm/plugins/Title/Title.d.ts +15 -0
  180. package/build/esm/plugins/Title/Title.js +21 -0
  181. package/build/esm/shared/constants/common.d.ts +2 -0
  182. package/build/esm/shared/constants/common.js +2 -0
  183. package/build/esm/shared/constants/index.d.ts +1 -0
  184. package/build/esm/shared/constants/index.js +1 -0
  185. package/build/esm/shared/index.d.ts +4 -0
  186. package/build/esm/shared/index.js +4 -0
  187. package/build/esm/shared/modules/__tests__/helpers.test.d.ts +1 -0
  188. package/build/esm/shared/modules/__tests__/helpers.test.js +215 -0
  189. package/build/esm/shared/modules/helpers.d.ts +42 -0
  190. package/build/esm/shared/modules/helpers.js +157 -0
  191. package/build/esm/shared/modules/index.d.ts +2 -0
  192. package/build/esm/shared/modules/index.js +2 -0
  193. package/build/esm/shared/modules/state-and-params.d.ts +16 -0
  194. package/build/esm/shared/modules/state-and-params.js +87 -0
  195. package/build/esm/shared/types/common.d.ts +5 -0
  196. package/build/esm/shared/types/common.js +1 -0
  197. package/build/esm/shared/types/config.d.ts +49 -0
  198. package/build/esm/shared/types/config.js +1 -0
  199. package/build/esm/shared/types/index.d.ts +4 -0
  200. package/build/esm/shared/types/index.js +4 -0
  201. package/build/esm/shared/types/plugin.d.ts +8 -0
  202. package/build/esm/shared/types/plugin.js +1 -0
  203. package/build/esm/shared/types/state-and-params.d.ts +22 -0
  204. package/build/esm/shared/types/state-and-params.js +1 -0
  205. package/build/esm/shared/units/__tests__/state-and-params.test.d.ts +241 -0
  206. package/build/esm/shared/units/__tests__/state-and-params.test.js +295 -0
  207. package/build/esm/shared/units/datalens/index.d.ts +5 -0
  208. package/build/esm/shared/units/datalens/index.js +20 -0
  209. package/build/esm/shared/units/index.d.ts +1 -0
  210. package/build/esm/shared/units/index.js +1 -0
  211. package/build/esm/typings/common.d.ts +32 -0
  212. package/build/esm/typings/common.js +1 -0
  213. package/build/esm/typings/config.d.ts +7 -0
  214. package/build/esm/typings/config.js +1 -0
  215. package/build/esm/typings/global.d.ts +7 -0
  216. package/build/esm/typings/index.d.ts +3 -0
  217. package/build/esm/typings/index.js +3 -0
  218. package/build/esm/typings/plugin.d.ts +39 -0
  219. package/build/esm/typings/plugin.js +1 -0
  220. package/build/esm/utils/__tests__/mock.test.d.ts +1 -0
  221. package/build/esm/utils/__tests__/mock.test.js +8 -0
  222. package/build/esm/utils/configure.d.ts +9 -0
  223. package/build/esm/utils/configure.js +15 -0
  224. package/build/esm/utils/i18n.d.ts +7 -0
  225. package/build/esm/utils/i18n.js +9 -0
  226. package/build/esm/utils/index.d.ts +3 -0
  227. package/build/esm/utils/index.js +3 -0
  228. package/build/esm/utils/register-manager.d.ts +46 -0
  229. package/build/esm/utils/register-manager.js +54 -0
  230. package/build/esm/utils/update-manager.d.ts +37 -0
  231. package/build/esm/utils/update-manager.js +269 -0
  232. package/package.json +107 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,58 @@
1
+ # Changelog
2
+
3
+ ## [3.0.1](https://github.com/gravity-ui/dashkit/compare/v3.0.0...v3.0.1) (2022-10-03)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * move to gravity-ui org ([#17](https://github.com/gravity-ui/dashkit/issues/17)) ([6748e5f](https://github.com/gravity-ui/dashkit/commit/6748e5f51589dfa027ef69ef5d4d59abb13e9d79))
9
+
10
+ ## [3.0.0](https://github.com/yandex-cloud/dashkit/compare/v2.0.1...v3.0.0) (2022-09-30)
11
+
12
+
13
+ ### ⚠ BREAKING CHANGES
14
+
15
+ * migrate to gravity-ui deps and new i18n usage (#15)
16
+
17
+ ### Features
18
+
19
+ * migrate to gravity-ui deps and new i18n usage ([#15](https://github.com/yandex-cloud/dashkit/issues/15)) ([1b4eeb1](https://github.com/yandex-cloud/dashkit/commit/1b4eeb1165b02f37af27d11958858ae571160194))
20
+
21
+ ## [2.0.1](https://github.com/yandex-cloud/dashkit/compare/v2.0.0...v2.0.1) (2022-08-22)
22
+
23
+
24
+ ### Bug Fixes
25
+
26
+ * downgrade dependent package ([#13](https://github.com/yandex-cloud/dashkit/issues/13)) ([d0a30d3](https://github.com/yandex-cloud/dashkit/commit/d0a30d3b0fbf3da6f1c82608a430f6a989b3cd3a))
27
+
28
+ ## [2.0.0](https://github.com/yandex-cloud/dashkit/compare/v1.2.0...v2.0.0) (2022-08-11)
29
+
30
+
31
+ ### ⚠ BREAKING CHANGES
32
+
33
+ * migrate to i18n 0.6.0 (#11)
34
+
35
+ ### Features
36
+
37
+ * migrate to i18n 0.6.0 ([#11](https://github.com/yandex-cloud/dashkit/issues/11)) ([8cbdda6](https://github.com/yandex-cloud/dashkit/commit/8cbdda6d035411cb8f6b6c5d11f7949a997314f5))
38
+
39
+ ## [1.2.0](https://github.com/yandex-cloud/dashkit/compare/v1.1.0...v1.2.0) (2022-08-08)
40
+
41
+
42
+ ### Features
43
+
44
+ * add custom dropdown menu item filter in edit mode ([#8](https://github.com/yandex-cloud/dashkit/issues/8)) ([5c2824a](https://github.com/yandex-cloud/dashkit/commit/5c2824a4a9a25174eff69b2f0b7b04b74cf74e0c))
45
+
46
+ ## [1.1.0](https://github.com/yandex-cloud/dashkit/compare/v1.0.0...v1.1.0) (2022-08-02)
47
+
48
+
49
+ ### Features
50
+
51
+ * flag to prevent double height optimizer ([#6](https://github.com/yandex-cloud/dashkit/issues/6)) ([8503a59](https://github.com/yandex-cloud/dashkit/commit/8503a59293bdff0b69a28ffb171b96d0b2551c16))
52
+
53
+ ## 1.0.0 (2022-07-15)
54
+
55
+
56
+ ### Bug Fixes
57
+
58
+ * try publish ([#2](https://github.com/yandex-cloud/dashkit/issues/2)) ([a76fb55](https://github.com/yandex-cloud/dashkit/commit/a76fb5552e0f4697f3d889e03d9740fa8ad948d4))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 YANDEX LLC
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,364 @@
1
+ # DashKit
2
+
3
+ A dashboard grid rendering library.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm i @gravity-ui/dashkit @gravity-ui/uikit @gravity-ui/i18n
9
+ ```
10
+
11
+ ## Description
12
+
13
+ The library is used to line up widgets in a grid, resize them, add new ones, and delete them.
14
+ The widget is a react component. For example, text, graphics, and images.
15
+
16
+ New widgets are added via a plugin system.
17
+
18
+ ### Plugins
19
+
20
+ Plugins are required to create custom widgets.
21
+
22
+ ### Props
23
+
24
+ ```ts
25
+ interface DashKitProps {
26
+ config: Config;
27
+ editMode: boolean;
28
+ onItemEdit: ({id}: {id: string}) => void;
29
+ onChange: (data: {config: Config; itemsStateAndParams: ItemsStateAndParams}) => void;
30
+ defaultGlobalParams: GlobalParams;
31
+ globalParams: GlobalParams;
32
+ itemsStateAndParams: ItemsStateAndParams;
33
+ settings: SettingsProps;
34
+ context: ContextProps;
35
+ overlayControls?: Record<string, OverlayControlItem[]>;
36
+ noOverlay?: boolean;
37
+ }
38
+ ```
39
+
40
+ - **config**: [сonfig](#Config).
41
+ - **editMode**: Whether edit mode is enabled.
42
+ - **onItemEdit**: Called when you click to edit a widget.
43
+ - **onChange**: Called when config or [itemsStateAndParams](#temsStateAndParams) are changed.
44
+ - **defaultGlobalParams**, **globalParams**: [Parameters](#Params) that affect all widgets. In DataLens, `defaultGlobalParams` are global parameters set in the dashboard settings. `globalParams` are globals parameters that can be set in the url.
45
+ - **itemsStateAndParams**: [itemsStateAndParams](#temsStateAndParams).
46
+ - **settings**: DashKit settings.
47
+ - **context**: Object that will be propped up on all widgets.
48
+ - **overlayControls**: Object that overrides widget controls at the time of editing. If not transmitted, basic controls will be displayed.
49
+ - **noOverlay**: If `true`, overlay and controls are not displayed while editing.
50
+ - **draggableHandleClassName** : СSS class name of the element that makes the widget draggable.
51
+
52
+ ## Usage
53
+
54
+ ### DashKit configuration
55
+
56
+ Before using `DashKit` as a react component, it must be configured.
57
+
58
+ - setLang
59
+
60
+ Used for setting the language of DashKit provided ui elements. Currently the languages supported are: ru, en.
61
+
62
+ ```js
63
+ import {setLang} from '@gravity-ui/dashkit';
64
+
65
+ setLang('en');
66
+ ```
67
+
68
+ **From version 3.0.0 the language must be set separately for each DashKit and Gravity-ui instances**
69
+
70
+ ```js
71
+ import {setLang} from '@gravity-ui/dashkit';
72
+ import {configure as uiKitConfigure, Lang as UILang} from '@gravity-ui/uikit';
73
+
74
+ setLang('en');
75
+ uiKitConfigure({lang: lang as UILang});
76
+ ```
77
+
78
+ - DashKit.setSettings
79
+
80
+ Used for global DashKit settings (such as margins between widgets, default widget sizes and widget overlay menu)
81
+
82
+ ```js
83
+ import {DashKit} from '@gravity-ui/dashkit';
84
+
85
+ DashKit.setSettings({
86
+ gridLayout: {margin: [8, 8]},
87
+ isMobile: true,
88
+ // menu: [] as Array<MenuItem>,
89
+ });
90
+ ```
91
+
92
+ - DashKit.registerPlugins
93
+
94
+ Registering and configuring plugins
95
+
96
+ ```js
97
+ import {DashKit} from '@gravity-ui/dashkit';
98
+ import pluginTitle from '@gravity-ui/dashkit/build/esm/plugins/Title/Title';
99
+ import pluginText from '@gravity-ui/dashkit/build/esm/plugins/Text/Text';
100
+
101
+ DashKit.registerPlugins(
102
+ pluginTitle,
103
+ pluginText.setSettings({
104
+ apiHandler({text}) {
105
+ return api.getMarkdown(text);
106
+ },
107
+ }),
108
+ );
109
+
110
+ DashKit.registerPlugins({
111
+ type: 'custom',
112
+ defaultLayout: {
113
+ w: 10,
114
+ h: 8,
115
+ },
116
+ renderer: function CustomPlugin() {
117
+ return <div>Custom widget with custom controls</div>;
118
+ },
119
+ });
120
+ ```
121
+
122
+ ### Config
123
+
124
+ ```ts
125
+ export interface Config {
126
+ salt: string; // to form a unique id
127
+ counter: number; // to form a unique id, only increases
128
+ items: ConfigItem[]; // initial widget states
129
+ layout: ConfigLayout[]; // widget position on the grid https://github.com/react-grid-layout
130
+ aliases: ConfigAliases; // aliases for parameters see #Params
131
+ connections: ConfigConnection[]; // links between widgets see #Params
132
+ }
133
+ ```
134
+
135
+ Config example:
136
+
137
+ ```ts
138
+ import {DashKitProps} from '@gravity-ui/dashkit';
139
+
140
+ const config: DashKitProps['config'] = {
141
+ salt: '0.46703554571365613',
142
+ counter: 4,
143
+ items: [
144
+ {
145
+ id: 'tT',
146
+ data: {
147
+ size: 'm',
148
+ text: 'Caption',
149
+ showInTOC: true,
150
+ },
151
+ type: 'title',
152
+ namespace: 'default',
153
+ orderId: 1,
154
+ },
155
+ {
156
+ id: 'Ea',
157
+ data: {
158
+ text: 'mode _editActive',
159
+ _editActive: true,
160
+ },
161
+ type: 'text',
162
+ namespace: 'default',
163
+ },
164
+ {
165
+ id: 'zR',
166
+ data: {
167
+ text: '### Text',
168
+ },
169
+ type: 'text',
170
+ namespace: 'default',
171
+ orderId: 0,
172
+ },
173
+ {
174
+ id: 'Dk',
175
+ data: {
176
+ foo: 'bar',
177
+ },
178
+ type: 'custom',
179
+ namespace: 'default',
180
+ orderId: 5,
181
+ },
182
+ ],
183
+ layout: [
184
+ {
185
+ h: 2,
186
+ i: 'tT',
187
+ w: 36,
188
+ x: 0,
189
+ y: 0,
190
+ },
191
+ {
192
+ h: 6,
193
+ i: 'Ea',
194
+ w: 12,
195
+ x: 0,
196
+ y: 2,
197
+ },
198
+ {
199
+ h: 6,
200
+ i: 'zR',
201
+ w: 12,
202
+ x: 12,
203
+ y: 2,
204
+ },
205
+ {
206
+ h: 4,
207
+ i: 'Dk',
208
+ w: 8,
209
+ x: 0,
210
+ y: 8,
211
+ },
212
+ ],
213
+ aliases: {},
214
+ connections: [],
215
+ };
216
+ ```
217
+
218
+ Add a new item to the config:
219
+
220
+ ```ts
221
+ const newConfig = DashKit.setItem({
222
+ item: {
223
+ data: {
224
+ text: `Some text`,
225
+ },
226
+ namespace: 'default',
227
+ type: 'text',
228
+ },
229
+ config: config,
230
+ });
231
+ ```
232
+
233
+ Change an existing item in the config:
234
+
235
+ ```ts
236
+ const newConfig = DashKit.setItem({
237
+ item: {
238
+ id: 'tT', // item.id
239
+ data: {
240
+ size: 'm',
241
+ text: `New caption`,
242
+ },
243
+ namespace: 'default',
244
+ type: 'title',
245
+ },
246
+ config: config,
247
+ });
248
+ ```
249
+
250
+ Delete an item from the config:
251
+
252
+ ```ts
253
+ import {DashKitProps} from '@gravity-ui/dashkit';
254
+
255
+ const oldItemsStateAndParams: DashKitProps['itemsStateAndParams'] = {};
256
+
257
+ const {config: newConfig, itemsStateAndParams} = DashKit.removeItem({
258
+ id: 'tT', // item.id
259
+ config: config,
260
+ itemsStateAndParams: this.state.itemsStateAndParams,
261
+ });
262
+ ```
263
+
264
+ ### Params
265
+
266
+ ```ts
267
+ type Params = Record<string, string | string[]>;
268
+ ```
269
+
270
+ `DashKit` generates parameters according to the default parameters for widgets, links, and aliases. These parameters are required for the [ChartKit](https://github.com/gravity-ui/chartkit) library.
271
+
272
+ Generation order:
273
+
274
+ 1. `defaultGlobalParams`
275
+ 2. Default widget parameters `item.default`
276
+ 3. `globalParams`
277
+ 4. Parameters from [itemsStateAndParams](#itemsStateAndParams) according to the queue.
278
+
279
+ ### itemsStateAndParams
280
+
281
+ Object that stores widget parameters and states as well as a parameter change queue.
282
+ It has a `__meta__` field for storing queue and meta information.
283
+
284
+ ```ts
285
+ interface StateAndParamsMeta = {
286
+ __meta__: {
287
+ queue: {id: string}[]; // queue
288
+ version: number; // current version itemsStateAndParams
289
+ };
290
+ }
291
+ ```
292
+
293
+ And also widget states and parameters:
294
+
295
+ ```ts
296
+ interface ItemsStateAndParamsBase {
297
+ [itemId: string]: {
298
+ state?: Record<string, any>;
299
+ params?: Params;
300
+ };
301
+ }
302
+ ```
303
+
304
+ ```ts
305
+ type ItemsStateAndParams = StateAndParamsMeta & ItemsStateAndParamsBase;
306
+ ```
307
+
308
+ ### Menu
309
+
310
+ You can specify custom DashKit widget overlay menu in edit mode
311
+
312
+ ```ts
313
+ type MenuItem = {
314
+ id: string; // uniq id
315
+ title?: string; // string title
316
+ icon?: ReactNode; // node of icon
317
+ iconSize?: number | string; // icon size in px as number or as string with units
318
+ handler?: (item: ConfigItem) => void; // custom item action handler
319
+ visible?: (item: ConfigItem) => boolean; // optional visibility handler for filtering menu items
320
+ className?: string; // custom class property
321
+ };
322
+
323
+ // use array of menu items in settings
324
+ DashKit.setSettings({menu: [] as Array<MenuItem>});
325
+ ```
326
+
327
+ ## Development
328
+
329
+ ### Build & watch
330
+
331
+ - Build dependencies `npm ci`
332
+ - Build a project `npm run build`
333
+ - Build storybook `npm run start`
334
+
335
+ By default, storybook runs on `http://localhost:7120/`.
336
+ New changes from a project aren't always picked up when storybook is running, so it's better to rebuild a project manually and restart storybook.
337
+
338
+ ### Example of an nginx config for development on a dev machine
339
+
340
+ ```bash
341
+ server {
342
+ server_name dashkit.username.ru;
343
+
344
+ include common/ssl;
345
+
346
+ access_log /home/username/logs/common.access.log;
347
+ error_log /home/username/logs/common.error.log;
348
+
349
+ root /home/username/projects/dashkit;
350
+
351
+ location / {
352
+ try_files $uri @node;
353
+ }
354
+
355
+ location @node {
356
+ proxy_set_header Host $host;
357
+ proxy_set_header X-Real-IP $remote_addr;
358
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
359
+ proxy_pass http://127.0.0.1:7120;
360
+ proxy_redirect off;
361
+ }
362
+ }
363
+
364
+ ```
@@ -0,0 +1,50 @@
1
+ import React from 'react';
2
+ import GridLayout from '../GridLayout/GridLayout';
3
+ import { SetConfigItem, Settings, SettingsProps, ContextProps, Plugin } from '../../typings';
4
+ import { GlobalParams, Config, ConfigItem, ItemsStateAndParams } from '../../shared';
5
+ import { OverlayControlItem } from '../OverlayControls/OverlayControls';
6
+ interface DashKitGeneralProps {
7
+ config: Config;
8
+ editMode: boolean;
9
+ }
10
+ interface DashKitDefaultProps {
11
+ onItemEdit: (item: ConfigItem) => void;
12
+ onChange: (data: {
13
+ config: Config;
14
+ itemsStateAndParams: ItemsStateAndParams;
15
+ }) => void;
16
+ defaultGlobalParams: GlobalParams;
17
+ globalParams: GlobalParams;
18
+ itemsStateAndParams: ItemsStateAndParams;
19
+ settings: SettingsProps;
20
+ context: ContextProps;
21
+ overlayControls?: Record<string, OverlayControlItem[]>;
22
+ noOverlay?: boolean;
23
+ draggableHandleClassName?: string;
24
+ _EXPERIMENTAL_preventDoubleCompact?: boolean;
25
+ }
26
+ export interface DashKitProps extends DashKitGeneralProps, Partial<DashKitDefaultProps> {
27
+ }
28
+ declare type DashKitInnerProps = DashKitGeneralProps & DashKitDefaultProps;
29
+ export declare class DashKit extends React.PureComponent<DashKitInnerProps> {
30
+ static defaultProps: DashKitDefaultProps;
31
+ static registerPlugins(...plugins: Plugin[]): void;
32
+ static setSettings(settings: Settings): void;
33
+ static setItem({ item: setItem, namespace, config, }: {
34
+ item: SetConfigItem;
35
+ namespace?: string;
36
+ config: Config;
37
+ }): Config;
38
+ static removeItem({ id, config, itemsStateAndParams, }: {
39
+ id: string;
40
+ config: Config;
41
+ itemsStateAndParams: ItemsStateAndParams;
42
+ }): {
43
+ config: Config;
44
+ itemsStateAndParams: ItemsStateAndParams;
45
+ };
46
+ metaRef: React.RefObject<GridLayout>;
47
+ render(): JSX.Element;
48
+ getItemsMeta(): any;
49
+ }
50
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DashKit = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const react_1 = tslib_1.__importDefault(require("react"));
6
+ const noop_1 = tslib_1.__importDefault(require("lodash/noop"));
7
+ const utils_1 = require("../../utils");
8
+ const DashKitView_1 = tslib_1.__importDefault(require("../DashKitView/DashKitView"));
9
+ const constants_1 = require("../../constants");
10
+ const registerManager = new utils_1.RegisterManager();
11
+ class DashKit extends react_1.default.PureComponent {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.metaRef = react_1.default.createRef();
15
+ }
16
+ static registerPlugins(...plugins) {
17
+ plugins.forEach((plugin) => {
18
+ registerManager.registerPlugin(plugin);
19
+ });
20
+ }
21
+ static setSettings(settings) {
22
+ registerManager.setSettings(settings);
23
+ }
24
+ static setItem({ item: setItem, namespace = constants_1.DEFAULT_NAMESPACE, config, }) {
25
+ if (setItem.id) {
26
+ return utils_1.UpdateManager.editItem({ item: setItem, namespace, config });
27
+ }
28
+ else {
29
+ const item = setItem;
30
+ const layout = Object.assign({}, registerManager.getItem(item.type).defaultLayout);
31
+ if (item.layout) {
32
+ Object.assign(layout, item.layout);
33
+ }
34
+ return utils_1.UpdateManager.addItem({
35
+ item,
36
+ namespace,
37
+ config,
38
+ layout,
39
+ });
40
+ }
41
+ }
42
+ static removeItem({ id, config, itemsStateAndParams, }) {
43
+ return utils_1.UpdateManager.removeItem({ id, config, itemsStateAndParams });
44
+ }
45
+ render() {
46
+ return (react_1.default.createElement(DashKitView_1.default
47
+ // @ts-ignore
48
+ , Object.assign({
49
+ // @ts-ignore
50
+ registerManager: registerManager, ref: this.metaRef }, this.props)));
51
+ }
52
+ getItemsMeta() {
53
+ var _a;
54
+ return (_a = this.metaRef.current) === null || _a === void 0 ? void 0 : _a.getItemsMeta();
55
+ }
56
+ }
57
+ exports.DashKit = DashKit;
58
+ DashKit.defaultProps = {
59
+ onItemEdit: noop_1.default,
60
+ onChange: noop_1.default,
61
+ defaultGlobalParams: {},
62
+ globalParams: {},
63
+ itemsStateAndParams: {},
64
+ settings: {
65
+ autoupdateInterval: 0,
66
+ silentLoading: false,
67
+ },
68
+ context: {},
69
+ noOverlay: false,
70
+ };
@@ -0,0 +1 @@
1
+ export * from './DashKit';
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./DashKit"), exports);
@@ -0,0 +1,4 @@
1
+ .dashkit {
2
+ width: 100%;
3
+ position: relative;
4
+ }
@@ -0,0 +1,3 @@
1
+ export default DashKitViewForwardedMeta;
2
+ declare const DashKitViewForwardedMeta: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
3
+ import React from "react";
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const react_1 = tslib_1.__importDefault(require("react"));
5
+ const bem_cn_lite_1 = tslib_1.__importDefault(require("bem-cn-lite"));
6
+ const DashKitContext_1 = require("../../context/DashKitContext");
7
+ const GridLayout_1 = tslib_1.__importDefault(require("../GridLayout/GridLayout"));
8
+ const MobileLayout_1 = tslib_1.__importDefault(require("../MobileLayout/MobileLayout"));
9
+ const withContext_1 = require("../../hocs/withContext");
10
+ const useCalcLayout_1 = require("../../hooks/useCalcLayout");
11
+ const b = (0, bem_cn_lite_1.default)('dashkit');
12
+ function DashKitView() {
13
+ const context = react_1.default.useContext(DashKitContext_1.DashKitContext);
14
+ const { registerManager, forwardedMetaRef } = context;
15
+ return (react_1.default.createElement("div", { className: b({ theme: registerManager.settings.theme }) }, registerManager.settings.isMobile ? (react_1.default.createElement(MobileLayout_1.default, null)) : (react_1.default.createElement(GridLayout_1.default, { ref: forwardedMetaRef }))));
16
+ }
17
+ const DashKitViewWithContext = (0, withContext_1.withContext)(DashKitView);
18
+ const DashKitViewForwardedMeta = react_1.default.forwardRef((props, ref) => {
19
+ const layout = (0, useCalcLayout_1.useCalcPropsLayout)(props.config, props.registerManager);
20
+ return react_1.default.createElement(DashKitViewWithContext, Object.assign({}, props, { layout: layout, forwardedMetaRef: ref }));
21
+ });
22
+ DashKitViewForwardedMeta.displayName = 'DashKitViewForwardedMeta';
23
+ exports.default = DashKitViewForwardedMeta;
@@ -0,0 +1,83 @@
1
+ .dashkit-grid-item {
2
+ position: relative;
3
+ }
4
+ .dashkit-grid-item__overlay {
5
+ position: absolute;
6
+ top: 0;
7
+ bottom: 0;
8
+ left: 0;
9
+ right: 0;
10
+ border-radius: 3px;
11
+ background-color: rgba(230, 230, 230, 0.2);
12
+ border: solid 1px rgba(0, 0, 0, 0.1);
13
+ }
14
+ .dashkit-grid-item__item {
15
+ position: absolute;
16
+ top: 0;
17
+ bottom: 0;
18
+ left: 0;
19
+ right: 0;
20
+ border-radius: 3px;
21
+ }
22
+ .dashkit-grid-item__item_editMode {
23
+ opacity: 0.5;
24
+ border-color: transparent;
25
+ pointer-events: none;
26
+ }
27
+
28
+ .react-grid-layout {
29
+ position: relative;
30
+ transition: height 200ms ease;
31
+ }
32
+
33
+ .react-grid-item {
34
+ transition: all 200ms ease;
35
+ transition-property: left, top;
36
+ }
37
+
38
+ .react-grid-item.cssTransforms {
39
+ transition-property: transform;
40
+ }
41
+
42
+ .react-grid-item.resizing {
43
+ z-index: 1;
44
+ will-change: width, height;
45
+ }
46
+
47
+ .react-grid-item.react-draggable:not(.dashkit-grid-item_with-custom-handle) {
48
+ cursor: move;
49
+ }
50
+
51
+ .react-grid-item.react-draggable-dragging {
52
+ transition: none;
53
+ z-index: 3;
54
+ will-change: transform;
55
+ }
56
+
57
+ .react-grid-item.react-grid-placeholder {
58
+ background: #fc0;
59
+ opacity: 0.2;
60
+ transition-duration: 100ms;
61
+ z-index: 2;
62
+ user-select: none;
63
+ }
64
+
65
+ .react-grid-item .react-resizable-handle {
66
+ position: absolute;
67
+ width: 20px;
68
+ height: 20px;
69
+ bottom: 0;
70
+ right: 0;
71
+ cursor: se-resize;
72
+ z-index: 6;
73
+ }
74
+
75
+ .react-grid-item .react-resizable-handle::after {
76
+ content: "";
77
+ position: absolute;
78
+ right: 3px;
79
+ bottom: 3px;
80
+ border: 4px solid transparent;
81
+ border-right-color: rgba(0, 0, 0, 0.4);
82
+ border-bottom-color: rgba(0, 0, 0, 0.4);
83
+ }
@@ -0,0 +1,3 @@
1
+ declare const _default: React.ForwardRefExoticComponent<React.RefAttributes<any>>;
2
+ export default _default;
3
+ import React from "react";