@kanaries/graphic-walker 0.1.0 → 0.2.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 (62) hide show
  1. package/LICENSE +198 -12
  2. package/dist/App.d.ts +6 -2
  3. package/dist/assets/explainer.worker.c6f22bad.js.map +1 -0
  4. package/dist/assets/filter.worker.6216b48e.js.map +1 -0
  5. package/dist/components/container.d.ts +2 -2
  6. package/dist/components/dataTypeIcon.d.ts +2 -1
  7. package/dist/components/liteForm.d.ts +1 -1
  8. package/dist/components/sizeSetting.d.ts +9 -0
  9. package/dist/components/tabs/pureTab.d.ts +15 -0
  10. package/dist/config.d.ts +6 -4
  11. package/dist/constants.d.ts +1 -0
  12. package/dist/dataSource/config.d.ts +26 -0
  13. package/dist/dataSource/dataSelection/csvData.d.ts +5 -0
  14. package/dist/dataSource/dataSelection/index.d.ts +3 -0
  15. package/dist/dataSource/dataSelection/publicData.d.ts +5 -0
  16. package/dist/dataSource/utils.d.ts +3 -3
  17. package/dist/{Fields/AestheticFields.d.ts → fields/aestheticFields.d.ts} +0 -0
  18. package/dist/fields/components.d.ts +14 -0
  19. package/dist/{Fields → fields}/datasetFields/dimFields.d.ts +0 -0
  20. package/dist/fields/datasetFields/fieldPill.d.ts +5 -0
  21. package/dist/{Fields → fields}/datasetFields/index.d.ts +0 -0
  22. package/dist/{Fields → fields}/datasetFields/meaFields.d.ts +0 -0
  23. package/dist/{Fields → fields}/fieldsContext.d.ts +2 -5
  24. package/dist/fields/filterField/filterEditDialog.d.ts +3 -0
  25. package/dist/fields/filterField/filterPill.d.ts +8 -0
  26. package/dist/fields/filterField/index.d.ts +3 -0
  27. package/dist/fields/filterField/slider.d.ts +10 -0
  28. package/dist/fields/filterField/tabs.d.ts +21 -0
  29. package/dist/{Fields → fields}/obComponents/obFContainer.d.ts +0 -0
  30. package/dist/{Fields → fields}/obComponents/obPill.d.ts +0 -0
  31. package/dist/{InsightBoard → fields/posFields}/index.d.ts +0 -0
  32. package/dist/{Fields → fields}/select.d.ts +0 -0
  33. package/dist/{Fields → fields}/utils.d.ts +0 -0
  34. package/dist/graphic-walker.es.js +62525 -1282
  35. package/dist/graphic-walker.es.js.map +1 -1
  36. package/dist/graphic-walker.umd.js +502 -1309
  37. package/dist/graphic-walker.umd.js.map +1 -1
  38. package/dist/insightBoard/index.d.ts +3 -0
  39. package/dist/{InsightBoard → insightBoard}/mainBoard.d.ts +5 -5
  40. package/dist/{InsightBoard → insightBoard}/radioGroupButtons.d.ts +0 -0
  41. package/dist/{InsightBoard → insightBoard}/selectionSpec.d.ts +0 -0
  42. package/dist/{InsightBoard → insightBoard}/std2vegaSpec.d.ts +3 -6
  43. package/dist/{InsightBoard → insightBoard}/utils.d.ts +2 -1
  44. package/dist/insights.d.ts +1 -1
  45. package/dist/interfaces.d.ts +54 -23
  46. package/dist/locales/i18n.d.ts +5 -0
  47. package/dist/segments/visNav.d.ts +3 -0
  48. package/dist/services.d.ts +5 -4
  49. package/dist/store/commonStore.d.ts +1 -0
  50. package/dist/store/visualSpecStore.d.ts +116 -17
  51. package/dist/style.css +1 -1
  52. package/dist/utils/autoMark.d.ts +7 -0
  53. package/dist/utils/index.d.ts +5 -1
  54. package/dist/utils/normalization.d.ts +7 -1
  55. package/dist/vis/future-react-vega.d.ts +6 -6
  56. package/dist/vis/react-vega.d.ts +16 -7
  57. package/dist/visualSettings/index.d.ts +2 -3
  58. package/dist/visualSettings/menubar.d.ts +4 -0
  59. package/package.json +26 -12
  60. package/README.md +0 -43
  61. package/dist/Fields/components.d.ts +0 -17
  62. package/dist/Fields/posFields/index.d.ts +0 -3
@@ -0,0 +1,3 @@
1
+ import React from 'react';
2
+ declare const _default: React.FunctionComponent<{}>;
3
+ export default _default;
@@ -1,11 +1,11 @@
1
1
  import React from 'react';
