@burdenoff/microfe-eventfullymanaged 2026.529.1 → 2026.625.1

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 +39 -27
  4. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  5. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +40 -41
  6. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  7. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +67 -65
  8. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
  9. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +48 -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 +55 -57
  14. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/modules/KioskPage.js +17 -19
  16. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +22 -22
  18. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +90 -82
  20. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +28 -29
  22. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +67 -65
  24. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +18 -20
  26. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +68 -64
  28. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +57 -60
  30. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +197 -199
  32. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +57 -39
  34. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +41 -31
  36. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +79 -62
  38. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  39. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +185 -189
  40. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  41. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +63 -35
  42. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  43. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"SponsorFormPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/sponsors/SponsorFormPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/set-state-in-effect */\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport {\n useCreateSponsorMutation,\n useEventsQuery,\n useSponsorsQuery,\n useUpdateSponsorMutation,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype SponsorFormState = {\n eventId: string;\n name: string;\n level: string;\n website: string;\n contactName: string;\n contactEmail: string;\n contactPhone: string;\n value: string;\n leads: string;\n};\n\nconst initialState: SponsorFormState = {\n eventId: '',\n name: '',\n level: 'BRONZE',\n website: '',\n contactName: '',\n contactEmail: '',\n contactPhone: '',\n value: '0',\n leads: '0',\n};\n\nexport default function SponsorFormPage() {\n const { id = '' } = useParams<{ id: string }>();\n const isEdit = useMemo(() => Boolean(id), [id]);\n const { navigate } = useEventfullyManaged();\n\n const { data: eventsData } = useEventsQuery({ limit: 100, offset: 0 });\n const { data: sponsorsData } = useSponsorsQuery({ limit: 100, offset: 0 });\n\n const existingSponsor = useMemo(\n () => (sponsorsData?.sponsors?.items ?? []).find((item: { id: string }) => item.id === id),\n [id, sponsorsData]\n );\n\n const [createSponsor, { loading: creating }] = useCreateSponsorMutation();\n const [updateSponsor, { loading: updating }] = useUpdateSponsorMutation();\n const [form, setForm] = useState<SponsorFormState>(() => {\n if (!existingSponsor) {\n return initialState;\n }\n return {\n eventId: existingSponsor.eventId ?? '',\n name: existingSponsor.name ?? '',\n level: existingSponsor.level ?? 'BRONZE',\n website: existingSponsor.website ?? '',\n contactName: existingSponsor.contactName ?? '',\n contactEmail: existingSponsor.contactEmail ?? '',\n contactPhone: existingSponsor.contactPhone ?? '',\n value: String(existingSponsor.metrics?.value ?? 0),\n leads: String(existingSponsor.metrics?.leads ?? 0),\n };\n });\n\n useEffect(() => {\n if (!existingSponsor) {\n return;\n }\n setForm({\n eventId: existingSponsor.eventId ?? '',\n name: existingSponsor.name ?? '',\n level: existingSponsor.level ?? 'BRONZE',\n website: existingSponsor.website ?? '',\n contactName: existingSponsor.contactName ?? '',\n contactEmail: existingSponsor.contactEmail ?? '',\n contactPhone: existingSponsor.contactPhone ?? '',\n value: String(existingSponsor.metrics?.value ?? 0),\n leads: String(existingSponsor.metrics?.leads ?? 0),\n });\n }, [existingSponsor]);\n\n const onChange = (field: keyof SponsorFormState, value: string) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const input = {\n eventId: form.eventId,\n name: form.name,\n level: form.level,\n website: form.website,\n contactName: form.contactName,\n contactEmail: form.contactEmail,\n contactPhone: form.contactPhone,\n metrics: {\n value: Number(form.value || 0),\n leads: Number(form.leads || 0),\n },\n metadata: {},\n };\n\n if (isEdit) {\n await updateSponsor({ variables: { id, input } });\n navigate('/sponsors');\n return;\n }\n\n await createSponsor({ variables: { input } });\n navigate('/sponsors');\n };\n\n const saving = creating || updating;\n const events = eventsData?.events?.items ?? [];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <button\n type=\"button\"\n onClick={() => navigate('/sponsors')}\n className=\"inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary\"\n >\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Sponsors\n </button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">{isEdit ? 'Edit Sponsor' : 'Create Sponsor'}</h1>\n </div>\n\n <form onSubmit={onSubmit} className=\"space-y-4 rounded-lg border border-border-default bg-bg-surface p-5\">\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Event</span>\n <select\n value={form.eventId}\n onChange={(e) => onChange('eventId', e.target.value)}\n required\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n >\n <option value=\"\">Select Event</option>\n {events.map((eventItem: { id: string; name: string }) => (\n <option key={eventItem.id} value={eventItem.id}>\n {eventItem.name}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Sponsor Name</span>\n <input\n value={form.name}\n onChange={(e) => onChange('name', e.target.value)}\n required\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Level</span>\n <select\n value={form.level}\n onChange={(e) => onChange('level', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n >\n <option value=\"PLATINUM\">Platinum</option>\n <option value=\"GOLD\">Gold</option>\n <option value=\"SILVER\">Silver</option>\n <option value=\"BRONZE\">Bronze</option>\n <option value=\"COMMUNITY\">Community</option>\n </select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Value</span>\n <input\n type=\"number\"\n min=\"0\"\n value={form.value}\n onChange={(e) => onChange('value', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Leads</span>\n <input\n type=\"number\"\n min=\"0\"\n value={form.leads}\n onChange={(e) => onChange('leads', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n </div>\n\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Website</span>\n <input\n value={form.website}\n onChange={(e) => onChange('website', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Name</span>\n <input\n value={form.contactName}\n onChange={(e) => onChange('contactName', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Email</span>\n <input\n type=\"email\"\n value={form.contactEmail}\n onChange={(e) => onChange('contactEmail', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Phone</span>\n <input\n value={form.contactPhone}\n onChange={(e) => onChange('contactPhone', e.target.value)}\n className=\"w-full rounded-md border border-border-default px-3 py-2\"\n />\n </label>\n </div>\n\n <div className=\"flex justify-end\">\n <button\n type=\"submit\"\n disabled={saving}\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 <Save className=\"mr-2 h-4 w-4\" />\n {saving ? 'Saving...' : 'Save Sponsor'}\n </button>\n </div>\n </form>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SponsorFormPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/sponsors/SponsorFormPage.tsx"],"sourcesContent":["/* eslint-disable react-hooks/set-state-in-effect */\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { Button, GlassCard, Input } from '@burdenoff/fe-libs/ui';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport {\n useCreateSponsorMutation,\n useEventsQuery,\n useSponsorsQuery,\n useUpdateSponsorMutation,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype SponsorFormState = {\n eventId: string;\n name: string;\n level: string;\n website: string;\n contactName: string;\n contactEmail: string;\n contactPhone: string;\n value: string;\n leads: string;\n};\n\nconst initialState: SponsorFormState = {\n eventId: '',\n name: '',\n level: 'BRONZE',\n website: '',\n contactName: '',\n contactEmail: '',\n contactPhone: '',\n value: '0',\n leads: '0',\n};\n\nexport default function SponsorFormPage() {\n const { id = '' } = useParams<{ id: string }>();\n const isEdit = useMemo(() => Boolean(id), [id]);\n const { navigate } = useEventfullyManaged();\n\n const { data: eventsData } = useEventsQuery({ limit: 100, offset: 0 });\n const { data: sponsorsData } = useSponsorsQuery({ limit: 100, offset: 0 });\n\n const existingSponsor = useMemo(\n () => (sponsorsData?.sponsors?.items ?? []).find((item: { id: string }) => item.id === id),\n [id, sponsorsData]\n );\n\n const [createSponsor, { loading: creating }] = useCreateSponsorMutation();\n const [updateSponsor, { loading: updating }] = useUpdateSponsorMutation();\n const [form, setForm] = useState<SponsorFormState>(() => {\n if (!existingSponsor) {\n return initialState;\n }\n return {\n eventId: existingSponsor.eventId ?? '',\n name: existingSponsor.name ?? '',\n level: existingSponsor.level ?? 'BRONZE',\n website: existingSponsor.website ?? '',\n contactName: existingSponsor.contactName ?? '',\n contactEmail: existingSponsor.contactEmail ?? '',\n contactPhone: existingSponsor.contactPhone ?? '',\n value: String(existingSponsor.metrics?.value ?? 0),\n leads: String(existingSponsor.metrics?.leads ?? 0),\n };\n });\n\n useEffect(() => {\n if (!existingSponsor) {\n return;\n }\n setForm({\n eventId: existingSponsor.eventId ?? '',\n name: existingSponsor.name ?? '',\n level: existingSponsor.level ?? 'BRONZE',\n website: existingSponsor.website ?? '',\n contactName: existingSponsor.contactName ?? '',\n contactEmail: existingSponsor.contactEmail ?? '',\n contactPhone: existingSponsor.contactPhone ?? '',\n value: String(existingSponsor.metrics?.value ?? 0),\n leads: String(existingSponsor.metrics?.leads ?? 0),\n });\n }, [existingSponsor]);\n\n const onChange = (field: keyof SponsorFormState, value: string) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const input = {\n eventId: form.eventId,\n name: form.name,\n level: form.level,\n website: form.website,\n contactName: form.contactName,\n contactEmail: form.contactEmail,\n contactPhone: form.contactPhone,\n metrics: {\n value: Number(form.value || 0),\n leads: Number(form.leads || 0),\n },\n metadata: {},\n };\n\n if (isEdit) {\n await updateSponsor({ variables: { id, input } });\n navigate('/sponsors');\n return;\n }\n\n await createSponsor({ variables: { input } });\n navigate('/sponsors');\n };\n\n const saving = creating || updating;\n const events = eventsData?.events?.items ?? [];\n const selectClass =\n 'w-full rounded-input border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary transition-colors focus-visible:border-border-focus focus-visible:outline-none focus-visible:shadow-[var(--shadow-focus)] focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]';\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/sponsors')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Sponsors\n </Button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">{isEdit ? 'Edit Sponsor' : 'Create Sponsor'}</h1>\n </div>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Event</span>\n <select\n value={form.eventId}\n onChange={(e) => onChange('eventId', e.target.value)}\n required\n className={selectClass}\n >\n <option value=\"\">Select Event</option>\n {events.map((eventItem: { id: string; name: string }) => (\n <option key={eventItem.id} value={eventItem.id}>\n {eventItem.name}\n </option>\n ))}\n </select>\n </label>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Sponsor Name</span>\n <Input value={form.name} onChange={(e) => onChange('name', e.target.value)} required />\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Level</span>\n <select value={form.level} onChange={(e) => onChange('level', e.target.value)} className={selectClass}>\n <option value=\"PLATINUM\">Platinum</option>\n <option value=\"GOLD\">Gold</option>\n <option value=\"SILVER\">Silver</option>\n <option value=\"BRONZE\">Bronze</option>\n <option value=\"COMMUNITY\">Community</option>\n </select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Value</span>\n <Input type=\"number\" min=\"0\" value={form.value} onChange={(e) => onChange('value', e.target.value)} />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Leads</span>\n <Input type=\"number\" min=\"0\" value={form.leads} onChange={(e) => onChange('leads', e.target.value)} />\n </label>\n </div>\n\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Website</span>\n <Input value={form.website} onChange={(e) => onChange('website', e.target.value)} />\n </label>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Name</span>\n <Input value={form.contactName} onChange={(e) => onChange('contactName', e.target.value)} />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Email</span>\n <Input\n type=\"email\"\n value={form.contactEmail}\n onChange={(e) => onChange('contactEmail', e.target.value)}\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Contact Phone</span>\n <Input value={form.contactPhone} onChange={(e) => onChange('contactPhone', e.target.value)} />\n </label>\n </div>\n\n <div className=\"flex justify-end\">\n <Button type=\"submit\" disabled={saving}>\n <Save className=\"h-4 w-4\" />\n {saving ? 'Saving...' : 'Save Sponsor'}\n </Button>\n </div>\n </form>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -3,13 +3,14 @@ import { useSponsorsQuery as t } from "../../api/eventApi.js";
3
3
  import { useMemo as n, useState as r } from "react";
4
4
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
5
  import { Building2 as o, Mail as s, Phone as c, Plus as l, Search as u } from "lucide-react";
6
+ import { Badge as d, Button as f, GlassCard as p, IllustratedEmptyState as m, Input as h } from "@burdenoff/fe-libs/ui";
6
7
  //#region src/eventfullymanaged/pages/sponsors/SponsorsListPage.tsx
7
- function d() {
8
- let { navigate: d } = e(), [f, p] = r(""), { data: m, loading: h } = t({
9
- search: f,
8
+ function g() {
9
+ let { navigate: g } = e(), [_, v] = r(""), { data: y, loading: b } = t({
10
+ search: _,
10
11
  limit: 100,
11
12
  offset: 0
12
- }), g = n(() => m?.sponsors?.items ?? [], [m]), _ = g.reduce((e, t) => e + Number(t.metrics?.value ?? 0), 0), v = g.reduce((e, t) => e + Number(t.metrics?.leads ?? 0), 0);
13
+ }), x = n(() => y?.sponsors?.items ?? [], [y]), S = x.reduce((e, t) => e + Number(t.metrics?.value ?? 0), 0), C = x.reduce((e, t) => e + Number(t.metrics?.leads ?? 0), 0);
13
14
  return /* @__PURE__ */ a("div", {
14
15
  className: "space-y-6 p-6",
15
16
  children: [
@@ -21,80 +22,100 @@ function d() {
21
22
  }), /* @__PURE__ */ i("p", {
22
23
  className: "mt-1 text-sm text-text-secondary",
23
24
  children: "Manage event sponsors with live API data."
24
- })] }), /* @__PURE__ */ a("button", {
25
+ })] }), /* @__PURE__ */ a(f, {
25
26
  type: "button",
26
- onClick: () => d("/sponsors/create"),
27
- 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",
28
- children: [/* @__PURE__ */ i(l, { className: "mr-2 h-4 w-4" }), "Add Sponsor"]
27
+ onClick: () => g("/sponsors/create"),
28
+ children: [/* @__PURE__ */ i(l, { className: "h-4 w-4" }), "Add Sponsor"]
29
29
  })]
