@nocobase/plugin-data-visualization 0.11.1-alpha.5 → 0.12.0-alpha.2

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 (132) hide show
  1. package/client.d.ts +2 -2
  2. package/client.js +1 -1
  3. package/dist/client/chart/antd/antd.d.ts +7 -0
  4. package/dist/client/chart/antd/index.d.ts +4 -0
  5. package/dist/client/chart/antd/statistic.d.ts +19 -0
  6. package/dist/client/chart/antd/table.d.ts +6 -0
  7. package/dist/client/chart/chart.d.ts +65 -0
  8. package/dist/client/chart/g2plot/bar.d.ts +16 -0
  9. package/dist/client/chart/g2plot/dualAxes.d.ts +20 -0
  10. package/dist/client/chart/g2plot/g2plot.d.ts +19 -0
  11. package/dist/client/chart/g2plot/index.d.ts +6 -0
  12. package/dist/client/chart/g2plot/pie.d.ts +17 -0
  13. package/dist/client/chart/library.d.ts +28 -0
  14. package/{lib → dist}/client/hooks.d.ts +22 -154
  15. package/{lib → dist}/client/index.d.ts +3 -1
  16. package/dist/client/index.js +67448 -0
  17. package/{lib → dist}/client/renderer/ChartRendererProvider.d.ts +1 -8
  18. package/{lib → dist}/client/renderer/index.d.ts +0 -2
  19. package/{lib → dist}/client/utils.d.ts +1 -1
  20. package/{lib → dist}/index.d.ts +1 -0
  21. package/dist/index.js +18 -0
  22. package/dist/locale/en-US.js +26 -0
  23. package/dist/locale/fr-FR.js +5 -0
  24. package/dist/locale/ja-JP.js +5 -0
  25. package/dist/locale/pt-BR.js +26 -0
  26. package/dist/locale/ru-RU.js +5 -0
  27. package/dist/locale/tr-TR.js +5 -0
  28. package/dist/locale/zh-CN.js +74 -0
  29. package/dist/server/actions/formatter.js +41 -0
  30. package/{src/server/actions/query.ts → dist/server/actions/query.js} +75 -133
  31. package/dist/server/index.js +11 -0
  32. package/dist/server/plugin.js +42 -0
  33. package/package.json +23 -22
  34. package/server.d.ts +2 -2
  35. package/server.js +1 -1
  36. package/lib/client/Settings.js +0 -81
  37. package/lib/client/block/ChartBlock.js +0 -74
  38. package/lib/client/block/ChartBlockDesigner.js +0 -35
  39. package/lib/client/block/ChartBlockInitializer.js +0 -114
  40. package/lib/client/block/ChartConfigure.js +0 -499
  41. package/lib/client/block/formatters.js +0 -58
  42. package/lib/client/block/index.js +0 -49
  43. package/lib/client/block/schemas/configure.js +0 -517
  44. package/lib/client/block/transformers.js +0 -68
  45. package/lib/client/hooks.js +0 -275
  46. package/lib/client/index.js +0 -80
  47. package/lib/client/locale/index.js +0 -37
  48. package/lib/client/renderer/ChartLibrary.d.ts +0 -72
  49. package/lib/client/renderer/ChartLibrary.js +0 -146
  50. package/lib/client/renderer/ChartRenderer.js +0 -181
  51. package/lib/client/renderer/ChartRendererProvider.js +0 -105
  52. package/lib/client/renderer/index.js +0 -49
  53. package/lib/client/renderer/library/AntdLibrary.d.ts +0 -2
  54. package/lib/client/renderer/library/AntdLibrary.js +0 -123
  55. package/lib/client/renderer/library/G2PlotLibrary.d.ts +0 -2
  56. package/lib/client/renderer/library/G2PlotLibrary.js +0 -288
  57. package/lib/client/renderer/library/index.d.ts +0 -3
  58. package/lib/client/renderer/library/index.js +0 -15
  59. package/lib/client/utils.js +0 -137
  60. package/lib/index.js +0 -13
  61. package/lib/locale/en-US.js +0 -29
  62. package/lib/locale/fr-FR.js +0 -8
  63. package/lib/locale/ja-JP.js +0 -8
  64. package/lib/locale/pt-BR.js +0 -29
  65. package/lib/locale/ru-RU.js +0 -8
  66. package/lib/locale/tr-TR.js +0 -8
  67. package/lib/locale/zh-CN.js +0 -77
  68. package/lib/server/actions/formatter.js +0 -44
  69. package/lib/server/actions/query.js +0 -331
  70. package/lib/server/index.js +0 -13
  71. package/lib/server/plugin.js +0 -64
  72. package/src/client/Settings.tsx +0 -43
  73. package/src/client/__tests__/chart-configure.test.tsx +0 -14
  74. package/src/client/__tests__/chart-library.test.ts +0 -78
  75. package/src/client/__tests__/chart-renderer.test.tsx +0 -30
  76. package/src/client/__tests__/hooks.test.ts +0 -261
  77. package/src/client/block/ChartBlock.tsx +0 -24
  78. package/src/client/block/ChartBlockDesigner.tsx +0 -19
  79. package/src/client/block/ChartBlockInitializer.tsx +0 -82
  80. package/src/client/block/ChartConfigure.tsx +0 -446
  81. package/src/client/block/formatters.ts +0 -70
  82. package/src/client/block/index.ts +0 -4
  83. package/src/client/block/schemas/configure.ts +0 -504
  84. package/src/client/block/transformers.ts +0 -52
  85. package/src/client/hooks.ts +0 -239
  86. package/src/client/index.tsx +0 -47
  87. package/src/client/locale/index.ts +0 -18
  88. package/src/client/renderer/ChartLibrary.tsx +0 -183
  89. package/src/client/renderer/ChartRenderer.tsx +0 -129
  90. package/src/client/renderer/ChartRendererProvider.tsx +0 -123
  91. package/src/client/renderer/index.ts +0 -4
  92. package/src/client/renderer/library/AntdLibrary.tsx +0 -94
  93. package/src/client/renderer/library/G2PlotLibrary.tsx +0 -236
  94. package/src/client/renderer/library/index.tsx +0 -4
  95. package/src/client/utils.ts +0 -102
  96. package/src/index.ts +0 -1
  97. package/src/locale/en-US.ts +0 -23
  98. package/src/locale/fr-FR.ts +0 -1
  99. package/src/locale/ja-JP.ts +0 -1
  100. package/src/locale/pt-BR.ts +0 -23
  101. package/src/locale/ru-RU.ts +0 -1
  102. package/src/locale/tr-TR.ts +0 -1
  103. package/src/locale/zh-CN.ts +0 -72
  104. package/src/server/__tests__/api.test.ts +0 -102
  105. package/src/server/__tests__/formatter.test.ts +0 -49
  106. package/src/server/__tests__/query.test.ts +0 -220
  107. package/src/server/actions/formatter.ts +0 -49
  108. package/src/server/collections/.gitkeep +0 -0
  109. package/src/server/index.ts +0 -1
  110. package/src/server/plugin.ts +0 -37
  111. /package/{lib → dist}/client/Settings.d.ts +0 -0
  112. /package/{lib → dist}/client/block/ChartBlock.d.ts +0 -0
  113. /package/{lib → dist}/client/block/ChartBlockDesigner.d.ts +0 -0
  114. /package/{lib → dist}/client/block/ChartBlockInitializer.d.ts +0 -0
  115. /package/{lib → dist}/client/block/ChartConfigure.d.ts +0 -0
  116. /package/{lib → dist}/client/block/formatters.d.ts +0 -0
  117. /package/{lib → dist}/client/block/index.d.ts +0 -0
  118. /package/{lib → dist}/client/block/schemas/configure.d.ts +0 -0
  119. /package/{lib → dist}/client/block/transformers.d.ts +0 -0
  120. /package/{lib → dist}/client/locale/index.d.ts +0 -0
  121. /package/{lib → dist}/client/renderer/ChartRenderer.d.ts +0 -0
  122. /package/{lib → dist}/locale/en-US.d.ts +0 -0
  123. /package/{lib → dist}/locale/fr-FR.d.ts +0 -0
  124. /package/{lib → dist}/locale/ja-JP.d.ts +0 -0
  125. /package/{lib → dist}/locale/pt-BR.d.ts +0 -0
  126. /package/{lib → dist}/locale/ru-RU.d.ts +0 -0
  127. /package/{lib → dist}/locale/tr-TR.d.ts +0 -0
  128. /package/{lib → dist}/locale/zh-CN.d.ts +0 -0
  129. /package/{lib → dist}/server/actions/formatter.d.ts +0 -0
  130. /package/{lib → dist}/server/actions/query.d.ts +0 -0
  131. /package/{lib → dist}/server/index.d.ts +0 -0
  132. /package/{lib → dist}/server/plugin.d.ts +0 -0