2
- import { Record, Field, Filters } from '../interfaces';
2
+ import { IField, Filters, IRow } from '../interfaces';
3
3
  interface InsightMainBoardProps {
4
- dataSource: Record[];
5
- fields: Field[];
4
+ dataSource: IRow[];
5
+ fields: Readonly<IField[]>;
6
6
  filters?: Filters;
7
- viewDs: Field[];
8
- viewMs: Field[];
7
+ viewDs: IField[];
8
+ viewMs: IField[];
9
9
  }
10
10
  declare const InsightMainBoard: React.FC<InsightMainBoardProps>;
11
11
  export default InsightMainBoard;
@@ -1,15 +1,12 @@
1
1
  import { Specification } from 'visual-insights';
2
- import { Record, SemanticType } from '../interfaces';
2
+ import { IField, IRow } from '../interfaces';
3
3
  import { IPredicate } from '../utils';
4
4
  export declare type IReasonType = 'selection_dim_distribution' | 'selection_mea_distribution' | 'children_major_factor' | 'children_outlier';
5
5
  export declare const geomTypeMap: {
6
6
  [key: string]: any;
7
7
  };
8
- export declare function baseVis(query: Specification, dataSource: Record[], dimensions: string[], measures: string[], predicates: IPredicate[] | null, aggregatedMeasures: Array<{
8
+ export declare function baseVis(query: Specification, dataSource: IRow[], dimensions: string[], measures: string[], predicates: IPredicate[] | null, aggregatedMeasures: Array<{
9
9
  op: string;
10
10
  field: string;
11
11
  as: string;
12
- }>, fieldFeatures: Array<{
13
- name: string;
14
- type: SemanticType;
15
- }>, type: IReasonType, defaultAggregated?: boolean, defaultStack?: boolean): any;
12
+ }>, fields: Readonly<IField[]>, type: IReasonType, defaultAggregated?: boolean, defaultStack?: boolean): any;
@@ -1,7 +1,8 @@
1
- import { IMeasure } from "../interfaces";
1
+ import { IField, IMeasure } from "../interfaces";
2
2
  /**
3
3
  * 合并两个measures数组,若出现相同的key,使用measures2中的op替换1中的op
4
4
  * @param measures1
5
5
  * @param measures2
6
6
  */
7
7
  export declare function mergeMeasures(measures1: IMeasure[], measures2: IMeasure[]): IMeasure[];
8
+ export declare function formatFieldName(fid: string, fields: Readonly<IField[]>): string;
@@ -56,6 +56,6 @@ export declare class DataExplainer {
56
56
  getCenterFields(type: 'dimension' | 'measure', num?: number): string[];
57
57
  getVisSpec(spaces: IExplaination[]): {
58
58
  schema: import("visual-insights/build/esm/insights/InsightFlow/specification/encoding").ISpec;
59
- dataView: import("visual-insights").Record[];
59
+ dataView: import("visual-insights").IRow[];
60
60
  }[];
61
61
  }
@@ -1,24 +1,35 @@
1
1
  import { StatFuncName } from "visual-insights/build/esm/statistics";
2
2
  import { AggFC } from 'cube-core/built/types';
3
- import { IMutField as VIMutField } from 'visual-insights';
3
+ import { IAnalyticType, ISemanticType } from 'visual-insights';
4
+ /**
5
+ * @deprecated
6
+ */
4
7
  export interface Record {
5
8
  [key: string]: any;
6
9
  }
10
+ export interface IRow {
11
+ [key: string]: any;
12
+ }
13
+ /**
14
+ * @deprecated
15
+ */
7
16
  export declare type SemanticType = 'quantitative' | 'nominal' | 'ordinal' | 'temporal';
8
17
  export interface Filters {
9
18
  [key: string]: any[];
10
19
  }
