@burdenoff/microfe-eventfullymanaged 2026.625.1 → 2026.625.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +88 -47
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +49 -45
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +111 -78
- package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +29 -28
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EventsPage.js +71 -42
- package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js +11 -10
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +54 -24
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +135 -105
- package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +63 -33
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +110 -77
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +54 -23
- package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +67 -37
- package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +61 -42
- package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +85 -85
- package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +22 -21
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +37 -40
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +67 -38
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +99 -99
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js +23 -22
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
- package/package.json +2 -2
|
@@ -4,10 +4,10 @@ import { useState as r } from "react";
|
|
|
4
4
|
import { useParams as i } from "react-router-dom";
|
|
5
5
|
import { jsx as a, jsxs as o } from "react/jsx-runtime";
|
|
6
6
|
import { ArrowLeft as s, Plus as c, SquareStack as l } from "lucide-react";
|
|
7
|
-
import { Button as u,
|
|
7
|
+
import { Button as u, EmphasisPanel as d, GlassCard as f, IllustratedEmptyState as p, Input as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
|
|
8
8
|
//#region src/eventfullymanaged/pages/venues/FloorPlansPage.tsx
|
|
9
|
-
function
|
|
10
|
-
let { id:
|
|
9
|
+
function g() {
|
|
10
|
+
let { id: g = "" } = i(), { navigate: _ } = e(), { data: v, loading: y, refetch: b } = n(g), [x, { loading: S }] = t(), [C, w] = r(""), T = v?.venue, E = v?.floorPlans?.items ?? [];
|
|
11
11
|
return /* @__PURE__ */ o("div", {
|
|
12
12
|
className: "space-y-6 p-6",
|
|
13
13
|
children: [
|
|
@@ -17,62 +17,59 @@ function m() {
|
|
|
17
17
|
type: "button",
|
|
18
18
|
variant: "ghost",
|
|
19
19
|
size: "sm",
|
|
20
|
-
onClick: () =>
|
|
20
|
+
onClick: () => _(`/venues/${g}`),
|
|
21
21
|
children: [/* @__PURE__ */ a(s, { className: "h-4 w-4" }), "Back to Venue"]
|
|
22
22
|
}), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
|
|
23
23
|
className: "text-2xl font-bold text-text-primary",
|
|
24
24
|
children: "Floor Plans"
|
|
25
25
|
}), /* @__PURE__ */ a("p", {
|
|
26
26
|
className: "mt-1 text-sm text-text-secondary",
|
|
27
|
-
children:
|
|
27
|
+
children: T?.name ?? "Venue"
|
|
28
28
|
})] })]
|
|
29
29
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
|
|
32
|
-
className: "
|
|
33
|
-
children:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
disabled: b,
|
|
57
|
-
children: [/* @__PURE__ */ a(c, { className: "h-4 w-4" }), b ? "Creating..." : "Create"]
|
|
58
|
-
})]
|
|
30
|
+
/* @__PURE__ */ a(h, { children: "Floor plans are the maps of your venue — the hall layout, booth positions, stage and entrances. Add one per space so you can lay out exhibitors, plan attendee flow, and give everyone a clear picture of the room on the day." }),
|
|
31
|
+
/* @__PURE__ */ o(d, { children: [/* @__PURE__ */ a("h2", {
|
|
32
|
+
className: "mb-3 text-sm font-semibold text-text-primary",
|
|
33
|
+
children: "Create floor plan"
|
|
34
|
+
}), /* @__PURE__ */ o("div", {
|
|
35
|
+
className: "flex flex-col gap-3 sm:flex-row",
|
|
36
|
+
children: [/* @__PURE__ */ a(m, {
|
|
37
|
+
type: "text",
|
|
38
|
+
value: C,
|
|
39
|
+
onChange: (e) => w(e.target.value),
|
|
40
|
+
placeholder: "Main Hall Layout",
|
|
41
|
+
"aria-label": "Floor plan name",
|
|
42
|
+
className: "flex-1"
|
|
43
|
+
}), /* @__PURE__ */ o(u, {
|
|
44
|
+
type: "button",
|
|
45
|
+
onClick: async () => {
|
|
46
|
+
!C.trim() || !g || (await x({ variables: { input: {
|
|
47
|
+
venueId: g,
|
|
48
|
+
name: C.trim(),
|
|
49
|
+
imageUrl: "",
|
|
50
|
+
dimensions: {},
|
|
51
|
+
interactiveAreas: {}
|
|
52
|
+
} } }), w(""), await b());
|
|
53
|
+
},
|
|
54
|
+
disabled: S,
|
|
55
|
+
children: [/* @__PURE__ */ a(c, { className: "h-4 w-4" }), S ? "Creating..." : "Create"]
|
|
59
56
|
})]
|
|
60
|
-
}),
|
|
61
|
-
|
|
57
|
+
})] }),
|
|
58
|
+
y ? /* @__PURE__ */ a(f, {
|
|
62
59
|
treatment: "plain",
|
|
63
60
|
className: "border-border-seam p-8 text-center text-sm text-text-secondary",
|
|
64
61
|
children: "Loading floor plans..."
|
|
65
|
-
}) :
|
|
62
|
+
}) : E.length === 0 ? /* @__PURE__ */ a(f, {
|
|
66
63
|
treatment: "plain",
|
|
67
64
|
className: "border-border-seam",
|
|
68
|
-
children: /* @__PURE__ */ a(
|
|
65
|
+
children: /* @__PURE__ */ a(p, {
|
|
69
66
|
illustration: "empty-files",
|
|
70
67
|
title: "No floor plans found.",
|
|
71
68
|
description: "Create one to start mapping your venue."
|
|
72
69
|
})
|
|
73
70
|
}) : /* @__PURE__ */ a("div", {
|
|
74
71
|
className: "grid grid-cols-1 gap-4 md:grid-cols-2",
|
|
75
|
-
children:
|
|
72
|
+
children: E.map((e) => /* @__PURE__ */ o(f, {
|
|
76
73
|
treatment: "metric",
|
|
77
74
|
className: "p-4",
|
|
78
75
|
children: [/* @__PURE__ */ o("div", {
|
|
@@ -96,6 +93,6 @@ function m() {
|
|
|
96
93
|
});
|
|
97
94
|
}
|
|
98
95
|
//#endregion
|
|
99
|
-
export {
|
|
96
|
+
export { g as default };
|
|
100
97
|
|
|
101
98
|
//# sourceMappingURL=FloorPlansPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloorPlansPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/FloorPlansPage.tsx"],"sourcesContent":["import { ArrowLeft, Plus, SquareStack } from 'lucide-react';\nimport { Button, GlassCard, IllustratedEmptyState, Input } from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCreateFloorPlanMutation, useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype FloorPlan = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n};\n\nexport default function FloorPlansPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading, refetch } = useVenueQuery(id);\n const [createFloorPlan, { loading: creating }] = useCreateFloorPlanMutation();\n const [name, setName] = useState('');\n\n const venue = data?.venue;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlan[];\n\n const handleCreate = async () => {\n if (!name.trim() || !id) {\n return;\n }\n await createFloorPlan({\n variables: {\n input: {\n venueId: id,\n name: name.trim(),\n imageUrl: '',\n dimensions: {},\n interactiveAreas: {},\n },\n },\n });\n setName('');\n await refetch();\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate(`/venues/${id}`)}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venue\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">Floor Plans</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue?.name ?? 'Venue'}</p>\n </div>\n </div>\n\n <
|
|
1
|
+
{"version":3,"file":"FloorPlansPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/FloorPlansPage.tsx"],"sourcesContent":["import { ArrowLeft, Plus, SquareStack } from 'lucide-react';\nimport { Button, EmphasisPanel, GlassCard, IllustratedEmptyState, Input, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCreateFloorPlanMutation, useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype FloorPlan = {\n id: string;\n venueId: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n interactiveAreas?: Record<string, unknown> | null;\n};\n\nexport default function FloorPlansPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading, refetch } = useVenueQuery(id);\n const [createFloorPlan, { loading: creating }] = useCreateFloorPlanMutation();\n const [name, setName] = useState('');\n\n const venue = data?.venue;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlan[];\n\n const handleCreate = async () => {\n if (!name.trim() || !id) {\n return;\n }\n await createFloorPlan({\n variables: {\n input: {\n venueId: id,\n name: name.trim(),\n imageUrl: '',\n dimensions: {},\n interactiveAreas: {},\n },\n },\n });\n setName('');\n await refetch();\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate(`/venues/${id}`)}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venue\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">Floor Plans</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue?.name ?? 'Venue'}</p>\n </div>\n </div>\n\n <PagePurpose>\n Floor plans are the maps of your venue — the hall layout, booth positions, stage and entrances. Add one per\n space so you can lay out exhibitors, plan attendee flow, and give everyone a clear picture of the room on the\n day.\n </PagePurpose>\n\n <EmphasisPanel>\n <h2 className=\"mb-3 text-sm font-semibold text-text-primary\">Create floor plan</h2>\n <div className=\"flex flex-col gap-3 sm:flex-row\">\n <Input\n type=\"text\"\n value={name}\n onChange={(event) => setName(event.target.value)}\n placeholder=\"Main Hall Layout\"\n aria-label=\"Floor plan name\"\n className=\"flex-1\"\n />\n <Button type=\"button\" onClick={handleCreate} disabled={creating}>\n <Plus className=\"h-4 w-4\" />\n {creating ? 'Creating...' : 'Create'}\n </Button>\n </div>\n </EmphasisPanel>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading floor plans...\n </GlassCard>\n ) : floorPlans.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans found.\"\n description=\"Create one to start mapping your venue.\"\n />\n </GlassCard>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n {floorPlans.map((plan) => (\n <GlassCard key={plan.id} treatment=\"metric\" className=\"p-4\">\n <div className=\"flex items-center gap-2 text-text-primary\">\n <SquareStack className=\"h-4 w-4 text-action-primary-bg\" />\n <h3 className=\"font-semibold\">{plan.name}</h3>\n </div>\n <p className=\"mt-2 text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image available' : 'No image uploaded'} |{' '}\n {plan.dimensions ? 'Dimensions configured' : 'No dimensions configured'}\n </p>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,SAAwB,IAAiB;CACvC,IAAM,EAAE,QAAK,OAAO,GAA2B,EACzC,EAAE,gBAAa,GAAsB,EACrC,EAAE,SAAM,YAAS,eAAY,EAAc,EAAG,EAC9C,CAAC,GAAiB,EAAE,SAAS,OAAc,GAA4B,EACvE,CAAC,GAAM,KAAW,EAAS,GAAG,EAE9B,IAAQ,GAAM,OACd,IAAc,GAAM,YAAY,SAAS,EAAE;AAqBjD,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAQ;KAAQ,MAAK;KAAK,eAAe,EAAS,WAAW,IAAK;eAAxF,CACE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,gBAE1B;QACT,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAgB,CAAA,EACrE,kBAAC,KAAD;KAAG,WAAU;eAAoC,GAAO,QAAQ;KAAY,CAAA,CACxE,EAAA,CAAA,CACF;;GAEN,kBAAC,GAAD,EAAA,UAAa,kOAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAA+C;IAAsB,CAAA,EACnF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KACE,MAAK;KACL,OAAO;KACP,WAAW,MAAU,EAAQ,EAAM,OAAO,MAAM;KAChD,aAAY;KACZ,cAAW;KACX,WAAU;KACV,CAAA,EACF,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAjDT,YAAY;AAC3B,OAAC,EAAK,MAAM,IAAI,CAAC,MAGrB,MAAM,EAAgB,EACpB,WAAW,EACT,OAAO;OACL,SAAS;OACT,MAAM,EAAK,MAAM;OACjB,UAAU;OACV,YAAY,EAAE;OACd,kBAAkB,EAAE;OACrB,EACF,EACF,CAAC,EACF,EAAQ,GAAG,EACX,MAAM,GAAS;;KAiCoC,UAAU;eAAvD,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,IAAW,gBAAgB,SACrB;OACL;MACQ,EAAA,CAAA;GAEf,IACC,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cAAiE;IAE5F,CAAA,GACV,EAAW,WAAW,IACxB,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cACrC,kBAAC,GAAD;KACE,cAAa;KACb,OAAM;KACN,aAAY;KACZ,CAAA;IACQ,CAAA,GAEZ,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAW,KAAK,MACf,kBAAC,GAAD;KAAyB,WAAU;KAAS,WAAU;eAAtD,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,kCAAmC,CAAA,EAC1D,kBAAC,MAAD;OAAI,WAAU;iBAAiB,EAAK;OAAU,CAAA,CAC1C;SACN,kBAAC,KAAD;MAAG,WAAU;gBAAb;OACG,EAAK,WAAW,oBAAoB;OAAoB;OAAG;OAC3D,EAAK,aAAa,0BAA0B;OAC3C;QACM;OATI,EAAK,GAST,CACZ;IACE,CAAA;GAEJ"}
|
|
@@ -2,44 +2,45 @@ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContex
|
|
|
2
2
|
import { useVenueQuery as t } from "../../api/eventApi.js";
|
|
3
3
|
import { useParams as n } from "react-router-dom";
|
|
4
4
|
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
-
import { ArrowLeft as a, Building2 as o, Edit as s, MapPin as c,
|
|
6
|
-
import { Badge as
|
|
5
|
+
import { ArrowLeft as a, Building2 as o, Edit as s, MapPin as c, Megaphone as l, SquareStack as u, Users as d } from "lucide-react";
|
|
6
|
+
import { Badge as f, Button as p, GlassCard as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
7
7
|
//#region src/eventfullymanaged/pages/venues/VenueDetailPage.tsx
|
|
8
|
-
function
|
|
9
|
-
let { id:
|
|
10
|
-
return
|
|
8
|
+
function v() {
|
|
9
|
+
let { id: v = "" } = n(), { navigate: y } = e(), { data: b, loading: x } = t(v), S = b?.venue ?? null, C = b?.floorPlans?.items ?? [];
|
|
10
|
+
return x ? /* @__PURE__ */ r("div", {
|
|
11
11
|
className: "p-6 text-sm text-text-secondary",
|
|
12
12
|
children: "Loading venue..."
|
|
13
|
-
}) :
|
|
13
|
+
}) : S ? /* @__PURE__ */ i("div", {
|
|
14
14
|
className: "space-y-6 p-6",
|
|
15
15
|
children: [
|
|
16
|
+
/* @__PURE__ */ r(_, { children: "The full record for one venue. Review its location, capacity and status, see what amenities it offers, and manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an event to it." }),
|
|
16
17
|
/* @__PURE__ */ i("div", {
|
|
17
18
|
className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
|
|
18
19
|
children: [/* @__PURE__ */ i("div", {
|
|
19
20
|
className: "space-y-3",
|
|
20
|
-
children: [/* @__PURE__ */ i(
|
|
21
|
+
children: [/* @__PURE__ */ i(p, {
|
|
21
22
|
type: "button",
|
|
22
23
|
variant: "ghost",
|
|
23
24
|
size: "sm",
|
|
24
|
-
onClick: () =>
|
|
25
|
+
onClick: () => y("/venues"),
|
|
25
26
|
children: [/* @__PURE__ */ r(a, { className: "h-4 w-4" }), "Back to Venues"]
|
|
26
27
|
}), /* @__PURE__ */ i("div", { children: [/* @__PURE__ */ r("h1", {
|
|
27
28
|
className: "text-2xl font-bold text-text-primary",
|
|
28
|
-
children:
|
|
29
|
+
children: S.name
|
|
29
30
|
}), /* @__PURE__ */ r("p", {
|
|
30
31
|
className: "mt-1 text-sm text-text-secondary",
|
|
31
|
-
children:
|
|
32
|
+
children: S.description ?? "No description provided."
|
|
32
33
|
})] })]
|
|
33
|
-
}), /* @__PURE__ */ i(
|
|
34
|
+
}), /* @__PURE__ */ i(p, {
|
|
34
35
|
type: "button",
|
|
35
|
-
onClick: () =>
|
|
36
|
+
onClick: () => y(`/venues/${S.id}/edit`),
|
|
36
37
|
children: [/* @__PURE__ */ r(s, { className: "h-4 w-4" }), "Edit Venue"]
|
|
37
38
|
})]
|
|
38
39
|
}),
|
|
39
40
|
/* @__PURE__ */ i("div", {
|
|
40
41
|
className: "grid grid-cols-1 gap-4 lg:grid-cols-3",
|
|
41
42
|
children: [
|
|
42
|
-
/* @__PURE__ */ i(
|
|
43
|
+
/* @__PURE__ */ i(m, {
|
|
43
44
|
treatment: "metric",
|
|
44
45
|
className: "p-4",
|
|
45
46
|
children: [/* @__PURE__ */ i("div", {
|
|
@@ -48,26 +49,27 @@ function h() {
|
|
|
48
49
|
}), /* @__PURE__ */ r("p", {
|
|
49
50
|
className: "text-sm text-text-secondary",
|
|
50
51
|
children: [
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
S.addressLine1,
|
|
53
|
+
S.city,
|
|
54
|
+
S.state,
|
|
55
|
+
S.country,
|
|
56
|
+
S.postalCode
|
|
56
57
|
].filter(Boolean).join(", ") || "Location not configured"
|
|
57
58
|
})]
|
|
58
59
|
}),
|
|
59
|
-
/* @__PURE__ */ i(
|
|
60
|
-
treatment: "
|
|
60
|
+
/* @__PURE__ */ i(m, {
|
|
61
|
+
treatment: "glass",
|
|
62
|
+
glow: !0,
|
|
61
63
|
className: "p-4",
|
|
62
64
|
children: [/* @__PURE__ */ i("div", {
|
|
63
65
|
className: "mb-2 flex items-center gap-2 text-sm font-medium text-text-primary",
|
|
64
|
-
children: [/* @__PURE__ */ r(
|
|
66
|
+
children: [/* @__PURE__ */ r(d, { className: "h-4 w-4 text-action-primary-bg" }), "Capacity"]
|
|
65
67
|
}), /* @__PURE__ */ i("p", {
|
|
66
68
|
className: "text-sm tabular-nums text-text-secondary",
|
|
67
|
-
children: [
|
|
69
|
+
children: [S.capacity ?? 0, " attendees"]
|
|
68
70
|
})]
|
|
69
71
|
}),
|
|
70
|
-
/* @__PURE__ */ i(
|
|
72
|
+
/* @__PURE__ */ i(m, {
|
|
71
73
|
treatment: "metric",
|
|
72
74
|
className: "p-4",
|
|
73
75
|
children: [/* @__PURE__ */ i("div", {
|
|
@@ -75,12 +77,12 @@ function h() {
|
|
|
75
77
|
children: [/* @__PURE__ */ r(o, { className: "h-4 w-4 text-action-primary-bg" }), "Status"]
|
|
76
78
|
}), /* @__PURE__ */ r("p", {
|
|
77
79
|
className: "text-sm uppercase text-text-secondary",
|
|
78
|
-
children:
|
|
80
|
+
children: S.status
|
|
79
81
|
})]
|
|
80
82
|
})
|
|
81
83
|
]
|
|
82
84
|
}),
|
|
83
|
-
/* @__PURE__ */ i(
|
|
85
|
+
/* @__PURE__ */ i(m, {
|
|
84
86
|
treatment: "plain",
|
|
85
87
|
className: "border-border-seam p-5",
|
|
86
88
|
children: [/* @__PURE__ */ r("h2", {
|
|
@@ -88,7 +90,7 @@ function h() {
|
|
|
88
90
|
children: "Amenities"
|
|
89
91
|
}), /* @__PURE__ */ r("div", {
|
|
90
92
|
className: "mt-3 flex flex-wrap gap-2",
|
|
91
|
-
children:
|
|
93
|
+
children: S.amenities.length > 0 ? S.amenities.map((e) => /* @__PURE__ */ r(f, {
|
|
92
94
|
variant: "secondary",
|
|
93
95
|
children: e
|
|
94
96
|
}, e)) : /* @__PURE__ */ r("p", {
|
|
@@ -97,7 +99,7 @@ function h() {
|
|
|
97
99
|
})
|
|
98
100
|
})]
|
|
99
101
|
}),
|
|
100
|
-
/* @__PURE__ */ i(
|
|
102
|
+
/* @__PURE__ */ i(m, {
|
|
101
103
|
treatment: "plain",
|
|
102
104
|
className: "border-border-seam p-5",
|
|
103
105
|
children: [/* @__PURE__ */ i("div", {
|
|
@@ -105,18 +107,18 @@ function h() {
|
|
|
105
107
|
children: [/* @__PURE__ */ r("h2", {
|
|
106
108
|
className: "text-lg font-semibold text-text-primary",
|
|
107
109
|
children: "Floor Plans"
|
|
108
|
-
}), /* @__PURE__ */ i(
|
|
110
|
+
}), /* @__PURE__ */ i(p, {
|
|
109
111
|
type: "button",
|
|
110
112
|
variant: "outline",
|
|
111
113
|
size: "sm",
|
|
112
|
-
onClick: () =>
|
|
113
|
-
children: [/* @__PURE__ */ r(
|
|
114
|
+
onClick: () => y(`/venues/${S.id}/floor-plans`),
|
|
115
|
+
children: [/* @__PURE__ */ r(u, { className: "h-4 w-4" }), "Manage Floor Plans"]
|
|
114
116
|
})]
|
|
115
117
|
}), /* @__PURE__ */ r("div", {
|
|
116
118
|
className: "mt-4",
|
|
117
|
-
children:
|
|
119
|
+
children: C.length > 0 ? /* @__PURE__ */ r("ul", {
|
|
118
120
|
className: "space-y-2.5",
|
|
119
|
-
children:
|
|
121
|
+
children: C.map((e) => /* @__PURE__ */ i("li", {
|
|
120
122
|
className: "rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1",
|
|
121
123
|
children: [/* @__PURE__ */ r("p", {
|
|
122
124
|
className: "font-medium text-text-primary",
|
|
@@ -126,26 +128,53 @@ function h() {
|
|
|
126
128
|
children: e.imageUrl ? "Image configured" : "No image configured"
|
|
127
129
|
})]
|
|
128
130
|
}, e.id))
|
|
129
|
-
}) : /* @__PURE__ */ r(
|
|
131
|
+
}) : /* @__PURE__ */ r(h, {
|
|
130
132
|
illustration: "empty-files",
|
|
131
133
|
title: "No floor plans have been added yet.",
|
|
132
134
|
className: "py-8"
|
|
133
135
|
})
|
|
134
136
|
})]
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ r(g, {
|
|
139
|
+
storageKey: "eventfullymanaged-venue-detail",
|
|
140
|
+
title: "Get this venue ready to host",
|
|
141
|
+
steps: [
|
|
142
|
+
{
|
|
143
|
+
id: "edit-venue",
|
|
144
|
+
label: "Edit venue details",
|
|
145
|
+
description: "Update capacity, address, status and amenities.",
|
|
146
|
+
icon: /* @__PURE__ */ r(s, { className: "h-4 w-4" }),
|
|
147
|
+
onClick: () => y(`/venues/${S.id}/edit`)
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
id: "floor-plans",
|
|
151
|
+
label: "Add floor plans",
|
|
152
|
+
description: "Map the layout so attendees and staff can navigate.",
|
|
153
|
+
icon: /* @__PURE__ */ r(u, { className: "h-4 w-4" }),
|
|
154
|
+
onClick: () => y(`/venues/${S.id}/floor-plans`)
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: "resources",
|
|
158
|
+
label: "Review resource readiness",
|
|
159
|
+
description: "Check capacity, amenities and plans at a glance.",
|
|
160
|
+
icon: /* @__PURE__ */ r(l, { className: "h-4 w-4" }),
|
|
161
|
+
onClick: () => y(`/venues/${S.id}/resources`)
|
|
162
|
+
}
|
|
163
|
+
]
|
|
135
164
|
})
|
|
136
165
|
]
|
|
137
166
|
}) : /* @__PURE__ */ i("div", {
|
|
138
167
|
className: "space-y-4 p-6",
|
|
139
|
-
children: [/* @__PURE__ */ i(
|
|
168
|
+
children: [/* @__PURE__ */ i(p, {
|
|
140
169
|
type: "button",
|
|
141
170
|
variant: "ghost",
|
|
142
171
|
size: "sm",
|
|
143
|
-
onClick: () =>
|
|
172
|
+
onClick: () => y("/venues"),
|
|
144
173
|
children: [/* @__PURE__ */ r(a, { className: "h-4 w-4" }), "Back to Venues"]
|
|
145
|
-
}), /* @__PURE__ */ r(
|
|
174
|
+
}), /* @__PURE__ */ r(m, {
|
|
146
175
|
treatment: "plain",
|
|
147
176
|
className: "border-border-seam",
|
|
148
|
-
children: /* @__PURE__ */ r(
|
|
177
|
+
children: /* @__PURE__ */ r(h, {
|
|
149
178
|
illustration: "empty-search",
|
|
150
179
|
title: "Venue not found.",
|
|
151
180
|
description: "This venue may have been removed or is outside your current scope."
|
|
@@ -154,6 +183,6 @@ function h() {
|
|
|
154
183
|
});
|
|
155
184
|
}
|
|
156
185
|
//#endregion
|
|
157
|
-
export {
|
|
186
|
+
export { v as default };
|
|
158
187
|
|
|
159
188
|
//# sourceMappingURL=VenueDetailPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, SquareStack, Users } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState } from '@burdenoff/fe-libs/ui';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Venue not found.\"\n description=\"This venue may have been removed or is outside your current scope.\"\n />\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <Button type=\"button\" onClick={() => navigate(`/venues/${venue.id}/edit`)}>\n <Edit className=\"h-4 w-4\" />\n Edit Venue\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4 text-action-primary-bg\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n Capacity\n </div>\n <p className=\"text-sm tabular-nums text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4 text-action-primary-bg\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </GlassCard>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <Badge key={amenity} variant=\"secondary\">\n {amenity}\n </Badge>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}>\n <SquareStack className=\"h-4 w-4\" />\n Manage Floor Plans\n </Button>\n </div>\n <div className=\"mt-4\">\n {floorPlans.length > 0 ? (\n <ul className=\"space-y-2.5\">\n {floorPlans.map((plan) => (\n <li\n key={plan.id}\n className=\"rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </li>\n ))}\n </ul>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans have been added yet.\"\n className=\"py-8\"\n />\n )}\n </div>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VenueDetailPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/venues/VenueDetailPage.tsx"],"sourcesContent":["import { ArrowLeft, Building2, Edit, MapPin, Megaphone, SquareStack, Users } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype VenueRecord = {\n id: string;\n name: string;\n description?: string | null;\n addressLine1?: string | null;\n city?: string | null;\n state?: string | null;\n country?: string | null;\n postalCode?: string | null;\n capacity?: number | null;\n status: string;\n amenities: string[];\n pricing?: Record<string, unknown> | null;\n openingHours?: Record<string, unknown> | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype FloorPlanRecord = {\n id: string;\n name: string;\n imageUrl?: string | null;\n dimensions?: Record<string, unknown> | null;\n};\n\nexport default function VenueDetailPage() {\n const { id = '' } = useParams<{ id: string }>();\n const { navigate } = useEventfullyManaged();\n const { data, loading } = useVenueQuery(id);\n\n const venue = (data?.venue ?? null) as VenueRecord | null;\n const floorPlans = (data?.floorPlans?.items ?? []) as FloorPlanRecord[];\n\n if (loading) {\n return <div className=\"p-6 text-sm text-text-secondary\">Loading venue...</div>;\n }\n\n if (!venue) {\n return (\n <div className=\"space-y-4 p-6\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"Venue not found.\"\n description=\"This venue may have been removed or is outside your current scope.\"\n />\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n The full record for one venue. Review its location, capacity and status, see what amenities it offers, and\n manage the floor plans attendees will navigate. Come here to confirm a space is ready before you assign an\n event to it.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"space-y-3\">\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/venues')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Venues\n </Button>\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">{venue.name}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{venue.description ?? 'No description provided.'}</p>\n </div>\n </div>\n <Button type=\"button\" onClick={() => navigate(`/venues/${venue.id}/edit`)}>\n <Edit className=\"h-4 w-4\" />\n Edit Venue\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 lg:grid-cols-3\">\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <MapPin className=\"h-4 w-4 text-action-primary-bg\" />\n Location\n </div>\n <p className=\"text-sm text-text-secondary\">\n {[venue.addressLine1, venue.city, venue.state, venue.country, venue.postalCode]\n .filter(Boolean)\n .join(', ') || 'Location not configured'}\n </p>\n </GlassCard>\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Users className=\"h-4 w-4 text-action-primary-bg\" />\n Capacity\n </div>\n <p className=\"text-sm tabular-nums text-text-secondary\">{venue.capacity ?? 0} attendees</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <div className=\"mb-2 flex items-center gap-2 text-sm font-medium text-text-primary\">\n <Building2 className=\"h-4 w-4 text-action-primary-bg\" />\n Status\n </div>\n <p className=\"text-sm uppercase text-text-secondary\">{venue.status}</p>\n </GlassCard>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Amenities</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {venue.amenities.length > 0 ? (\n venue.amenities.map((amenity) => (\n <Badge key={amenity} variant=\"secondary\">\n {amenity}\n </Badge>\n ))\n ) : (\n <p className=\"text-sm text-text-secondary\">No amenities configured.</p>\n )}\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between gap-3\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Floor Plans</h2>\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={() => navigate(`/venues/${venue.id}/floor-plans`)}>\n <SquareStack className=\"h-4 w-4\" />\n Manage Floor Plans\n </Button>\n </div>\n <div className=\"mt-4\">\n {floorPlans.length > 0 ? (\n <ul className=\"space-y-2.5\">\n {floorPlans.map((plan) => (\n <li\n key={plan.id}\n className=\"rounded-card border border-border-seam p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"font-medium text-text-primary\">{plan.name}</p>\n <p className=\"text-sm text-text-secondary\">\n {plan.imageUrl ? 'Image configured' : 'No image configured'}\n </p>\n </li>\n ))}\n </ul>\n ) : (\n <IllustratedEmptyState\n illustration=\"empty-files\"\n title=\"No floor plans have been added yet.\"\n className=\"py-8\"\n />\n )}\n </div>\n </GlassCard>\n\n <NextSteps\n storageKey=\"eventfullymanaged-venue-detail\"\n title=\"Get this venue ready to host\"\n steps={[\n {\n id: 'edit-venue',\n label: 'Edit venue details',\n description: 'Update capacity, address, status and amenities.',\n icon: <Edit className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/edit`),\n },\n {\n id: 'floor-plans',\n label: 'Add floor plans',\n description: 'Map the layout so attendees and staff can navigate.',\n icon: <SquareStack className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/floor-plans`),\n },\n {\n id: 'resources',\n label: 'Review resource readiness',\n description: 'Check capacity, amenities and plans at a glance.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate(`/venues/${venue.id}/resources`),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|