30
30
  }),
31
31
  /* @__PURE__ */ a("div", {
32
32
  className: "grid grid-cols-1 gap-4 md:grid-cols-3",
33
33
  children: [
34
- /* @__PURE__ */ a("div", {
35
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
34
+ /* @__PURE__ */ a(p, {
35
+ treatment: "glass",
36
+ glow: !0,
37
+ className: "p-4",
36
38
  children: [/* @__PURE__ */ i("p", {
37
39
  className: "text-sm text-text-secondary",
38
40
  children: "Total Sponsors"
39
41
  }), /* @__PURE__ */ i("p", {
40
- className: "mt-1 text-2xl font-bold text-text-primary",
41
- children: g.length
42
+ className: "mt-1 text-2xl font-bold tabular-nums text-text-primary",
43
+ children: x.length
42
44
  })]
43
45
  }),
44
- /* @__PURE__ */ a("div", {
45
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
46
+ /* @__PURE__ */ a(p, {
47
+ treatment: "metric",
48
+ className: "p-4",
46
49
  children: [/* @__PURE__ */ i("p", {
47
50
  className: "text-sm text-text-secondary",
48
51
  children: "Total Contract Value"
49
52
  }), /* @__PURE__ */ a("p", {
50
- className: "mt-1 text-2xl font-bold text-text-primary",
51
- children: ["$", _.toLocaleString()]
53
+ className: "mt-1 text-2xl font-bold tabular-nums text-text-primary",
54
+ children: ["$", S.toLocaleString()]
52
55
  })]
53
56
  }),
54
- /* @__PURE__ */ a("div", {
55
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
57
+ /* @__PURE__ */ a(p, {
58
+ treatment: "metric",
59
+ className: "p-4",
56
60
  children: [/* @__PURE__ */ i("p", {
57
61
  className: "text-sm text-text-secondary",
58
62
  children: "Total Leads"
59
63
  }), /* @__PURE__ */ i("p", {
60
- className: "mt-1 text-2xl font-bold text-text-primary",
61
- children: v.toLocaleString()
64
+ className: "mt-1 text-2xl font-bold tabular-nums text-text-primary",
65
+ children: C.toLocaleString()
62
66
  })]
63
67
  })
64
68
  ]
65
69
  }),
66
70
  /* @__PURE__ */ a("div", {
67
71
  className: "relative",
68
- children: [/* @__PURE__ */ i(u, { className: "absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ i("input", {
72
+ children: [/* @__PURE__ */ i(u, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ i(h, {
69
73
  type: "text",
70
- value: f,
71
- onChange: (e) => p(e.target.value),
74
+ value: _,
75
+ onChange: (e) => v(e.target.value),
72
76
  placeholder: "Search sponsors",
73
- className: "w-full rounded-md border border-border-default bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
77
+ "aria-label": "Search sponsors",
78
+ className: "pl-10"
74
79
  })]
75
80
  }),
76
- h ? /* @__PURE__ */ i("div", {
77
- className: "rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary",
81
+ b ? /* @__PURE__ */ i(p, {
82
+ treatment: "plain",
83
+ className: "border-border-seam p-8 text-center text-sm text-text-secondary",
78
84
  children: "Loading sponsors..."
79
- }) : /* @__PURE__ */ a("div", {
85
+ }) : x.length === 0 ? /* @__PURE__ */ i(p, {
86
+ treatment: "plain",
87
+ className: "border-border-seam",
88
+ children: /* @__PURE__ */ i(m, {
89
+ illustration: _ ? "empty-search" : "empty-people",
90
+ title: _ ? "No sponsors match your search." : "No sponsors yet.",
91
+ description: _ ? "Try a different name." : "Add your first sponsor to start tracking value and leads.",
92
+ action: _ ? void 0 : /* @__PURE__ */ a(f, {
93
+ type: "button",
94
+ onClick: () => g("/sponsors/create"),
95
+ children: [/* @__PURE__ */ i(l, { className: "h-4 w-4" }), "Add Sponsor"]
96
+ })
97
+ })
98
+ }) : /* @__PURE__ */ i("div", {
80
99
  className: "space-y-4",
81
- children: [g.map((e) => /* @__PURE__ */ a("div", {
82
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
100
+ children: x.map((e) => /* @__PURE__ */ a(p, {
101
+ treatment: "plain",
102
+ className: "border-border-seam p-5",
83
103
  children: [/* @__PURE__ */ a("div", {
84
104
  className: "flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between",
85
105
  children: [/* @__PURE__ */ a("div", { children: [/* @__PURE__ */ i("button", {
86
106
  type: "button",
87
- onClick: () => d(`/sponsors/${e.id}/edit`),
88
- className: "text-left text-lg font-semibold text-text-primary hover:text-blue-600",
107
+ onClick: () => g(`/sponsors/${e.id}/edit`),
108
+ className: "rounded-button text-left text-lg font-semibold text-text-primary transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
89
109
  children: e.name
90
110
  }), /* @__PURE__ */ a("div", {
91
111
  className: "mt-1 flex items-center gap-2 text-sm text-text-secondary",
92
- children: [/* @__PURE__ */ i(o, { className: "h-4 w-4" }), /* @__PURE__ */ i("span", {
112
+ children: [/* @__PURE__ */ i(o, { className: "h-4 w-4" }), /* @__PURE__ */ i(d, {
113
+ variant: "secondary",
93
114
  className: "uppercase",
94
115
  children: e.level
95
116
  })]
96
117
  })] }), /* @__PURE__ */ a("div", {
97
- className: "text-sm text-text-secondary",
118
+ className: "text-sm tabular-nums text-text-secondary",
98
119
  children: [/* @__PURE__ */ a("p", { children: ["Value: $", Number(e.metrics?.value ?? 0).toLocaleString()] }), /* @__PURE__ */ a("p", { children: ["Leads: ", Number(e.metrics?.leads ?? 0).toLocaleString()] })]
99
120
  })]
100
121
  }), /* @__PURE__ */ a("div", {
@@ -112,20 +133,17 @@ function d() {
112
133
  href: e.website,
113
134
  target: "_blank",
114
135
  rel: "noreferrer",
115
- className: "text-blue-600 hover:underline",
136
+ className: "text-text-link hover:underline",
116
137
  children: e.website
117
138
  }) : "No website" })
118
139
  ]
119
140
  })]
120
- }, e.id)), g.length === 0 && /* @__PURE__ */ i("div", {
121
- className: "rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary",
122
- children: "No sponsors found."
123
- })]
141
+ }, e.id))
124
142
  })
125
143
  ]
126
144
  });
127
145
  }
128
146
  //#endregion
129
- export { d as default };
147
+ export { g as default };
130
148
 
131
149
  //# sourceMappingURL=SponsorsListPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SponsorsListPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/sponsors/SponsorsListPage.tsx"],"sourcesContent":["import { Building2, Mail, Phone, Plus, Search } from 'lucide-react';\nimport { useMemo, useState } from 'react';\n\nimport { useSponsorsQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype SponsorItem = {\n id: string;\n eventId: string;\n name: string;\n level: string;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n contactPhone?: string | null;\n metrics?: { value?: number; leads?: number } | null;\n};\n\nexport default function SponsorsListPage() {\n const { navigate } = useEventfullyManaged();\n const [search, setSearch] = useState('');\n const { data, loading } = useSponsorsQuery({ search, limit: 100, offset: 0 });\n\n const sponsors = useMemo(() => (data?.sponsors?.items ?? []) as SponsorItem[], [data]);\n\n const totalValue = sponsors.reduce((sum, sponsor) => sum + Number(sponsor.metrics?.value ?? 0), 0);\n const totalLeads = sponsors.reduce((sum, sponsor) => sum + Number(sponsor.metrics?.leads ?? 0), 0);\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>\n <h1 className=\"text-2xl font-bold text-text-primary\">Sponsors</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Manage event sponsors with live API data.</p>\n </div>\n <button\n type=\"button\"\n onClick={() => navigate('/sponsors/create')}\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\"\n >\n <Plus className=\"mr-2 h-4 w-4\" />\n Add Sponsor\n </button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <p className=\"text-sm text-text-secondary\">Total Sponsors</p>\n <p className=\"mt-1 text-2xl font-bold text-text-primary\">{sponsors.length}</p>\n </div>\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <p className=\"text-sm text-text-secondary\">Total Contract Value</p>\n <p className=\"mt-1 text-2xl font-bold text-text-primary\">${totalValue.toLocaleString()}</p>\n </div>\n <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <p className=\"text-sm text-text-secondary\">Total Leads</p>\n <p className=\"mt-1 text-2xl font-bold text-text-primary\">{totalLeads.toLocaleString()}</p>\n </div>\n </div>\n\n <div className=\"relative\">\n <Search className=\"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search sponsors\"\n className=\"w-full rounded-md border border-border-default bg-bg-surface py-2 pl-10 pr-4 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n />\n </div>\n\n {loading ? (\n <div className=\"rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary\">\n Loading sponsors...\n </div>\n ) : (\n <div className=\"space-y-4\">\n {sponsors.map((sponsor) => (\n <div key={sponsor.id} className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <button\n type=\"button\"\n onClick={() => navigate(`/sponsors/${sponsor.id}/edit`)}\n className=\"text-left text-lg font-semibold text-text-primary hover:text-blue-600\"\n >\n {sponsor.name}\n </button>\n <div className=\"mt-1 flex items-center gap-2 text-sm text-text-secondary\">\n <Building2 className=\"h-4 w-4\" />\n <span className=\"uppercase\">{sponsor.level}</span>\n </div>\n </div>\n <div className=\"text-sm text-text-secondary\">\n <p>Value: ${Number(sponsor.metrics?.value ?? 0).toLocaleString()}</p>\n <p>Leads: {Number(sponsor.metrics?.leads ?? 0).toLocaleString()}</p>\n </div>\n </div>\n\n <div className=\"mt-4 grid grid-cols-1 gap-2 text-sm text-text-secondary sm:grid-cols-3\">\n <div className=\"flex items-center gap-2\">\n <Mail className=\"h-4 w-4\" />\n <span>{sponsor.contactEmail ?? 'No email'}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Phone className=\"h-4 w-4\" />\n <span>{sponsor.contactPhone ?? 'No phone'}</span>\n </div>\n <div>\n {sponsor.website ? (\n <a\n href={sponsor.website}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-blue-600 hover:underline\"\n >\n {sponsor.website}\n </a>\n ) : (\n 'No website'\n )}\n </div>\n </div>\n </div>\n ))}\n {sponsors.length === 0 && (\n <div className=\"rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary\">\n No sponsors found.\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SponsorsListPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/sponsors/SponsorsListPage.tsx"],"sourcesContent":["import { Building2, Mail, Phone, Plus, Search } from 'lucide-react';\nimport { Badge, Button, GlassCard, IllustratedEmptyState, Input } from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useSponsorsQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype SponsorItem = {\n id: string;\n eventId: string;\n name: string;\n level: string;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n contactPhone?: string | null;\n metrics?: { value?: number; leads?: number } | null;\n};\n\nexport default function SponsorsListPage() {\n const { navigate } = useEventfullyManaged();\n const [search, setSearch] = useState('');\n const { data, loading } = useSponsorsQuery({ search, limit: 100, offset: 0 });\n\n const sponsors = useMemo(() => (data?.sponsors?.items ?? []) as SponsorItem[], [data]);\n\n const totalValue = sponsors.reduce((sum, sponsor) => sum + Number(sponsor.metrics?.value ?? 0), 0);\n const totalLeads = sponsors.reduce((sum, sponsor) => sum + Number(sponsor.metrics?.leads ?? 0), 0);\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>\n <h1 className=\"text-2xl font-bold text-text-primary\">Sponsors</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Manage event sponsors with live API data.</p>\n </div>\n <Button type=\"button\" onClick={() => navigate('/sponsors/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Sponsor\n </Button>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-3\">\n <GlassCard treatment=\"glass\" glow className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">Total Sponsors</p>\n <p className=\"mt-1 text-2xl font-bold tabular-nums text-text-primary\">{sponsors.length}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">Total Contract Value</p>\n <p className=\"mt-1 text-2xl font-bold tabular-nums text-text-primary\">${totalValue.toLocaleString()}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-4\">\n <p className=\"text-sm text-text-secondary\">Total Leads</p>\n <p className=\"mt-1 text-2xl font-bold tabular-nums text-text-primary\">{totalLeads.toLocaleString()}</p>\n </GlassCard>\n </div>\n\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search sponsors\"\n aria-label=\"Search sponsors\"\n className=\"pl-10\"\n />\n </div>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading sponsors...\n </GlassCard>\n ) : sponsors.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration={search ? 'empty-search' : 'empty-people'}\n title={search ? 'No sponsors match your search.' : 'No sponsors yet.'}\n description={search ? 'Try a different name.' : 'Add your first sponsor to start tracking value and leads.'}\n action={\n !search ? (\n <Button type=\"button\" onClick={() => navigate('/sponsors/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Sponsor\n </Button>\n ) : undefined\n }\n />\n </GlassCard>\n ) : (\n <div className=\"space-y-4\">\n {sponsors.map((sponsor) => (\n <GlassCard key={sponsor.id} treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div>\n <button\n type=\"button\"\n onClick={() => navigate(`/sponsors/${sponsor.id}/edit`)}\n className=\"rounded-button text-left text-lg font-semibold text-text-primary transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n >\n {sponsor.name}\n </button>\n <div className=\"mt-1 flex items-center gap-2 text-sm text-text-secondary\">\n <Building2 className=\"h-4 w-4\" />\n <Badge variant=\"secondary\" className=\"uppercase\">\n {sponsor.level}\n </Badge>\n </div>\n </div>\n <div className=\"text-sm tabular-nums text-text-secondary\">\n <p>Value: ${Number(sponsor.metrics?.value ?? 0).toLocaleString()}</p>\n <p>Leads: {Number(sponsor.metrics?.leads ?? 0).toLocaleString()}</p>\n </div>\n </div>\n\n <div className=\"mt-4 grid grid-cols-1 gap-2 text-sm text-text-secondary sm:grid-cols-3\">\n <div className=\"flex items-center gap-2\">\n <Mail className=\"h-4 w-4\" />\n <span>{sponsor.contactEmail ?? 'No email'}</span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Phone className=\"h-4 w-4\" />\n <span>{sponsor.contactPhone ?? 'No phone'}</span>\n </div>\n <div>\n {sponsor.website ? (\n <a\n href={sponsor.website}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"text-text-link hover:underline\"\n >\n {sponsor.website}\n </a>\n ) : (\n 'No website'\n )}\n </div>\n </div>\n </GlassCard>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -4,67 +4,80 @@ 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, GlassCard as d, IllustratedEmptyState as f, Input as p } from "@burdenoff/fe-libs/ui";
7
8
  //#region src/eventfullymanaged/pages/venues/FloorPlansPage.tsx
8
- function u() {
9
- let { id: u = "" } = i(), { navigate: d } = e(), { data: f, loading: p, refetch: m } = n(u), [h, { loading: g }] = t(), [_, v] = r(""), y = f?.venue, b = f?.floorPlans?.items ?? [];
9
+ function m() {
10
+ let { id: m = "" } = i(), { navigate: h } = e(), { data: g, loading: _, refetch: v } = n(m), [y, { loading: b }] = t(), [x, S] = r(""), C = g?.venue, w = g?.floorPlans?.items ?? [];
10
11
  return /* @__PURE__ */ o("div", {
11
12
  className: "space-y-6 p-6",
12
13
  children: [
13
14
  /* @__PURE__ */ o("div", {
14
15
  className: "space-y-3",
15
- children: [/* @__PURE__ */ o("button", {
16
+ children: [/* @__PURE__ */ o(u, {
16
17
  type: "button",
17
- onClick: () => d(`/venues/${u}`),
18
- className: "inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary",
18
+ variant: "ghost",
19
+ size: "sm",
20
+ onClick: () => h(`/venues/${m}`),
19
21
  children: [/* @__PURE__ */ a(s, { className: "h-4 w-4" }), "Back to Venue"]
20
22
  }), /* @__PURE__ */ o("div", { children: [/* @__PURE__ */ a("h1", {
21
23
  className: "text-2xl font-bold text-text-primary",
22
24
  children: "Floor Plans"
23
25
  }), /* @__PURE__ */ a("p", {
24
26
  className: "mt-1 text-sm text-text-secondary",
25
- children: y?.name ?? "Venue"
27
+ children: C?.name ?? "Venue"
26
28
  })] })]
27
29
  }),
28
- /* @__PURE__ */ o("div", {
29
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
30
+ /* @__PURE__ */ o(d, {
31
+ treatment: "plain",
32
+ className: "border-border-seam p-4",
30
33
  children: [/* @__PURE__ */ a("h2", {
31
34
  className: "mb-3 text-sm font-semibold text-text-primary",
32
35
  children: "Create floor plan"
33
36
  }), /* @__PURE__ */ o("div", {
34
37
  className: "flex flex-col gap-3 sm:flex-row",
35
- children: [/* @__PURE__ */ a("input", {
38
+ children: [/* @__PURE__ */ a(p, {
36
39
  type: "text",
37
- value: _,
38
- onChange: (e) => v(e.target.value),
40
+ value: x,
41
+ onChange: (e) => S(e.target.value),
39
42
  placeholder: "Main Hall Layout",
40
- className: "flex-1 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-action-primary-bg"
41
- }), /* @__PURE__ */ o("button", {
43
+ "aria-label": "Floor plan name",
44
+ className: "flex-1"
45
+ }), /* @__PURE__ */ o(u, {
42
46
  type: "button",
43
47
  onClick: async () => {
44
- !_.trim() || !u || (await h({ variables: { input: {
45
- venueId: u,
46
- name: _.trim(),
48
+ !x.trim() || !m || (await y({ variables: { input: {
49
+ venueId: m,
50
+ name: x.trim(),
47
51
  imageUrl: "",
48
52
  dimensions: {},
49
53
  interactiveAreas: {}
50
- } } }), v(""), await m());
54
+ } } }), S(""), await v());
51
55
  },
52
- disabled: g,
53
- 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",
54
- children: [/* @__PURE__ */ a(c, { className: "mr-2 h-4 w-4" }), g ? "Creating..." : "Create"]
56
+ disabled: b,
57
+ children: [/* @__PURE__ */ a(c, { className: "h-4 w-4" }), b ? "Creating..." : "Create"]
55
58
  })]
56
59
  })]
57
60
  }),
58
- p ? /* @__PURE__ */ a("div", {
59
- className: "rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary",
61
+ _ ? /* @__PURE__ */ a(d, {
62
+ treatment: "plain",
63
+ className: "border-border-seam p-8 text-center text-sm text-text-secondary",
60
64
  children: "Loading floor plans..."
61
- }) : /* @__PURE__ */ o("div", {
65
+ }) : w.length === 0 ? /* @__PURE__ */ a(d, {
66
+ treatment: "plain",
67
+ className: "border-border-seam",
68
+ children: /* @__PURE__ */ a(f, {
69
+ illustration: "empty-files",
70
+ title: "No floor plans found.",
71
+ description: "Create one to start mapping your venue."
72
+ })
73
+ }) : /* @__PURE__ */ a("div", {
62
74
  className: "grid grid-cols-1 gap-4 md:grid-cols-2",
63
- children: [b.map((e) => /* @__PURE__ */ o("div", {
64
- className: "rounded-lg border border-border-default bg-bg-surface p-4",
75
+ children: w.map((e) => /* @__PURE__ */ o(d, {
76
+ treatment: "metric",
77
+ className: "p-4",
65
78
  children: [/* @__PURE__ */ o("div", {
66
79
  className: "flex items-center gap-2 text-text-primary",
67
- children: [/* @__PURE__ */ a(l, { className: "h-4 w-4" }), /* @__PURE__ */ a("h3", {
80
+ children: [/* @__PURE__ */ a(l, { className: "h-4 w-4 text-action-primary-bg" }), /* @__PURE__ */ a("h3", {
68
81
  className: "font-semibold",
69
82
  children: e.name
70
83
  })]
@@ -77,15 +90,12 @@ function u() {
77
90
  e.dimensions ? "Dimensions configured" : "No dimensions configured"
78
91
  ]
79
92
  })]
80
- }, e.id)), b.length === 0 && /* @__PURE__ */ a("div", {
81
- className: "rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary",
82
- children: "No floor plans found. Create one to start mapping your venue."
83
- })]
93
+ }, e.id))
84
94
  })
85
95
  ]
86
96
  });
87
97
  }
88
98
  //#endregion
89
- export { u as default };
99
+ export { m as default };
90
100
 
91
101
  //# 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 { 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\n type=\"button\"\n onClick={() => navigate(`/venues/${id}`)}\n className=\"inline-flex items-center gap-2 text-sm text-text-secondary hover:text-text-primary\"\n >\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 <div className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\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 className=\"flex-1 rounded-md border border-border-default bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-muted focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n />\n <button\n type=\"button\"\n onClick={handleCreate}\n disabled={creating}\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 <Plus className=\"mr-2 h-4 w-4\" />\n {creating ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n\n {loading ? (\n <div className=\"rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary\">\n Loading floor plans...\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n {floorPlans.map((plan) => (\n <div key={plan.id} className=\"rounded-lg border border-border-default bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-text-primary\">\n <SquareStack className=\"h-4 w-4\" />\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 </div>\n ))}\n {floorPlans.length === 0 && (\n <div className=\"rounded-md border border-border-default bg-bg-surface p-8 text-center text-sm text-text-secondary\">\n No floor plans found. Create one to start mapping your venue.\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;AAgBA,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,UAAD;KACE,MAAK;KACL,eAAe,EAAS,WAAW,IAAK;KACxC,WAAU;eAHZ,CAKE,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,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAA+C;KAAsB,CAAA,EACnF,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,SAAD;MACE,MAAK;MACL,OAAO;MACP,WAAW,MAAU,EAAQ,EAAM,OAAO,MAAM;MAChD,aAAY;MACZ,WAAU;MACV,CAAA,EACF,kBAAC,UAAD;MACE,MAAK;MACL,SAhDW,YAAY;AAC3B,QAAC,EAAK,MAAM,IAAI,CAAC,MAGrB,MAAM,EAAgB,EACpB,WAAW,EACT,OAAO;QACL,SAAS;QACT,MAAM,EAAK,MAAM;QACjB,UAAU;QACV,YAAY,EAAE;QACd,kBAAkB,EAAE;QACrB,EACF,EACF,CAAC,EACF,EAAQ,GAAG,EACX,MAAM,GAAS;;MAiCP,UAAU;MACV,WAAU;gBAJZ,CAME,kBAAC,GAAD,EAAM,WAAU,gBAAiB,CAAA,EAChC,IAAW,gBAAgB,SACrB;QACL;OACF;;GAEL,IACC,kBAAC,OAAD;IAAK,WAAU;cAAoG;IAE7G,CAAA,GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,EAAW,KAAK,MACf,kBAAC,OAAD;KAAmB,WAAU;eAA7B,CACE,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,WAAY,CAAA,EACnC,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;QACA;OATI,EAAK,GAST,CACN,EACD,EAAW,WAAW,KACrB,kBAAC,OAAD;KAAK,WAAU;eAAoG;KAE7G,CAAA,CAEJ;;GAEJ"}
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 <GlassCard treatment=\"plain\" className=\"border-border-seam p-4\">\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 </GlassCard>\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;IAAW,WAAU;IAAQ,WAAU;cAAvC,CACE,kBAAC,MAAD;KAAI,WAAU;eAA+C;KAAsB,CAAA,EACnF,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MACE,MAAK;MACL,OAAO;MACP,WAAW,MAAU,EAAQ,EAAM,OAAO,MAAM;MAChD,aAAY;MACZ,cAAW;MACX,WAAU;MACV,CAAA,EACF,kBAAC,GAAD;MAAQ,MAAK;MAAS,SA3CT,YAAY;AAC3B,QAAC,EAAK,MAAM,IAAI,CAAC,MAGrB,MAAM,EAAgB,EACpB,WAAW,EACT,OAAO;QACL,SAAS;QACT,MAAM,EAAK,MAAM;QACjB,UAAU;QACV,YAAY,EAAE;QACd,kBAAkB,EAAE;QACrB,EACF,EACF,CAAC,EACF,EAAQ,GAAG,EACX,MAAM,GAAS;;MA2BoC,UAAU;gBAAvD,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAC3B,IAAW,gBAAgB,SACrB;QACL;OACI;;GAEX,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"}