@burdenoff/microfe-eventfullymanaged 2026.608.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.
Files changed (43) hide show
  1. package/dist/eventfullymanaged/components/PageLayout.js +44 -38
  2. package/dist/eventfullymanaged/components/PageLayout.js.map +1 -1
  3. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +93 -40
  4. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  5. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +32 -29
  6. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  7. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +85 -50
  8. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
  9. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +49 -50
  10. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  11. package/dist/eventfullymanaged/pages/modules/EntityListSection.js +57 -25
  12. package/dist/eventfullymanaged/pages/modules/EntityListSection.js.map +1 -1
  13. package/dist/eventfullymanaged/pages/modules/EventsPage.js +93 -66
  14. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/modules/KioskPage.js +18 -19
  16. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +60 -30
  18. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +146 -108
  20. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +67 -38
  22. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +84 -49
  24. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +57 -28
  26. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +106 -72
  28. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +84 -68
  30. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +202 -204
  32. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +58 -39
  34. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +53 -46
  36. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +109 -63
  38. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  39. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +193 -197
  40. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  41. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +65 -36
  42. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  43. package/package.json +2 -2
@@ -1,93 +1,127 @@
1
- import { useVenueQuery as e } from "../../api/eventApi.js";
2
- import { EntityListSection as t } from "./EntityListSection.js";
3
- import { useMemo as n } from "react";
4
- import { useParams as r } from "react-router-dom";
5
- import { jsx as i, jsxs as a } from "react/jsx-runtime";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useVenueQuery as t } from "../../api/eventApi.js";
3
+ import { EntityListSection as n } from "./EntityListSection.js";
4
+ import { useMemo as r } from "react";
5
+ import { useParams as i } from "react-router-dom";
6
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
7
+ import { Building2 as s, Map as c, SquareStack as l } from "lucide-react";
8
+ import { EmphasisPanel as u, GlassCard as d, GradientText as f, NextSteps as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
6
9
  //#region src/eventfullymanaged/pages/modules/VenueResourcesPage.tsx
7
- function o() {
8
- let { id: o = "" } = r(), s = e(o), c = s.data?.venue, l = n(() => s.data?.floorPlans.items ?? [], [s.data]);
9
- return /* @__PURE__ */ a("div", {
10
+ function h() {
11
+ let { id: h = "" } = i(), { navigate: g } = e(), _ = t(h), v = _.data?.venue, y = r(() => _.data?.floorPlans.items ?? [], [_.data]);
12
+ return /* @__PURE__ */ o("div", {
10
13
  className: "space-y-6 p-6",
11
14
  children: [
12
- /* @__PURE__ */ a("section", {
13
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
14
- children: [
15
- /* @__PURE__ */ i("h1", {
16
- className: "text-2xl font-bold text-text-primary",
17
- children: "Venue Resources"
18
- }),
19
- /* @__PURE__ */ i("p", {
20
- className: "mt-1 text-sm text-text-secondary",
21
- children: s.loading ? "Loading venue resources..." : `Resource view for ${c?.name ?? "selected venue"} from live backend data.`
22
- }),
23
- /* @__PURE__ */ a("div", {
24
- className: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4",
25
- children: [
26
- /* @__PURE__ */ a("div", {
27
- className: "rounded-md border border-border-default p-3",
28
- children: [/* @__PURE__ */ i("p", {
29
- className: "text-xs uppercase tracking-wide text-text-secondary",
30
- children: "Status"
31
- }), /* @__PURE__ */ i("p", {
32
- className: "mt-1 font-medium text-text-primary",
33
- children: c?.status ?? "unknown"
34
- })]
35
- }),
36
- /* @__PURE__ */ a("div", {
37
- className: "rounded-md border border-border-default p-3",
38
- children: [/* @__PURE__ */ i("p", {
39
- className: "text-xs uppercase tracking-wide text-text-secondary",
40
- children: "Capacity"
41
- }), /* @__PURE__ */ i("p", {
42
- className: "mt-1 font-medium text-text-primary",
43
- children: c?.capacity?.toLocaleString() ?? 0
44
- })]
45
- }),
46
- /* @__PURE__ */ a("div", {
47
- className: "rounded-md border border-border-default p-3",
48
- children: [/* @__PURE__ */ i("p", {
49
- className: "text-xs uppercase tracking-wide text-text-secondary",
50
- children: "Amenities"
51
- }), /* @__PURE__ */ i("p", {
52
- className: "mt-1 font-medium text-text-primary",
53
- children: c?.amenities.length ?? 0
54
- })]
55
- }),
56
- /* @__PURE__ */ a("div", {
57
- className: "rounded-md border border-border-default p-3",
58
- children: [/* @__PURE__ */ i("p", {
59
- className: "text-xs uppercase tracking-wide text-text-secondary",
60
- children: "Floor Plans"
61
- }), /* @__PURE__ */ i("p", {
62
- className: "mt-1 font-medium text-text-primary",
63
- children: l.length
64
- })]
65
- })
66
- ]
67
- })
68
- ]
69
- }),
70
- /* @__PURE__ */ i(t, {
71
- heading: s.loading ? "Loading floor plans..." : `Floor Plans (${l.length})`,
15
+ /* @__PURE__ */ a(m, { children: "A capacity-and-layout view of a single venue. It rolls up the practical resources you need to run an event in this space — how many people fit, what amenities are on offer, and which floor plans are mapped. Use it when deciding whether a venue can host your event and what still needs setting up." }),
16
+ /* @__PURE__ */ o(u, { children: [
17
+ /* @__PURE__ */ o("h1", {
18
+ className: "text-2xl font-bold text-text-primary",
19
+ children: [/* @__PURE__ */ a(f, { children: "Venue" }), " Resources"]
20
+ }),
21
+ /* @__PURE__ */ a("p", {
22
+ className: "mt-1 text-sm text-text-secondary",
23
+ children: _.loading ? "Loading venue resources..." : `Resource view for ${v?.name ?? "selected venue"} from live backend data.`
24
+ }),
25
+ /* @__PURE__ */ o("div", {
26
+ className: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4",
27
+ children: [
28
+ /* @__PURE__ */ o(d, {
29
+ treatment: "glass",
30
+ glow: !0,
31
+ className: "p-3",
32
+ children: [/* @__PURE__ */ a("p", {
33
+ className: "text-xs uppercase tracking-wide text-text-secondary",
34
+ children: "Status"
35
+ }), /* @__PURE__ */ a("p", {
36
+ className: "mt-1 font-medium text-text-primary",
37
+ children: v?.status ?? "unknown"
38
+ })]
39
+ }),
40
+ /* @__PURE__ */ o(d, {
41
+ treatment: "metric",
42
+ className: "p-3",
43
+ children: [/* @__PURE__ */ a("p", {
44
+ className: "text-xs uppercase tracking-wide text-text-secondary",
45
+ children: "Capacity"
46
+ }), /* @__PURE__ */ a("p", {
47
+ className: "mt-1 font-medium tabular-nums text-text-primary",
48
+ children: v?.capacity?.toLocaleString() ?? 0
49
+ })]
50
+ }),
51
+ /* @__PURE__ */ o(d, {
52
+ treatment: "metric",
53
+ className: "p-3",
54
+ children: [/* @__PURE__ */ a("p", {
55
+ className: "text-xs uppercase tracking-wide text-text-secondary",
56
+ children: "Amenities"
57
+ }), /* @__PURE__ */ a("p", {
58
+ className: "mt-1 font-medium tabular-nums text-text-primary",
59
+ children: v?.amenities.length ?? 0
60
+ })]
61
+ }),
62
+ /* @__PURE__ */ o(d, {
63
+ treatment: "metric",
64
+ className: "p-3",
65
+ children: [/* @__PURE__ */ a("p", {
66
+ className: "text-xs uppercase tracking-wide text-text-secondary",
67
+ children: "Floor Plans"
68
+ }), /* @__PURE__ */ a("p", {
69
+ className: "mt-1 font-medium tabular-nums text-text-primary",
70
+ children: y.length
71
+ })]
72
+ })
73
+ ]
74
+ })
75
+ ] }),
76
+ /* @__PURE__ */ a(n, {
77
+ heading: _.loading ? "Loading floor plans..." : `Floor Plans (${y.length})`,
72
78
  emptyLabel: "No floor plans configured for this venue.",
73
- rows: l.map((e) => ({
79
+ emptyIllustration: "empty-files",
80
+ rows: y.map((e) => ({
74
81
  id: e.id,
75
82
  title: e.name,
76
83
  subtitle: e.imageUrl ?? void 0
77
84
  }))
78
85
  }),
79
- /* @__PURE__ */ i(t, {
86
+ /* @__PURE__ */ a(n, {
80
87
  heading: "Amenities",
81
88
  emptyLabel: "No amenities listed.",
82
- rows: (c?.amenities ?? []).map((e) => ({
89
+ rows: (v?.amenities ?? []).map((e) => ({
83
90
  id: e,
84
91
  title: e
85
92
  }))
93
+ }),
94
+ /* @__PURE__ */ a(p, {
95
+ storageKey: "eventfullymanaged-venue-resources",
96
+ title: "Get this venue event-ready",
97
+ steps: [
98
+ {
99
+ id: "venue-detail",
100
+ label: "Open venue details",
101
+ description: "Edit capacity, address, status and amenities.",
102
+ icon: /* @__PURE__ */ a(s, { className: "h-4 w-4" }),
103
+ onClick: () => g(h ? `/venues/${h}` : "/venues")
104
+ },
105
+ {
106
+ id: "manage-floor-plans",
107
+ label: "Manage floor plans",
108
+ description: "Add or update layouts so attendees can find their way.",
109
+ icon: /* @__PURE__ */ a(l, { className: "h-4 w-4" }),
110
+ onClick: () => g(h ? `/venues/${h}/floor-plans` : "/venues")
111
+ },
112
+ {
113
+ id: "all-venues",
114
+ label: "Compare with other venues",
115
+ description: "Browse the full venue list to pick the best fit.",
116
+ icon: /* @__PURE__ */ a(c, { className: "h-4 w-4" }),
117
+ onClick: () => g("/venues")
118
+ }
119
+ ]
86
120
  })
87
121
  ]
88
122
  });
89
123
  }
90
124
  //#endregion
91
- export { o as default };
125
+ export { h as default };
92
126
 
93
127
  //# sourceMappingURL=VenueResourcesPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VenueResourcesPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/VenueResourcesPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype FloorPlanRow = {\n id: string;\n name: string;\n imageUrl?: string | null;\n};\n\nexport default function VenueResourcesPage() {\n const { id = '' } = useParams();\n const venueQuery = useVenueQuery(id);\n const venue = venueQuery.data?.venue;\n const floorPlans = useMemo(() => (venueQuery.data?.floorPlans.items ?? []) as FloorPlanRow[], [venueQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">Venue Resources</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {venueQuery.loading\n ? 'Loading venue resources...'\n : `Resource view for ${venue?.name ?? 'selected venue'} from live backend data.`}\n </p>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Status</p>\n <p className=\"mt-1 font-medium text-text-primary\">{venue?.status ?? 'unknown'}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Capacity</p>\n <p className=\"mt-1 font-medium text-text-primary\">{venue?.capacity?.toLocaleString() ?? 0}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Amenities</p>\n <p className=\"mt-1 font-medium text-text-primary\">{venue?.amenities.length ?? 0}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Floor Plans</p>\n <p className=\"mt-1 font-medium text-text-primary\">{floorPlans.length}</p>\n </div>\n </div>\n </section>\n\n <EntityListSection\n heading={venueQuery.loading ? 'Loading floor plans...' : `Floor Plans (${floorPlans.length})`}\n emptyLabel=\"No floor plans configured for this venue.\"\n rows={floorPlans.map((floorPlan) => ({\n id: floorPlan.id,\n title: floorPlan.name,\n subtitle: floorPlan.imageUrl ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading=\"Amenities\"\n emptyLabel=\"No amenities listed.\"\n rows={(venue?.amenities ?? []).map((amenity) => ({\n id: amenity,\n title: amenity,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAYA,SAAwB,IAAqB;CAC3C,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,IAAa,EAAc,EAAG,EAC9B,IAAQ,EAAW,MAAM,OACzB,IAAa,QAAe,EAAW,MAAM,WAAW,SAAS,EAAE,EAAqB,CAAC,EAAW,KAAK,CAAC;AAEhH,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB;KACE,kBAAC,MAAD;MAAI,WAAU;gBAAuC;MAAoB,CAAA;KACzE,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAW,UACR,+BACA,qBAAqB,GAAO,QAAQ,iBAAiB;MACvD,CAAA;KACJ,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAsD;SAAU,CAAA,EAC7E,kBAAC,KAAD;SAAG,WAAU;mBAAsC,GAAO,UAAU;SAAc,CAAA,CAC9E;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAsD;SAAY,CAAA,EAC/E,kBAAC,KAAD;SAAG,WAAU;mBAAsC,GAAO,UAAU,gBAAgB,IAAI;SAAM,CAAA,CAC1F;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAsD;SAAa,CAAA,EAChF,kBAAC,KAAD;SAAG,WAAU;mBAAsC,GAAO,UAAU,UAAU;SAAM,CAAA,CAChF;;OACN,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,KAAD;SAAG,WAAU;mBAAsD;SAAe,CAAA,EAClF,kBAAC,KAAD;SAAG,WAAU;mBAAsC,EAAW;SAAW,CAAA,CACrE;;OACF;;KACE;;GAEV,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,2BAA2B,gBAAgB,EAAW,OAAO;IAC3F,YAAW;IACX,MAAM,EAAW,KAAK,OAAe;KACnC,IAAI,EAAU;KACd,OAAO,EAAU;KACjB,UAAU,EAAU,YAAY,KAAA;KACjC,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAQ;IACR,YAAW;IACX,OAAO,GAAO,aAAa,EAAE,EAAE,KAAK,OAAa;KAC/C,IAAI;KACJ,OAAO;KACR,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"VenueResourcesPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/VenueResourcesPage.tsx"],"sourcesContent":["import { Building2, Map, SquareStack } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useVenueQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype FloorPlanRow = {\n id: string;\n name: string;\n imageUrl?: string | null;\n};\n\nexport default function VenueResourcesPage() {\n const { id = '' } = useParams();\n const { navigate } = useEventfullyManaged();\n const venueQuery = useVenueQuery(id);\n const venue = venueQuery.data?.venue;\n const floorPlans = useMemo(() => (venueQuery.data?.floorPlans.items ?? []) as FloorPlanRow[], [venueQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n A capacity-and-layout view of a single venue. It rolls up the practical resources you need to run an event in\n this space — how many people fit, what amenities are on offer, and which floor plans are mapped. Use it when\n deciding whether a venue can host your event and what still needs setting up.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Venue</GradientText> Resources\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {venueQuery.loading\n ? 'Loading venue resources...'\n : `Resource view for ${venue?.name ?? 'selected venue'} from live backend data.`}\n </p>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"glass\" glow className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Status</p>\n <p className=\"mt-1 font-medium text-text-primary\">{venue?.status ?? 'unknown'}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Capacity</p>\n <p className=\"mt-1 font-medium tabular-nums text-text-primary\">{venue?.capacity?.toLocaleString() ?? 0}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Amenities</p>\n <p className=\"mt-1 font-medium tabular-nums text-text-primary\">{venue?.amenities.length ?? 0}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Floor Plans</p>\n <p className=\"mt-1 font-medium tabular-nums text-text-primary\">{floorPlans.length}</p>\n </GlassCard>\n </div>\n </EmphasisPanel>\n\n <EntityListSection\n heading={venueQuery.loading ? 'Loading floor plans...' : `Floor Plans (${floorPlans.length})`}\n emptyLabel=\"No floor plans configured for this venue.\"\n emptyIllustration=\"empty-files\"\n rows={floorPlans.map((floorPlan) => ({\n id: floorPlan.id,\n title: floorPlan.name,\n subtitle: floorPlan.imageUrl ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading=\"Amenities\"\n emptyLabel=\"No amenities listed.\"\n rows={(venue?.amenities ?? []).map((amenity) => ({\n id: amenity,\n title: amenity,\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-venue-resources\"\n title=\"Get this venue event-ready\"\n steps={[\n {\n id: 'venue-detail',\n label: 'Open venue details',\n description: 'Edit capacity, address, status and amenities.',\n icon: <Building2 className=\"h-4 w-4\" />,\n onClick: () => navigate(id ? `/venues/${id}` : '/venues'),\n },\n {\n id: 'manage-floor-plans',\n label: 'Manage floor plans',\n description: 'Add or update layouts so attendees can find their way.',\n icon: <SquareStack className=\"h-4 w-4\" />,\n onClick: () => navigate(id ? `/venues/${id}/floor-plans` : '/venues'),\n },\n {\n id: 'all-venues',\n label: 'Compare with other venues',\n description: 'Browse the full venue list to pick the best fit.',\n icon: <Map className=\"h-4 w-4\" />,\n onClick: () => navigate('/venues'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAeA,SAAwB,IAAqB;CAC3C,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,gBAAa,GAAsB,EACrC,IAAa,EAAc,EAAG,EAC9B,IAAQ,EAAW,MAAM,OACzB,IAAa,QAAe,EAAW,MAAM,WAAW,SAAS,EAAE,EAAqB,CAAC,EAAW,KAAK,CAAC;AAEhH,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,4SAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eAAd,CACE,kBAAC,GAAD,EAAA,UAAc,SAAoB,CAAA,EAAA,aAC/B;;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,EAAW,UACR,+BACA,qBAAqB,GAAO,QAAQ,iBAAiB;KACvD,CAAA;IACJ,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAU,CAAA,EAC7E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,GAAO,UAAU;QAAc,CAAA,CACxE;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAY,CAAA,EAC/E,kBAAC,KAAD;QAAG,WAAU;kBAAmD,GAAO,UAAU,gBAAgB,IAAI;QAAM,CAAA,CACjG;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAa,CAAA,EAChF,kBAAC,KAAD;QAAG,WAAU;kBAAmD,GAAO,UAAU,UAAU;QAAM,CAAA,CACvF;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAe,CAAA,EAClF,kBAAC,KAAD;QAAG,WAAU;kBAAmD,EAAW;QAAW,CAAA,CAC5E;;MACR;;IACQ,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,2BAA2B,gBAAgB,EAAW,OAAO;IAC3F,YAAW;IACX,mBAAkB;IAClB,MAAM,EAAW,KAAK,OAAe;KACnC,IAAI,EAAU;KACd,OAAO,EAAU;KACjB,UAAU,EAAU,YAAY,KAAA;KACjC,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAQ;IACR,YAAW;IACX,OAAO,GAAO,aAAa,EAAE,EAAE,KAAK,OAAa;KAC/C,IAAI;KACJ,OAAO;KACR,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,IAAK,WAAW,MAAO,UAAU;MAC1D;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAa,WAAU,WAAY,CAAA;MACzC,eAAe,EAAS,IAAK,WAAW,EAAG,gBAAgB,UAAU;MACtE;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAK,WAAU,WAAY,CAAA;MACjC,eAAe,EAAS,UAAU;MACnC;KACF;IACD,CAAA;GACE"}
@@ -1,93 +1,109 @@
1
- import { useAutomationRulesQuery as e, useUpsertAutomationRuleMutation as t, useUpsertWorkflowTemplateMutation as n, useWorkflowTemplatesQuery as r } from "../../api/eventApi.js";
2
- import { EntityListSection as i } from "./EntityListSection.js";
3
- import { useMemo as a, useState as o } from "react";
4
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
5
- import { Play as l } from "lucide-react";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useAutomationRulesQuery as t, useUpsertAutomationRuleMutation as n, useUpsertWorkflowTemplateMutation as r, useWorkflowTemplatesQuery as i } from "../../api/eventApi.js";
3
+ import { EntityListSection as a } from "./EntityListSection.js";
4
+ import { useMemo as o, useState as s } from "react";
5
+ import { jsx as c, jsxs as l } from "react/jsx-runtime";
6
+ import { Megaphone as u, Play as d, Ticket as f } from "lucide-react";
7
+ import { Button as p, CTAOverflowMenu as m, EmphasisPanel as h, GradientText as g, Input as _, NextSteps as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
6
8
  //#region src/eventfullymanaged/pages/modules/WorkflowsPage.tsx
7
- function u() {
8
- let u = r({
9
+ function b() {
10
+ let { navigate: b } = e(), x = i({
9
11
  limit: 100,
10
12
  offset: 0
11
- }), d = e({
13
+ }), S = t({
12
14
  limit: 100,
13
15
  offset: 0
14
- }), [f, { loading: p }] = n(), [m, { loading: h }] = t(), [g, _] = o("Post-event follow-up"), v = a(() => u.data?.workflowTemplates.items ?? [], [u.data]), y = a(() => d.data?.automationRules.items ?? [], [d.data]);
15
- return /* @__PURE__ */ c("div", {
16
+ }), [C, { loading: w }] = r(), [T, { loading: E }] = n(), [D, O] = s("Post-event follow-up"), k = o(() => x.data?.workflowTemplates.items ?? [], [x.data]), A = o(() => S.data?.automationRules.items ?? [], [S.data]), j = async () => {
17
+ D.trim() && await C({ variables: { input: {
18
+ name: D,
19
+ title: D,
20
+ status: "active",
21
+ metadata: {}
22
+ } } });
23
+ }, M = async () => {
24
+ await T({ variables: { input: {
25
+ name: `${D} Rule`,
26
+ title: `${D} Rule`,
27
+ status: "active",
28
+ metadata: {}
29
+ } } });
30
+ };
31
+ return /* @__PURE__ */ l("div", {
16
32
  className: "space-y-6 p-6",
17
33
  children: [
18
- /* @__PURE__ */ c("section", {
19
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
20
- children: [
21
- /* @__PURE__ */ s("h1", {
22
- className: "text-2xl font-bold text-text-primary",
23
- children: "Workflows"
24
- }),
25
- /* @__PURE__ */ s("p", {
26
- className: "mt-1 text-sm text-text-secondary",
27
- children: "Manage event workflow templates and automation rules. Execution is delegated to workflow services."
28
- }),
29
- /* @__PURE__ */ c("div", {
30
- className: "mt-4 flex flex-col gap-3 sm:flex-row",
31
- children: [
32
- /* @__PURE__ */ s("input", {
33
- value: g,
34
- onChange: (e) => _(e.target.value),
35
- className: "flex-1 rounded-md border border-border-default px-3 py-2"
36
- }),
37
- /* @__PURE__ */ c("button", {
38
- type: "button",
39
- onClick: async () => {
40
- g.trim() && await f({ variables: { input: {
41
- name: g,
42
- title: g,
43
- status: "active",
44
- metadata: {}
45
- } } });
46
- },
47
- disabled: p,
48
- className: "inline-flex items-center rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:opacity-60",
49
- children: [/* @__PURE__ */ s(l, { className: "mr-2 h-4 w-4" }), p ? "Saving..." : "Add Template"]
50
- }),
51
- /* @__PURE__ */ s("button", {
52
- type: "button",
53
- onClick: async () => {
54
- await m({ variables: { input: {
55
- name: `${g} Rule`,
56
- title: `${g} Rule`,
57
- status: "active",
58
- metadata: {}
59
- } } });
60
- },
61
- disabled: h,
62
- className: "inline-flex items-center rounded-md border border-border-default px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-elevated disabled:opacity-60",
63
- children: h ? "Saving..." : "Add Rule"
64
- })
65
- ]
66
- })
67
- ]
68
- }),
69
- /* @__PURE__ */ s(i, {
70
- heading: u.loading ? "Loading templates..." : `Templates (${v.length})`,
34
+ /* @__PURE__ */ c(y, { children: "Workflows automate the repetitive parts of running an event. A template is a reusable recipe (e.g. a post-event follow-up sequence); an automation rule is a trigger that fires it (e.g. “when an attendee checks in, send a welcome message”). Build them here so the platform handles routine work for you while execution is delegated to the workflow services." }),
35
+ /* @__PURE__ */ l(h, { children: [
36
+ /* @__PURE__ */ c("h1", {
37
+ className: "text-2xl font-bold text-text-primary",
38
+ children: /* @__PURE__ */ c(g, { children: "Workflows" })
39
+ }),
40
+ /* @__PURE__ */ c("p", {
41
+ className: "mt-1 text-sm text-text-secondary",
42
+ children: "Manage event workflow templates and automation rules. Execution is delegated to workflow services."
43
+ }),
44
+ /* @__PURE__ */ l("div", {
45
+ className: "mt-4 flex flex-col gap-3 sm:flex-row sm:items-center",
46
+ children: [/* @__PURE__ */ c(_, {
47
+ value: D,
48
+ onChange: (e) => O(e.target.value),
49
+ "aria-label": "Workflow template name",
50
+ className: "flex-1"
51
+ }), /* @__PURE__ */ l("div", {
52
+ className: "flex items-center gap-2",
53
+ children: [/* @__PURE__ */ l(p, {
54
+ type: "button",
55
+ onClick: j,
56
+ disabled: w,
57
+ children: [/* @__PURE__ */ c(d, { className: "h-4 w-4" }), w ? "Saving..." : "Add Template"]
58
+ }), /* @__PURE__ */ c(m, { actions: [{
59
+ label: E ? "Saving rule..." : "Add Rule",
60
+ onSelect: () => {
61
+ M();
62
+ },
63
+ disabled: E
64
+ }] })]
65
+ })]
66
+ })
67
+ ] }),
68
+ /* @__PURE__ */ c(a, {
69
+ heading: x.loading ? "Loading templates..." : `Templates (${k.length})`,
71
70
  emptyLabel: "No workflow templates configured.",
72
- rows: v.map((e) => ({
71
+ rows: k.map((e) => ({
73
72
  id: e.id,
74
73
  title: e.name ?? e.title ?? `Template ${e.id}`,
75
74
  status: e.status ?? void 0
76
75
  }))
77
76
  }),
78
- /* @__PURE__ */ s(i, {
79
- heading: d.loading ? "Loading automation rules..." : `Automation Rules (${y.length})`,
77
+ /* @__PURE__ */ c(a, {
78
+ heading: S.loading ? "Loading automation rules..." : `Automation Rules (${A.length})`,
80
79
  emptyLabel: "No automation rules configured.",
81
- rows: y.map((e) => ({
80
+ rows: A.map((e) => ({
82
81
  id: e.id,
83
82
  title: e.name ?? e.title ?? `Rule ${e.id}`,
84
83
  status: e.status ?? void 0
85
84
  }))
85
+ }),
86
+ /* @__PURE__ */ c(v, {
87
+ storageKey: "eventfullymanaged-workflows",
88
+ title: "Put your automations to work",
89
+ steps: [{
90
+ id: "wire-communication",
91
+ label: "Connect a communication campaign",
92
+ description: "Have a rule fire announcements or reminders automatically.",
93
+ icon: /* @__PURE__ */ c(u, { className: "h-4 w-4" }),
94
+ onClick: () => b("/communication")
95
+ }, {
96
+ id: "automate-checkin",
97
+ label: "Automate around check-in",
98
+ description: "Trigger welcome flows when attendees register or arrive.",
99
+ icon: /* @__PURE__ */ c(f, { className: "h-4 w-4" }),
100
+ onClick: () => b("/registration")
101
+ }]
86
102
  })
87
103
  ]
88
104
  });
89
105
  }
90
106
  //#endregion
91
- export { u as default };
107
+ export { b as default };
92
108
 
93
109
  //# sourceMappingURL=WorkflowsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkflowsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/WorkflowsPage.tsx"],"sourcesContent":["import { Play } from 'lucide-react';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAutomationRulesQuery,\n useUpsertAutomationRuleMutation,\n useUpsertWorkflowTemplateMutation,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function WorkflowsPage() {\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const [upsertTemplate, { loading: creatingTemplate }] = useUpsertWorkflowTemplateMutation();\n const [upsertRule, { loading: creatingRule }] = useUpsertAutomationRuleMutation();\n const [templateName, setTemplateName] = useState('Post-event follow-up');\n\n const templates = useMemo(\n () => (templatesQuery.data?.workflowTemplates.items ?? []) as SimpleRow[],\n [templatesQuery.data]\n );\n const rules = useMemo(() => (rulesQuery.data?.automationRules.items ?? []) as SimpleRow[], [rulesQuery.data]);\n\n const onCreateTemplate = async () => {\n if (!templateName.trim()) return;\n await upsertTemplate({\n variables: {\n input: {\n name: templateName,\n title: templateName,\n status: 'active',\n metadata: {},\n },\n },\n });\n };\n\n const onCreateRule = async () => {\n await upsertRule({\n variables: {\n input: {\n name: `${templateName} Rule`,\n title: `${templateName} Rule`,\n status: 'active',\n metadata: {},\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">Workflows</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage event workflow templates and automation rules. Execution is delegated to workflow services.\n </p>\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row\">\n <input\n value={templateName}\n onChange={(e) => setTemplateName(e.target.value)}\n className=\"flex-1 rounded-md border border-border-default px-3 py-2\"\n />\n <button\n type=\"button\"\n onClick={onCreateTemplate}\n disabled={creatingTemplate}\n className=\"inline-flex items-center rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:opacity-60\"\n >\n <Play className=\"mr-2 h-4 w-4\" />\n {creatingTemplate ? 'Saving...' : 'Add Template'}\n </button>\n <button\n type=\"button\"\n onClick={onCreateRule}\n disabled={creatingRule}\n className=\"inline-flex items-center rounded-md border border-border-default px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-elevated disabled:opacity-60\"\n >\n {creatingRule ? 'Saving...' : 'Add Rule'}\n </button>\n </div>\n </section>\n\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Templates (${templates.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={templates.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading automation rules...' : `Automation Rules (${rules.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rules.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAkBA,SAAwB,IAAgB;CACtC,IAAM,IAAiB,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAa,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,CAAC,GAAgB,EAAE,SAAS,OAAsB,GAAmC,EACrF,CAAC,GAAY,EAAE,SAAS,OAAkB,GAAiC,EAC3E,CAAC,GAAc,KAAmB,EAAS,uBAAuB,EAElE,IAAY,QACT,EAAe,MAAM,kBAAkB,SAAS,EAAE,EACzD,CAAC,EAAe,KAAK,CACtB,EACK,IAAQ,QAAe,EAAW,MAAM,gBAAgB,SAAS,EAAE,EAAkB,CAAC,EAAW,KAAK,CAAC;AA6B7G,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB;KACE,kBAAC,MAAD;MAAI,WAAU;gBAAuC;MAAc,CAAA;KACnE,kBAAC,KAAD;MAAG,WAAU;gBAAmC;MAE5C,CAAA;KACJ,kBAAC,OAAD;MAAK,WAAU;gBAAf;OACE,kBAAC,SAAD;QACE,OAAO;QACP,WAAW,MAAM,EAAgB,EAAE,OAAO,MAAM;QAChD,WAAU;QACV,CAAA;OACF,kBAAC,UAAD;QACE,MAAK;QACL,SA1Ce,YAAY;AAC9B,WAAa,MAAM,IACxB,MAAM,EAAe,EACnB,WAAW,EACT,OAAO;UACL,MAAM;UACN,OAAO;UACP,QAAQ;UACR,UAAU,EAAE;UACb,EACF,EACF,CAAC;;QAgCM,UAAU;QACV,WAAU;kBAJZ,CAME,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,IAAmB,cAAc,eAC3B;;OACT,kBAAC,UAAD;QACE,MAAK;QACL,SArCW,YAAY;AAC/B,eAAM,EAAW,EACf,WAAW,EACT,OAAO;UACL,MAAM,GAAG,EAAa;UACtB,OAAO,GAAG,EAAa;UACvB,QAAQ;UACR,UAAU,EAAE;UACb,EACF,EACF,CAAC;;QA4BM,UAAU;QACV,WAAU;kBAET,IAAe,cAAc;QACvB,CAAA;OACL;;KACE;;GAEV,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,cAAc,EAAU,OAAO;IAC1F,YAAW;IACX,MAAM,EAAU,KAAK,OAAS;KAC5B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,gCAAgC,qBAAqB,EAAM,OAAO;IAChG,YAAW;IACX,MAAM,EAAM,KAAK,OAAS;KACxB,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,QAAQ,EAAI;KAC5C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"WorkflowsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/WorkflowsPage.tsx"],"sourcesContent":["import { Megaphone, Play, Ticket } from 'lucide-react';\nimport {\n Button,\n CTAOverflowMenu,\n EmphasisPanel,\n GradientText,\n Input,\n NextSteps,\n PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAutomationRulesQuery,\n useUpsertAutomationRuleMutation,\n useUpsertWorkflowTemplateMutation,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function WorkflowsPage() {\n const { navigate } = useEventfullyManaged();\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const [upsertTemplate, { loading: creatingTemplate }] = useUpsertWorkflowTemplateMutation();\n const [upsertRule, { loading: creatingRule }] = useUpsertAutomationRuleMutation();\n const [templateName, setTemplateName] = useState('Post-event follow-up');\n\n const templates = useMemo(\n () => (templatesQuery.data?.workflowTemplates.items ?? []) as SimpleRow[],\n [templatesQuery.data]\n );\n const rules = useMemo(() => (rulesQuery.data?.automationRules.items ?? []) as SimpleRow[], [rulesQuery.data]);\n\n const onCreateTemplate = async () => {\n if (!templateName.trim()) return;\n await upsertTemplate({\n variables: {\n input: {\n name: templateName,\n title: templateName,\n status: 'active',\n metadata: {},\n },\n },\n });\n };\n\n const onCreateRule = async () => {\n await upsertRule({\n variables: {\n input: {\n name: `${templateName} Rule`,\n title: `${templateName} Rule`,\n status: 'active',\n metadata: {},\n },\n },\n });\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Workflows automate the repetitive parts of running an event. A template is a reusable recipe (e.g. a\n post-event follow-up sequence); an automation rule is a trigger that fires it (e.g. &ldquo;when an attendee\n checks in, send a welcome message&rdquo;). Build them here so the platform handles routine work for you while\n execution is delegated to the workflow services.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Workflows</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage event workflow templates and automation rules. Execution is delegated to workflow services.\n </p>\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row sm:items-center\">\n <Input\n value={templateName}\n onChange={(e) => setTemplateName(e.target.value)}\n aria-label=\"Workflow template name\"\n className=\"flex-1\"\n />\n <div className=\"flex items-center gap-2\">\n <Button type=\"button\" onClick={onCreateTemplate} disabled={creatingTemplate}>\n <Play className=\"h-4 w-4\" />\n {creatingTemplate ? 'Saving...' : 'Add Template'}\n </Button>\n <CTAOverflowMenu\n actions={[\n {\n label: creatingRule ? 'Saving rule...' : 'Add Rule',\n onSelect: () => {\n void onCreateRule();\n },\n disabled: creatingRule,\n },\n ]}\n />\n </div>\n </div>\n </EmphasisPanel>\n\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Templates (${templates.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={templates.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading automation rules...' : `Automation Rules (${rules.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rules.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-workflows\"\n title=\"Put your automations to work\"\n steps={[\n {\n id: 'wire-communication',\n label: 'Connect a communication campaign',\n description: 'Have a rule fire announcements or reminders automatically.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n {\n id: 'automate-checkin',\n label: 'Automate around check-in',\n description: 'Trigger welcome flows when attendees register or arrive.',\n icon: <Ticket className=\"h-4 w-4\" />,\n onClick: () => navigate('/registration'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;AA4BA,SAAwB,IAAgB;CACtC,IAAM,EAAE,gBAAa,GAAsB,EACrC,IAAiB,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAa,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,CAAC,GAAgB,EAAE,SAAS,OAAsB,GAAmC,EACrF,CAAC,GAAY,EAAE,SAAS,OAAkB,GAAiC,EAC3E,CAAC,GAAc,KAAmB,EAAS,uBAAuB,EAElE,IAAY,QACT,EAAe,MAAM,kBAAkB,SAAS,EAAE,EACzD,CAAC,EAAe,KAAK,CACtB,EACK,IAAQ,QAAe,EAAW,MAAM,gBAAgB,SAAS,EAAE,EAAkB,CAAC,EAAW,KAAK,CAAC,EAEvG,IAAmB,YAAY;AAC9B,IAAa,MAAM,IACxB,MAAM,EAAe,EACnB,WAAW,EACT,OAAO;GACL,MAAM;GACN,OAAO;GACP,QAAQ;GACR,UAAU,EAAE;GACb,EACF,EACF,CAAC;IAGE,IAAe,YAAY;AAC/B,QAAM,EAAW,EACf,WAAW,EACT,OAAO;GACL,MAAM,GAAG,EAAa;GACtB,OAAO,GAAG,EAAa;GACvB,QAAQ;GACR,UAAU,EAAE;GACb,EACF,EACF,CAAC;;AAGJ,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,uWAKC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAc,aAAwB,CAAA;KACnC,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAE5C,CAAA;IACJ,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MACE,OAAO;MACP,WAAW,MAAM,EAAgB,EAAE,OAAO,MAAM;MAChD,cAAW;MACX,WAAU;MACV,CAAA,EACF,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAQ,MAAK;OAAS,SAAS;OAAkB,UAAU;iBAA3D,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,IAAmB,cAAc,eAC3B;UACT,kBAAC,GAAD,EACE,SAAS,CACP;OACE,OAAO,IAAe,mBAAmB;OACzC,gBAAgB;AACT,WAAc;;OAErB,UAAU;OACX,CACF,EACD,CAAA,CACE;QACF;;IACQ,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,cAAc,EAAU,OAAO;IAC1F,YAAW;IACX,MAAM,EAAU,KAAK,OAAS;KAC5B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,gCAAgC,qBAAqB,EAAM,OAAO;IAChG,YAAW;IACX,MAAM,EAAM,KAAK,OAAS;KACxB,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,QAAQ,EAAI;KAC5C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO,CACL;KACE,IAAI;KACJ,OAAO;KACP,aAAa;KACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;KACvC,eAAe,EAAS,iBAAiB;KAC1C,EACD;KACE,IAAI;KACJ,OAAO;KACP,aAAa;KACb,MAAM,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;KACpC,eAAe,EAAS,gBAAgB;KACzC,CACF;IACD,CAAA;GACE"}