@mwater/visualization 5.3.2 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/ColorComponent.d.ts +1 -1
- package/lib/ColorComponent.js +2 -2
- package/lib/CustomColorsContext.d.ts +0 -1
- package/lib/DateRangeComponent.js +10 -10
- package/lib/LocaleContextInjector.js +2 -2
- package/lib/MWaterAddRelatedFormComponent.js +8 -8
- package/lib/MWaterAddRelatedIndicatorComponent.d.ts +0 -1
- package/lib/MWaterAddRelatedIndicatorComponent.js +6 -6
- package/lib/MWaterAssetSystemsListComponent.d.ts +3 -3
- package/lib/MWaterAssetSystemsListComponent.js +4 -3
- package/lib/MWaterCompleteTableSelectComponent.d.ts +33 -34
- package/lib/MWaterCompleteTableSelectComponent.js +39 -38
- package/lib/MWaterCustomTablesetListComponent.d.ts +3 -3
- package/lib/MWaterCustomTablesetListComponent.js +5 -4
- package/lib/MWaterGlobalFiltersComponent.js +4 -4
- package/lib/MWaterLoaderComponent.d.ts +5 -5
- package/lib/MWaterLoaderComponent.js +1 -1
- package/lib/MWaterMetricsTableListComponent.d.ts +3 -3
- package/lib/MWaterMetricsTableListComponent.js +4 -3
- package/lib/MWaterResponsesFilterComponent.js +4 -4
- package/lib/MWaterTableSelectComponent.d.ts +1 -1
- package/lib/MWaterTableSelectComponent.js +5 -5
- package/lib/PopoverComponent.d.ts +4 -4
- package/lib/UIComponents.d.ts +5 -2
- package/lib/axes/AxisBuilder.js +42 -43
- package/lib/axes/AxisColorEditorComponent.d.ts +4 -4
- package/lib/axes/AxisColorEditorComponent.js +25 -60
- package/lib/axes/AxisComponent.d.ts +2 -3
- package/lib/axes/AxisComponent.js +20 -20
- package/lib/axes/BinsComponent.js +6 -6
- package/lib/axes/CategoryMapComponent.d.ts +2 -1
- package/lib/axes/CategoryMapComponent.js +7 -5
- package/lib/axes/ColorPaletteCollectionComponent.js +3 -3
- package/lib/axes/RangesComponent.js +12 -12
- package/lib/compressJson.js +1 -1
- package/lib/dashboards/DashboardComponent.d.ts +2 -0
- package/lib/dashboards/DashboardComponent.js +15 -8
- package/lib/dashboards/DashboardUtils.js +2 -3
- package/lib/dashboards/DashboardViewComponent.js +4 -4
- package/lib/dashboards/FontStyleEditor.js +8 -8
- package/lib/dashboards/LayoutOptionsComponent.js +101 -74
- package/lib/dashboards/SettingsModalComponent.d.ts +3 -4
- package/lib/dashboards/SettingsModalComponent.js +54 -40
- package/lib/dashboards/WidgetComponent.d.ts +0 -1
- package/lib/dashboards/WidgetComponent.js +1 -2
- package/lib/dashboards/layoutOptions.js +11 -7
- package/lib/datagrids/DatagridComponent.d.ts +1 -8
- package/lib/datagrids/DatagridComponent.js +14 -13
- package/lib/datagrids/DatagridDesignerComponent.js +18 -18
- package/lib/datagrids/DatagridQueryBuilder.d.ts +4 -4
- package/lib/datagrids/DatagridUtils.js +2 -2
- package/lib/datagrids/DatagridViewComponent.js +4 -4
- package/lib/datagrids/ExprCellComponent.js +1 -1
- package/lib/datagrids/FindReplaceModalComponent.js +17 -17
- package/lib/datagrids/OrderBysDesignerComponent.js +2 -2
- package/lib/languages.js +2 -2
- package/lib/layouts/DecoratedBlockComponent.js +2 -2
- package/lib/layouts/blocks/BlocksDisplayComponent.js +13 -13
- package/lib/layouts/blocks/BlocksLayoutManager.d.ts +2 -1
- package/lib/layouts/blocks/ClipboardPaletteItemComponent.js +3 -3
- package/lib/layouts/blocks/HorizontalBlockComponent.js +3 -3
- package/lib/layouts/blocks/blockUtils.js +4 -5
- package/lib/mWaterLoader.js +1 -1
- package/lib/maps/AddLayerComponent.js +13 -13
- package/lib/maps/AdminScopeAndDetailLevelComponent.js +5 -5
- package/lib/maps/BaseLayerDesignerComponent.js +2 -2
- package/lib/maps/BufferLayer.js +7 -7
- package/lib/maps/BufferLayerDesignerComponent.js +8 -8
- package/lib/maps/ChoroplethLayer.js +6 -6
- package/lib/maps/ChoroplethLayerDesigner.js +16 -16
- package/lib/maps/ClusterLayer.js +3 -3
- package/lib/maps/ClusterLayerDesignerComponent.js +5 -5
- package/lib/maps/DetailLevelSelectComponent.d.ts +11 -1
- package/lib/maps/DetailLevelSelectComponent.js +3 -3
- package/lib/maps/DirectMapDataSource.js +1 -2
- package/lib/maps/EditHoverOver.js +7 -5
- package/lib/maps/EditPopupComponent.js +2 -2
- package/lib/maps/GridLayer.js +5 -5
- package/lib/maps/GridLayerDesigner.js +15 -15
- package/lib/maps/LayerSwitcherComponent.js +1 -2
- package/lib/maps/LeafletMapComponent.d.ts +1 -1
- package/lib/maps/LeafletMapComponent.js +1 -1
- package/lib/maps/LegendComponent.js +1 -1
- package/lib/maps/MWaterServerLayer.d.ts +0 -1
- package/lib/maps/MWaterServerLayer.js +1 -1
- package/lib/maps/MapComponent.js +8 -8
- package/lib/maps/MapControlComponent.js +1 -1
- package/lib/maps/MapDesignerComponent.js +16 -16
- package/lib/maps/MapFiltersDesignerComponent.js +2 -2
- package/lib/maps/MapLayerViewDesignerComponent.js +8 -8
- package/lib/maps/MapUtils.js +6 -7
- package/lib/maps/MapViewComponent.js +1 -2
- package/lib/maps/MarkerSymbolSelectComponent.js +3 -3
- package/lib/maps/MarkersLayer.js +6 -7
- package/lib/maps/MarkersLayerDesignerComponent.js +22 -22
- package/lib/maps/PopupFilterJoinsEditComponent.js +4 -4
- package/lib/maps/PopupFilterJoinsUtils.js +2 -3
- package/lib/maps/RasterMapViewComponent.d.ts +3 -3
- package/lib/maps/RasterMapViewComponent.js +4 -4
- package/lib/maps/RegionSelectComponent.d.ts +1 -3
- package/lib/maps/RegionSelectComponent.js +1 -2
- package/lib/maps/ScopeAndDetailLevelComponent.js +3 -3
- package/lib/maps/TileUrlLayer.d.ts +1 -1
- package/lib/maps/TileUrlLayer.js +3 -3
- package/lib/maps/VectorMapViewComponent.js +6 -7
- package/lib/maps/ZoomLevelsComponent.js +5 -5
- package/lib/maps/mapSymbols.d.ts +1 -1
- package/lib/maps/mapSymbols.js +51 -50
- package/lib/maps/mapboxUtils.js +2 -3
- package/lib/maps/maps.d.ts +0 -1
- package/lib/maps/vectorMaps.js +14 -15
- package/lib/memoizedDebounce.js +1 -2
- package/lib/quickfilter/DateExprComponent.d.ts +4 -0
- package/lib/quickfilter/DateExprComponent.js +17 -16
- package/lib/quickfilter/IdArrayQuickfilterComponent.js +1 -1
- package/lib/quickfilter/QuickfilterUtils.js +1 -2
- package/lib/quickfilter/QuickfiltersComponent.d.ts +23 -2
- package/lib/quickfilter/QuickfiltersComponent.js +2 -2
- package/lib/quickfilter/QuickfiltersDesignComponent.js +8 -8
- package/lib/quickfilter/TextLiteralComponent.d.ts +35 -2
- package/lib/quickfilter/TextLiteralComponent.js +6 -6
- package/lib/richtext/DropdownPaletteItem.js +1 -1
- package/lib/richtext/ExprItemsHtmlConverter.js +8 -10
- package/lib/richtext/FontColorPaletteItem.js +7 -7
- package/lib/richtext/ItemsHtmlConverter.js +0 -1
- package/lib/richtext/RichTextComponent.d.ts +1 -0
- package/lib/richtext/RichTextComponent.js +33 -29
- package/lib/valueFormatter.js +18 -19
- package/lib/wellknown.js +2 -3
- package/lib/widgets/IFrameWidgetComponent.d.ts +9 -1
- package/lib/widgets/IFrameWidgetComponent.js +3 -3
- package/lib/widgets/ImageUploaderComponent.js +5 -5
- package/lib/widgets/ImageWidget.js +2 -2
- package/lib/widgets/ImageWidgetComponent.d.ts +9 -1
- package/lib/widgets/ImageWidgetComponent.js +20 -20
- package/lib/widgets/ImagelistCarouselComponent.js +1 -1
- package/lib/widgets/MapWidget.js +2 -2
- package/lib/widgets/MarkdownWidget.d.ts +1 -1
- package/lib/widgets/MarkdownWidget.js +1 -1
- package/lib/widgets/TOCWidget.js +11 -12
- package/lib/widgets/WidgetScopesViewComponent.js +1 -1
- package/lib/widgets/charts/Chart.js +1 -1
- package/lib/widgets/charts/ChartViewComponent.js +9 -9
- package/lib/widgets/charts/ChartWidgetComponent.js +4 -4
- package/lib/widgets/charts/calendar/CalendarChart.js +4 -4
- package/lib/widgets/charts/calendar/CalendarChartDesignerComponent.js +7 -7
- package/lib/widgets/charts/calendar/CalendarChartViewComponent.js +3 -3
- package/lib/widgets/charts/imagemosaic/ImageMosaicChart.d.ts +18 -5
- package/lib/widgets/charts/imagemosaic/ImageMosaicChart.js +3 -4
- package/lib/widgets/charts/imagemosaic/ImageMosaicChartDesignerComponent.js +5 -5
- package/lib/widgets/charts/imagemosaic/ImageMosaicChartViewComponent.d.ts +5 -19
- package/lib/widgets/charts/imagemosaic/ImageMosaicChartViewComponent.js +66 -70
- package/lib/widgets/charts/imagemosaic/ImagePopupComponent.js +1 -1
- package/lib/widgets/charts/layered/LayeredChart.d.ts +1 -1
- package/lib/widgets/charts/layered/LayeredChart.js +9 -9
- package/lib/widgets/charts/layered/LayeredChartCompiler.d.ts +8 -8
- package/lib/widgets/charts/layered/LayeredChartCompiler.js +15 -15
- package/lib/widgets/charts/layered/LayeredChartDesignerComponent.js +33 -33
- package/lib/widgets/charts/layered/LayeredChartLayerDesignerComponent.js +16 -16
- package/lib/widgets/charts/layered/LayeredChartUtils.js +1 -2
- package/lib/widgets/charts/layered/LayeredChartViewComponent.js +4 -4
- package/lib/widgets/charts/pivot/IntersectionDesignerComponent.js +18 -17
- package/lib/widgets/charts/pivot/PivotChart.d.ts +1 -1
- package/lib/widgets/charts/pivot/PivotChart.js +12 -4
- package/lib/widgets/charts/pivot/PivotChartDesignerComponent.d.ts +5 -5
- package/lib/widgets/charts/pivot/PivotChartDesignerComponent.js +10 -10
- package/lib/widgets/charts/pivot/PivotChartLayoutComponent.js +5 -5
- package/lib/widgets/charts/pivot/PivotChartQueryBuilder.d.ts +1 -1
- package/lib/widgets/charts/pivot/PivotChartQueryBuilder.js +5 -6
- package/lib/widgets/charts/pivot/PivotChartUtils.js +11 -12
- package/lib/widgets/charts/pivot/PivotChartViewComponent.js +9 -9
- package/lib/widgets/charts/pivot/SegmentDesignerComponent.d.ts +30 -30
- package/lib/widgets/charts/pivot/SegmentDesignerComponent.js +28 -26
- package/lib/widgets/charts/table/OrderingsComponent.js +2 -2
- package/lib/widgets/charts/table/TableChart.js +3 -3
- package/lib/widgets/charts/table/TableChartDesignerComponent.js +17 -17
- package/lib/widgets/charts/table/TableChartViewComponent.js +3 -3
- package/lib/widgets/text/ExprInsertModalComponent.d.ts +2 -3
- package/lib/widgets/text/ExprInsertModalComponent.js +2 -14
- package/lib/widgets/text/ExprItemEditorComponent.js +4 -4
- package/lib/widgets/text/ExprUpdateModalComponent.d.ts +2 -3
- package/lib/widgets/text/ExprUpdateModalComponent.js +3 -15
- package/lib/widgets/text/TextComponent.js +3 -3
- package/lib/widgets/text/TextWidget.d.ts +1 -1
- package/lib/widgets/text/TextWidgetComponent.js +11 -11
- package/lib/widgets/text/TextWidgetDesign.d.ts +2 -1
- package/lib/widgets/text/TextWidgetDesign.js +1 -2
- package/package.json +3 -3
- package/src/ColorComponent.tsx +2 -2
- package/src/DateRangeComponent.ts +10 -10
- package/src/LocaleContextInjector.tsx +1 -1
- package/src/MWaterAddRelatedFormComponent.ts +7 -7
- package/src/MWaterAddRelatedIndicatorComponent.ts +5 -5
- package/src/MWaterAssetSystemsListComponent.tsx +3 -3
- package/src/MWaterCompleteTableSelectComponent.tsx +36 -35
- package/src/MWaterCustomTablesetListComponent.tsx +4 -4
- package/src/MWaterGlobalFiltersComponent.ts +4 -4
- package/src/MWaterLoaderComponent.ts +1 -1
- package/src/MWaterMetricsTableListComponent.tsx +3 -3
- package/src/MWaterResponsesFilterComponent.ts +6 -6
- package/src/MWaterTableSelectComponent.tsx +6 -7
- package/src/axes/AxisBuilder.ts +42 -44
- package/src/axes/AxisColorEditorComponent.tsx +178 -0
- package/src/axes/AxisComponent.ts +20 -20
- package/src/axes/BinsComponent.tsx +6 -6
- package/src/axes/CategoryMapComponent.ts +10 -10
- package/src/axes/ColorPaletteCollectionComponent.tsx +3 -3
- package/src/axes/RangesComponent.ts +14 -14
- package/src/dashboards/DashboardComponent.tsx +21 -9
- package/src/dashboards/DashboardViewComponent.tsx +3 -3
- package/src/dashboards/FontStyleEditor.tsx +8 -8
- package/src/dashboards/LayoutOptionsComponent.tsx +74 -74
- package/src/dashboards/SettingsModalComponent.tsx +134 -107
- package/src/dashboards/layoutOptions.tsx +5 -1
- package/src/datagrids/DatagridComponent.ts +65 -62
- package/src/datagrids/DatagridDesignerComponent.tsx +17 -17
- package/src/datagrids/DatagridUtils.ts +2 -2
- package/src/datagrids/DatagridViewComponent.ts +3 -3
- package/src/datagrids/ExprCellComponent.ts +1 -1
- package/src/datagrids/FindReplaceModalComponent.ts +13 -13
- package/src/datagrids/OrderBysDesignerComponent.tsx +2 -2
- package/src/globals.d.ts +7 -1
- package/src/languages.ts +2 -2
- package/src/layouts/blocks/BlocksDisplayComponent.tsx +13 -13
- package/src/layouts/blocks/BlocksLayoutManager.ts +3 -2
- package/src/layouts/blocks/ClipboardPaletteItemComponent.ts +3 -3
- package/src/maps/AddLayerComponent.ts +13 -13
- package/src/maps/AdminScopeAndDetailLevelComponent.ts +5 -5
- package/src/maps/BaseLayerDesignerComponent.ts +8 -8
- package/src/maps/BufferLayer.ts +5 -5
- package/src/maps/BufferLayerDesignerComponent.ts +8 -8
- package/src/maps/ChoroplethLayer.ts +3 -3
- package/src/maps/ChoroplethLayerDesigner.tsx +16 -16
- package/src/maps/ClusterLayer.ts +3 -3
- package/src/maps/ClusterLayerDesignerComponent.ts +5 -5
- package/src/maps/DetailLevelSelectComponent.ts +3 -3
- package/src/maps/EditHoverOver.tsx +5 -5
- package/src/maps/EditPopupComponent.ts +2 -2
- package/src/maps/GridLayer.ts +5 -5
- package/src/maps/GridLayerDesigner.tsx +15 -16
- package/src/maps/MWaterServerLayer.ts +1 -1
- package/src/maps/MapComponent.ts +6 -6
- package/src/maps/MapControlComponent.ts +1 -1
- package/src/maps/MapDesignerComponent.tsx +20 -20
- package/src/maps/MapFiltersDesignerComponent.tsx +3 -3
- package/src/maps/MapLayerViewDesignerComponent.ts +9 -9
- package/src/maps/MarkerSymbolSelectComponent.ts +4 -5
- package/src/maps/MarkersLayerDesignerComponent.ts +22 -22
- package/src/maps/PopupFilterJoinsEditComponent.ts +4 -4
- package/src/maps/RasterMapViewComponent.ts +2 -2
- package/src/maps/RegionSelectComponent.ts +1 -2
- package/src/maps/ScopeAndDetailLevelComponent.ts +3 -3
- package/src/maps/TileUrlLayer.tsx +3 -3
- package/src/maps/VectorMapViewComponent.tsx +5 -5
- package/src/maps/ZoomLevelsComponent.ts +6 -6
- package/src/maps/mapSymbols.ts +49 -49
- package/src/maps/vectorMaps.tsx +2 -2
- package/src/quickfilter/DateExprComponent.ts +19 -18
- package/src/quickfilter/IdArrayQuickfilterComponent.ts +1 -1
- package/src/quickfilter/QuickfiltersComponent.ts +1 -1
- package/src/quickfilter/QuickfiltersDesignComponent.tsx +9 -9
- package/src/quickfilter/TextLiteralComponent.ts +4 -4
- package/src/richtext/DropdownPaletteItem.tsx +1 -1
- package/src/richtext/ExprItemsHtmlConverter.ts +8 -10
- package/src/richtext/ItemsHtmlConverter.ts +0 -1
- package/src/richtext/RichTextComponent.tsx +31 -31
- package/src/valueFormatter.ts +14 -14
- package/src/widgets/IFrameWidgetComponent.ts +3 -3
- package/src/widgets/ImageUploaderComponent.tsx +5 -5
- package/src/widgets/ImageWidget.ts +2 -2
- package/src/widgets/ImageWidgetComponent.ts +26 -26
- package/src/widgets/ImagelistCarouselComponent.ts +2 -2
- package/src/widgets/MapWidget.ts +1 -1
- package/src/widgets/MarkdownWidget.ts +1 -1
- package/src/widgets/TOCWidget.ts +13 -14
- package/src/widgets/WidgetScopesViewComponent.ts +1 -1
- package/src/widgets/charts/Chart.ts +1 -1
- package/src/widgets/charts/ChartViewComponent.ts +4 -4
- package/src/widgets/charts/ChartWidgetComponent.tsx +3 -3
- package/src/widgets/charts/calendar/CalendarChart.ts +4 -4
- package/src/widgets/charts/calendar/CalendarChartDesignerComponent.ts +7 -7
- package/src/widgets/charts/calendar/CalendarChartViewComponent.tsx +2 -2
- package/src/widgets/charts/imagemosaic/ImageMosaicChart.ts +25 -8
- package/src/widgets/charts/imagemosaic/ImageMosaicChartDesignerComponent.ts +5 -5
- package/src/widgets/charts/imagemosaic/ImageMosaicChartViewComponent.tsx +128 -0
- package/src/widgets/charts/layered/LayeredChart.ts +9 -9
- package/src/widgets/charts/layered/LayeredChartCompiler.ts +45 -45
- package/src/widgets/charts/layered/LayeredChartDesignerComponent.tsx +39 -39
- package/src/widgets/charts/layered/LayeredChartLayerDesignerComponent.tsx +18 -19
- package/src/widgets/charts/layered/LayeredChartViewComponent.ts +1 -1
- package/src/widgets/charts/pivot/IntersectionDesignerComponent.tsx +22 -23
- package/src/widgets/charts/pivot/PivotChart.ts +15 -5
- package/src/widgets/charts/pivot/PivotChartDesignerComponent.tsx +12 -12
- package/src/widgets/charts/pivot/PivotChartLayoutComponent.tsx +5 -5
- package/src/widgets/charts/pivot/PivotChartQueryBuilder.ts +7 -8
- package/src/widgets/charts/pivot/PivotChartViewComponent.tsx +6 -6
- package/src/widgets/charts/pivot/SegmentDesignerComponent.tsx +30 -30
- package/src/widgets/charts/table/OrderingsComponent.tsx +2 -2
- package/src/widgets/charts/table/TableChart.ts +3 -3
- package/src/widgets/charts/table/TableChartDesignerComponent.ts +16 -16
- package/src/widgets/charts/table/TableChartViewComponent.ts +2 -2
- package/src/widgets/text/{ExprInsertModalComponent.ts → ExprInsertModalComponent.tsx} +18 -20
- package/src/widgets/text/ExprItemEditorComponent.tsx +4 -4
- package/src/widgets/text/{ExprUpdateModalComponent.ts → ExprUpdateModalComponent.tsx} +18 -20
- package/src/widgets/text/TextComponent.tsx +2 -2
- package/src/widgets/text/TextWidgetComponent.tsx +10 -10
- package/src/widgets/text/TextWidgetDesign.ts +3 -1
- package/src/axes/AxisColorEditorComponent.ts +0 -210
- package/src/widgets/charts/imagemosaic/ImageMosaicChartViewComponent.ts +0 -117
|
@@ -1,11 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
26
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
27
|
};
|
|
5
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.LayoutOptionsComponent =
|
|
29
|
+
exports.LayoutOptionsComponent = LayoutOptionsComponent;
|
|
7
30
|
const lodash_1 = __importDefault(require("lodash"));
|
|
8
|
-
const react_1 =
|
|
31
|
+
const react_1 = __importStar(require("react"));
|
|
9
32
|
const react_2 = require("react");
|
|
10
33
|
const bootstrap_1 = require("@mwater/react-library/lib/bootstrap");
|
|
11
34
|
const layoutOptions_1 = require("./layoutOptions");
|
|
@@ -13,12 +36,6 @@ const ColorComponent_1 = __importDefault(require("../ColorComponent"));
|
|
|
13
36
|
const FontStyleEditor_1 = require("./FontStyleEditor");
|
|
14
37
|
const immer_1 = __importDefault(require("immer"));
|
|
15
38
|
const file_saver_1 = __importDefault(require("file-saver"));
|
|
16
|
-
const sizeOptions = [
|
|
17
|
-
{ value: { width: 360, height: 640 }, label: "Phone (360x640)" },
|
|
18
|
-
{ value: { width: 768, height: 1024 }, label: "Tablet (768x1024)" },
|
|
19
|
-
{ value: { width: 1000, height: 800 }, label: "Laptop (1000x800)" },
|
|
20
|
-
{ value: { width: 1280, height: 1024 }, label: "Desktop (1280x1024)" }
|
|
21
|
-
];
|
|
22
39
|
function LayoutOptionsComponent(props) {
|
|
23
40
|
const [previewSize, setPreviewSize] = (0, react_2.useState)(2);
|
|
24
41
|
const layoutOptions = (0, layoutOptions_1.getLayoutOptions)(props.design);
|
|
@@ -26,21 +43,29 @@ function LayoutOptionsComponent(props) {
|
|
|
26
43
|
props.onDesignChange({ ...props.design, layoutOptions });
|
|
27
44
|
}
|
|
28
45
|
const isCustomized = !lodash_1.default.isEqual(layoutOptions, (0, layoutOptions_1.getDefaultLayoutOptions)(props.design.style));
|
|
46
|
+
const sizeOptions = (0, react_1.useMemo)(() => [
|
|
47
|
+
{ value: { width: 360, height: 640 }, label: T `Phone (360x640)` },
|
|
48
|
+
{ value: { width: 768, height: 1024 }, label: T `Tablet (768x1024)` },
|
|
49
|
+
{ value: { width: 1000, height: 800 }, label: T `Laptop (1000x800)` },
|
|
50
|
+
{ value: { width: 1280, height: 1024 }, label: T `Desktop (1280x1024)` }
|
|
51
|
+
], []);
|
|
29
52
|
return (react_1.default.createElement("div", { style: { display: "grid", gridTemplateRows: "auto 1fr", gridTemplateColumns: "360px 1fr", height: "100%" } },
|
|
30
53
|
react_1.default.createElement("div", { style: { padding: "5px 10px 5px 0px", gridRow: "1 / 3", overflowY: "auto" } },
|
|
31
|
-
react_1.default.createElement("h5", null,
|
|
54
|
+
react_1.default.createElement("h5", null, T `Theme`),
|
|
32
55
|
react_1.default.createElement(ThemeToggle, { theme: props.design.style, onChange: (theme) => {
|
|
33
56
|
if (isCustomized) {
|
|
34
|
-
if (!confirm(
|
|
57
|
+
if (!confirm(T `Are you sure you want to change the theme? Your customizations will be lost.`))
|
|
35
58
|
return;
|
|
36
59
|
}
|
|
37
60
|
props.onDesignChange({ ...props.design, style: theme, layoutOptions: (0, layoutOptions_1.getDefaultLayoutOptions)(theme) });
|
|
38
61
|
}, isCustomized: isCustomized }),
|
|
39
62
|
react_1.default.createElement("br", null),
|
|
40
|
-
react_1.default.createElement(bootstrap_1.CollapsibleSection, { label: react_1.default.createElement("h5", { style: { display: "inline-block" } },
|
|
63
|
+
react_1.default.createElement(bootstrap_1.CollapsibleSection, { label: react_1.default.createElement("h5", { style: { display: "inline-block" } }, T `Customize Layout`), initiallyOpen: isCustomized },
|
|
41
64
|
react_1.default.createElement(CustomizeLayout, { layoutOptions: layoutOptions, onLayoutOptionsChange: setLayoutOptions }))),
|
|
42
65
|
react_1.default.createElement("div", { style: { textAlign: "center", padding: 3 } },
|
|
43
|
-
react_1.default.createElement("span", { className: "text-muted" },
|
|
66
|
+
react_1.default.createElement("span", { className: "text-muted" },
|
|
67
|
+
T `Preview As:`,
|
|
68
|
+
"\u00A0"),
|
|
44
69
|
react_1.default.createElement(bootstrap_1.Toggle, { value: previewSize, onChange: setPreviewSize, size: "xs", options: sizeOptions.map((so, index) => ({ value: index, label: so.label })) })),
|
|
45
70
|
react_1.default.createElement("div", { style: { overflow: "auto" } },
|
|
46
71
|
react_1.default.createElement("div", { style: {
|
|
@@ -61,29 +86,28 @@ function LayoutOptionsComponent(props) {
|
|
|
61
86
|
react_1.default.createElement("div", { style: { backgroundColor: "#888" } }),
|
|
62
87
|
react_1.default.createElement("div", { style: { backgroundColor: "#888", gridColumn: "1 / 4" } })))));
|
|
63
88
|
}
|
|
64
|
-
exports.LayoutOptionsComponent = LayoutOptionsComponent;
|
|
65
89
|
function ThemeToggle(props) {
|
|
66
90
|
function renderStyleItem(theme) {
|
|
67
91
|
const isActive = props.isCustomized ? theme == "custom" : (props.theme || "default") == theme;
|
|
68
92
|
if (theme == "default") {
|
|
69
93
|
return (react_1.default.createElement("a", { key: theme, className: isActive ? "list-group-item active" : "list-group-item", onClick: props.onChange.bind(null, "default") },
|
|
70
|
-
react_1.default.createElement("div", null,
|
|
71
|
-
react_1.default.createElement("div", { style: { opacity: 0.6 } },
|
|
94
|
+
react_1.default.createElement("div", null, T `Classic Dashboard`),
|
|
95
|
+
react_1.default.createElement("div", { style: { opacity: 0.6 } }, T `Ideal for data display with minimal text`)));
|
|
72
96
|
}
|
|
73
97
|
if (theme == "greybg") {
|
|
74
98
|
return (react_1.default.createElement("a", { key: theme, className: isActive ? "list-group-item active" : "list-group-item", onClick: props.onChange.bind(null, "greybg") },
|
|
75
|
-
react_1.default.createElement("div", null,
|
|
76
|
-
react_1.default.createElement("div", { style: { opacity: 0.6 } },
|
|
99
|
+
react_1.default.createElement("div", null, T `Framed Dashboard`),
|
|
100
|
+
react_1.default.createElement("div", { style: { opacity: 0.6 } }, T `Each widget is white on a grey background`)));
|
|
77
101
|
}
|
|
78
102
|
if (theme == "story") {
|
|
79
103
|
return (react_1.default.createElement("a", { key: theme, className: isActive ? "list-group-item active" : "list-group-item", onClick: props.onChange.bind(null, "story") },
|
|
80
|
-
react_1.default.createElement("div", null,
|
|
81
|
-
react_1.default.createElement("div", { style: { opacity: 0.6 } },
|
|
104
|
+
react_1.default.createElement("div", null, T `Story`),
|
|
105
|
+
react_1.default.createElement("div", { style: { opacity: 0.6 } }, T `Ideal for data-driven storytelling with lots of text`)));
|
|
82
106
|
}
|
|
83
107
|
if (theme == "custom") {
|
|
84
108
|
return (react_1.default.createElement("a", { key: theme, className: isActive ? "list-group-item active" : "list-group-item" },
|
|
85
|
-
react_1.default.createElement("div", null,
|
|
86
|
-
react_1.default.createElement("div", { style: { opacity: 0.6 } },
|
|
109
|
+
react_1.default.createElement("div", null, T `Custom`),
|
|
110
|
+
react_1.default.createElement("div", { style: { opacity: 0.6 } }, T `Customized theme`)));
|
|
87
111
|
}
|
|
88
112
|
return null;
|
|
89
113
|
}
|
|
@@ -109,149 +133,152 @@ function CustomizeLayout(props) {
|
|
|
109
133
|
onLayoutOptionsChange(uploadedTheme);
|
|
110
134
|
}
|
|
111
135
|
catch (error) {
|
|
112
|
-
alert(
|
|
136
|
+
alert(T `Invalid theme file`);
|
|
113
137
|
}
|
|
114
138
|
};
|
|
115
139
|
reader.readAsText(file);
|
|
116
140
|
}
|
|
117
141
|
};
|
|
118
142
|
return (react_1.default.createElement("div", null,
|
|
119
|
-
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title:
|
|
120
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
143
|
+
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title: T `Text` },
|
|
144
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Title` },
|
|
121
145
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.titleWidgetFont, onChange: (titleWidgetFont) => {
|
|
122
146
|
onLayoutOptionsChange({ ...layoutOptions, titleWidgetFont });
|
|
123
147
|
} })),
|
|
124
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
148
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Heading H1` },
|
|
125
149
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.textWidgetH1Font, onChange: (textWidgetH1Font) => {
|
|
126
150
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetH1Font });
|
|
127
151
|
} }),
|
|
128
152
|
react_1.default.createElement("div", { className: "mt-1" },
|
|
129
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
153
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Top Margin:`, horizontal: true, labelMuted: true },
|
|
130
154
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.textWidgetH1MarginTop, onChange: (textWidgetH1MarginTop) => {
|
|
131
155
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetH1MarginTop: textWidgetH1MarginTop });
|
|
132
156
|
} })))),
|
|
133
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
157
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Heading H2` },
|
|
134
158
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.textWidgetH2Font, onChange: (textWidgetH2Font) => {
|
|
135
159
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetH2Font });
|
|
136
160
|
} }),
|
|
137
161
|
react_1.default.createElement("div", { className: "mt-1" },
|
|
138
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
162
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Top Margin:`, horizontal: true, labelMuted: true },
|
|
139
163
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.textWidgetH2MarginTop, onChange: (textWidgetH2MarginTop) => {
|
|
140
164
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetH2MarginTop: textWidgetH2MarginTop });
|
|
141
165
|
} })))),
|
|
142
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
166
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Text` },
|
|
143
167
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.textWidgetFont, onChange: (textWidgetFont) => {
|
|
144
168
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetFont });
|
|
145
169
|
} }),
|
|
146
170
|
react_1.default.createElement("div", { className: "mt-1" },
|
|
147
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
171
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Line Height:`, horizontal: true, labelMuted: true },
|
|
148
172
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.textWidgetLineHeight, onChange: (textWidgetLineHeight) => {
|
|
149
173
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetLineHeight: textWidgetLineHeight });
|
|
150
|
-
}, allowDefault: true, defaultLabel:
|
|
151
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
174
|
+
}, allowDefault: true, defaultLabel: T `Default` })),
|
|
175
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Paragraph Spacing:`, horizontal: true, labelMuted: true },
|
|
152
176
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.textWidgetParagraphSpacing, onChange: (textWidgetParagraphSpacing) => {
|
|
153
177
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetParagraphSpacing: textWidgetParagraphSpacing });
|
|
154
178
|
} })))),
|
|
155
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
179
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `List Line Height:`, horizontal: true },
|
|
156
180
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.textWidgetListLineHeight, onChange: (textWidgetListLineHeight) => {
|
|
157
181
|
onLayoutOptionsChange({ ...layoutOptions, textWidgetListLineHeight: textWidgetListLineHeight });
|
|
158
|
-
}, allowDefault: true, defaultLabel:
|
|
159
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
182
|
+
}, allowDefault: true, defaultLabel: T `Default` })),
|
|
183
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Chart Header Font` },
|
|
160
184
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.widgetHeaderFont, onChange: (widgetHeaderFont) => {
|
|
161
185
|
onLayoutOptionsChange({ ...layoutOptions, widgetHeaderFont });
|
|
162
186
|
} })),
|
|
163
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
187
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Chart Footer Font` },
|
|
164
188
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.widgetFooterFont, onChange: (widgetFooterFont) => {
|
|
165
189
|
onLayoutOptionsChange({ ...layoutOptions, widgetFooterFont });
|
|
166
190
|
} })),
|
|
167
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
191
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Chart Font` },
|
|
168
192
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.chartFont, onChange: (chartFont) => {
|
|
169
193
|
onLayoutOptionsChange({ ...layoutOptions, chartFont });
|
|
170
194
|
} })),
|
|
171
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
195
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Table Font` },
|
|
172
196
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.tableFont, onChange: (tableFont) => {
|
|
173
197
|
onLayoutOptionsChange({ ...layoutOptions, tableFont });
|
|
174
198
|
} })),
|
|
175
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
199
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Pivot Table Font` },
|
|
176
200
|
react_1.default.createElement(FontStyleEditor_1.FontStyleEditor, { value: layoutOptions.pivotTableFont, onChange: (pivotTableFont) => {
|
|
177
201
|
onLayoutOptionsChange({ ...layoutOptions, pivotTableFont });
|
|
178
202
|
} }))),
|
|
179
|
-
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title:
|
|
180
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
203
|
+
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title: T `Spacing` },
|
|
204
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Outer Padding:`, horizontal: true },
|
|
181
205
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.outerPadding, onChange: (outerPadding) => {
|
|
182
206
|
onLayoutOptionsChange({ ...layoutOptions, outerPadding: outerPadding });
|
|
183
207
|
} })),
|
|
184
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
208
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Block Margins` },
|
|
185
209
|
react_1.default.createElement(SpacingInput, { value: layoutOptions.blockMargin, onChange: (blockMargin) => {
|
|
186
210
|
onLayoutOptionsChange({ ...layoutOptions, blockMargin });
|
|
187
211
|
} })),
|
|
188
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
212
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Block Padding` },
|
|
189
213
|
react_1.default.createElement(SpacingInput, { value: layoutOptions.blockPadding, onChange: (blockPadding) => {
|
|
190
214
|
onLayoutOptionsChange({ ...layoutOptions, blockPadding });
|
|
191
215
|
} })),
|
|
192
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
216
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Block Border Radius:`, horizontal: true },
|
|
193
217
|
react_1.default.createElement(PixelsInput, { value: layoutOptions.blockBorderRadius, onChange: (blockBorderRadius) => {
|
|
194
218
|
onLayoutOptionsChange({ ...layoutOptions, blockBorderRadius: blockBorderRadius });
|
|
195
219
|
} }))),
|
|
196
|
-
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title:
|
|
197
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
220
|
+
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title: T `Colors` },
|
|
221
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Background Color:`, horizontal: true },
|
|
198
222
|
react_1.default.createElement(ColorComponent_1.default, { color: layoutOptions.backgroundColor, onChange: (backgroundColor) => {
|
|
199
223
|
onLayoutOptionsChange({ ...layoutOptions, backgroundColor: backgroundColor ?? "white" });
|
|
200
224
|
} })),
|
|
201
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
225
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Block Background Color:`, horizontal: true },
|
|
202
226
|
react_1.default.createElement(ColorComponent_1.default, { color: layoutOptions.blockBackgroundColor, onChange: (blockBackgroundColor) => {
|
|
203
227
|
onLayoutOptionsChange({ ...layoutOptions, blockBackgroundColor: blockBackgroundColor ?? "white" });
|
|
204
228
|
} })),
|
|
205
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
229
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Custom Colors` },
|
|
206
230
|
react_1.default.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(6, 1fr)', gap: '5px' } }, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17].map((colorIndex) => (react_1.default.createElement(ColorComponent_1.default, { key: colorIndex, color: layoutOptions.customColors[colorIndex], onChange: (color) => {
|
|
207
231
|
onLayoutOptionsChange((0, immer_1.default)(layoutOptions, (draft) => {
|
|
208
232
|
draft.customColors[colorIndex] = color;
|
|
209
233
|
}));
|
|
210
234
|
} })))))),
|
|
211
|
-
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title:
|
|
212
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
235
|
+
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title: T `Responsive Layout` },
|
|
236
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Collapse to Single Column` },
|
|
213
237
|
react_1.default.createElement(WidthSelector, { value: layoutOptions.collapseColumnsWidth, onChange: (collapseColumnsWidth) => {
|
|
214
238
|
onLayoutOptionsChange({ ...layoutOptions, collapseColumnsWidth });
|
|
215
239
|
}, sign: "< " })),
|
|
216
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
240
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Hide Quickfilters` },
|
|
217
241
|
react_1.default.createElement(WidthSelector, { value: layoutOptions.hideQuickfiltersWidth, onChange: (hideQuickfiltersWidth) => {
|
|
218
242
|
onLayoutOptionsChange({ ...layoutOptions, hideQuickfiltersWidth });
|
|
219
243
|
}, sign: "< " })),
|
|
220
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
244
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Minimum Width (before scrolling or scaling)` },
|
|
221
245
|
react_1.default.createElement(WidthSelector, { value: layoutOptions.minimumWidth, onChange: (minimumWidth) => {
|
|
222
246
|
onLayoutOptionsChange({ ...layoutOptions, minimumWidth });
|
|
223
247
|
}, sign: "< " }),
|
|
224
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
248
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `When Below Minimum Width` },
|
|
225
249
|
react_1.default.createElement(bootstrap_1.Toggle, { value: layoutOptions.belowMinimumWidth, onChange: (belowMinimumWidth) => {
|
|
226
250
|
onLayoutOptionsChange({ ...layoutOptions, belowMinimumWidth: belowMinimumWidth });
|
|
227
251
|
}, size: "sm", options: [
|
|
228
|
-
{ value: "scroll", label:
|
|
229
|
-
{ value: "scale", label:
|
|
252
|
+
{ value: "scroll", label: T `Scroll` },
|
|
253
|
+
{ value: "scale", label: T `Scale` }
|
|
230
254
|
] }))),
|
|
231
|
-
react_1.default.createElement(bootstrap_1.FormGroup, { label:
|
|
255
|
+
react_1.default.createElement(bootstrap_1.FormGroup, { label: T `Maximum Width (before padding)` },
|
|
232
256
|
react_1.default.createElement(WidthSelector, { value: layoutOptions.maximumWidth, onChange: (maximumWidth) => {
|
|
233
257
|
onLayoutOptionsChange({ ...layoutOptions, maximumWidth });
|
|
234
258
|
}, sign: "> " })),
|
|
235
259
|
react_1.default.createElement(bootstrap_1.Checkbox, { value: layoutOptions.collapseSpacers, onChange: (collapseSpacers) => {
|
|
236
260
|
onLayoutOptionsChange({ ...layoutOptions, collapseSpacers });
|
|
237
|
-
} },
|
|
238
|
-
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title:
|
|
239
|
-
react_1.default.createElement("div", { className: "mb-2 text-muted" },
|
|
261
|
+
} }, T `Collapse Spacers on Mobile`)),
|
|
262
|
+
react_1.default.createElement(bootstrap_1.CollapsiblePanel, { title: T `Download/Upload Theme`, initiallyClosed: true },
|
|
263
|
+
react_1.default.createElement("div", { className: "mb-2 text-muted" }, T `Download or upload a custom theme to use for this dashboard.
|
|
264
|
+
This saves the current theme as a theme file that you can then use on other dashboards by uploading it there.`),
|
|
240
265
|
react_1.default.createElement("div", { style: { display: "flex", flexDirection: "column", marginTop: "10px", gap: "10px" } },
|
|
241
266
|
react_1.default.createElement("button", { className: "btn btn-sm btn-secondary", onClick: handleDownloadTheme },
|
|
242
267
|
react_1.default.createElement("i", { className: "fas fa-download" }),
|
|
243
|
-
"
|
|
268
|
+
" ",
|
|
269
|
+
T `Download Custom Theme`),
|
|
244
270
|
react_1.default.createElement("label", { className: "btn btn-sm btn-secondary" },
|
|
245
271
|
react_1.default.createElement("i", { className: "fas fa-upload" }),
|
|
246
|
-
"
|
|
272
|
+
" ",
|
|
273
|
+
T `Upload Custom Theme`,
|
|
247
274
|
react_1.default.createElement("input", { type: "file", accept: ".theme", style: { display: "none" }, onChange: handleUploadTheme }))))));
|
|
248
275
|
}
|
|
249
276
|
function SpacingInput(props) {
|
|
250
277
|
return (react_1.default.createElement("div", { style: { display: 'grid', gridTemplateColumns: 'repeat(4, 1fr)', width: '100%' } },
|
|
251
|
-
react_1.default.createElement("div", null,
|
|
252
|
-
react_1.default.createElement("div", null,
|
|
253
|
-
react_1.default.createElement("div", null,
|
|
254
|
-
react_1.default.createElement("div", null,
|
|
278
|
+
react_1.default.createElement("div", null, T `Top`),
|
|
279
|
+
react_1.default.createElement("div", null, T `Bottom`),
|
|
280
|
+
react_1.default.createElement("div", null, T `Left`),
|
|
281
|
+
react_1.default.createElement("div", null, T `Right`),
|
|
255
282
|
react_1.default.createElement(PixelsInput, { value: props.value.top, onChange: (top) => props.onChange({ ...props.value, top: top }) }),
|
|
256
283
|
react_1.default.createElement(PixelsInput, { value: props.value.bottom, onChange: (bottom) => props.onChange({ ...props.value, bottom: bottom }) }),
|
|
257
284
|
react_1.default.createElement(PixelsInput, { value: props.value.left, onChange: (left) => props.onChange({ ...props.value, left: left }) }),
|
|
@@ -262,13 +289,13 @@ function PixelsInput(props) {
|
|
|
262
289
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 35, 40
|
|
263
290
|
];
|
|
264
291
|
return (react_1.default.createElement("div", { className: "dropdown" },
|
|
265
|
-
react_1.default.createElement("a", { className: "dropdown-toggle", type: "button", id: "pixelsInputDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false" }, props.value === null ? (props.defaultLabel ||
|
|
292
|
+
react_1.default.createElement("a", { className: "dropdown-toggle", type: "button", id: "pixelsInputDropdown", "data-bs-toggle": "dropdown", "aria-expanded": "false" }, props.value === null ? (props.defaultLabel || T `Default`) : `${props.value}px`),
|
|
266
293
|
react_1.default.createElement("ul", { className: "dropdown-menu", "aria-labelledby": "pixelsInputDropdown" },
|
|
267
294
|
props.allowDefault && (react_1.default.createElement("li", { key: "default" },
|
|
268
295
|
react_1.default.createElement("a", { className: "dropdown-item", href: "#", onClick: (e) => {
|
|
269
296
|
e.preventDefault();
|
|
270
297
|
props.onChange(null);
|
|
271
|
-
} }, props.defaultLabel ||
|
|
298
|
+
} }, props.defaultLabel || T `Default`))),
|
|
272
299
|
options.map(option => (react_1.default.createElement("li", { key: option },
|
|
273
300
|
react_1.default.createElement("a", { className: "dropdown-item", href: "#", onClick: (e) => {
|
|
274
301
|
e.preventDefault();
|
|
@@ -278,12 +305,12 @@ function PixelsInput(props) {
|
|
|
278
305
|
"px")))))));
|
|
279
306
|
}
|
|
280
307
|
function WidthSelector(props) {
|
|
281
|
-
return (react_1.default.createElement(bootstrap_1.Select, { value: props.value, onChange: props.onChange, nullLabel:
|
|
282
|
-
{ value: 400, label: `${props.sign}400px (Phone)` },
|
|
283
|
-
{ value: 600, label: `${props.sign}600px (Small tablet)` },
|
|
284
|
-
{ value: 800, label: `${props.sign}800px (Tablet)` },
|
|
285
|
-
{ value: 1000, label: `${props.sign}1000px (Laptop)` },
|
|
286
|
-
{ value: 1200, label: `${props.sign}1200px (Desktop)` },
|
|
287
|
-
{ value: 1600, label: `${props.sign}1600px (Wide Desktop)` }
|
|
308
|
+
return (react_1.default.createElement(bootstrap_1.Select, { value: props.value, onChange: props.onChange, nullLabel: T `N/A`, options: [
|
|
309
|
+
{ value: 400, label: `${props.sign}400px (${T `Phone`})` },
|
|
310
|
+
{ value: 600, label: `${props.sign}600px (${T `Small tablet`})` },
|
|
311
|
+
{ value: 800, label: `${props.sign}800px (${T `Tablet`})` },
|
|
312
|
+
{ value: 1000, label: `${props.sign}1000px (${T `Laptop`})` },
|
|
313
|
+
{ value: 1200, label: `${props.sign}1200px (${T `Desktop`})` },
|
|
314
|
+
{ value: 1600, label: `${props.sign}1600px (${T `Wide Desktop`})` }
|
|
288
315
|
] }));
|
|
289
316
|
}
|
|
@@ -9,14 +9,13 @@ export interface SettingsModalComponentProps {
|
|
|
9
9
|
interface SettingsModalComponentState {
|
|
10
10
|
design: DashboardDesign | null;
|
|
11
11
|
}
|
|
12
|
+
/** Popup with settings for dashboard */
|
|
12
13
|
export default class SettingsModalComponent extends React.Component<SettingsModalComponentProps, SettingsModalComponentState> {
|
|
13
14
|
constructor(props: SettingsModalComponentProps);
|
|
14
|
-
show(design:
|
|
15
|
+
show(design: DashboardDesign): void;
|
|
15
16
|
handleSave: () => void;
|
|
16
17
|
handleCancel: () => void;
|
|
17
|
-
handleDesignChange: (design:
|
|
18
|
-
handleFiltersChange: (filters: any) => void;
|
|
19
|
-
handleGlobalFiltersChange: (globalFilters: any) => void;
|
|
18
|
+
handleDesignChange: (design: DashboardDesign) => void;
|
|
20
19
|
render(): React.JSX.Element | null;
|
|
21
20
|
}
|
|
22
21
|
export {};
|
|
@@ -27,9 +27,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
27
27
|
};
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
const lodash_1 = __importDefault(require("lodash"));
|
|
30
|
-
const react_1 =
|
|
31
|
-
const R = react_1.default.createElement;
|
|
32
|
-
const update_object_1 = __importDefault(require("update-object"));
|
|
30
|
+
const react_1 = __importStar(require("react"));
|
|
33
31
|
const languages_1 = require("../languages");
|
|
34
32
|
const ui = __importStar(require("@mwater/react-library/lib/bootstrap"));
|
|
35
33
|
const react_select_1 = __importDefault(require("react-select"));
|
|
@@ -38,7 +36,8 @@ const ActionCancelModalComponent_1 = __importDefault(require("@mwater/react-libr
|
|
|
38
36
|
const QuickfiltersDesignComponent_1 = __importDefault(require("../quickfilter/QuickfiltersDesignComponent"));
|
|
39
37
|
const FiltersDesignerComponent_1 = __importDefault(require("../FiltersDesignerComponent"));
|
|
40
38
|
const MWaterContextComponent_1 = require("../MWaterContextComponent");
|
|
41
|
-
|
|
39
|
+
const immer_1 = __importDefault(require("immer"));
|
|
40
|
+
/** Popup with settings for dashboard */
|
|
42
41
|
class SettingsModalComponent extends react_1.default.Component {
|
|
43
42
|
constructor(props) {
|
|
44
43
|
super(props);
|
|
@@ -59,50 +58,65 @@ class SettingsModalComponent extends react_1.default.Component {
|
|
|
59
58
|
handleDesignChange = (design) => {
|
|
60
59
|
return this.setState({ design });
|
|
61
60
|
};
|
|
62
|
-
handleFiltersChange = (filters) => {
|
|
63
|
-
const design = lodash_1.default.extend({}, this.state.design, { filters });
|
|
64
|
-
return this.handleDesignChange(design);
|
|
65
|
-
};
|
|
66
|
-
handleGlobalFiltersChange = (globalFilters) => {
|
|
67
|
-
const design = lodash_1.default.extend({}, this.state.design, { globalFilters });
|
|
68
|
-
return this.handleDesignChange(design);
|
|
69
|
-
};
|
|
70
61
|
render() {
|
|
71
62
|
// Don't show if not editing
|
|
72
63
|
if (!this.state.design) {
|
|
73
64
|
return null;
|
|
74
65
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
return (react_1.default.createElement(ActionCancelModalComponent_1.default, { size: "large", onCancel: this.handleCancel, onAction: this.handleSave },
|
|
67
|
+
react_1.default.createElement(SettingsComponent, { design: this.state.design, onDesignChange: this.handleDesignChange, schema: this.props.schema, dataSource: this.props.dataSource })));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.default = SettingsModalComponent;
|
|
71
|
+
/** Settings component for dashboard that is used in the settings modal */
|
|
72
|
+
function SettingsComponent(props) {
|
|
73
|
+
const { design, onDesignChange, schema, dataSource } = props;
|
|
74
|
+
// Get filterable tables
|
|
75
|
+
const filterableTables = DashboardUtils.getFilterableTables(design, schema);
|
|
76
|
+
const localeOptions = (0, react_1.useMemo)(() => {
|
|
77
|
+
return lodash_1.default.map(languages_1.languages, (language) => {
|
|
78
78
|
return {
|
|
79
79
|
value: language.code,
|
|
80
80
|
label: language.en + " (" + language.name + ")"
|
|
81
81
|
};
|
|
82
82
|
});
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
83
|
+
}, [languages_1.languages]);
|
|
84
|
+
return (react_1.default.createElement("div", { style: { paddingBottom: 200 } },
|
|
85
|
+
react_1.default.createElement("h4", null, T `Quick Filters`),
|
|
86
|
+
react_1.default.createElement("div", { className: "text-muted" }, T `Quick filters are shown to the user as a dropdown at the top of the dashboard and can be used to filter data of widgets.`),
|
|
87
|
+
filterableTables.length > 0 ? (react_1.default.createElement(QuickfiltersDesignComponent_1.default, { design: design.quickfilters || [], onDesignChange: (quickfilters) => {
|
|
88
|
+
onDesignChange((0, immer_1.default)(design, draft => {
|
|
89
|
+
draft.quickfilters = quickfilters;
|
|
90
|
+
}));
|
|
91
|
+
}, schema: schema, dataSource: dataSource, tables: filterableTables })) : (T `Nothing to quickfilter. Add widgets to the dashboard`),
|
|
92
|
+
react_1.default.createElement("h4", { style: { paddingTop: 10 } }, T `Filters`),
|
|
93
|
+
react_1.default.createElement("div", { className: "text-muted" }, T `Filters are built in to the dashboard and cannot be changed by viewers of the dashboard.`),
|
|
94
|
+
filterableTables.length > 0 ? (react_1.default.createElement(FiltersDesignerComponent_1.default, { schema: schema, dataSource: dataSource, filters: design.filters, onFiltersChange: (filters) => {
|
|
95
|
+
onDesignChange((0, immer_1.default)(design, draft => {
|
|
96
|
+
draft.filters = filters;
|
|
97
|
+
}));
|
|
98
|
+
}, filterableTables: filterableTables })) : (T `Nothing to filter. Add widgets to the dashboard`),
|
|
99
|
+
react_1.default.createElement(MWaterContextComponent_1.GlobalFiltersElementFactoryContext.Consumer, null, globalFiltersElementFactory => globalFiltersElementFactory ? (react_1.default.createElement("div", null,
|
|
100
|
+
react_1.default.createElement("h4", { style: { paddingTop: 10 } }, T `Global Filters`),
|
|
101
|
+
globalFiltersElementFactory({
|
|
102
|
+
schema,
|
|
103
|
+
dataSource,
|
|
104
|
+
filterableTables,
|
|
105
|
+
globalFilters: design.globalFilters || [],
|
|
106
|
+
onChange: (globalFilters) => {
|
|
107
|
+
onDesignChange((0, immer_1.default)(design, draft => {
|
|
108
|
+
draft.globalFilters = globalFilters;
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
}))) : undefined),
|
|
112
|
+
react_1.default.createElement("h4", { style: { paddingTop: 10 } }, T `Language`),
|
|
113
|
+
react_1.default.createElement("div", { className: "text-muted" }, T `Controls the preferred language of widgets and uses specified language when available`),
|
|
114
|
+
react_1.default.createElement(react_select_1.default, { value: lodash_1.default.findWhere(localeOptions, { value: design.locale || "en" }) || null, options: localeOptions, onChange: (locale) => onDesignChange((0, immer_1.default)(design, draft => {
|
|
115
|
+
draft.locale = locale.value;
|
|
116
|
+
})) }),
|
|
117
|
+
design.implicitFiltersEnabled && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
118
|
+
react_1.default.createElement("h4", { style: { paddingTop: 10 } }, T `Advanced`),
|
|
119
|
+
react_1.default.createElement(ui.Checkbox, { value: design.implicitFiltersEnabled != null ? design.implicitFiltersEnabled : true, onChange: (value) => onDesignChange((0, immer_1.default)(design, draft => {
|
|
120
|
+
draft.implicitFiltersEnabled = value;
|
|
121
|
+
})) }, T `Enable Implicit Filtering (leave unchecked for new dashboards)`)))));
|
|
107
122
|
}
|
|
108
|
-
exports.default = SettingsModalComponent;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.WidgetComponent =
|
|
6
|
+
exports.WidgetComponent = WidgetComponent;
|
|
7
7
|
const react_1 = require("react");
|
|
8
8
|
const WidgetFactory_1 = __importDefault(require("../widgets/WidgetFactory"));
|
|
9
9
|
/**
|
|
@@ -40,7 +40,6 @@ function WidgetComponent(props) {
|
|
|
40
40
|
refreshKey: props.refreshKey
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
|
-
exports.WidgetComponent = WidgetComponent;
|
|
44
43
|
/** Always returns the same function to prevent unnecessary re-rendering. Forwards to the real function */
|
|
45
44
|
function useStabilizeFunction(func) {
|
|
46
45
|
// Create ref for changing func
|
|
@@ -3,7 +3,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.BlocksLayoutOptionsContext = void 0;
|
|
7
|
+
exports.getDefaultLayoutOptions = getDefaultLayoutOptions;
|
|
8
|
+
exports.getLayoutOptions = getLayoutOptions;
|
|
9
|
+
exports.DashboardStyleWrapper = DashboardStyleWrapper;
|
|
10
|
+
exports.expandFontFamily = expandFontFamily;
|
|
11
|
+
exports.createDashboardStyles = createDashboardStyles;
|
|
7
12
|
const react_1 = require("react");
|
|
8
13
|
const react_2 = __importDefault(require("react"));
|
|
9
14
|
const CustomColorsContext_1 = require("../CustomColorsContext");
|
|
@@ -22,7 +27,6 @@ function getDefaultLayoutOptions(theme) {
|
|
|
22
27
|
}
|
|
23
28
|
throw new Error(`Unknown theme: ${theme}`);
|
|
24
29
|
}
|
|
25
|
-
exports.getDefaultLayoutOptions = getDefaultLayoutOptions;
|
|
26
30
|
/** Gets the current layout options for a design */
|
|
27
31
|
function getLayoutOptions(design) {
|
|
28
32
|
if (!design.layoutOptions) {
|
|
@@ -33,7 +37,6 @@ function getLayoutOptions(design) {
|
|
|
33
37
|
...design.layoutOptions
|
|
34
38
|
};
|
|
35
39
|
}
|
|
36
|
-
exports.getLayoutOptions = getLayoutOptions;
|
|
37
40
|
/**
|
|
38
41
|
* Injects the dashboard style into the child component. Also provides a context for layout options.
|
|
39
42
|
* This is to allow modals to reinject the layout options when they are opened.
|
|
@@ -50,7 +53,6 @@ function DashboardStyleWrapper(props) {
|
|
|
50
53
|
react_2.default.createElement(CustomColorsContext_1.CustomColorsContext.Provider, { value: { customColors: mergedCustomColors } },
|
|
51
54
|
react_2.default.createElement(exports.BlocksLayoutOptionsContext.Provider, { value: props.layoutOptions }, props.children)));
|
|
52
55
|
}
|
|
53
|
-
exports.DashboardStyleWrapper = DashboardStyleWrapper;
|
|
54
56
|
/** Bootstrap default font color */
|
|
55
57
|
const defaultFontColor = "#212529";
|
|
56
58
|
const defaultTheme = {
|
|
@@ -210,7 +212,6 @@ function expandFontFamily(fontFamily) {
|
|
|
210
212
|
}
|
|
211
213
|
return `"${fontFamily}", sans-serif`;
|
|
212
214
|
}
|
|
213
|
-
exports.expandFontFamily = expandFontFamily;
|
|
214
215
|
/**
|
|
215
216
|
* Create a CSS style string from a LayoutOptions object
|
|
216
217
|
*
|
|
@@ -371,9 +372,13 @@ ${scope} .mwater-visualization-text-widget-style-footer {
|
|
|
371
372
|
}
|
|
372
373
|
|
|
373
374
|
/** --- Chart styles --- */
|
|
375
|
+
${scope} {
|
|
376
|
+
--chart-text-color: ${layoutOptions.chartFont.color};
|
|
377
|
+
}
|
|
378
|
+
|
|
374
379
|
${scope} .bb text {
|
|
375
380
|
font-size: ${layoutOptions.chartFont.size}px;
|
|
376
|
-
fill:
|
|
381
|
+
fill: var(--chart-text-color);
|
|
377
382
|
font-family: ${expandFontFamily(layoutOptions.chartFont.family)};
|
|
378
383
|
font-weight: ${layoutOptions.chartFont.weight};
|
|
379
384
|
}
|
|
@@ -442,4 +447,3 @@ ${scope} .mwater-visualization-widget-placeholder-message {
|
|
|
442
447
|
|
|
443
448
|
`;
|
|
444
449
|
}
|
|
445
|
-
exports.createDashboardStyles = createDashboardStyles;
|
|
@@ -95,14 +95,7 @@ export default class DatagridComponent extends React.Component<DatagridComponent
|
|
|
95
95
|
}, HTMLElement>;
|
|
96
96
|
renderEditor(): React.CElement<DatagridEditorComponentProps, DatagridEditorComponent> | undefined;
|
|
97
97
|
renderFindReplaceModal(filters: any): React.CElement<any, FindReplaceModalComponent>;
|
|
98
|
-
render(): React.
|
|
99
|
-
style: {
|
|
100
|
-
width: string;
|
|
101
|
-
height: string;
|
|
102
|
-
position: "relative";
|
|
103
|
-
paddingTop: number;
|
|
104
|
-
};
|
|
105
|
-
}, HTMLElement>;
|
|
98
|
+
render(): React.FunctionComponentElement<React.ProviderProps<string>>;
|
|
106
99
|
}
|
|
107
100
|
interface DatagridEditorComponentProps {
|
|
108
101
|
schema: Schema;
|