11
- export interface IField {
12
- key: string;
13
- type: string;
14
- analyticType: 'dimension' | 'measure';
20
+ export interface IMutField {
21
+ fid: string;
22
+ key?: string;
23
+ name?: string;
24
+ disable?: boolean;
25
+ semanticType: ISemanticType;
26
+ analyticType: IAnalyticType;
15
27
  }
16
- export declare type IMutField = VIMutField;
17
- export interface Field {
28
+ export interface IField {
18
29
  /**
19
- * id: key in data record
30
+ * fid: key in data record
20
31
  */
21
- id: string;
32
+ fid: string;
22
33
  /**
23
34
  * display name for field
24
35
  */
@@ -27,14 +38,15 @@ export interface Field {
27
38
  * aggregator's name
28
39
  */
29
40
  aggName?: string;
30
- type: 'D' | 'M';
31
- [key: string]: any;
41
+ semanticType: ISemanticType;
42
+ analyticType: IAnalyticType;
32
43
  cmp?: (a: any, b: any) => number;
33
44
  }
34
- export interface IViewField extends Field {
45
+ export interface IViewField extends IField {
35
46
  dragId: string;
47
+ sort?: 'none' | 'ascending' | 'descending';
36
48
  }
37
- export interface Measure extends Field {
49
+ export interface Measure extends IField {
38
50
  aggregator?: AggFC;
39
51
  minWidth?: number;
40
52
  formatter?: (value: number | undefined) => number | string;
@@ -44,7 +56,7 @@ export interface DataSet {
44
56
  id: string;
45
57
  name: string;
46
58
  rawFields: IMutField[];
47
- dataSource: Record[];
59
+ dataSource: IRow[];
48
60
  }
49
61
  export interface IFieldNeighbor {
50
62
  key: string;
@@ -66,22 +78,41 @@ export interface IDataSet {
66
78
  export interface IDataSetInfo {
67
79
  name: string;
68
80
  rawFields: IMutField[];
69
- dataSource: Record[];
81
+ dataSource: IRow[];
70
82
  }
71
83
  export interface IDataSource {
72
84
  id: string;
73
- data: Record[];
85
+ data: IRow[];
86
+ }
87
+ export interface IFilterField extends IViewField {
88
+ rule: IFilterRule | null;
74
89
  }
75
90
  export interface DraggableFieldState {
76
- fields: Field[];
77
- rows: Field[];
78
- columns: Field[];
79
- color: Field[];
80
- opacity: Field[];
81
- size: Field[];
91
+ fields: IViewField[];
92
+ dimensions: IViewField[];
93
+ measures: IViewField[];
94
+ rows: IViewField[];
95
+ columns: IViewField[];
96
+ color: IViewField[];
97
+ opacity: IViewField[];
98
+ size: IViewField[];
99
+ shape: IViewField[];
100
+ theta: IViewField[];
101
+ radius: IViewField[];
102
+ filters: IFilterField[];
82
103
  }
83
104
  export interface IDraggableStateKey {
84
105
  id: keyof DraggableFieldState;
85
- name: string;
86
106
  mode: number;
87
107
  }
108
+ export declare type IFilterRule = {
109
+ type: 'range';
110
+ value: readonly [number, number];
111
+ } | {
112
+ type: 'temporal range';
113
+ value: readonly [number, number];
114
+ } | {
115
+ type: 'one of';
116
+ value: Set<string | number>;
117
+ };
118
+ export declare type IStackMode = 'none' | 'stack' | 'normalize';
@@ -0,0 +1,5 @@
1
+ import { Resource } from 'i18next';
2
+ export declare const mergeLocaleRes: (resources: {
3
+ [lang: string]: Resource;
4
+ }) => void;
5
+ export declare const setLocaleLanguage: (lang: string) => Promise<import("i18next").TFunction>;
@@ -0,0 +1,3 @@
1
+ import React from "react";
2
+ declare const _default: React.FunctionComponent<{}>;
3
+ export default _default;
@@ -1,10 +1,10 @@
1
- import { Record, Filters, SemanticType, IMeasure, IMutField } from './interfaces';
1
+ import { IRow, Filters, SemanticType, IMeasure, IMutField, IFilterField } from './interfaces';
2
2
  import { Specification } from 'visual-insights';
3
3
  import { IExplaination, IMeasureWithStat } from './insights';
4
4
  interface ExplainParams {
5
5
  dimensions: string[];
6
6
  measures: string[];
7
- dataSource: Record[];
7
+ dataSource: IRow[];
8
8
  filters?: Filters;
9
9
  currentSpace: {
10
10
  dimensions: string[];
@@ -12,7 +12,7 @@ interface ExplainParams {
12
12
  };
13
13
  }
14
14
  export interface IVisSpace {
15
- dataView: Record[];
15
+ dataView: IRow[];
16
16
  schema: Specification;
17
17
  }
18
18
  interface ExplainReturns {
@@ -27,8 +27,9 @@ interface ExplainReturns {
27
27
  export declare function getExplaination(props: ExplainParams): Promise<ExplainReturns>;
28
28
  interface PreAnalysisParams {
29
29
  fields: IMutField[];
30
- dataSource: Record[];
30
+ dataSource: IRow[];
31
31
  }
32
32
  export declare function preAnalysis(props: PreAnalysisParams): Promise<void>;
33
33
  export declare function destroyWorker(): void;
34
+ export declare const applyFilter: (data: readonly IRow[], filters: readonly IFilterField[]) => Promise<IRow[]>;
34
35
  export {};
@@ -24,6 +24,7 @@ export declare class CommonStore {
24
24
  updateTempFieldAnalyticType(fieldKey: string, analyticType: IMutField['analyticType']): void;
25
25
  updateTempName(name: string): void;
26
26
  updateTempDS(rawData: Record[]): void;
27
+ updateTempSTDDS(dataset: IDataSetInfo): void;
27
28
  commitTempDS(): void;
28
29
  startDSBuildingTask(): void;
29
30
  addAndUseDS(dataset: IDataSetInfo): string;
@@ -1,27 +1,106 @@
1
- import { IViewField } from "../interfaces";
2
- import { CommonStore } from "./commonStore";
3
1
  import { Specification } from "visual-insights";
4
- interface VisualConfig {
2
+ import { DataSet, DraggableFieldState, IFilterRule, IViewField } from "../interfaces";
3
+ import { CommonStore } from "./commonStore";
4
+ interface IVisualConfig {
5
5
  defaultAggregated: boolean;
6
6
  geoms: string[];
7
- defaultStack: boolean;
8
- }
9
- export interface DraggableFieldState {
10
- fields: IViewField[];
11
- dimensions: IViewField[];
12
- measures: IViewField[];
13
- rows: IViewField[];
14
- columns: IViewField[];
15
- color: IViewField[];
16
- opacity: IViewField[];
17
- size: IViewField[];
7
+ stack: 'none' | 'stack' | 'normalize';
8
+ showActions: boolean;
9
+ interactiveScale: boolean;
10
+ sorted: 'none' | 'ascending' | 'descending';
11
+ size: {
12
+ mode: 'auto' | 'fixed';
13
+ width: number;
14
+ height: number;
15
+ };
18
16
  }
19
17
  export declare const MetaFieldKeys: Array<keyof DraggableFieldState>;
18
+ declare type DeepReadonly<T extends Record<keyof any, any>> = {
19
+ readonly [K in keyof T]: T[K] extends Record<keyof any, any> ? DeepReadonly<T[K]> : T[K];
20
+ };
21
+ interface IVisSpec {
22
+ readonly visId: string;
23
+ readonly name?: [string, Record<string, any>?];
24
+ readonly encodings: DeepReadonly<DraggableFieldState>;
25
+ readonly config: DeepReadonly<IVisualConfig>;
26
+ }
27
+ declare class IVisSpecWithHistory {
28
+ readonly visId: IVisSpec['visId'];
29
+ private snapshots;
30
+ private cursor;
31
+ constructor(data: IVisSpec);
32
+ private get frame();
33
+ private batchFlag;
34
+ private commit;
35
+ get canUndo(): boolean;
36
+ undo(): boolean;
37
+ get canRedo(): boolean;
38
+ redo(): boolean;
39
+ rebase(): void;
40
+ get name(): IVisSpec['name'];
41
+ set name(name: IVisSpec['name']);
42
+ get encodings(): DeepReadonly<DraggableFieldState>;
43
+ set encodings(encodings: IVisSpec['encodings']);
44
+ get config(): DeepReadonly<IVisualConfig>;
45
+ set config(config: IVisSpec['config']);
46
+ }
20
47
  export declare class VizSpecStore {
21
- draggableFieldState: DraggableFieldState;
48
+ private commonStore;
49
+ /**
50
+ * This segment will always refers to the state of the active tab -
51
+ * `this.visList[this.visIndex].encodings`.
52
+ * Notice that observing rule of `this.visList` is `"shallow"`
53
+ * so mobx will NOT compare every deep value of `this.visList`,
54
+ * because the active tab is the only item in the list that may change.
55
+ * @readonly
56
+ * Assignment or mutable operations applied to ANY members of this segment
57
+ * is strictly FORBIDDEN.
58
+ * Members of it can only be got as READONLY objects.
59
+ *
60
+ * If you're trying to change the value of it and let mobx catch the action to trigger an update,
61
+ * please use `this.useMutable()` to access to a writable reference
62
+ * (an `immer` draft) of `this.visList[this.visIndex]`.
63
+ */
64
+ readonly draggableFieldState: DeepReadonly<DraggableFieldState>;
22
65
  private reactions;
23
- visualConfig: VisualConfig;
66
+ /**
67
+ * This segment will always refers to the state of the active tab -
68
+ * `this.visList[this.visIndex].config`.
69
+ * Notice that observing rule of `this.visList` is `"shallow"`
70
+ * so mobx will NOT compare every deep value of `this.visList`,
71
+ * because the active tab is the only item in the list that may change.
72
+ * @readonly
73
+ * Assignment or mutable operations applied to ANY members of this segment
74
+ * is strictly FORBIDDEN.
75
+ * Members of it can only be got as READONLY objects.
76
+ *
77
+ * If you're trying to change the value of it and let mobx catch the action to trigger an update,
78
+ * please use `this.useMutable()` to access to a writable reference
79
+ * (an `immer` draft) of `this.visList[this.visIndex]`.
80
+ */
81
+ readonly visualConfig: Readonly<IVisualConfig>;
82
+ visList: IVisSpecWithHistory[];
83
+ visIndex: number;
84
+ canUndo: boolean;
85
+ canRedo: boolean;
86
+ editingFilterIdx: number | null;
24
87
  constructor(commonStore: CommonStore);
88
+ /**
89
+ * Allow to change any deep member of `encodings` or `config`
90
+ * in the active tab `this.visList[this.visIndex]`.
91
+ *
92
+ * - `tab.encodings`
93
+ *
94
+ * A mutable reference of `this.draggableFieldState`
95
+ *
96
+ * - `tab.config`
97
+ *
98
+ * A mutable reference of `this.visualConfig`
99
+ */
100
+ private useMutable;
101
+ undo(): void;
102
+ redo(): void;
103
+ private freezeHistory;
25
104
  /**
26
105
  * dimension fields in visualization
27
106
  */
@@ -30,13 +109,33 @@ export declare class VizSpecStore {
30
109
  * dimension fields in visualization
31
110
  */
32
111
  get viewMeasures(): IViewField[];
112
+ addVisualization(): void;
113
+ selectVisualization(visIndex: number): void;
114
+ setVisName(visIndex: number, name: string): void;
33
115
  initState(): void;
116
+ initMetaState(dataset: DataSet): void;
34
117
  clearState(): void;
35
- setVisualConfig(configKey: keyof VisualConfig, value: any): void;
118
+ setVisualConfig<K extends keyof IVisualConfig>(configKey: K, value: IVisualConfig[K]): void;
119
+ transformCoord(coord: 'cartesian' | 'polar'): void;
120
+ setChartLayout(props: {
121
+ mode: IVisualConfig['size']['mode'];
122
+ width?: number;
123
+ height?: number;
124
+ }): void;
36
125
  reorderField(stateKey: keyof DraggableFieldState, sourceIndex: number, destinationIndex: number): void;
37
126
  moveField(sourceKey: keyof DraggableFieldState, sourceIndex: number, destinationKey: keyof DraggableFieldState, destinationIndex: number): void;
38
127
  removeField(sourceKey: keyof DraggableFieldState, sourceIndex: number): void;
128
+ private appendFilter;
129
+ writeFilter(index: number, rule: IFilterRule | null): void;
130
+ setFilterEditing(index: number): void;
131
+ closeFilterEditing(): void;
132
+ transpose(): void;
133
+ createBinField(stateKey: keyof DraggableFieldState, index: number): void;
134
+ createLogField(stateKey: keyof DraggableFieldState, index: number): void;
39
135
  setFieldAggregator(stateKey: keyof DraggableFieldState, index: number, aggName: string): void;
136
+ get sortCondition(): boolean;
137
+ setFieldSort(stateKey: keyof DraggableFieldState, index: number, sortType: 'none' | 'ascending' | 'descending'): void;
138
+ applyDefaultSort(sortType?: 'none' | 'ascending' | 'descending'): void;
40
139
  appendField(destinationKey: keyof DraggableFieldState, field: IViewField | undefined): void;
41
140
  renderSpec(spec: Specification): void;
42
141
  destroy(): void;
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- *,:before,:after{box-sizing:border-box}html{-moz-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type=button]{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-opacity: 1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.right-2{right:.5rem}.col-span-1{grid-column:span 1 / span 1}.col-span-4{grid-column:span 4 / span 4}.float-right{float:right}.m-1{margin:.25rem}.mt-1{margin-top:.25rem}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-0\.5{margin-right:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.ml-2{margin-left:.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-4{height:1rem}.h-9{height:2.25rem}.h-16{height:4rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-16{width:4rem}.min-w-96{min-width:96px}.flex-shrink{flex-shrink:1}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-spin{animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.resize{resize:both}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rounded-sm{border-radius:.125rem}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-t-2{border-top-width:2px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-gray-300{--tw-border-opacity: 1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgba(107,114,128,var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity: 1;border-color:rgba(96,165,250,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.focus\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgba(107,114,128,var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.bg-transparent{background-color:transparent}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgba(217,119,6,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity: 1;background-color:rgba(245,158,11,var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgba(219,234,254,var(--tw-bg-opacity))}.disabled\:bg-gray-300:disabled{--tw-bg-opacity: 1;background-color:rgba(209,213,219,var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-4{padding:1rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-0\.5{padding-top:.125rem}.pr-2{padding-right:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-0\.5{padding-bottom:.125rem}.pl-2{padding-left:.5rem}.pl-6{padding-left:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.ordinal{--tw-ordinal: var(--tw-empty, );--tw-slashed-zero: var(--tw-empty, );--tw-numeric-figure: var(--tw-empty, );--tw-numeric-spacing: var(--tw-empty, );--tw-numeric-fraction: var(--tw-empty, );font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.ordinal{--tw-ordinal: ordinal}.text-white{--tw-text-opacity: 1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgba(31,41,55,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity: 1;color:rgba(245,158,11,var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgba(16,185,129,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgba(59,130,246,var(--tw-text-opacity))}*,:before,:after{--tw-shadow: 0 0 #0000}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:before,:after{--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(59, 130, 246, .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000}.filter{--tw-blur: var(--tw-empty, );--tw-brightness: var(--tw-empty, );--tw-contrast: var(--tw-empty, );--tw-grayscale: var(--tw-empty, );--tw-hue-rotate: var(--tw-empty, );--tw-invert: var(--tw-empty, );--tw-saturate: var(--tw-empty, );--tw-sepia: var(--tw-empty, );--tw-drop-shadow: var(--tw-empty, );filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}
1
+ /*! tailwindcss v2.2.19 | MIT License | https://tailwindcss.com *//*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */*,:before,:after{box-sizing:border-box}html{tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"}hr{height:0;color:inherit}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}button,[type=button],[type=submit]{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset{margin:0;padding:0}ol,ul{list-style:none;margin:0;padding:0}html{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:1.5}body{font-family:inherit;line-height:inherit}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:currentColor}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{padding:0;line-height:inherit;color:inherit}pre,code,kbd,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-opacity: 1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-2{top:.5rem}.right-2{right:.5rem}.z-auto{z-index:auto}.col-span-1{grid-column:span 1 / span 1}.col-span-2{grid-column:span 2 / span 2}.col-span-3{grid-column:span 3 / span 3}.col-span-5{grid-column:span 5 / span 5}.col-span-7{grid-column:span 7 / span 7}.float-right{float:right}.m-1{margin:.25rem}.m-2{margin:.5rem}.mx-2{margin-left:.5rem;margin-right:.5rem}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.mr-0{margin-right:0}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-0\.5{margin-right:.125rem}.mb-1{margin-bottom:.25rem}.mb-2{margin-bottom:.5rem}.-mb-px{margin-bottom:-1px}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-2{height:.5rem}.h-4{height:1rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-16{height:4rem}.h-48{height:12rem}.w-3{width:.75rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-16{width:4rem}.w-60{width:15rem}.w-full{width:100%}.min-w-96{min-width:96px}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.flex-shrink{flex-shrink:1}.flex-grow-0{flex-grow:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{transform:scale(2);opacity:0}}@keyframes pulse{50%{opacity:.5}}@keyframes bounce{0%,to{transform:translateY(-25%);animation-timing-function:cubic-bezier(.8,0,1,1)}50%{transform:none;animation-timing-function:cubic-bezier(0,0,.2,1)}}.animate-spin{animation:spin 1s linear infinite}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.cursor-not-allowed{cursor:not-allowed}.select-none{-webkit-user-select:none;user-select:none}.resize{resize:both}.appearance-none{-webkit-appearance:none;appearance:none}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.self-center{align-self:center}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-nowrap{white-space:nowrap}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.border-2{border-width:2px}.border{border-width:1px}.border-t-2{border-top-width:2px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-l{border-left-width:1px}.border-transparent{border-color:transparent}.border-gray-200{--tw-border-opacity: 1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.border-gray-400{--tw-border-opacity: 1;border-color:rgba(156,163,175,var(--tw-border-opacity))}.border-gray-500{--tw-border-opacity: 1;border-color:rgba(107,114,128,var(--tw-border-opacity))}.border-blue-400{--tw-border-opacity: 1;border-color:rgba(96,165,250,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity: 1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.hover\:border-gray-300:hover{--tw-border-opacity: 1;border-color:rgba(209,213,219,var(--tw-border-opacity))}.hover\:border-gray-600:hover{--tw-border-opacity: 1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.focus\:border-gray-500:focus{--tw-border-opacity: 1;border-color:rgba(107,114,128,var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity: 1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity: 1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.bg-gray-400{--tw-bg-opacity: 1;background-color:rgba(156,163,175,var(--tw-bg-opacity))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgba(239,68,68,var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity: 1;background-color:rgba(217,119,6,var(--tw-bg-opacity))}.bg-blue-100{--tw-bg-opacity: 1;background-color:rgba(219,234,254,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity: 1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.bg-indigo-50{--tw-bg-opacity: 1;background-color:rgba(238,242,255,var(--tw-bg-opacity))}.hover\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity: 1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.hover\:bg-gray-200:hover{--tw-bg-opacity: 1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.hover\:bg-red-100:hover{--tw-bg-opacity: 1;background-color:rgba(254,226,226,var(--tw-bg-opacity))}.hover\:bg-yellow-100:hover{--tw-bg-opacity: 1;background-color:rgba(254,243,199,var(--tw-bg-opacity))}.hover\:bg-yellow-500:hover{--tw-bg-opacity: 1;background-color:rgba(245,158,11,var(--tw-bg-opacity))}.hover\:bg-green-50:hover{--tw-bg-opacity: 1;background-color:rgba(236,253,245,var(--tw-bg-opacity))}.hover\:bg-blue-100:hover{--tw-bg-opacity: 1;background-color:rgba(219,234,254,var(--tw-bg-opacity))}.disabled\:bg-gray-300:disabled{--tw-bg-opacity: 1;background-color:rgba(209,213,219,var(--tw-bg-opacity))}.p-1{padding:.25rem}.p-2{padding:.5rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-0{padding-top:0}.pt-1{padding-top:.25rem}.pt-0\.5{padding-top:.125rem}.pr-2{padding-right:.5rem}.pr-6{padding-right:1.5rem}.pb-0{padding-bottom:0}.pb-1{padding-bottom:.25rem}.pb-2{padding-bottom:.5rem}.pb-0\.5{padding-bottom:.125rem}.pl-2{padding-left:.5rem}.pl-6{padding-left:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.ordinal{--tw-ordinal: var(--tw-empty, );--tw-slashed-zero: var(--tw-empty, );--tw-numeric-figure: var(--tw-empty, );--tw-numeric-spacing: var(--tw-empty, );--tw-numeric-fraction: var(--tw-empty, );font-variant-numeric:var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction)}.ordinal{--tw-ordinal: ordinal}.leading-none{line-height:1}.text-black{--tw-text-opacity: 1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgba(209,213,219,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgba(156,163,175,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgba(75,85,99,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgba(31,41,55,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity: 1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-yellow-500{--tw-text-opacity: 1;color:rgba(245,158,11,var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgba(16,185,129,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity: 1;color:rgba(59,130,246,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity: 1;color:rgba(55,65,81,var(--tw-text-opacity))}.hover\:text-purple-600:hover{--tw-text-opacity: 1;color:rgba(124,58,237,var(--tw-text-opacity))}.underline{text-decoration:underline}*,:before,:after{--tw-shadow: 0 0 #0000}.shadow{--tw-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:before,:after{--tw-ring-inset: var(--tw-empty, );--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgba(59, 130, 246, .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000}.filter{--tw-blur: var(--tw-empty, );--tw-brightness: var(--tw-empty, );--tw-contrast: var(--tw-empty, );--tw-grayscale: var(--tw-empty, );--tw-hue-rotate: var(--tw-empty, );--tw-invert: var(--tw-empty, );--tw-saturate: var(--tw-empty, );--tw-sepia: var(--tw-empty, );--tw-drop-shadow: var(--tw-empty, );filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.blur{--tw-blur: blur(8px)}@media (min-width: 1280px){.xl\:col-span-1{grid-column:span 1 / span 1}.xl\:col-span-4{grid-column:span 4 / span 4}.xl\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}
@@ -0,0 +1,7 @@
1
+ import { ISemanticType } from "visual-insights";
2
+ /**
3
+ *
4
+ * @param semanticTypeList semanticTypeList.length <= 2,调用时,手动将columns 和 rows的最后一个元素组合传进来
5
+ * @returns geom(mark) type
6
+ */
7
+ export declare function autoMark(semanticTypeList: ISemanticType[]): string;
@@ -1,4 +1,4 @@
1
- import { Record, Filters } from '../interfaces';
1
+ import { Record, Filters, IMutField, IRow } from '../interfaces';
2
2
  export declare function checkMajorFactor(data: Record[], childrenData: Map<any, Record[]>, dimensions: string[], measures: string[]): {
3
3
  majorKey: string;
4
4
  majorSum: number;
@@ -16,3 +16,7 @@ export declare function getPredicates(selection: Record[], dimensions: string[],
16
16
  export declare function getPredicatesFromVegaSignals(signals: Filters, dimensions: string[], measures: string[]): IPredicate[];
17
17
  export declare function filterByPredicates(data: Record[], predicates: IPredicate[]): Record[];
18
18
  export declare function applyFilters(dataSource: Record[], filters: Filters): Record[];
19
+ export declare function extendCountField(dataSource: IRow[], fields: IMutField[]): {
20
+ dataSource: IRow[];
21
+ fields: IMutField[];
22
+ };
@@ -1,4 +1,4 @@
1
- import { Record } from '../interfaces';
1
+ import { IRow, Record } from '../interfaces';
2
2
  export declare function normalizeWithParent(data: Record[], parentData: Record[], measures: string[], syncScale: boolean): {
3
3
  normalizedData: Record[];
4
4
  normalizedParentData: Record[];
@@ -6,3 +6,9 @@ export declare function normalizeWithParent(data: Record[], parentData: Record[]
6
6
  export declare function compareDistribution(distribution1: Record[], distribution2: Record[], dimensions: string[], measures: string[]): number;
7
7
  export declare function normalizeByMeasures(dataSource: Record[], measures: string[]): Record[];
8
8
  export declare function getDistributionDifference(dataSource: Record[], dimensions: string[], measure1: string, measure2: string): number;
9
+ export declare function makeBinField(dataSource: IRow[], fid: string, binFid: string, binSize?: number | undefined): {
10
+ [x: string]: any;
11
+ }[];
12
+ export declare function makeLogField(dataSource: IRow[], fid: string, logFid: string): {
13
+ [x: string]: any;
14
+ }[];
@@ -3,16 +3,16 @@
3
3
  * https://github.com/vega/vega-lite/issues/4680
4
4
  */
5
5
  import React from 'react';
6
- import { Field, Record } from '../interfaces';
6
+ import { IField, Record } from '../interfaces';
7
7
  interface ReactVegaProps {
8
- rows: Field[];
9
- columns: Field[];
8
+ rows: IField[];
9
+ columns: IField[];
10
10
  dataSource: Record[];
11
11
  defaultAggregate?: boolean;
12
12
  geomType: string;
13
- color?: Field;
14
- opacity?: Field;
15
- size?: Field;
13
+ color?: IField;
14
+ opacity?: IField;
15
+ size?: IField;
16
16
  onGeomClick?: (values: any, e: any) => void;
17
17
  }
18
18
  declare const ReactVega: React.FC<ReactVegaProps>;
@@ -1,14 +1,23 @@
1
1
  import React from 'react';
2
- import { Field, Record } from '../interfaces';
2
+ import { IViewField, IRow, IStackMode } from '../interfaces';
3
3
  interface ReactVegaProps {
4
- rows: Field[];
5
- columns: Field[];
6
- dataSource: Record[];
4
+ rows: Readonly<IViewField[]>;
5
+ columns: Readonly<IViewField[]>;
6
+ dataSource: IRow[];
7
7
  defaultAggregate?: boolean;
8
+ stack: IStackMode;
9
+ interactiveScale: boolean;
8
10
  geomType: string;
9
- color?: Field;
10
- opacity?: Field;
11
- size?: Field;
11
+ color?: IViewField;
12
+ opacity?: IViewField;
13
+ size?: IViewField;
14
+ shape?: IViewField;
15
+ theta?: IViewField;
16
+ radius?: IViewField;
17
+ showActions: boolean;
18
+ layoutMode: string;
19
+ width: number;
20
+ height: number;
12
21
  onGeomClick?: (values: any, e: any) => void;
13
22
  }
14
23
  declare const ReactVega: React.FC<ReactVegaProps>;
@@ -1,5 +1,4 @@
1
1
  import React from 'react';
2
- interface VisualSettinsProps {
3
- }
4
- declare const _default: React.FunctionComponent<VisualSettinsProps>;
2
+ export declare const LiteContainer: any;
3
+ declare const _default: React.FunctionComponent<{}>;
5
4
  export default _default;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ export declare const MenubarContainer: any;
3
+ declare const _default: React.FunctionComponent<{}>;
4
+ export default _default;
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@kanaries/graphic-walker",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
4
  "scripts": {
5
- "dev": "vite",
5
+ "dev:front_end": "vite --host",
6
+ "dev": "npm run dev:front_end",
6
7
  "build": "tsc && vite build",
7
8
  "serve": "vite preview",
8
9
  "type": "tsc src/lib.ts --declaration --emitDeclarationOnly --jsx react --esModuleInterop --outDir dist"
@@ -10,42 +11,55 @@
10
11
  "files": [
11
12
  "dist"
12
13
  ],
13
- "license": "GPL",
14
+ "license": "AGPL",
14
15
  "main": "./dist/graphic-walker.umd.js",
15
16
  "module": "./dist/graphic-walker.es.js",
16
17
  "exports": {
17
18
  ".": {
18
19
  "import": "./dist/graphic-walker.es.js",
19
20
  "require": "./dist/graphic-walker.umd.js"
21
+ },
22
+ "./dist/style.css": {
23
+ "import": "./dist/style.css",
24
+ "require": "./dist/style.css"
20
25
  }
21
26
  },
27
+ "prettier": {
28
+ "tabWidth": 4
29
+ },
22
30
  "types": "./dist/index.d.ts",
23
31
  "dependencies": {
24
- "@heroicons/react": "^1.0.4",
32
+ "@heroicons/react": "^2.0.8",
33
+ "@kanaries/web-data-loader": "0.1.5",
25
34
  "autoprefixer": "^10.3.5",
35
+ "i18next": "^21.9.1",
36
+ "i18next-browser-languagedetector": "^6.1.5",
37
+ "immer": "^9.0.15",
26
38
  "mobx": "^6.3.3",
27
39
  "mobx-react-lite": "^3.2.1",
28
40
  "postcss": "^8.3.7",
41
+ "re-resizable": "^6.9.8",
29
42
  "react": "^17.0.2",
30
43
  "react-beautiful-dnd": "^13.1.0",
31
44
  "react-dom": "^17.0.2",
45
+ "react-i18next": "^11.18.6",
32
46
  "react-json-view": "^1.21.3",
33
47
  "rxjs": "^7.3.0",
34
48
  "styled-components": "^5.3.0",
35
49
  "tailwindcss": "^2.2.15",
36
50
  "uuid": "^8.3.2",
37
- "vega": "^5.20.2",
38
- "vega-embed": "^6.18.2",
39
- "vega-lite": "^5.1.0",
40
- "visual-insights": "0.7.3"
51
+ "vega": "^5.22.1",
52
+ "vega-embed": "^6.20.8",
53
+ "vega-lite": "^5.2.0",
54
+ "visual-insights": "0.7.15"
41
55
  },
42
56
  "devDependencies": {
43
57
  "@rollup/plugin-typescript": "^8.2.5",
44
- "@types/react": "^17.0.0",
45
- "@types/react-dom": "^17.0.0",
58
+ "@types/react": "^17.x",
59
+ "@types/react-dom": "^17.x",
46
60
  "@types/uuid": "^8.3.1",
47
- "@vitejs/plugin-react-refresh": "^1.3.1",
61
+ "@vitejs/plugin-react-refresh": "^1.3.6",
48
62
  "typescript": "^4.3.2",
49
- "vite": "^2.4.4"
63
+ "vite": "^3.1.0"
50
64
  }
51
65
  }