@webiny/app-admin-ui 0.0.0-unstable.a4f3e4ea8b → 0.0.0-unstable.a85ef555b2
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/Breadcrumbs/Breadcrumbs.d.ts +14 -0
- package/Breadcrumbs/Breadcrumbs.js +74 -0
- package/Breadcrumbs/Breadcrumbs.js.map +1 -0
- package/CommandPalette/CommandPalette.d.ts +2 -2
- package/CommandPalette/CommandPalette.js +106 -75
- package/CommandPalette/CommandPalette.js.map +1 -1
- package/CommandPalette/components/AiModeBadge.d.ts +3 -0
- package/CommandPalette/components/AiModeBadge.js +11 -0
- package/CommandPalette/components/AiModeBadge.js.map +1 -0
- package/CommandPalette/components/AiSuggestions.d.ts +9 -0
- package/CommandPalette/components/AiSuggestions.js +32 -0
- package/CommandPalette/components/AiSuggestions.js.map +1 -0
- package/CommandPalette/components/AiTurn.d.ts +11 -0
- package/CommandPalette/components/AiTurn.js +61 -0
- package/CommandPalette/components/AiTurn.js.map +1 -0
- package/CommandPalette/components/AnswerSkeleton.d.ts +6 -0
- package/CommandPalette/components/AnswerSkeleton.js +20 -0
- package/CommandPalette/components/AnswerSkeleton.js.map +1 -0
- package/CommandPalette/components/ApprovalPlan.d.ts +16 -0
- package/CommandPalette/components/ApprovalPlan.js +56 -0
- package/CommandPalette/components/ApprovalPlan.js.map +1 -0
- package/CommandPalette/components/CommandItemRow.js +4 -2
- package/CommandPalette/components/CommandItemRow.js.map +1 -1
- package/CommandPalette/components/NoResults.d.ts +13 -0
- package/CommandPalette/components/NoResults.js +33 -0
- package/CommandPalette/components/NoResults.js.map +1 -0
- package/CommandPalette/components/PaletteFooter.d.ts +13 -0
- package/CommandPalette/components/PaletteFooter.js +18 -0
- package/CommandPalette/components/PaletteFooter.js.map +1 -0
- package/CommandPalette/components/ToolChip.d.ts +7 -0
- package/CommandPalette/components/ToolChip.js +32 -0
- package/CommandPalette/components/ToolChip.js.map +1 -0
- package/CommandPalette/components/index.d.ts +13 -5
- package/CommandPalette/components/index.js +13 -5
- package/CommandPalette/modes/PaletteMode.d.ts +73 -0
- package/CommandPalette/modes/PaletteMode.js +0 -0
- package/CommandPalette/modes/createAiMode.d.ts +13 -0
- package/CommandPalette/modes/createAiMode.js +80 -0
- package/CommandPalette/modes/createAiMode.js.map +1 -0
- package/CommandPalette/modes/index.d.ts +2 -0
- package/CommandPalette/modes/index.js +1 -0
- package/CommandPalette/usePaletteHotkeys.d.ts +16 -0
- package/CommandPalette/usePaletteHotkeys.js +38 -0
- package/CommandPalette/usePaletteHotkeys.js.map +1 -0
- package/Dashboard/Welcome.d.ts +4 -1
- package/Dashboard/Welcome.js +111 -24
- package/Dashboard/Welcome.js.map +1 -1
- package/Dashboard/components/DashboardToolbar.d.ts +11 -0
- package/Dashboard/components/DashboardToolbar.js +48 -0
- package/Dashboard/components/DashboardToolbar.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/AddToColumnMenu.d.ts +10 -0
- package/Dashboard/components/addWidgetDrawer/AddToColumnMenu.js +30 -0
- package/Dashboard/components/addWidgetDrawer/AddToColumnMenu.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/AddWidgetDrawer.d.ts +12 -0
- package/Dashboard/components/addWidgetDrawer/AddWidgetDrawer.js +61 -0
- package/Dashboard/components/addWidgetDrawer/AddWidgetDrawer.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/DrawerWidgetRow.d.ts +10 -0
- package/Dashboard/components/addWidgetDrawer/DrawerWidgetRow.js +38 -0
- package/Dashboard/components/addWidgetDrawer/DrawerWidgetRow.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/WidgetPreviewFrame.d.ts +7 -0
- package/Dashboard/components/addWidgetDrawer/WidgetPreviewFrame.js +44 -0
- package/Dashboard/components/addWidgetDrawer/WidgetPreviewFrame.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/WidgetSketch.d.ts +4 -0
- package/Dashboard/components/addWidgetDrawer/WidgetSketch.js +20 -0
- package/Dashboard/components/addWidgetDrawer/WidgetSketch.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/WidgetTabContent.d.ts +14 -0
- package/Dashboard/components/addWidgetDrawer/WidgetTabContent.js +76 -0
- package/Dashboard/components/addWidgetDrawer/WidgetTabContent.js.map +1 -0
- package/Dashboard/components/addWidgetDrawer/types.d.ts +10 -0
- package/Dashboard/components/addWidgetDrawer/types.js +0 -0
- package/Dashboard/components/dnd/ColumnCountControl.d.ts +9 -0
- package/Dashboard/components/dnd/ColumnCountControl.js +52 -0
- package/Dashboard/components/dnd/ColumnCountControl.js.map +1 -0
- package/Dashboard/components/dnd/ColumnEmptyState.d.ts +10 -0
- package/Dashboard/components/dnd/ColumnEmptyState.js +52 -0
- package/Dashboard/components/dnd/ColumnEmptyState.js.map +1 -0
- package/Dashboard/components/dnd/DashboardDragLayer.d.ts +6 -0
- package/Dashboard/components/dnd/DashboardDragLayer.js +28 -0
- package/Dashboard/components/dnd/DashboardDragLayer.js.map +1 -0
- package/Dashboard/components/dnd/DashboardWidgetCard.d.ts +13 -0
- package/Dashboard/components/dnd/DashboardWidgetCard.js +59 -0
- package/Dashboard/components/dnd/DashboardWidgetCard.js.map +1 -0
- package/Dashboard/components/dnd/DashboardWidgetColumn.d.ts +19 -0
- package/Dashboard/components/dnd/DashboardWidgetColumn.js +72 -0
- package/Dashboard/components/dnd/DashboardWidgetColumn.js.map +1 -0
- package/Dashboard/components/dnd/WidgetDropIndicator.d.ts +11 -0
- package/Dashboard/components/dnd/WidgetDropIndicator.js +29 -0
- package/Dashboard/components/dnd/WidgetDropIndicator.js.map +1 -0
- package/Dashboard/components/dnd/WidgetSlot.d.ts +6 -0
- package/Dashboard/components/dnd/WidgetSlot.js +9 -0
- package/Dashboard/components/dnd/WidgetSlot.js.map +1 -0
- package/Dashboard/components/dnd/dragItem.d.ts +6 -0
- package/Dashboard/components/dnd/dragItem.js +4 -0
- package/Dashboard/components/dnd/dragItem.js.map +1 -0
- package/Dashboard/components/dnd/useWidgetHosts.d.ts +1 -0
- package/Dashboard/components/dnd/useWidgetHosts.js +16 -0
- package/Dashboard/components/dnd/useWidgetHosts.js.map +1 -0
- package/Dashboard/components/layout/EditableColumns.d.ts +13 -0
- package/Dashboard/components/layout/EditableColumns.js +25 -0
- package/Dashboard/components/layout/EditableColumns.js.map +1 -0
- package/Dashboard/components/layout/StaticColumns.d.ts +8 -0
- package/Dashboard/components/layout/StaticColumns.js +20 -0
- package/Dashboard/components/layout/StaticColumns.js.map +1 -0
- package/Dashboard/components/layout/collapseColumns.d.ts +1 -0
- package/Dashboard/components/layout/collapseColumns.js +16 -0
- package/Dashboard/components/layout/collapseColumns.js.map +1 -0
- package/Dashboard/components/layout/layoutConstants.d.ts +2 -0
- package/Dashboard/components/layout/layoutConstants.js +5 -0
- package/Dashboard/components/layout/layoutConstants.js.map +1 -0
- package/Dashboard/components/layout/useColumnsThatFit.d.ts +6 -0
- package/Dashboard/components/layout/useColumnsThatFit.js +30 -0
- package/Dashboard/components/layout/useColumnsThatFit.js.map +1 -0
- package/Dashboard/components/layout/useWidgetPortals.d.ts +5 -0
- package/Dashboard/components/layout/useWidgetPortals.js +26 -0
- package/Dashboard/components/layout/useWidgetPortals.js.map +1 -0
- package/Dashboard/dashboardLayout/loadLayout/FetchDashboardLayoutUseCase.d.ts +12 -0
- package/Dashboard/dashboardLayout/loadLayout/FetchDashboardLayoutUseCase.js +19 -0
- package/Dashboard/dashboardLayout/loadLayout/FetchDashboardLayoutUseCase.js.map +1 -0
- package/Dashboard/dashboardLayout/loadLayout/GetCachedDashboardLayoutUseCase.d.ts +12 -0
- package/Dashboard/dashboardLayout/loadLayout/GetCachedDashboardLayoutUseCase.js +19 -0
- package/Dashboard/dashboardLayout/loadLayout/GetCachedDashboardLayoutUseCase.js.map +1 -0
- package/Dashboard/dashboardLayout/loadLayout/abstractions.d.ts +15 -0
- package/Dashboard/dashboardLayout/loadLayout/abstractions.js +6 -0
- package/Dashboard/dashboardLayout/loadLayout/abstractions.js.map +1 -0
- package/Dashboard/dashboardLayout/loadLayout/feature.d.ts +1 -0
- package/Dashboard/dashboardLayout/loadLayout/feature.js +13 -0
- package/Dashboard/dashboardLayout/loadLayout/feature.js.map +1 -0
- package/Dashboard/dashboardLayout/presenter/DashboardLayoutPresenter.d.ts +56 -0
- package/Dashboard/dashboardLayout/presenter/DashboardLayoutPresenter.js +308 -0
- package/Dashboard/dashboardLayout/presenter/DashboardLayoutPresenter.js.map +1 -0
- package/Dashboard/dashboardLayout/presenter/abstractions.d.ts +46 -0
- package/Dashboard/dashboardLayout/presenter/abstractions.js +5 -0
- package/Dashboard/dashboardLayout/presenter/abstractions.js.map +1 -0
- package/Dashboard/dashboardLayout/presenter/feature.d.ts +3 -0
- package/Dashboard/dashboardLayout/presenter/feature.js +23 -0
- package/Dashboard/dashboardLayout/presenter/feature.js.map +1 -0
- package/Dashboard/dashboardLayout/presenter/useDashboardLayoutPresenter.d.ts +1 -0
- package/Dashboard/dashboardLayout/presenter/useDashboardLayoutPresenter.js +6 -0
- package/Dashboard/dashboardLayout/presenter/useDashboardLayoutPresenter.js.map +1 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutGateway.d.ts +13 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutGateway.js +67 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutGateway.js.map +1 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutRepository.d.ts +20 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutRepository.js +49 -0
- package/Dashboard/dashboardLayout/repository/DashboardLayoutRepository.js.map +1 -0
- package/Dashboard/dashboardLayout/repository/abstractions.d.ts +25 -0
- package/Dashboard/dashboardLayout/repository/abstractions.js +6 -0
- package/Dashboard/dashboardLayout/repository/abstractions.js.map +1 -0
- package/Dashboard/dashboardLayout/repository/feature.d.ts +1 -0
- package/Dashboard/dashboardLayout/repository/feature.js +13 -0
- package/Dashboard/dashboardLayout/repository/feature.js.map +1 -0
- package/Dashboard/dashboardLayout/saveLayout/SaveDashboardLayoutUseCase.d.ts +12 -0
- package/Dashboard/dashboardLayout/saveLayout/SaveDashboardLayoutUseCase.js +19 -0
- package/Dashboard/dashboardLayout/saveLayout/SaveDashboardLayoutUseCase.js.map +1 -0
- package/Dashboard/dashboardLayout/saveLayout/abstractions.d.ts +8 -0
- package/Dashboard/dashboardLayout/saveLayout/abstractions.js +5 -0
- package/Dashboard/dashboardLayout/saveLayout/abstractions.js.map +1 -0
- package/Dashboard/dashboardLayout/saveLayout/feature.d.ts +1 -0
- package/Dashboard/dashboardLayout/saveLayout/feature.js +11 -0
- package/Dashboard/dashboardLayout/saveLayout/feature.js.map +1 -0
- package/Dashboard/dashboardLayout/toColumnIndex.d.ts +1 -0
- package/Dashboard/dashboardLayout/toColumnIndex.js +7 -0
- package/Dashboard/dashboardLayout/toColumnIndex.js.map +1 -0
- package/Dashboard/dashboardLayout/types.d.ts +15 -0
- package/Dashboard/dashboardLayout/types.js +6 -0
- package/Dashboard/dashboardLayout/types.js.map +1 -0
- package/Layout.js +7 -5
- package/Layout.js.map +1 -1
- package/index.js +15 -4
- package/index.js.map +1 -1
- package/package.json +13 -7
package/Dashboard/Welcome.js
CHANGED
|
@@ -1,32 +1,119 @@
|
|
|
1
|
-
import react from "react";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import react, { useEffect, useMemo, useState } from "react";
|
|
2
|
+
import { DndProvider } from "react-dnd";
|
|
3
|
+
import { HTML5Backend } from "react-dnd-html5-backend";
|
|
4
|
+
import { Heading, Text } from "@webiny/admin-ui";
|
|
5
|
+
import { createReactiveComponent, useAdminConfig, useSecurity } from "@webiny/app-admin";
|
|
6
|
+
import { useDashboardLayoutPresenter } from "./dashboardLayout/presenter/useDashboardLayoutPresenter.js";
|
|
7
|
+
import { toColumnIndex } from "./dashboardLayout/toColumnIndex.js";
|
|
8
|
+
import { AddWidgetDrawer } from "./components/addWidgetDrawer/AddWidgetDrawer.js";
|
|
9
|
+
import { DashboardToolbar } from "./components/DashboardToolbar.js";
|
|
10
|
+
import { EditableColumns } from "./components/layout/EditableColumns.js";
|
|
11
|
+
import { StaticColumns } from "./components/layout/StaticColumns.js";
|
|
12
|
+
import { useColumnsThatFit } from "./components/layout/useColumnsThatFit.js";
|
|
13
|
+
import { useWidgetPortals } from "./components/layout/useWidgetPortals.js";
|
|
14
|
+
import { DASHBOARD_MAX_WIDTH } from "./components/layout/layoutConstants.js";
|
|
15
|
+
const WelcomeBase = ()=>{
|
|
5
16
|
const { identity } = useSecurity();
|
|
6
17
|
const { widgets } = useAdminConfig();
|
|
7
|
-
|
|
8
|
-
|
|
18
|
+
const presenter = useDashboardLayoutPresenter();
|
|
19
|
+
const elements = useMemo(()=>{
|
|
20
|
+
const map = new Map();
|
|
21
|
+
widgets.forEach((widget)=>map.set(widget.name, widget.element));
|
|
22
|
+
return map;
|
|
23
|
+
}, [
|
|
24
|
+
widgets
|
|
25
|
+
]);
|
|
26
|
+
const titles = useMemo(()=>{
|
|
27
|
+
const map = new Map();
|
|
28
|
+
widgets.forEach((widget)=>map.set(widget.name, {
|
|
29
|
+
title: widget.title ?? widget.name
|
|
30
|
+
}));
|
|
31
|
+
return map;
|
|
32
|
+
}, [
|
|
33
|
+
widgets
|
|
34
|
+
]);
|
|
35
|
+
const widgetsKey = widgets.map((w)=>`${w.name}:${toColumnIndex(w.column)}`).join("|");
|
|
36
|
+
useEffect(()=>{
|
|
37
|
+
const inputs = widgets.map((widget)=>({
|
|
38
|
+
name: widget.name,
|
|
39
|
+
column: toColumnIndex(widget.column)
|
|
40
|
+
}));
|
|
41
|
+
presenter.init(identity.id, inputs);
|
|
42
|
+
}, [
|
|
43
|
+
identity?.id,
|
|
44
|
+
widgetsKey
|
|
45
|
+
]);
|
|
46
|
+
useEffect(()=>()=>presenter.dispose(), [
|
|
47
|
+
presenter
|
|
48
|
+
]);
|
|
49
|
+
const { vm } = presenter;
|
|
50
|
+
const [drawerOpen, setDrawerOpen] = useState(false);
|
|
51
|
+
const openDrawer = ()=>setDrawerOpen(true);
|
|
52
|
+
const drawerWidgets = widgets.map((widget)=>{
|
|
53
|
+
const registeredColumn = toColumnIndex(widget.column);
|
|
54
|
+
return {
|
|
55
|
+
name: widget.name,
|
|
56
|
+
title: widget.title ?? widget.name,
|
|
57
|
+
description: widget.description,
|
|
58
|
+
group: widget.group,
|
|
59
|
+
preview: widget.preview,
|
|
60
|
+
added: !vm.hidden.includes(widget.name),
|
|
61
|
+
defaultColumn: Math.min(registeredColumn, vm.columnCount - 1)
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
const { ref: containerRef, visibleCount, allFit } = useColumnsThatFit(vm.columnCount);
|
|
65
|
+
const placed = vm.columns.flat();
|
|
66
|
+
const { slots, portals } = useWidgetPortals(placed, elements);
|
|
67
|
+
const editing = vm.editing && allFit;
|
|
68
|
+
let subtitle = "Your dashboard. Arrange the widgets however you work best.";
|
|
69
|
+
let columns = /*#__PURE__*/ react.createElement(StaticColumns, {
|
|
70
|
+
columns: vm.columns,
|
|
71
|
+
visibleCount: visibleCount,
|
|
72
|
+
slots: slots
|
|
73
|
+
});
|
|
74
|
+
if (editing) {
|
|
75
|
+
subtitle = "Drag widgets to rearrange them, and click Done when you're finished.";
|
|
76
|
+
columns = /*#__PURE__*/ react.createElement(EditableColumns, {
|
|
77
|
+
vm: vm,
|
|
78
|
+
slots: slots,
|
|
79
|
+
titles: titles,
|
|
80
|
+
presenter: presenter,
|
|
81
|
+
onBrowseWidgets: openDrawer
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return /*#__PURE__*/ react.createElement(DndProvider, {
|
|
85
|
+
backend: HTML5Backend
|
|
9
86
|
}, /*#__PURE__*/ react.createElement("div", {
|
|
10
|
-
className: "
|
|
11
|
-
|
|
87
|
+
className: "my-xxl",
|
|
88
|
+
ref: containerRef
|
|
89
|
+
}, portals, /*#__PURE__*/ react.createElement("div", {
|
|
90
|
+
className: "mb-xl flex items-center justify-between gap-lg",
|
|
91
|
+
style: {
|
|
92
|
+
maxWidth: DASHBOARD_MAX_WIDTH
|
|
93
|
+
}
|
|
94
|
+
}, /*#__PURE__*/ react.createElement("div", null, /*#__PURE__*/ react.createElement(Heading, {
|
|
12
95
|
level: 3
|
|
13
|
-
}, `Hi ${identity.displayName}, what are we doing today?`)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
96
|
+
}, `Hi ${identity.displayName}, what are we doing today?`), /*#__PURE__*/ react.createElement(Text, {
|
|
97
|
+
as: "div",
|
|
98
|
+
size: "md",
|
|
99
|
+
className: "mt-xs text-neutral-strong"
|
|
100
|
+
}, subtitle)), /*#__PURE__*/ react.createElement("div", {
|
|
101
|
+
className: "flex flex-none items-center gap-sm"
|
|
102
|
+
}, /*#__PURE__*/ react.createElement(DashboardToolbar, {
|
|
103
|
+
vm: vm,
|
|
104
|
+
editing: editing,
|
|
105
|
+
canCustomize: allFit,
|
|
106
|
+
presenter: presenter,
|
|
107
|
+
onAddWidget: openDrawer
|
|
108
|
+
}))), columns, /*#__PURE__*/ react.createElement(AddWidgetDrawer, {
|
|
109
|
+
open: drawerOpen,
|
|
110
|
+
onOpenChange: setDrawerOpen,
|
|
111
|
+
widgets: drawerWidgets,
|
|
112
|
+
columnCount: vm.columnCount,
|
|
113
|
+
presenter: presenter
|
|
114
|
+
})));
|
|
29
115
|
};
|
|
116
|
+
const Welcome = createReactiveComponent(WelcomeBase);
|
|
30
117
|
const Dashboard_Welcome = Welcome;
|
|
31
118
|
export default Dashboard_Welcome;
|
|
32
119
|
|
package/Dashboard/Welcome.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dashboard/Welcome.js","sources":["../../src/Dashboard/Welcome.tsx"],"sourcesContent":["import React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"file":"Dashboard/Welcome.js","sources":["../../src/Dashboard/Welcome.tsx"],"sourcesContent":["import React from \"react\";\nimport { useEffect } from \"react\";\nimport { useMemo } from \"react\";\nimport { useState } from \"react\";\nimport { DndProvider } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { Heading } from \"@webiny/admin-ui\";\nimport { Text } from \"@webiny/admin-ui\";\nimport { useSecurity } from \"@webiny/app-admin\";\nimport { useAdminConfig } from \"@webiny/app-admin\";\nimport { createReactiveComponent } from \"@webiny/app-admin\";\nimport { useDashboardLayoutPresenter } from \"./dashboardLayout/presenter/useDashboardLayoutPresenter.js\";\nimport { toColumnIndex } from \"./dashboardLayout/toColumnIndex.js\";\nimport { AddWidgetDrawer } from \"./components/addWidgetDrawer/AddWidgetDrawer.js\";\nimport type { DrawerWidget } from \"./components/addWidgetDrawer/types.js\";\nimport { DashboardToolbar } from \"./components/DashboardToolbar.js\";\nimport { EditableColumns } from \"./components/layout/EditableColumns.js\";\nimport { StaticColumns } from \"./components/layout/StaticColumns.js\";\nimport { useColumnsThatFit } from \"./components/layout/useColumnsThatFit.js\";\nimport { useWidgetPortals } from \"./components/layout/useWidgetPortals.js\";\nimport { DASHBOARD_MAX_WIDTH } from \"./components/layout/layoutConstants.js\";\n\nconst WelcomeBase = () => {\n const { identity } = useSecurity();\n const { widgets } = useAdminConfig();\n const presenter = useDashboardLayoutPresenter();\n\n // Map of widget name -> React element, so the presenter can deal purely in names.\n const elements = useMemo(() => {\n const map = new Map<string, React.ReactElement>();\n widgets.forEach(widget => map.set(widget.name, widget.element));\n return map;\n }, [widgets]);\n\n // Widget titles, for the cards' labels while customizing.\n const titles = useMemo(() => {\n const map = new Map<string, { title: string }>();\n widgets.forEach(widget => map.set(widget.name, { title: widget.title ?? widget.name }));\n return map;\n }, [widgets]);\n\n // Re-initialize the presenter when the user or the set of registered widgets changes.\n const widgetsKey = widgets.map(w => `${w.name}:${toColumnIndex(w.column)}`).join(\"|\");\n useEffect(() => {\n const inputs = widgets.map(widget => ({\n name: widget.name,\n column: toColumnIndex(widget.column)\n }));\n presenter.init(identity!.id, inputs);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [identity?.id, widgetsKey]);\n\n // The presenter is a singleton; leaving the dashboard resets per-visit state like Customize mode.\n useEffect(() => {\n return () => presenter.dispose();\n }, [presenter]);\n\n // A reactive component re-renders when anything it reads from `vm` changes.\n const { vm } = presenter;\n\n const [drawerOpen, setDrawerOpen] = useState(false);\n const openDrawer = () => setDrawerOpen(true);\n const drawerWidgets: DrawerWidget[] = widgets.map(widget => {\n // Same clamping the presenter applies, so \"(default)\" marks the column it would pick.\n const registeredColumn = toColumnIndex(widget.column);\n return {\n name: widget.name,\n title: widget.title ?? widget.name,\n description: widget.description,\n group: widget.group,\n preview: widget.preview,\n added: !vm.hidden.includes(widget.name),\n defaultColumn: Math.min(registeredColumn, vm.columnCount - 1)\n };\n });\n\n const { ref: containerRef, visibleCount, allFit } = useColumnsThatFit(vm.columnCount);\n const placed = vm.columns.flat();\n const { slots, portals } = useWidgetPortals(placed, elements);\n\n // Customize mode needs every chosen column on screen; too narrow, and it isn't offered.\n const editing = vm.editing && allFit;\n\n let subtitle = \"Your dashboard. Arrange the widgets however you work best.\";\n let columns = <StaticColumns columns={vm.columns} visibleCount={visibleCount} slots={slots} />;\n if (editing) {\n subtitle = \"Drag widgets to rearrange them, and click Done when you're finished.\";\n columns = (\n <EditableColumns\n vm={vm}\n slots={slots}\n titles={titles}\n presenter={presenter}\n onBrowseWidgets={openDrawer}\n />\n );\n }\n\n return (\n <DndProvider backend={HTML5Backend}>\n <div className={\"my-xxl\"} ref={containerRef}>\n {portals}\n <div\n className={\"mb-xl flex items-center justify-between gap-lg\"}\n style={{ maxWidth: DASHBOARD_MAX_WIDTH }}\n >\n <div>\n <Heading\n level={3}\n >{`Hi ${identity!.displayName}, what are we doing today?`}</Heading>\n <Text as={\"div\"} size={\"md\"} className={\"mt-xs text-neutral-strong\"}>\n {subtitle}\n </Text>\n </div>\n <div className={\"flex flex-none items-center gap-sm\"}>\n <DashboardToolbar\n vm={vm}\n editing={editing}\n canCustomize={allFit}\n presenter={presenter}\n onAddWidget={openDrawer}\n />\n </div>\n </div>\n {columns}\n <AddWidgetDrawer\n open={drawerOpen}\n onOpenChange={setDrawerOpen}\n widgets={drawerWidgets}\n columnCount={vm.columnCount}\n presenter={presenter}\n />\n </div>\n </DndProvider>\n );\n};\n\nconst Welcome = createReactiveComponent(WelcomeBase);\n\nexport default Welcome;\n"],"names":["WelcomeBase","identity","useSecurity","widgets","useAdminConfig","presenter","useDashboardLayoutPresenter","elements","useMemo","map","Map","widget","titles","widgetsKey","w","toColumnIndex","useEffect","inputs","vm","drawerOpen","setDrawerOpen","useState","openDrawer","drawerWidgets","registeredColumn","Math","containerRef","visibleCount","allFit","useColumnsThatFit","placed","slots","portals","useWidgetPortals","editing","subtitle","columns","StaticColumns","EditableColumns","DndProvider","HTML5Backend","DASHBOARD_MAX_WIDTH","Heading","Text","DashboardToolbar","AddWidgetDrawer","Welcome","createReactiveComponent"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAMA,cAAc;IAChB,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IACrB,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAMC,YAAYC;IAGlB,MAAMC,WAAWC,QAAQ;QACrB,MAAMC,MAAM,IAAIC;QAChBP,QAAQ,OAAO,CAACQ,CAAAA,SAAUF,IAAI,GAAG,CAACE,OAAO,IAAI,EAAEA,OAAO,OAAO;QAC7D,OAAOF;IACX,GAAG;QAACN;KAAQ;IAGZ,MAAMS,SAASJ,QAAQ;QACnB,MAAMC,MAAM,IAAIC;QAChBP,QAAQ,OAAO,CAACQ,CAAAA,SAAUF,IAAI,GAAG,CAACE,OAAO,IAAI,EAAE;gBAAE,OAAOA,OAAO,KAAK,IAAIA,OAAO,IAAI;YAAC;QACpF,OAAOF;IACX,GAAG;QAACN;KAAQ;IAGZ,MAAMU,aAAaV,QAAQ,GAAG,CAACW,CAAAA,IAAK,GAAGA,EAAE,IAAI,CAAC,CAAC,EAAEC,cAAcD,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC;IACjFE,UAAU;QACN,MAAMC,SAASd,QAAQ,GAAG,CAACQ,CAAAA,SAAW;gBAClC,MAAMA,OAAO,IAAI;gBACjB,QAAQI,cAAcJ,OAAO,MAAM;YACvC;QACAN,UAAU,IAAI,CAACJ,SAAU,EAAE,EAAEgB;IAEjC,GAAG;QAAChB,UAAU;QAAIY;KAAW;IAG7BG,UAAU,IACC,IAAMX,UAAU,OAAO,IAC/B;QAACA;KAAU;IAGd,MAAM,EAAEa,EAAE,EAAE,GAAGb;IAEf,MAAM,CAACc,YAAYC,cAAc,GAAGC,SAAS;IAC7C,MAAMC,aAAa,IAAMF,cAAc;IACvC,MAAMG,gBAAgCpB,QAAQ,GAAG,CAACQ,CAAAA;QAE9C,MAAMa,mBAAmBT,cAAcJ,OAAO,MAAM;QACpD,OAAO;YACH,MAAMA,OAAO,IAAI;YACjB,OAAOA,OAAO,KAAK,IAAIA,OAAO,IAAI;YAClC,aAAaA,OAAO,WAAW;YAC/B,OAAOA,OAAO,KAAK;YACnB,SAASA,OAAO,OAAO;YACvB,OAAO,CAACO,GAAG,MAAM,CAAC,QAAQ,CAACP,OAAO,IAAI;YACtC,eAAec,KAAK,GAAG,CAACD,kBAAkBN,GAAG,WAAW,GAAG;QAC/D;IACJ;IAEA,MAAM,EAAE,KAAKQ,YAAY,EAAEC,YAAY,EAAEC,MAAM,EAAE,GAAGC,kBAAkBX,GAAG,WAAW;IACpF,MAAMY,SAASZ,GAAG,OAAO,CAAC,IAAI;IAC9B,MAAM,EAAEa,KAAK,EAAEC,OAAO,EAAE,GAAGC,iBAAiBH,QAAQvB;IAGpD,MAAM2B,UAAUhB,GAAG,OAAO,IAAIU;IAE9B,IAAIO,WAAW;IACf,IAAIC,UAAU,WAAVA,GAAU,oBAACC,eAAaA;QAAC,SAASnB,GAAG,OAAO;QAAE,cAAcS;QAAc,OAAOI;;IACrF,IAAIG,SAAS;QACTC,WAAW;QACXC,UAAU,WAAVA,GACI,oBAACE,iBAAeA;YACZ,IAAIpB;YACJ,OAAOa;YACP,QAAQnB;YACR,WAAWP;YACX,iBAAiBiB;;IAG7B;IAEA,OAAO,WAAP,GACI,oBAACiB,aAAWA;QAAC,SAASC;qBAClB,oBAAC;QAAI,WAAW;QAAU,KAAKd;OAC1BM,SAAAA,WAAAA,GACD,oBAAC;QACG,WAAW;QACX,OAAO;YAAE,UAAUS;QAAoB;qBAEvC,oBAAC,2BACG,oBAACC,SAAOA;QACJ,OAAO;OACT,CAAC,GAAG,EAAEzC,SAAU,WAAW,CAAC,0BAA0B,CAAC,iBACzD,oBAAC0C,MAAIA;QAAC,IAAI;QAAO,MAAM;QAAM,WAAW;OACnCR,YAAAA,WAAAA,GAGT,oBAAC;QAAI,WAAW;qBACZ,oBAACS,kBAAgBA;QACb,IAAI1B;QACJ,SAASgB;QACT,cAAcN;QACd,WAAWvB;QACX,aAAaiB;UAIxBc,SAAAA,WAAAA,GACD,oBAACS,iBAAeA;QACZ,MAAM1B;QACN,cAAcC;QACd,SAASG;QACT,aAAaL,GAAG,WAAW;QAC3B,WAAWb;;AAK/B;AAEA,MAAMyC,UAAUC,wBAAwB/C;AAExC,0BAAe8C"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DashboardLayoutPresenter } from "../dashboardLayout/presenter/abstractions.js";
|
|
3
|
+
interface DashboardToolbarProps {
|
|
4
|
+
vm: DashboardLayoutPresenter.ViewModel;
|
|
5
|
+
editing: boolean;
|
|
6
|
+
canCustomize: boolean;
|
|
7
|
+
presenter: DashboardLayoutPresenter.Interface;
|
|
8
|
+
onAddWidget: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const DashboardToolbar: ({ vm, editing, canCustomize, presenter, onAddWidget }: DashboardToolbarProps) => React.JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Button, IconButton, Tooltip } from "@webiny/admin-ui";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/restart_alt.svg";
|
|
4
|
+
import { ReactComponent as add_svg_ReactComponent } from "@webiny/icons/add.svg";
|
|
5
|
+
import { ReactComponent as dashboard_customize_svg_ReactComponent } from "@webiny/icons/dashboard_customize.svg";
|
|
6
|
+
import { ReactComponent as check_svg_ReactComponent } from "@webiny/icons/check.svg";
|
|
7
|
+
import { ColumnCountControl } from "./dnd/ColumnCountControl.js";
|
|
8
|
+
const DashboardToolbar = ({ vm, editing, canCustomize, presenter, onAddWidget })=>{
|
|
9
|
+
if (editing) return /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement(ColumnCountControl, {
|
|
10
|
+
columnCount: vm.columnCount,
|
|
11
|
+
disabled: null !== vm.draggingName,
|
|
12
|
+
presenter: presenter
|
|
13
|
+
}), /*#__PURE__*/ react.createElement(Tooltip, {
|
|
14
|
+
content: "Reset to default layout",
|
|
15
|
+
trigger: /*#__PURE__*/ react.createElement(IconButton, {
|
|
16
|
+
variant: "tertiary",
|
|
17
|
+
size: "md",
|
|
18
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
19
|
+
"aria-label": "Reset to default layout",
|
|
20
|
+
onClick: ()=>presenter.resetToDefault()
|
|
21
|
+
})
|
|
22
|
+
}), /*#__PURE__*/ react.createElement(Button, {
|
|
23
|
+
variant: "tertiary",
|
|
24
|
+
text: "Add widget",
|
|
25
|
+
icon: /*#__PURE__*/ react.createElement(add_svg_ReactComponent, null),
|
|
26
|
+
onClick: onAddWidget
|
|
27
|
+
}), /*#__PURE__*/ react.createElement(Button, {
|
|
28
|
+
variant: "primary",
|
|
29
|
+
text: "Done",
|
|
30
|
+
icon: /*#__PURE__*/ react.createElement(check_svg_ReactComponent, null),
|
|
31
|
+
onClick: ()=>presenter.stopEditing()
|
|
32
|
+
}));
|
|
33
|
+
let hint = "Rearrange, add or remove widgets";
|
|
34
|
+
if (!canCustomize) hint = "Make the window wider to customize the dashboard";
|
|
35
|
+
return /*#__PURE__*/ react.createElement(Tooltip, {
|
|
36
|
+
content: hint,
|
|
37
|
+
trigger: /*#__PURE__*/ react.createElement(Button, {
|
|
38
|
+
variant: "tertiary",
|
|
39
|
+
text: "Customize",
|
|
40
|
+
icon: /*#__PURE__*/ react.createElement(dashboard_customize_svg_ReactComponent, null),
|
|
41
|
+
disabled: !canCustomize,
|
|
42
|
+
onClick: ()=>presenter.startEditing()
|
|
43
|
+
})
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
export { DashboardToolbar };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=DashboardToolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/DashboardToolbar.js","sources":["../../../src/Dashboard/components/DashboardToolbar.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { IconButton } from \"@webiny/admin-ui\";\nimport { Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as RestartAltIcon } from \"@webiny/icons/restart_alt.svg\";\nimport { ReactComponent as AddIcon } from \"@webiny/icons/add.svg\";\nimport { ReactComponent as DashboardCustomizeIcon } from \"@webiny/icons/dashboard_customize.svg\";\nimport { ReactComponent as CheckIcon } from \"@webiny/icons/check.svg\";\nimport { ColumnCountControl } from \"./dnd/ColumnCountControl.js\";\nimport type { DashboardLayoutPresenter } from \"../dashboardLayout/presenter/abstractions.js\";\n\ninterface DashboardToolbarProps {\n vm: DashboardLayoutPresenter.ViewModel;\n // Customize mode is on and every chosen column fits on screen.\n editing: boolean;\n // Every chosen column fits on screen, so Customize mode can be offered.\n canCustomize: boolean;\n presenter: DashboardLayoutPresenter.Interface;\n onAddWidget: () => void;\n}\n\n// Top-right controls: one \"Customize\" button normally, the full editing set in Customize mode.\nexport const DashboardToolbar = ({\n vm,\n editing,\n canCustomize,\n presenter,\n onAddWidget\n}: DashboardToolbarProps) => {\n if (editing) {\n return (\n <>\n <ColumnCountControl\n columnCount={vm.columnCount}\n disabled={vm.draggingName !== null}\n presenter={presenter}\n />\n <Tooltip\n content={\"Reset to default layout\"}\n trigger={\n <IconButton\n variant={\"tertiary\"}\n size={\"md\"}\n icon={<RestartAltIcon />}\n aria-label={\"Reset to default layout\"}\n onClick={() => presenter.resetToDefault()}\n />\n }\n />\n <Button\n variant={\"tertiary\"}\n text={\"Add widget\"}\n icon={<AddIcon />}\n onClick={onAddWidget}\n />\n <Button\n variant={\"primary\"}\n text={\"Done\"}\n icon={<CheckIcon />}\n onClick={() => presenter.stopEditing()}\n />\n </>\n );\n }\n\n let hint = \"Rearrange, add or remove widgets\";\n if (!canCustomize) {\n hint = \"Make the window wider to customize the dashboard\";\n }\n\n return (\n <Tooltip\n content={hint}\n trigger={\n <Button\n variant={\"tertiary\"}\n text={\"Customize\"}\n icon={<DashboardCustomizeIcon />}\n disabled={!canCustomize}\n onClick={() => presenter.startEditing()}\n />\n }\n />\n );\n};\n"],"names":["DashboardToolbar","vm","editing","canCustomize","presenter","onAddWidget","ColumnCountControl","Tooltip","IconButton","RestartAltIcon","Button","AddIcon","CheckIcon","hint","DashboardCustomizeIcon"],"mappings":";;;;;;;AAsBO,MAAMA,mBAAmB,CAAC,EAC7BC,EAAE,EACFC,OAAO,EACPC,YAAY,EACZC,SAAS,EACTC,WAAW,EACS;IACpB,IAAIH,SACA,OAAO,WAAP,GACI,wDACI,oBAACI,oBAAkBA;QACf,aAAaL,GAAG,WAAW;QAC3B,UAAUA,AAAoB,SAApBA,GAAG,YAAY;QACzB,WAAWG;sBAEf,oBAACG,SAAOA;QACJ,SAAS;QACT,uBACI,oBAACC,YAAUA;YACP,SAAS;YACT,MAAM;YACN,oBAAM,oBAACC,gBAAcA;YACrB,cAAY;YACZ,SAAS,IAAML,UAAU,cAAc;;sBAInD,oBAACM,QAAMA;QACH,SAAS;QACT,MAAM;QACN,oBAAM,oBAACC,wBAAOA;QACd,SAASN;sBAEb,oBAACK,QAAMA;QACH,SAAS;QACT,MAAM;QACN,oBAAM,oBAACE,0BAASA;QAChB,SAAS,IAAMR,UAAU,WAAW;;IAMpD,IAAIS,OAAO;IACX,IAAI,CAACV,cACDU,OAAO;IAGX,OAAO,WAAP,GACI,oBAACN,SAAOA;QACJ,SAASM;QACT,uBACI,oBAACH,QAAMA;YACH,SAAS;YACT,MAAM;YACN,oBAAM,oBAACI,wCAAsBA;YAC7B,UAAU,CAACX;YACX,SAAS,IAAMC,UAAU,YAAY;;;AAKzD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DashboardLayoutPresenter } from "../../dashboardLayout/presenter/abstractions.js";
|
|
3
|
+
import type { DrawerWidget } from "./types.js";
|
|
4
|
+
interface AddToColumnMenuProps {
|
|
5
|
+
widget: DrawerWidget;
|
|
6
|
+
columnCount: number;
|
|
7
|
+
presenter: DashboardLayoutPresenter.Interface;
|
|
8
|
+
}
|
|
9
|
+
export declare const AddToColumnMenu: ({ widget, columnCount, presenter }: AddToColumnMenuProps) => React.JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Button, DropdownMenu } from "@webiny/admin-ui";
|
|
3
|
+
import { ReactComponent } from "@webiny/icons/expand_more.svg";
|
|
4
|
+
const AddToColumnMenu = ({ widget, columnCount, presenter })=>{
|
|
5
|
+
const columns = Array.from({
|
|
6
|
+
length: columnCount
|
|
7
|
+
}, (_, index)=>index);
|
|
8
|
+
return /*#__PURE__*/ react.createElement(DropdownMenu, {
|
|
9
|
+
trigger: /*#__PURE__*/ react.createElement(Button, {
|
|
10
|
+
size: "sm",
|
|
11
|
+
variant: "tertiary",
|
|
12
|
+
text: "Add",
|
|
13
|
+
icon: /*#__PURE__*/ react.createElement(ReactComponent, null),
|
|
14
|
+
iconPosition: "end"
|
|
15
|
+
})
|
|
16
|
+
}, /*#__PURE__*/ react.createElement(DropdownMenu.Label, {
|
|
17
|
+
text: "Add to"
|
|
18
|
+
}), columns.map((index)=>{
|
|
19
|
+
let text = `Column ${index + 1}`;
|
|
20
|
+
if (index === widget.defaultColumn) text = `${text} (default)`;
|
|
21
|
+
return /*#__PURE__*/ react.createElement(DropdownMenu.Item, {
|
|
22
|
+
key: index,
|
|
23
|
+
text: text,
|
|
24
|
+
onClick: ()=>presenter.addWidget(widget.name, index)
|
|
25
|
+
});
|
|
26
|
+
}));
|
|
27
|
+
};
|
|
28
|
+
export { AddToColumnMenu };
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=AddToColumnMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/addWidgetDrawer/AddToColumnMenu.js","sources":["../../../../src/Dashboard/components/addWidgetDrawer/AddToColumnMenu.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { DropdownMenu } from \"@webiny/admin-ui\";\nimport { ReactComponent as ExpandMoreIcon } from \"@webiny/icons/expand_more.svg\";\nimport type { DashboardLayoutPresenter } from \"../../dashboardLayout/presenter/abstractions.js\";\nimport type { DrawerWidget } from \"./types.js\";\n\ninterface AddToColumnMenuProps {\n widget: DrawerWidget;\n columnCount: number;\n presenter: DashboardLayoutPresenter.Interface;\n}\n\n// One item per current column; the widget lands at the bottom of the chosen one.\nexport const AddToColumnMenu = ({ widget, columnCount, presenter }: AddToColumnMenuProps) => {\n const columns = Array.from({ length: columnCount }, (_, index) => index);\n\n return (\n <DropdownMenu\n trigger={\n <Button\n size={\"sm\"}\n variant={\"tertiary\"}\n text={\"Add\"}\n icon={<ExpandMoreIcon />}\n iconPosition={\"end\"}\n />\n }\n >\n <DropdownMenu.Label text={\"Add to\"} />\n {columns.map(index => {\n let text = `Column ${index + 1}`;\n if (index === widget.defaultColumn) {\n text = `${text} (default)`;\n }\n return (\n <DropdownMenu.Item\n key={index}\n text={text}\n onClick={() => presenter.addWidget(widget.name, index)}\n />\n );\n })}\n </DropdownMenu>\n );\n};\n"],"names":["AddToColumnMenu","widget","columnCount","presenter","columns","Array","_","index","DropdownMenu","Button","ExpandMoreIcon","text"],"mappings":";;;AAcO,MAAMA,kBAAkB,CAAC,EAAEC,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAwB;IACpF,MAAMC,UAAUC,MAAM,IAAI,CAAC;QAAE,QAAQH;IAAY,GAAG,CAACI,GAAGC,QAAUA;IAElE,OAAO,WAAP,GACI,oBAACC,cAAYA;QACT,uBACI,oBAACC,QAAMA;YACH,MAAM;YACN,SAAS;YACT,MAAM;YACN,oBAAM,oBAACC,gBAAcA;YACrB,cAAc;;qBAItB,oBAACF,aAAa,KAAK;QAAC,MAAM;QACzBJ,QAAQ,GAAG,CAACG,CAAAA;QACT,IAAII,OAAO,CAAC,OAAO,EAAEJ,QAAQ,GAAG;QAChC,IAAIA,UAAUN,OAAO,aAAa,EAC9BU,OAAO,GAAGA,KAAK,UAAU,CAAC;QAE9B,OAAO,WAAP,GACI,oBAACH,aAAa,IAAI;YACd,KAAKD;YACL,MAAMI;YACN,SAAS,IAAMR,UAAU,SAAS,CAACF,OAAO,IAAI,EAAEM;;IAG5D;AAGZ"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DashboardLayoutPresenter } from "../../dashboardLayout/presenter/abstractions.js";
|
|
3
|
+
import type { DrawerWidget } from "./types.js";
|
|
4
|
+
interface AddWidgetDrawerProps {
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange: (open: boolean) => void;
|
|
7
|
+
widgets: DrawerWidget[];
|
|
8
|
+
columnCount: number;
|
|
9
|
+
presenter: DashboardLayoutPresenter.Interface;
|
|
10
|
+
}
|
|
11
|
+
export declare const AddWidgetDrawer: ({ open, onOpenChange, widgets, columnCount, presenter }: AddWidgetDrawerProps) => React.JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import react, { useState } from "react";
|
|
2
|
+
import { Drawer, Tabs } from "@webiny/admin-ui";
|
|
3
|
+
import { WidgetTabContent } from "./WidgetTabContent.js";
|
|
4
|
+
const AddWidgetDrawer = ({ open, onOpenChange, widgets, columnCount, presenter })=>{
|
|
5
|
+
const [search, setSearch] = useState("");
|
|
6
|
+
const changeOpen = (next)=>{
|
|
7
|
+
if (!next) setSearch("");
|
|
8
|
+
onOpenChange(next);
|
|
9
|
+
};
|
|
10
|
+
const onDashboard = widgets.filter((widget)=>widget.added);
|
|
11
|
+
const notAdded = widgets.filter((widget)=>!widget.added);
|
|
12
|
+
let defaultTab = "all";
|
|
13
|
+
if (notAdded.length > 0) defaultTab = "notAdded";
|
|
14
|
+
const renderTab = (items, emptyTitle, emptyDescription)=>/*#__PURE__*/ react.createElement(WidgetTabContent, {
|
|
15
|
+
items: items,
|
|
16
|
+
search: search,
|
|
17
|
+
onSearch: setSearch,
|
|
18
|
+
emptyTitle: emptyTitle,
|
|
19
|
+
emptyDescription: emptyDescription,
|
|
20
|
+
columnCount: columnCount,
|
|
21
|
+
presenter: presenter
|
|
22
|
+
});
|
|
23
|
+
return /*#__PURE__*/ react.createElement(Drawer, {
|
|
24
|
+
open: open,
|
|
25
|
+
onOpenChange: changeOpen,
|
|
26
|
+
modal: true,
|
|
27
|
+
title: "Add widget",
|
|
28
|
+
description: "Pick a column when you add a widget. You can drag it anywhere after.",
|
|
29
|
+
width: 400,
|
|
30
|
+
bodyPadding: false,
|
|
31
|
+
headerSeparator: false,
|
|
32
|
+
showCloseButton: true
|
|
33
|
+
}, /*#__PURE__*/ react.createElement(Tabs, {
|
|
34
|
+
separator: true,
|
|
35
|
+
spacing: "lg",
|
|
36
|
+
defaultValue: defaultTab,
|
|
37
|
+
tabs: [
|
|
38
|
+
/*#__PURE__*/ react.createElement(Tabs.Tab, {
|
|
39
|
+
key: "notAdded",
|
|
40
|
+
value: "notAdded",
|
|
41
|
+
trigger: `Not added (${notAdded.length})`,
|
|
42
|
+
content: renderTab(notAdded, "All widgets are on your dashboard", "Remove a widget from its menu and it shows up here.")
|
|
43
|
+
}),
|
|
44
|
+
/*#__PURE__*/ react.createElement(Tabs.Tab, {
|
|
45
|
+
key: "onDashboard",
|
|
46
|
+
value: "onDashboard",
|
|
47
|
+
trigger: `On dashboard (${onDashboard.length})`,
|
|
48
|
+
content: renderTab(onDashboard, "Your dashboard is empty", "Add a widget from the Not added tab.")
|
|
49
|
+
}),
|
|
50
|
+
/*#__PURE__*/ react.createElement(Tabs.Tab, {
|
|
51
|
+
key: "all",
|
|
52
|
+
value: "all",
|
|
53
|
+
trigger: `All (${widgets.length})`,
|
|
54
|
+
content: renderTab(widgets, "No widgets available", "No app has registered a dashboard widget.")
|
|
55
|
+
})
|
|
56
|
+
]
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
export { AddWidgetDrawer };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=AddWidgetDrawer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/addWidgetDrawer/AddWidgetDrawer.js","sources":["../../../../src/Dashboard/components/addWidgetDrawer/AddWidgetDrawer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useState } from \"react\";\nimport { Drawer } from \"@webiny/admin-ui\";\nimport { Tabs } from \"@webiny/admin-ui\";\nimport type { DashboardLayoutPresenter } from \"../../dashboardLayout/presenter/abstractions.js\";\nimport type { DrawerWidget } from \"./types.js\";\nimport { WidgetTabContent } from \"./WidgetTabContent.js\";\n\ninterface AddWidgetDrawerProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n widgets: DrawerWidget[];\n columnCount: number;\n presenter: DashboardLayoutPresenter.Interface;\n}\n\nexport const AddWidgetDrawer = ({\n open,\n onOpenChange,\n widgets,\n columnCount,\n presenter\n}: AddWidgetDrawerProps) => {\n const [search, setSearch] = useState(\"\");\n\n const changeOpen = (next: boolean) => {\n // Every visit starts with an empty search.\n if (!next) {\n setSearch(\"\");\n }\n onOpenChange(next);\n };\n\n const onDashboard = widgets.filter(widget => widget.added);\n const notAdded = widgets.filter(widget => !widget.added);\n\n // Open where the user can act. When everything is added already, show the whole list.\n let defaultTab = \"all\";\n if (notAdded.length > 0) {\n defaultTab = \"notAdded\";\n }\n\n const renderTab = (items: DrawerWidget[], emptyTitle: string, emptyDescription: string) => (\n <WidgetTabContent\n items={items}\n search={search}\n onSearch={setSearch}\n emptyTitle={emptyTitle}\n emptyDescription={emptyDescription}\n columnCount={columnCount}\n presenter={presenter}\n />\n );\n\n return (\n <Drawer\n open={open}\n onOpenChange={changeOpen}\n modal={true}\n title={\"Add widget\"}\n description={\"Pick a column when you add a widget. You can drag it anywhere after.\"}\n width={400}\n bodyPadding={false}\n headerSeparator={false}\n showCloseButton={true}\n >\n <Tabs\n separator={true}\n spacing={\"lg\"}\n defaultValue={defaultTab}\n tabs={[\n <Tabs.Tab\n key={\"notAdded\"}\n value={\"notAdded\"}\n trigger={`Not added (${notAdded.length})`}\n content={renderTab(\n notAdded,\n \"All widgets are on your dashboard\",\n \"Remove a widget from its menu and it shows up here.\"\n )}\n />,\n <Tabs.Tab\n key={\"onDashboard\"}\n value={\"onDashboard\"}\n trigger={`On dashboard (${onDashboard.length})`}\n content={renderTab(\n onDashboard,\n \"Your dashboard is empty\",\n \"Add a widget from the Not added tab.\"\n )}\n />,\n <Tabs.Tab\n key={\"all\"}\n value={\"all\"}\n trigger={`All (${widgets.length})`}\n content={renderTab(\n widgets,\n \"No widgets available\",\n \"No app has registered a dashboard widget.\"\n )}\n />\n ]}\n />\n </Drawer>\n );\n};\n"],"names":["AddWidgetDrawer","open","onOpenChange","widgets","columnCount","presenter","search","setSearch","useState","changeOpen","next","onDashboard","widget","notAdded","defaultTab","renderTab","items","emptyTitle","emptyDescription","WidgetTabContent","Drawer","Tabs"],"mappings":";;;AAgBO,MAAMA,kBAAkB,CAAC,EAC5BC,IAAI,EACJC,YAAY,EACZC,OAAO,EACPC,WAAW,EACXC,SAAS,EACU;IACnB,MAAM,CAACC,QAAQC,UAAU,GAAGC,SAAS;IAErC,MAAMC,aAAa,CAACC;QAEhB,IAAI,CAACA,MACDH,UAAU;QAEdL,aAAaQ;IACjB;IAEA,MAAMC,cAAcR,QAAQ,MAAM,CAACS,CAAAA,SAAUA,OAAO,KAAK;IACzD,MAAMC,WAAWV,QAAQ,MAAM,CAACS,CAAAA,SAAU,CAACA,OAAO,KAAK;IAGvD,IAAIE,aAAa;IACjB,IAAID,SAAS,MAAM,GAAG,GAClBC,aAAa;IAGjB,MAAMC,YAAY,CAACC,OAAuBC,YAAoBC,mBAAAA,WAAAA,GAC1D,oBAACC,kBAAgBA;YACb,OAAOH;YACP,QAAQV;YACR,UAAUC;YACV,YAAYU;YACZ,kBAAkBC;YAClB,aAAad;YACb,WAAWC;;IAInB,OAAO,WAAP,GACI,oBAACe,QAAMA;QACH,MAAMnB;QACN,cAAcQ;QACd,OAAO;QACP,OAAO;QACP,aAAa;QACb,OAAO;QACP,aAAa;QACb,iBAAiB;QACjB,iBAAiB;qBAEjB,oBAACY,MAAIA;QACD,WAAW;QACX,SAAS;QACT,cAAcP;QACd,MAAM;0BACF,oBAACO,KAAK,GAAG;gBACL,KAAK;gBACL,OAAO;gBACP,SAAS,CAAC,WAAW,EAAER,SAAS,MAAM,CAAC,CAAC,CAAC;gBACzC,SAASE,UACLF,UACA,qCACA;;0BAGR,oBAACQ,KAAK,GAAG;gBACL,KAAK;gBACL,OAAO;gBACP,SAAS,CAAC,cAAc,EAAEV,YAAY,MAAM,CAAC,CAAC,CAAC;gBAC/C,SAASI,UACLJ,aACA,2BACA;;0BAGR,oBAACU,KAAK,GAAG;gBACL,KAAK;gBACL,OAAO;gBACP,SAAS,CAAC,KAAK,EAAElB,QAAQ,MAAM,CAAC,CAAC,CAAC;gBAClC,SAASY,UACLZ,SACA,wBACA;;SAGX;;AAIjB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DashboardLayoutPresenter } from "../../dashboardLayout/presenter/abstractions.js";
|
|
3
|
+
import type { DrawerWidget } from "./types.js";
|
|
4
|
+
interface DrawerWidgetRowProps {
|
|
5
|
+
widget: DrawerWidget;
|
|
6
|
+
columnCount: number;
|
|
7
|
+
presenter: DashboardLayoutPresenter.Interface;
|
|
8
|
+
}
|
|
9
|
+
export declare const DrawerWidgetRow: ({ widget, columnCount, presenter }: DrawerWidgetRowProps) => React.JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Button, Text } from "@webiny/admin-ui";
|
|
3
|
+
import { AddToColumnMenu } from "./AddToColumnMenu.js";
|
|
4
|
+
import { WidgetPreviewFrame } from "./WidgetPreviewFrame.js";
|
|
5
|
+
const DrawerWidgetRow = ({ widget, columnCount, presenter })=>{
|
|
6
|
+
let action = /*#__PURE__*/ react.createElement(AddToColumnMenu, {
|
|
7
|
+
widget: widget,
|
|
8
|
+
columnCount: columnCount,
|
|
9
|
+
presenter: presenter
|
|
10
|
+
});
|
|
11
|
+
if (widget.added) action = /*#__PURE__*/ react.createElement(Button, {
|
|
12
|
+
size: "sm",
|
|
13
|
+
variant: "tertiary",
|
|
14
|
+
text: "Added",
|
|
15
|
+
disabled: true
|
|
16
|
+
});
|
|
17
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
18
|
+
className: "flex flex-col gap-sm rounded-md border-sm border-neutral-muted p-sm-extra"
|
|
19
|
+
}, /*#__PURE__*/ react.createElement(WidgetPreviewFrame, {
|
|
20
|
+
preview: widget.preview,
|
|
21
|
+
added: widget.added
|
|
22
|
+
}), /*#__PURE__*/ react.createElement("div", {
|
|
23
|
+
className: "flex items-start gap-md"
|
|
24
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
25
|
+
className: "min-w-0 flex-1"
|
|
26
|
+
}, /*#__PURE__*/ react.createElement(Text, {
|
|
27
|
+
as: "div",
|
|
28
|
+
size: "md",
|
|
29
|
+
className: "font-semibold"
|
|
30
|
+
}, widget.title), widget.description && /*#__PURE__*/ react.createElement(Text, {
|
|
31
|
+
as: "div",
|
|
32
|
+
size: "sm",
|
|
33
|
+
className: "mt-xxs text-neutral-strong"
|
|
34
|
+
}, widget.description)), action));
|
|
35
|
+
};
|
|
36
|
+
export { DrawerWidgetRow };
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=DrawerWidgetRow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/addWidgetDrawer/DrawerWidgetRow.js","sources":["../../../../src/Dashboard/components/addWidgetDrawer/DrawerWidgetRow.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button } from \"@webiny/admin-ui\";\nimport { Text } from \"@webiny/admin-ui\";\nimport type { DashboardLayoutPresenter } from \"../../dashboardLayout/presenter/abstractions.js\";\nimport type { DrawerWidget } from \"./types.js\";\nimport { AddToColumnMenu } from \"./AddToColumnMenu.js\";\nimport { WidgetPreviewFrame } from \"./WidgetPreviewFrame.js\";\n\ninterface DrawerWidgetRowProps {\n widget: DrawerWidget;\n columnCount: number;\n presenter: DashboardLayoutPresenter.Interface;\n}\n\nexport const DrawerWidgetRow = ({ widget, columnCount, presenter }: DrawerWidgetRowProps) => {\n let action = (\n <AddToColumnMenu widget={widget} columnCount={columnCount} presenter={presenter} />\n );\n if (widget.added) {\n action = <Button size={\"sm\"} variant={\"tertiary\"} text={\"Added\"} disabled={true} />;\n }\n\n return (\n <div\n className={\"flex flex-col gap-sm rounded-md border-sm border-neutral-muted p-sm-extra\"}\n >\n <WidgetPreviewFrame preview={widget.preview} added={widget.added} />\n <div className={\"flex items-start gap-md\"}>\n <div className={\"min-w-0 flex-1\"}>\n <Text as={\"div\"} size={\"md\"} className={\"font-semibold\"}>\n {widget.title}\n </Text>\n {widget.description && (\n <Text as={\"div\"} size={\"sm\"} className={\"mt-xxs text-neutral-strong\"}>\n {widget.description}\n </Text>\n )}\n </div>\n {action}\n </div>\n </div>\n );\n};\n"],"names":["DrawerWidgetRow","widget","columnCount","presenter","action","AddToColumnMenu","Button","WidgetPreviewFrame","Text"],"mappings":";;;;AAcO,MAAMA,kBAAkB,CAAC,EAAEC,MAAM,EAAEC,WAAW,EAAEC,SAAS,EAAwB;IACpF,IAAIC,SAAS,WAATA,GACA,oBAACC,iBAAeA;QAAC,QAAQJ;QAAQ,aAAaC;QAAa,WAAWC;;IAE1E,IAAIF,OAAO,KAAK,EACZG,SAAS,WAATA,GAAS,oBAACE,QAAMA;QAAC,MAAM;QAAM,SAAS;QAAY,MAAM;QAAS,UAAU;;IAG/E,OAAO,WAAP,GACI,oBAAC;QACG,WAAW;qBAEX,oBAACC,oBAAkBA;QAAC,SAASN,OAAO,OAAO;QAAE,OAAOA,OAAO,KAAK;sBAChE,oBAAC;QAAI,WAAW;qBACZ,oBAAC;QAAI,WAAW;qBACZ,oBAACO,MAAIA;QAAC,IAAI;QAAO,MAAM;QAAM,WAAW;OACnCP,OAAO,KAAK,GAEhBA,OAAO,WAAW,IAAI,WAAJ,GACf,oBAACO,MAAIA;QAAC,IAAI;QAAO,MAAM;QAAM,WAAW;OACnCP,OAAO,WAAW,IAI9BG;AAIjB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import react, { useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
import { cn } from "@webiny/admin-ui";
|
|
3
|
+
import { WidgetSketch } from "./WidgetSketch.js";
|
|
4
|
+
const RENDER_WIDTH = 520;
|
|
5
|
+
const FRAME_HEIGHT = 150;
|
|
6
|
+
const WidgetPreviewFrame = ({ preview, added })=>{
|
|
7
|
+
const frameRef = useRef(null);
|
|
8
|
+
const [scale, setScale] = useState(0);
|
|
9
|
+
useLayoutEffect(()=>{
|
|
10
|
+
const frame = frameRef.current;
|
|
11
|
+
if (!frame) return;
|
|
12
|
+
frame.setAttribute("inert", "");
|
|
13
|
+
const fit = ()=>setScale(frame.clientWidth / RENDER_WIDTH);
|
|
14
|
+
fit();
|
|
15
|
+
const observer = new ResizeObserver(fit);
|
|
16
|
+
observer.observe(frame);
|
|
17
|
+
return ()=>observer.disconnect();
|
|
18
|
+
}, []);
|
|
19
|
+
let content = /*#__PURE__*/ react.createElement("div", {
|
|
20
|
+
className: "flex h-full items-center justify-center"
|
|
21
|
+
}, /*#__PURE__*/ react.createElement(WidgetSketch, {
|
|
22
|
+
added: added
|
|
23
|
+
}));
|
|
24
|
+
if (preview) content = /*#__PURE__*/ react.createElement(react.Fragment, null, /*#__PURE__*/ react.createElement("div", {
|
|
25
|
+
className: "origin-top-left p-md",
|
|
26
|
+
style: {
|
|
27
|
+
width: RENDER_WIDTH,
|
|
28
|
+
transform: `scale(${scale})`
|
|
29
|
+
}
|
|
30
|
+
}, preview), /*#__PURE__*/ react.createElement("div", {
|
|
31
|
+
className: "absolute inset-x-0 bottom-0 h-xl bg-gradient-to-t from-neutral-light"
|
|
32
|
+
}));
|
|
33
|
+
return /*#__PURE__*/ react.createElement("div", {
|
|
34
|
+
"aria-hidden": true,
|
|
35
|
+
ref: frameRef,
|
|
36
|
+
className: cn("pointer-events-none relative overflow-hidden rounded-sm bg-neutral-light", "select-none", added && "opacity-60"),
|
|
37
|
+
style: {
|
|
38
|
+
height: FRAME_HEIGHT
|
|
39
|
+
}
|
|
40
|
+
}, content);
|
|
41
|
+
};
|
|
42
|
+
export { WidgetPreviewFrame };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=WidgetPreviewFrame.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/addWidgetDrawer/WidgetPreviewFrame.js","sources":["../../../../src/Dashboard/components/addWidgetDrawer/WidgetPreviewFrame.tsx"],"sourcesContent":["import React from \"react\";\nimport { useLayoutEffect } from \"react\";\nimport { useRef } from \"react\";\nimport { useState } from \"react\";\nimport { cn } from \"@webiny/admin-ui\";\nimport { WidgetSketch } from \"./WidgetSketch.js\";\n\n// The preview renders at a dashboard column's width, then shrinks to the frame's width.\nconst RENDER_WIDTH = 520;\nconst FRAME_HEIGHT = 150;\n\ninterface WidgetPreviewFrameProps {\n preview?: React.ReactElement;\n // Already on the dashboard; the preview is dimmed to match the disabled \"Added\" button.\n added: boolean;\n}\n\nexport const WidgetPreviewFrame = ({ preview, added }: WidgetPreviewFrameProps) => {\n const frameRef = useRef<HTMLDivElement>(null);\n const [scale, setScale] = useState(0);\n\n useLayoutEffect(() => {\n const frame = frameRef.current;\n if (!frame) {\n return;\n }\n // A preview is a picture: its links and buttons must not take focus or clicks.\n frame.setAttribute(\"inert\", \"\");\n\n const fit = () => setScale(frame.clientWidth / RENDER_WIDTH);\n fit();\n const observer = new ResizeObserver(fit);\n observer.observe(frame);\n return () => observer.disconnect();\n }, []);\n\n let content = (\n <div className={\"flex h-full items-center justify-center\"}>\n <WidgetSketch added={added} />\n </div>\n );\n if (preview) {\n content = (\n <>\n <div\n className={\"origin-top-left p-md\"}\n style={{ width: RENDER_WIDTH, transform: `scale(${scale})` }}\n >\n {preview}\n </div>\n {/* Taller widgets are cropped; the fade makes the cut look intentional. */}\n <div\n className={\n \"absolute inset-x-0 bottom-0 h-xl bg-gradient-to-t from-neutral-light\"\n }\n />\n </>\n );\n }\n\n return (\n <div\n aria-hidden\n ref={frameRef}\n className={cn(\n \"pointer-events-none relative overflow-hidden rounded-sm bg-neutral-light\",\n \"select-none\",\n added && \"opacity-60\"\n )}\n style={{ height: FRAME_HEIGHT }}\n >\n {content}\n </div>\n );\n};\n"],"names":["RENDER_WIDTH","FRAME_HEIGHT","WidgetPreviewFrame","preview","added","frameRef","useRef","scale","setScale","useState","useLayoutEffect","frame","fit","observer","ResizeObserver","content","WidgetSketch","cn"],"mappings":";;;AAQA,MAAMA,eAAe;AACrB,MAAMC,eAAe;AAQd,MAAMC,qBAAqB,CAAC,EAAEC,OAAO,EAAEC,KAAK,EAA2B;IAC1E,MAAMC,WAAWC,OAAuB;IACxC,MAAM,CAACC,OAAOC,SAAS,GAAGC,SAAS;IAEnCC,gBAAgB;QACZ,MAAMC,QAAQN,SAAS,OAAO;QAC9B,IAAI,CAACM,OACD;QAGJA,MAAM,YAAY,CAAC,SAAS;QAE5B,MAAMC,MAAM,IAAMJ,SAASG,MAAM,WAAW,GAAGX;QAC/CY;QACA,MAAMC,WAAW,IAAIC,eAAeF;QACpCC,SAAS,OAAO,CAACF;QACjB,OAAO,IAAME,SAAS,UAAU;IACpC,GAAG,EAAE;IAEL,IAAIE,UAAU,WAAVA,GACA,oBAAC;QAAI,WAAW;qBACZ,oBAACC,cAAYA;QAAC,OAAOZ;;IAG7B,IAAID,SACAY,UAAU,WAAVA,GACI,wDACI,oBAAC;QACG,WAAW;QACX,OAAO;YAAE,OAAOf;YAAc,WAAW,CAAC,MAAM,EAAEO,MAAM,CAAC,CAAC;QAAC;OAE1DJ,UAAAA,WAAAA,GAGL,oBAAC;QACG,WACI;;IAOpB,OAAO,WAAP,GACI,oBAAC;QACG;QACA,KAAKE;QACL,WAAWY,GACP,4EACA,eACAb,SAAS;QAEb,OAAO;YAAE,QAAQH;QAAa;OAE7Bc;AAGb"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { cn } from "@webiny/admin-ui";
|
|
3
|
+
const WidgetSketch = ({ added })=>/*#__PURE__*/ react.createElement("div", {
|
|
4
|
+
className: cn("flex h-[58px] w-[84px] flex-none flex-col gap-xxs overflow-hidden rounded-sm", "border-sm border-neutral-muted bg-neutral-base p-xs")
|
|
5
|
+
}, /*#__PURE__*/ react.createElement("div", {
|
|
6
|
+
className: "flex items-center gap-[3px]"
|
|
7
|
+
}, /*#__PURE__*/ react.createElement("span", {
|
|
8
|
+
className: cn("size-[7px] rounded-[2px]", added ? "bg-neutral-strong" : "bg-primary")
|
|
9
|
+
}), /*#__PURE__*/ react.createElement("span", {
|
|
10
|
+
className: "h-[4px] w-[30px] rounded-[2px] bg-neutral-strong/40"
|
|
11
|
+
})), /*#__PURE__*/ react.createElement("span", {
|
|
12
|
+
className: "h-[4px] w-full rounded-[2px] bg-neutral-muted"
|
|
13
|
+
}), /*#__PURE__*/ react.createElement("span", {
|
|
14
|
+
className: "h-[4px] w-3/4 rounded-[2px] bg-neutral-muted"
|
|
15
|
+
}), /*#__PURE__*/ react.createElement("span", {
|
|
16
|
+
className: "mt-[2px] h-[12px] w-[40px] rounded-[3px] bg-neutral-dimmed"
|
|
17
|
+
}));
|
|
18
|
+
export { WidgetSketch };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=WidgetSketch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dashboard/components/addWidgetDrawer/WidgetSketch.js","sources":["../../../../src/Dashboard/components/addWidgetDrawer/WidgetSketch.tsx"],"sourcesContent":["import React from \"react\";\nimport { cn } from \"@webiny/admin-ui\";\n\n// A tiny sketch of a widget card, for widgets that don't provide a preview.\nexport const WidgetSketch = ({ added }: { added: boolean }) => {\n return (\n <div\n className={cn(\n \"flex h-[58px] w-[84px] flex-none flex-col gap-xxs overflow-hidden rounded-sm\",\n \"border-sm border-neutral-muted bg-neutral-base p-xs\"\n )}\n >\n <div className={\"flex items-center gap-[3px]\"}>\n <span\n className={cn(\n \"size-[7px] rounded-[2px]\",\n added ? \"bg-neutral-strong\" : \"bg-primary\"\n )}\n />\n <span className={\"h-[4px] w-[30px] rounded-[2px] bg-neutral-strong/40\"} />\n </div>\n <span className={\"h-[4px] w-full rounded-[2px] bg-neutral-muted\"} />\n <span className={\"h-[4px] w-3/4 rounded-[2px] bg-neutral-muted\"} />\n <span className={\"mt-[2px] h-[12px] w-[40px] rounded-[3px] bg-neutral-dimmed\"} />\n </div>\n );\n};\n"],"names":["WidgetSketch","added","cn"],"mappings":";;AAIO,MAAMA,eAAe,CAAC,EAAEC,KAAK,EAAsB,GAC/C,WAAP,GACI,oBAAC;QACG,WAAWC,GACP,gFACA;qBAGJ,oBAAC;QAAI,WAAW;qBACZ,oBAAC;QACG,WAAWA,GACP,4BACAD,QAAQ,sBAAsB;sBAGtC,oBAAC;QAAK,WAAW;uBAErB,oBAAC;QAAK,WAAW;sBACjB,oBAAC;QAAK,WAAW;sBACjB,oBAAC;QAAK,WAAW"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { DashboardLayoutPresenter } from "../../dashboardLayout/presenter/abstractions.js";
|
|
3
|
+
import type { DrawerWidget } from "./types.js";
|
|
4
|
+
interface WidgetTabContentProps {
|
|
5
|
+
items: DrawerWidget[];
|
|
6
|
+
search: string;
|
|
7
|
+
onSearch: (value: string) => void;
|
|
8
|
+
emptyTitle: string;
|
|
9
|
+
emptyDescription: string;
|
|
10
|
+
columnCount: number;
|
|
11
|
+
presenter: DashboardLayoutPresenter.Interface;
|
|
12
|
+
}
|
|
13
|
+
export declare const WidgetTabContent: ({ items, search, onSearch, emptyTitle, emptyDescription, columnCount, presenter }: WidgetTabContentProps) => React.JSX.Element;
|
|
14
|
+
export {};
|