diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/dashboard/widgets/USMapWidgetRenderer.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/dashboard/widgets/USMapWidgetRenderer.java
new file mode 100644
index 00000000..7db99301
--- /dev/null
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/actions/dashboard/widgets/USMapWidgetRenderer.java
@@ -0,0 +1,62 @@
+/*
+ * QQQ - Low-code Application Framework for Engineers.
+ * Copyright (C) 2021-2022. Kingsrook, LLC
+ * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
+ * contact@kingsrook.com
+ * https://github.com/Kingsrook/
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.kingsrook.qqq.backend.core.actions.dashboard.widgets;
+
+
+import java.math.BigDecimal;
+import java.util.List;
+import com.kingsrook.qqq.backend.core.exceptions.QException;
+import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetInput;
+import com.kingsrook.qqq.backend.core.model.actions.widgets.RenderWidgetOutput;
+import com.kingsrook.qqq.backend.core.model.dashboard.widgets.USMapWidgetData;
+
+
+/*******************************************************************************
+ ** Generic widget for display a map of the us
+ *******************************************************************************/
+public class USMapWidgetRenderer extends AbstractWidgetRenderer
+{
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ @Override
+ public RenderWidgetOutput render(RenderWidgetInput input) throws QException
+ {
+ return (new RenderWidgetOutput(
+ new USMapWidgetData()
+ .withHeight("250px")
+ .withMapMarkerList(generateMapMarkerList())
+ ));
+ }
+
+
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ protected List generateMapMarkerList() throws QException
+ {
+ return (List.of(new USMapWidgetData.MapMarker("maryville", new BigDecimal("38.725278"), new BigDecimal("-89.957778"))));
+ }
+
+}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/ChartData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/ChartData.java
index 78303cba..14cd564c 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/ChartData.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/ChartData.java
@@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.model.dashboard.widgets;
import java.util.List;
+import com.kingsrook.qqq.backend.core.utils.CollectionUtils;
/*******************************************************************************
@@ -325,6 +326,22 @@ public class ChartData extends QWidgetData
+ /*******************************************************************************
+ ** Getter for single dataset
+ **
+ *******************************************************************************/
+ public Dataset getDataset()
+ {
+ if(CollectionUtils.nullSafeHasContents(getDatasets()))
+ {
+ return (getDatasets().get(0));
+
+ }
+ return (null);
+ }
+
+
+
/*******************************************************************************
**
*******************************************************************************/
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/PieChartData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/PieChartData.java
new file mode 100644
index 00000000..14369572
--- /dev/null
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/PieChartData.java
@@ -0,0 +1,71 @@
+/*
+ * QQQ - Low-code Application Framework for Engineers.
+ * Copyright (C) 2021-2022. Kingsrook, LLC
+ * 651 N Broad St Ste 205 # 6917 | Middletown DE 19709 | United States
+ * contact@kingsrook.com
+ * https://github.com/Kingsrook/
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.kingsrook.qqq.backend.core.model.dashboard.widgets;
+
+
+import java.util.List;
+
+
+/*******************************************************************************
+ ** Model containing datastructure expected by frontend pie chart widget
+ **
+ *******************************************************************************/
+public class PieChartData extends ChartData
+{
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ public PieChartData()
+ {
+ }
+
+
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ public PieChartData(String label, String description, String seriesLabel, List labels, List data)
+ {
+ setLabel(label);
+ setDescription(description);
+ setChartData(new ChartData.Data()
+ .withLabels(labels)
+ .withDatasets(List.of(
+ new ChartData.Data.Dataset()
+ .withLabel(seriesLabel)
+ .withData(data)
+ ))
+ );
+
+ }
+
+
+
+ /*******************************************************************************
+ ** Getter for type
+ **
+ *******************************************************************************/
+ public String getType()
+ {
+ return WidgetType.PIE_CHART.getType();
+ }
+}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidgetData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidgetData.java
index 1fbc0ea1..cccd3242 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidgetData.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/QWidgetData.java
@@ -32,6 +32,8 @@ import java.util.Map;
*******************************************************************************/
public abstract class QWidgetData
{
+
+ private String label;
private List dropdownNameList;
private List dropdownLabelList;
@@ -52,6 +54,40 @@ public abstract class QWidgetData
+ /*******************************************************************************
+ ** Getter for label
+ **
+ *******************************************************************************/
+ public String getLabel()
+ {
+ return label;
+ }
+
+
+
+ /*******************************************************************************
+ ** Setter for label
+ **
+ *******************************************************************************/
+ public void setLabel(String label)
+ {
+ this.label = label;
+ }
+
+
+
+ /*******************************************************************************
+ ** Fluent setter for label
+ **
+ *******************************************************************************/
+ public QWidgetData withLabel(String label)
+ {
+ this.label = label;
+ return (this);
+ }
+
+
+
/*******************************************************************************
** Getter for dropdownLabelList
**
@@ -185,4 +221,5 @@ public abstract class QWidgetData
this.dropdownNeedsSelectedText = dropdownNeedsSelectedText;
return (this);
}
+
}
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/TableData.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/TableData.java
index c16a8f2c..1cd3f334 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/TableData.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/dashboard/widgets/TableData.java
@@ -32,7 +32,6 @@ import java.util.Map;
*******************************************************************************/
public class TableData extends QWidgetData
{
- private String title;
private String linkText;
private String linkURL;
private String noRowsFoundHTML;
@@ -45,9 +44,9 @@ public class TableData extends QWidgetData
/*******************************************************************************
**
*******************************************************************************/
- public TableData(String title, List columns, List