@@ -1,446 +0,0 @@
1
- import { RightSquareOutlined } from '@ant-design/icons';
2
- import { ArrayItems, Editable, FormCollapse, FormItem, FormLayout, Switch } from '@formily/antd-v5';
3
- import { Form as FormType, ObjectField, createForm, onFieldChange, onFormInit } from '@formily/core';
4
- import { FormConsumer, ISchema, Schema } from '@formily/react';
5
- import {
6
- AutoComplete,
7
- FormProvider,
8
- SchemaComponent,
9
- gridRowColWrap,
10
- useCollectionFieldsOptions,
11
- useCollectionFilterOptions,
12
- useDesignable,
13
- } from '@nocobase/client';
14
- import { Alert, App, Button, Card, Col, Modal, Row, Space, Table, Tabs, Typography } from 'antd';
15
- import { cloneDeep, isEqual } from 'lodash';
16
- import React, { createContext, useContext, useMemo, useRef } from 'react';
17
- import {
18
- useChartFields,
19
- useCollectionOptions,
20
- useFieldTypes,
21
- useFieldsWithAssociation,
22
- useFormatters,
23
- useOrderFieldsOptions,
24
- useOrderReaction,
25
- useTransformers,
26
- } from '../hooks';
27
- import { useChartsTranslation } from '../locale';
28
- import { ChartRenderer, ChartRendererContext, useChartTypes, useCharts, useDefaultChartType } from '../renderer';
29
- import { createRendererSchema, getField, getSelectedFields, processData } from '../utils';
30
- import { getConfigSchema, querySchema, transformSchema } from './schemas/configure';
31
- const { Paragraph, Text } = Typography;
32
-
33
- export type ChartConfigCurrent = {
34
- schema: ISchema;
35
- field: any;
36
- collection: string;
37
- service: any;
38
- initialValues?: any;
39
- data: any[];
40
- };
41
-
42
- export type SelectedField = {
43
- field: string | string[];
44
- alias?: string;
45
- };
46
-
47
- export const ChartConfigContext = createContext<{
48
- visible: boolean;
49
- setVisible?: (visible: boolean) => void;
50
- current?: ChartConfigCurrent;
51
- setCurrent?: (current: ChartConfigCurrent) => void;
52
- }>({
53
- visible: true,
54
- });
55
-
56
- export const ChartConfigure: React.FC<{
57
- insert: (
58
- s: ISchema,
59
- options: {
60
- onSuccess: () => void;
61
- wrap?: (schema: ISchema) => ISchema;
62
- },
63
- ) => void;
64
- }> & {
65
- Renderer: React.FC;
66
- Config: React.FC;
67
- Query: React.FC;
68
- Transform: React.FC;
69
- Data: React.FC;
70
- } = (props) => {
71
- const { t } = useChartsTranslation();
72
- const { service } = useContext(ChartRendererContext);
73
- const { visible, setVisible, current } = useContext(ChartConfigContext);
74
- const { schema, field, collection, initialValues } = current || {};
75
- const { dn } = useDesignable();
76
- const { modal } = App.useApp();
77
- const { insert } = props;
78
-
79
- const charts = useCharts();
80
- const fields = useFieldsWithAssociation(collection);
81
- const initChart = (overwrite = false) => {
82
- if (!form.modified) {
83
- return;
84
- }
85
- const chartType = form.values.config?.chartType;
86
- if (!chartType) {
87
- return;
88
- }
89
- const chart = charts[chartType];
90
- const init = chart?.init;
91
- if (!init) {
92
- if (overwrite) {
93
- form.values.config.general = {};
94
- form.values.config.advanced = {};
95
- }
96
- return;
97
- }
98
- const query = form.values.query;
99
- const selectedFields = getSelectedFields(fields, query);
100
- const { general, advanced } = init(selectedFields, query);
101
- if (general || overwrite) {
102
- form.values.config.general = general;
103
- }
104
- if (advanced || overwrite) {
105
- form.values.config.advanced = advanced || {};
106
- }
107
- };
108
-
109
- const [measures, setMeasures] = React.useState([]);
110
- const [dimensions, setDimensions] = React.useState([]);
111
- const queryReact = (form: FormType, reaction?: () => void) => {
112
- const currentMeasures = form.values.query?.measures.filter((item) => item.field) || [];
113
- const currentDimensions = form.values.query?.dimensions.filter((item) => item.field) || [];
114
- if (isEqual(currentMeasures, measures) && isEqual(currentDimensions, dimensions)) {
115
- return;
116
- }
117
- reaction?.();
118
- setMeasures(cloneDeep(currentMeasures));
119
- setDimensions(cloneDeep(currentDimensions));
120
- };
121
- const chartType = useDefaultChartType();
122
- const form = useMemo(
123
- () =>
124
- createForm({
125
- values: { config: { chartType }, ...(initialValues || field?.decoratorProps), collection },
126
- effects: (form) => {
127
- onFieldChange('config.chartType', () => initChart(true));
128
- onFormInit(() => queryReact(form));
129
- },
130
- }),
131
- // visible, collection added here to re-initialize form when visible, collection change
132
- // eslint-disable-next-line react-hooks/exhaustive-deps
133
- [field, visible, collection],
134
- );
135
-
136
- const RunButton: React.FC = () => (
137
- <Button
138
- type="link"
139
- loading={service?.loading}
140
- icon={<RightSquareOutlined />}
141
- onClick={async () => {
142
- const queryField = form.query('query').take() as ObjectField;
143
- try {
144
- await queryField?.validate();
145
- } catch (e) {
146
- return;
147
- }
148
-
149
- try {
150
- await service.runAsync(collection, form.values.query);
151
- } catch (e) {
152
- console.log(e);
153
- }
154
- queryReact(form, initChart);
155
- }}
156
- >
157
- {t('Run query')}
158
- </Button>
159
- );
160
-
161
- const queryRef = useRef(null);
162
- const configRef = useRef(null);
163
- return (
164
- <Modal
165
- title={t('Configure chart')}
166
- open={visible}
167
- onOk={() => {
168
- const { query, config, transform, mode } = form.values;
169
- const afterSave = () => {
170
- setVisible(false);
171
- current.service?.run(collection, query);
172
- queryRef.current.scrollTop = 0;
173
- configRef.current.scrollTop = 0;
174
- service.mutate(undefined);
175
- };
176
- const rendererProps = {
177
- query,
178
- config,
179
- collection,
180
- transform,
181
- mode: mode || 'builder',
182
- };
183
- if (schema && schema['x-uid']) {
184
- schema['x-decorator-props'] = rendererProps;
185
- field.decoratorProps = rendererProps;
186
- field['x-acl-action'] = `${collection}:list`;
187
- dn.emit('patch', {
188
- schema,
189
- });
190
- afterSave();
191
- return;
192
- }
193
- insert(gridRowColWrap(createRendererSchema(rendererProps)), {
194
- onSuccess: afterSave,
195
- });
196
- }}
197
- onCancel={() => {
198
- modal.confirm({
199
- title: t('Are you sure to cancel?'),
200
- content: t('You changes are not saved. If you click OK, your changes will be lost.'),
201
- okButtonProps: {
202
- danger: true,
203
- },
204
- onOk: () => {
205
- setVisible(false);
206
- queryRef.current.scrollTop = 0;
207
- configRef.current.scrollTop = 0;
208
- service.mutate(undefined);
209
- },
210
- });
211
- }}
212
- width={'95%'}
213
- bodyStyle={{
214
- background: 'rgba(128, 128, 128, 0.08)',
215
- }}
216
- >
217
- <FormProvider form={form}>
218
- <FormLayout layout="vertical">
219
- <Row gutter={8}>
220
- <Col span={7}>
221
- <Card
222
- style={{
223
- height: 'calc(100vh - 300px)',
224
- overflow: 'auto',
225
- margin: '12px 0 12px 12px',
226
- }}
227
- ref={queryRef}
228
- >
229
- <Tabs
230
- tabBarExtraContent={<RunButton />}
231
- items={[
232
- {
233
- label: t('Query'),
234
- key: 'query',
235
- children: <ChartConfigure.Query />,
236
- },
237
- {
238
- label: t('Data'),
239
- key: 'data',
240
- children: <ChartConfigure.Data />,
241
- },
242
- ]}
243
- />
244
- </Card>
245
- </Col>
246
- <Col span={6}>
247
- <Card
248
- style={{
249
- height: 'calc(100vh - 300px)',
250
- overflow: 'auto',
251
- margin: '12px 3px 12px 3px',
252
- }}
253
- ref={configRef}
254
- >
255
- <Tabs
256
- items={[
257
- {
258
- label: t('Chart'),
259
- key: 'chart',
260
- children: <ChartConfigure.Config />,
261
- },
262
- {
263
- label: t('Transform'),
264
- key: 'transform',
265
- children: <ChartConfigure.Transform />,
266
- },
267
- ]}
268
- />
269
- </Card>
270
- </Col>
271
- <Col span={11}>
272
- <Card
273
- style={{
274
- margin: '12px 12px 12px 0',
275
- }}
276
- >
277
- <ChartConfigure.Renderer />
278
- </Card>
279
- </Col>
280
- </Row>
281
- </FormLayout>
282
- </FormProvider>
283
- </Modal>
284
- );
285
- };
286
-
287
- ChartConfigure.Renderer = function Renderer(props) {
288
- const { current } = useContext(ChartConfigContext);
289
- const { collection, data } = current || {};
290
- const { service } = useContext(ChartRendererContext);
291
- return (
292
- <FormConsumer>
293
- {(form) => {
294
- // Any change of config and transform will trigger rerender
295
- // Change of query only trigger rerender when "Run query" button is clicked
296
- const config = cloneDeep(form.values.config);
297
- const transform = cloneDeep(form.values.transform);
298
- return (
299
- <ChartRendererContext.Provider value={{ collection, config, transform, service, data }}>
300
- <ChartRenderer {...props} />
301
- </ChartRendererContext.Provider>
302
- );
303
- }}
304
- </FormConsumer>
305
- );
306
- };
307
-
308
- ChartConfigure.Query = function Query() {
309
- const { t } = useChartsTranslation();
310
- const fields = useFieldsWithAssociation();
311
- const useFormatterOptions = useFormatters(fields);
312
- const collectionOptions = useCollectionOptions();
313
- const { current, setCurrent } = useContext(ChartConfigContext);
314
- const { collection } = current || {};
315
- const fieldOptions = useCollectionFieldsOptions(collection, 1);
316
- const compiledFieldOptions = Schema.compile(fieldOptions, { t });
317
- const filterOptions = useCollectionFilterOptions(collection);
318
-
319
- const { service } = useContext(ChartRendererContext);
320
- const onCollectionChange = (value: string) => {
321
- const { schema, field } = current;
322
- setCurrent({
323
- schema,
324
- field,
325
- collection: value,
326
- service: current.service,
327
- initialValues: {},
328
- data: undefined,
329
- });
330
- service.mutate(undefined);
331
- };
332
-
333
- const formCollapse = FormCollapse.createFormCollapse(['measures', 'dimensions', 'filter', 'sort']);
334
- const FromSql = () => (
335
- <Text code>
336
- From <span style={{ color: '#1890ff' }}>{current?.collection}</span>
337
- </Text>
338
- );
339
- return (
340
- <SchemaComponent
341
- schema={querySchema}
342
- scope={{
343
- t,
344
- formCollapse,
345
- fieldOptions: compiledFieldOptions,
346
- filterOptions,
347
- useOrderOptions: useOrderFieldsOptions(compiledFieldOptions, fields),
348
- collectionOptions,
349
- useFormatterOptions,
350
- onCollectionChange,
351
- collection: current?.collection,
352
- useOrderReaction: useOrderReaction(compiledFieldOptions, fields),
353
- }}
354
- components={{ ArrayItems, Editable, FormCollapse, FormItem, Space, Switch, FromSql }}
355
- />
356
- );
357
- };
358
-
359
- ChartConfigure.Config = function Config() {
360
- const { t } = useChartsTranslation();
361
- const chartTypes = useChartTypes();
362
- const fields = useFieldsWithAssociation();
363
- const charts = useCharts();
364
- const getChartFields = useChartFields(fields);
365
- const getReference = (chartType: string) => {
366
- const reference = charts[chartType]?.reference;
367
- if (!reference) return '';
368
- const { title, link } = reference;
369
- return (
370
- <span>
371
- {t('Config reference: ')}
372
- <a href={link} target="_blank" rel="noreferrer">
373
- {t(title)}
374
- </a>
375
- </span>
376
- );
377
- };
378
-
379
- return (
380
- <FormConsumer>
381
- {(form) => {
382
- const chartType = form.values.config?.chartType;
383
- const chart = charts[chartType];
384
- const schema = chart?.schema || {};
385
- return (
386
- <SchemaComponent
387
- schema={getConfigSchema(schema)}
388
- scope={{ t, chartTypes, useChartFields: getChartFields, getReference }}
389
- components={{ FormItem, ArrayItems, Space, AutoComplete }}
390
- />
391
- );
392
- }}
393
- </FormConsumer>
394
- );
395
- };
396
-
397
- ChartConfigure.Transform = function Transform() {
398
- const { t } = useChartsTranslation();
399
- const fields = useFieldsWithAssociation();
400
- const useFieldTypeOptions = useFieldTypes(fields);
401
- const getChartFields = useChartFields(fields);
402
- return (
403
- <SchemaComponent
404
- schema={transformSchema}
405
- components={{ FormItem, ArrayItems, Space }}
406
- scope={{ useChartFields: getChartFields, useFieldTypeOptions, useTransformers, t }}
407
- />
408
- );
409
- };
410
-
411
- ChartConfigure.Data = function Data() {
412
- const { t } = useChartsTranslation();
413
- const { current } = useContext(ChartConfigContext);
414
- const { service } = useContext(ChartRendererContext);
415
- const fields = useFieldsWithAssociation();
416
- const data = processData(fields, service?.data || current?.data || [], { t });
417
- const error = service?.error;
418
- return !error ? (
419
- <div
420
- style={{
421
- overflowX: 'auto',
422
- overflowY: 'hidden',
423
- }}
424
- >
425
- <Table
426
- dataSource={data}
427
- columns={Object.keys(data[0] || {}).map((col) => {
428
- const field = getField(fields, col.split('.'));
429
- return {
430
- title: field?.label || col,
431
- dataIndex: col,
432
- key: col,
433
- };
434
- })}
435
- size="small"
436
- />
437
- </div>
438
- ) : (
439
- <Alert
440
- message="Error"
441
- type="error"
442
- description={error?.response?.data?.errors?.map?.((error: any) => error.message).join('\n') || error.message}
443
- showIcon
444
- />
445
- );
446
- };
@@ -1,70 +0,0 @@
1
- import { lang } from '../locale';
2
-
3
- export default {
4
- datetime: [
5
- {
6
- label: lang('YYYY'),
7
- value: 'YYYY',
8
- },
9
- {
10
- label: lang('MM'),
11
- value: 'MM',
12
- },
13
- {
14
- label: lang('DD'),
15
- value: 'DD',
16
- },
17
- {
18
- label: lang('YYYY-MM'),
19
- value: 'YYYY-MM',
20
- },
21
- {
22
- label: lang('YYYY-MM-DD'),
23
- value: 'YYYY-MM-DD',
24
- },
25
- {
26
- label: lang('YYYY-MM-DD hh:mm'),
27
- value: 'YYYY-MM-DD hh:mm',
28
- },
29
- {
30
- label: lang('YYYY-MM-DD hh:mm:ss'),
31
- value: 'YYYY-MM-DD hh:mm:ss',
32
- },
33
- ],
34
- date: [
35
- {
36
- label: lang('YYYY'),
37
- value: 'YYYY',
38
- },
39
- {
40
- label: lang('MM'),
41
- value: 'MM',
42
- },
43
- {
44
- label: lang('DD'),
45
- value: 'DD',
46
- },
47
- {
48
- label: lang('YYYY-MM'),
49
- value: 'YYYY-MM',
50
- },
51
- {
52
- label: lang('YYYY-MM-DD'),
53
- value: 'YYYY-MM-DD',
54
- },
55
- ],
56
- time: [
57
- {
58
- label: lang('hh:mm:ss'),
59
- value: 'hh:mm:ss',
60
- },
61
- {
62
- label: lang('hh:mm'),
63
- value: 'hh:mm',
64
- },
65
- {
66
- label: lang('hh'),
67
- value: 'hh',
68
- },
69
- ],
70
- };
@@ -1,4 +0,0 @@
1
- export * from './ChartBlock';
2
- export * from './ChartBlockDesigner';
3
- export * from './ChartBlockInitializer';
4
- export * from './ChartConfigure';