@burdenoff/microfe-timecampus 2026.830.2 → 2026.904.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 (54) hide show
  1. package/dist/timecampus/components/index.js +4 -4
  2. package/dist/timecampus/pages/HomePage.d.ts.map +1 -1
  3. package/dist/timecampus/pages/HomePage.js +149 -133
  4. package/dist/timecampus/pages/HomePage.js.map +1 -1
  5. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js +7 -7
  6. package/dist/timecampus/pages/application-usage/ApplicationUsagePage.js.map +1 -1
  7. package/dist/timecampus/pages/client-portal/ClientPortalPage.js +7 -7
  8. package/dist/timecampus/pages/client-portal/ClientPortalPage.js.map +1 -1
  9. package/dist/timecampus/pages/dashboard/ReportsPage.js +13 -13
  10. package/dist/timecampus/pages/email-tracking/EmailTrackingPage.js +7 -7
  11. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js +7 -7
  12. package/dist/timecampus/pages/expense-tracking/ExpenseTrackingPage.js.map +1 -1
  13. package/dist/timecampus/pages/focus-score/FocusScorePage.js +13 -13
  14. package/dist/timecampus/pages/geofencing/GeofencingPage.js +135 -135
  15. package/dist/timecampus/pages/geofencing/GeofencingPage.js.map +1 -1
  16. package/dist/timecampus/pages/invoicing/InvoicingPage.js +7 -7
  17. package/dist/timecampus/pages/invoicing/InvoicingPage.js.map +1 -1
  18. package/dist/timecampus/pages/lifetime/DeadTimeRadarPage.js +8 -8
  19. package/dist/timecampus/pages/lifetime/FiniteLifePage.js +4 -4
  20. package/dist/timecampus/pages/lifetime/FiniteLifePage.js.map +1 -1
  21. package/dist/timecampus/pages/lifetime/LifeBalancePage.js +104 -104
  22. package/dist/timecampus/pages/lifetime/LifeBalancePage.js.map +1 -1
  23. package/dist/timecampus/pages/lifetime/LifeTimelinePage.js +7 -7
  24. package/dist/timecampus/pages/lifetime/LifeTimelinePage.js.map +1 -1
  25. package/dist/timecampus/pages/lifetime/PersonalCorporatePage.js +33 -33
  26. package/dist/timecampus/pages/lifetime/PersonalCorporatePage.js.map +1 -1
  27. package/dist/timecampus/pages/lifetime/RecommendationsPage.js +80 -80
  28. package/dist/timecampus/pages/lifetime/RecommendationsPage.js.map +1 -1
  29. package/dist/timecampus/pages/lifetime/TimeWellSpentPage.js +16 -16
  30. package/dist/timecampus/pages/lifetime/ValuesGoalsPage.js +11 -11
  31. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js +11 -11
  32. package/dist/timecampus/pages/location-tracking/LocationTrackingPage.js.map +1 -1
  33. package/dist/timecampus/pages/meetings/MeetingDetailPage.js +14 -14
  34. package/dist/timecampus/pages/meetings/MeetingDetailPage.js.map +1 -1
  35. package/dist/timecampus/pages/meetings/MeetingsPage.js +12 -12
  36. package/dist/timecampus/pages/projects/ProjectsPage.js +5 -5
  37. package/dist/timecampus/pages/projects/ProjectsPage.js.map +1 -1
  38. package/dist/timecampus/pages/projects/TasksPage.js +8 -8
  39. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js +8 -8
  40. package/dist/timecampus/pages/resource-planning/ResourcePlanningPage.js.map +1 -1
  41. package/dist/timecampus/pages/team/TeamMembersPage.js +8 -8
  42. package/dist/timecampus/pages/team-activity/TeamActivityPage.js +13 -13
  43. package/dist/timecampus/pages/time/TimeEntriesPage.js +5 -5
  44. package/dist/timecampus/pages/time/TimeEntriesPage.js.map +1 -1
  45. package/dist/timecampus/pages/time/TimeTrackingPage.js +138 -138
  46. package/dist/timecampus/pages/time/TimeTrackingPage.js.map +1 -1
  47. package/dist/timecampus/pages/time/TimerPage.js +14 -14
  48. package/dist/timecampus/pages/time/TimerPage.js.map +1 -1
  49. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js +26 -26
  50. package/dist/timecampus/pages/time-approval/TimeApprovalPage.js.map +1 -1
  51. package/dist/timecampus/pages/timeline/TimelinePage.js +8 -8
  52. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js +79 -79
  53. package/dist/timecampus/pages/work-patterns/WorkPatternsPage.js.map +1 -1
  54. package/package.json +1 -1
@@ -1,31 +1,31 @@
1
1
  import { cn as e, formatRelativeTime as t } from "../../utils/helpers.js";
2
2
  import { StatCard as n } from "../../components/StatCard.js";
3
3
  import { LoadingSkeleton as r } from "../../components/LoadingSkeleton.js";
4
- import { useCreateGeofenceMutation as i, useDeleteGeofenceMutation as a, useListGeofencesQuery as o, useToggleGeofenceMutation as s, useUpdateGeofenceMutation as c } from "../../../generated/wspace-operations.js";
4
+ import { EmptyState as i } from "../../components/EmptyState.js";
5
+ import { useCreateGeofenceMutation as a, useDeleteGeofenceMutation as o, useListGeofencesQuery as s, useToggleGeofenceMutation as c, useUpdateGeofenceMutation as ee } from "../../../generated/wspace-operations.js";
5
6
  import { PageLayout as l } from "../../components/PageLayout.js";
6
- import { EmptyState as u } from "../../components/EmptyState.js";
7
- import { Modal as d } from "../../components/Modal.js";
8
- import { ChartCard as f } from "../../components/ChartCard.js";
9
- import { BarsChart as ee } from "../../components/charts/BarsChart.js";
10
- import { DonutChart as p } from "../../components/charts/DonutChart.js";
7
+ import { Modal as u } from "../../components/Modal.js";
8
+ import { ChartCard as d } from "../../components/ChartCard.js";
9
+ import { BarsChart as te } from "../../components/charts/BarsChart.js";
10
+ import { DonutChart as ne } from "../../components/charts/DonutChart.js";
11
11
  import "../../components/index.js";
12
- import { GeofenceEventType as m, GeofenceTrigger as h } from "../../../generated/wspace-types.js";
13
- import { useState as g } from "react";
14
- import { LogIn as _, LogOut as v, MapPin as y, Pencil as b, Plus as te, Radio as ne, ShieldCheck as re, Trash2 as ie } from "lucide-react";
15
- import { Fragment as x, jsx as S, jsxs as C } from "react/jsx-runtime";
16
- import { GlassCard as w } from "@burdenoff/fe-libs/ui";
12
+ import { GeofenceEventType as f, GeofenceTrigger as p } from "../../../generated/wspace-types.js";
13
+ import { useState as m } from "react";
14
+ import { LogIn as h, LogOut as g, MapPin as _, Pencil as v, Plus as re, Radio as ie, ShieldCheck as ae, Trash2 as oe } from "lucide-react";
15
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
16
+ import { GlassCard as S } from "@burdenoff/fe-libs/ui";
17
17
  //#region src/timecampus/pages/geofencing/GeofencingPage.tsx
18
- var T = 25, E = {
18
+ var C = 25, w = {
19
19
  name: "",
20
20
  latitude: "",
21
21
  longitude: "",
22
22
  radius: "100",
23
- trigger: h.Both,
23
+ trigger: p.Both,
24
24
  address: "",
25
25
  isActive: !0
26
- }, D = "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary";
27
- function O({ checked: t, onChange: n, label: r, disabled: i }) {
28
- return /* @__PURE__ */ S("button", {
26
+ }, T = "mt-1 w-full rounded-md border border-border-subtle bg-bg-surface px-3 py-2 text-sm text-text-primary placeholder:text-text-secondary";
27
+ function E({ checked: t, onChange: n, label: r, disabled: i }) {
28
+ return /* @__PURE__ */ b("button", {
29
29
  type: "button",
30
30
  role: "switch",
31
31
  "aria-checked": t,
@@ -33,33 +33,33 @@ function O({ checked: t, onChange: n, label: r, disabled: i }) {
33
33
  disabled: i,
34
34
  onClick: () => n(!t),
35
35
  className: e("relative inline-flex h-5 w-9 shrink-0 items-center rounded-full border transition-colors disabled:cursor-not-allowed disabled:opacity-50", t ? "border-transparent bg-action-primary-bg" : "border-border-subtle bg-bg-sunken"),
36
- children: /* @__PURE__ */ S("span", { className: e("inline-block h-3.5 w-3.5 transform rounded-full shadow-sm transition-transform", t ? "translate-x-4 bg-action-primary-text" : "translate-x-0.5 bg-text-secondary") })
36
+ children: /* @__PURE__ */ b("span", { className: e("inline-block h-3.5 w-3.5 transform rounded-full shadow-sm transition-transform", t ? "translate-x-4 bg-action-primary-text" : "translate-x-0.5 bg-text-secondary") })
37
37
  });
38
38
  }
39
- function k() {
40
- let { data: k, loading: ae, error: oe, refetch: A, fetchMore: j } = o({ variables: { pagination: {
41
- limit: T,
39
+ function D() {
40
+ let { data: D, loading: O, error: k, refetch: A, fetchMore: j } = s({ variables: { pagination: {
41
+ limit: C,
42
42
  offset: 0
43
- } } }), [M, { loading: N, error: se }] = i(), [P, { loading: F, error: ce }] = c(), [le, { loading: I }] = a(), [L] = s(), [R, z] = g(!1), [B, V] = g(null), [H, U] = g(E), [W, G] = g(null), [K, q] = g(!1), J = k?.geofences?.items ?? [], ue = k?.geofences?.hasMore ?? !1, de = k?.geofences?.total ?? J.length, fe = J.filter((e) => e.isActive).length, Y = 0, X = 0;
44
- for (let e of J) for (let t of e.events) t.type === m.Enter ? Y += 1 : X += 1;
43
+ } } }), [M, { loading: N, error: se }] = a(), [P, { loading: F, error: ce }] = ee(), [le, { loading: I }] = o(), [L] = c(), [R, z] = m(!1), [B, V] = m(null), [H, U] = m(w), [W, G] = m(null), [K, q] = m(!1), J = D?.geofences?.items ?? [], ue = D?.geofences?.hasMore ?? !1, de = D?.geofences?.total ?? J.length, fe = J.filter((e) => e.isActive).length, Y = 0, X = 0;
44
+ for (let e of J) for (let t of e.events) t.type === f.Enter ? Y += 1 : X += 1;
45
45
  let pe = [
46
46
  {
47
47
  name: "Entry & exit",
48
- value: J.filter((e) => e.trigger === h.Both).length
48
+ value: J.filter((e) => e.trigger === p.Both).length
49
49
  },
50
50
  {
51
51
  name: "On entry",
52
- value: J.filter((e) => e.trigger === h.Enter).length
52
+ value: J.filter((e) => e.trigger === p.Enter).length
53
53
  },
54
54
  {
55
55
  name: "On exit",
56
- value: J.filter((e) => e.trigger === h.Exit).length
56
+ value: J.filter((e) => e.trigger === p.Exit).length
57
57
  }
58
58
  ], me = J.map((e) => ({
59
59
  zone: e.name,
60
60
  events: e.events.length
61
61
  })).filter((e) => e.events > 0).sort((e, t) => t.events - e.events).slice(0, 8), he = () => {
62
- V(null), U(E), z(!0);
62
+ V(null), U(w), z(!0);
63
63
  }, Z = (e) => {
64
64
  V(e), U({
65
65
  name: e.name,
@@ -94,7 +94,7 @@ function k() {
94
94
  } }), await A();
95
95
  }, Q = async (e, t, n) => {
96
96
  if (!t && !n) return;
97
- let r = t && n ? h.Both : t ? h.Enter : h.Exit;
97
+ let r = t && n ? p.Both : t ? p.Enter : p.Exit;
98
98
  r !== e.trigger && (await P({ variables: {
99
99
  id: e.id,
100
100
  input: { trigger: r }
@@ -104,7 +104,7 @@ function k() {
104
104
  try {
105
105
  await j({
106
106
  variables: { pagination: {
107
- limit: T,
107
+ limit: C,
108
108
  offset: J.length
109
109
  } },
110
110
  updateQuery: (e, { fetchMoreResult: t }) => t ? { geofences: {
@@ -115,80 +115,80 @@ function k() {
115
115
  } finally {
116
116
  q(!1);
117
117
  }
118
- }, $ = /* @__PURE__ */ C("button", {
118
+ }, $ = /* @__PURE__ */ x("button", {
119
119
  onClick: he,
120
120
  className: "inline-flex items-center gap-1.5 rounded-md bg-action-primary-bg px-3 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90",
121
- children: [/* @__PURE__ */ S(te, { className: "h-4 w-4" }), "Create Geofence"]
121
+ children: [/* @__PURE__ */ b(re, { className: "h-4 w-4" }), "Create Geofence"]
122
122
  });
123
- return ae ? /* @__PURE__ */ S(l, {
123
+ return O ? /* @__PURE__ */ b(l, {
124
124
  title: "Geofencing",
125
125
  description: "Set up location-based triggers and zones",
126
- children: /* @__PURE__ */ S(r, {
126
+ children: /* @__PURE__ */ b(r, {
127
127
  variant: "card",
128
128
  count: 4
129
129
  })
130
- }) : oe ? /* @__PURE__ */ S(l, {
130
+ }) : k ? /* @__PURE__ */ b(l, {
131
131
  title: "Geofencing",
132
132
  description: "Set up location-based triggers and zones",
133
- children: /* @__PURE__ */ S("div", {
133
+ children: /* @__PURE__ */ b("div", {
134
134
  className: "rounded-lg border border-status-error-bg/40 bg-status-error-bg p-4 text-sm text-status-error-text",
135
135
  children: "Failed to load geofences. Please try again later."
136
136
  })
137
- }) : /* @__PURE__ */ C(l, {
137
+ }) : /* @__PURE__ */ x(l, {
138
138
  title: "Geofencing",
139
139
  description: "Set up location-based triggers and zones",
140
140
  purpose: "Draw zones around your worksites — offices, client sites, job locations — and have time tracking start and stop automatically as people move in and out, so on-site hours record themselves.",
141
141
  actions: $,
142
142
  children: [
143
- J.length === 0 ? /* @__PURE__ */ S(u, {
143
+ J.length === 0 ? /* @__PURE__ */ b(i, {
144
144
  illustration: "empty-generic",
145
145
  title: "No geofences configured yet",
146
146
  description: "Create your first zone to trigger automatic time tracking when people arrive or leave a location.",
147
147
  action: $
148
- }) : /* @__PURE__ */ C(x, { children: [
149
- /* @__PURE__ */ C("div", {
148
+ }) : /* @__PURE__ */ x(y, { children: [
149
+ /* @__PURE__ */ x("div", {
150
150
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4",
151
151
  children: [
152
- /* @__PURE__ */ S(n, {
152
+ /* @__PURE__ */ b(n, {
153
153
  featured: !0,
154
154
  title: "Total Zones",
155
155
  value: String(de),
156
- icon: /* @__PURE__ */ S(y, { className: "h-5 w-5" })
156
+ icon: /* @__PURE__ */ b(_, { className: "h-5 w-5" })
157
157
  }),
158
- /* @__PURE__ */ S(n, {
158
+ /* @__PURE__ */ b(n, {
159
159
  title: "Active Zones",
160
160
  value: String(fe),
161
- icon: /* @__PURE__ */ S(ne, { className: "h-5 w-5" }),
161
+ icon: /* @__PURE__ */ b(ie, { className: "h-5 w-5" }),
162
162
  description: "Currently tracking"
163
163
  }),
164
- /* @__PURE__ */ S(n, {
164
+ /* @__PURE__ */ b(n, {
165
165
  title: "Entry Events",
166
166
  value: String(Y),
167
- icon: /* @__PURE__ */ S(_, { className: "h-5 w-5" })
167
+ icon: /* @__PURE__ */ b(h, { className: "h-5 w-5" })
168
168
  }),
169
- /* @__PURE__ */ S(n, {
169
+ /* @__PURE__ */ b(n, {
170
170
  title: "Exit Events",
171
171
  value: String(X),
172
- icon: /* @__PURE__ */ S(v, { className: "h-5 w-5" })
172
+ icon: /* @__PURE__ */ b(g, { className: "h-5 w-5" })
173
173
  })
174
174
  ]
175
175
  }),
176
- /* @__PURE__ */ C("div", {
176
+ /* @__PURE__ */ x("div", {
177
177
  className: "mt-6 grid grid-cols-1 gap-4 lg:grid-cols-2",
178
- children: [/* @__PURE__ */ S(f, {
178
+ children: [/* @__PURE__ */ b(d, {
179
179
  title: "Trigger configuration",
180
180
  description: "How your zones fire",
181
- children: /* @__PURE__ */ S(p, {
181
+ children: /* @__PURE__ */ b(ne, {
182
182
  data: pe,
183
183
  centerLabel: "Zones",
184
184
  centerValue: J.length,
185
185
  ariaLabel: "Geofence trigger configuration mix",
186
186
  emptyLabel: "No zones to summarize yet"
187
187
  })
188
- }), /* @__PURE__ */ S(f, {
188
+ }), /* @__PURE__ */ b(d, {
189
189
  title: "Activity by zone",
190
190
  description: "Recorded enter/exit events per zone",
191
- children: /* @__PURE__ */ S(ee, {
191
+ children: /* @__PURE__ */ b(te, {
192
192
  data: me,
193
193
  xKey: "zone",
194
194
  orientation: "horizontal",
@@ -202,28 +202,28 @@ function k() {
202
202
  })
203
203
  })]
204
204
  }),
205
- /* @__PURE__ */ S("div", {
205
+ /* @__PURE__ */ b("div", {
206
206
  className: "mt-6 grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-3",
207
207
  children: J.map((n) => {
208
- let r = n.trigger === h.Enter || n.trigger === h.Both, i = n.trigger === h.Exit || n.trigger === h.Both, a = n.events.filter((e) => e.type === m.Enter).length, o = n.events.length - a, s = n.events.reduce((e, t) => t.timestamp > e ? t.timestamp : e, "");
209
- return /* @__PURE__ */ C(w, {
208
+ let r = n.trigger === p.Enter || n.trigger === p.Both, i = n.trigger === p.Exit || n.trigger === p.Both, a = n.events.filter((e) => e.type === f.Enter).length, o = n.events.length - a, s = n.events.reduce((e, t) => t.timestamp > e ? t.timestamp : e, "");
209
+ return /* @__PURE__ */ x(S, {
210
210
  treatment: "glass",
211
211
  glow: n.isActive,
212
212
  className: "flex flex-col p-5",
213
213
  children: [
214
- /* @__PURE__ */ C("div", {
214
+ /* @__PURE__ */ x("div", {
215
215
  className: "flex items-start justify-between gap-3",
216
- children: [/* @__PURE__ */ C("div", {
216
+ children: [/* @__PURE__ */ x("div", {
217
217
  className: "flex min-w-0 items-start gap-2",
218
- children: [/* @__PURE__ */ S("span", {
218
+ children: [/* @__PURE__ */ b("span", {
219
219
  className: "mt-0.5 flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary",
220
- children: /* @__PURE__ */ S(y, { className: "h-5 w-5" })
221
- }), /* @__PURE__ */ C("div", {
220
+ children: /* @__PURE__ */ b(_, { className: "h-5 w-5" })
221
+ }), /* @__PURE__ */ x("div", {
222
222
  className: "min-w-0",
223
- children: [/* @__PURE__ */ S("p", {
223
+ children: [/* @__PURE__ */ b("p", {
224
224
  className: "truncate text-sm font-semibold text-text-primary",
225
225
  children: n.name
226
- }), /* @__PURE__ */ C("p", {
226
+ }), /* @__PURE__ */ x("p", {
227
227
  className: "truncate text-xs text-text-secondary",
228
228
  children: [
229
229
  n.address ?? "No address",
@@ -234,116 +234,116 @@ function k() {
234
234
  ]
235
235
  })]
236
236
  })]
237
- }), /* @__PURE__ */ C("div", {
237
+ }), /* @__PURE__ */ x("div", {
238
238
  className: "flex shrink-0 flex-col items-end gap-1",
239
- children: [/* @__PURE__ */ S(O, {
239
+ children: [/* @__PURE__ */ b(E, {
240
240
  checked: n.isActive,
241
241
  onChange: () => ve(n),
242
242
  label: `Toggle ${n.name} active`
243
- }), /* @__PURE__ */ S("span", {
243
+ }), /* @__PURE__ */ b("span", {
244
244
  className: e("text-xs font-medium", n.isActive ? "text-status-success-text" : "text-text-muted"),
245
245
  children: n.isActive ? "Active" : "Inactive"
246
246
  })]
247
247
  })]
248
248
  }),
249
- /* @__PURE__ */ C("div", {
249
+ /* @__PURE__ */ x("div", {
250
250
  className: "mt-4 grid grid-cols-2 gap-2",
251
- children: [/* @__PURE__ */ C("div", {
251
+ children: [/* @__PURE__ */ x("div", {
252
252
  className: "flex items-center justify-between rounded-lg border border-border-subtle bg-bg-surface/60 px-3 py-2",
253
- children: [/* @__PURE__ */ C("span", {
253
+ children: [/* @__PURE__ */ x("span", {
254
254
  className: "flex items-center gap-1.5 text-xs font-medium text-text-secondary",
255
- children: [/* @__PURE__ */ S(_, { className: "h-3.5 w-3.5" }), "Enter"]
256
- }), /* @__PURE__ */ S(O, {
255
+ children: [/* @__PURE__ */ b(h, { className: "h-3.5 w-3.5" }), "Enter"]
256
+ }), /* @__PURE__ */ b(E, {
257
257
  checked: r,
258
258
  onChange: (e) => Q(n, e, i),
259
259
  label: `Enter trigger for ${n.name}`
260
260
  })]
261
- }), /* @__PURE__ */ C("div", {
261
+ }), /* @__PURE__ */ x("div", {
262
262
  className: "flex items-center justify-between rounded-lg border border-border-subtle bg-bg-surface/60 px-3 py-2",
263
- children: [/* @__PURE__ */ C("span", {
263
+ children: [/* @__PURE__ */ x("span", {
264
264
  className: "flex items-center gap-1.5 text-xs font-medium text-text-secondary",
265
- children: [/* @__PURE__ */ S(v, { className: "h-3.5 w-3.5" }), "Exit"]
266
- }), /* @__PURE__ */ S(O, {
265
+ children: [/* @__PURE__ */ b(g, { className: "h-3.5 w-3.5" }), "Exit"]
266
+ }), /* @__PURE__ */ b(E, {
267
267
  checked: i,
268
268
  onChange: (e) => Q(n, r, e),
269
269
  label: `Exit trigger for ${n.name}`
270
270
  })]
271
271
  })]
272
272
  }),
273
- /* @__PURE__ */ C("div", {
273
+ /* @__PURE__ */ x("div", {
274
274
  className: "mt-3 flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-text-secondary",
275
275
  children: [
276
- /* @__PURE__ */ C("span", { children: [
276
+ /* @__PURE__ */ x("span", { children: [
277
277
  "Entries",
278
278
  " ",
279
- /* @__PURE__ */ S("span", {
279
+ /* @__PURE__ */ b("span", {
280
280
  className: "font-semibold tabular-nums text-text-primary",
281
281
  children: a
282
282
  })
283
283
  ] }),
284
- /* @__PURE__ */ C("span", { children: [
284
+ /* @__PURE__ */ x("span", { children: [
285
285
  "Exits",
286
286
  " ",
287
- /* @__PURE__ */ S("span", {
287
+ /* @__PURE__ */ b("span", {
288
288
  className: "font-semibold tabular-nums text-text-primary",
289
289
  children: o
290
290
  })
291
291
  ] }),
292
- s ? /* @__PURE__ */ C("span", {
292
+ s ? /* @__PURE__ */ x("span", {
293
293
  className: "ml-auto",
294
294
  children: [
295
295
  "Last",
296
296
  " ",
297
- /* @__PURE__ */ S("span", {
297
+ /* @__PURE__ */ b("span", {
298
298
  className: "text-text-primary",
299
299
  children: t(s)
300
300
  })
301
301
  ]
302
- }) : /* @__PURE__ */ S("span", {
302
+ }) : /* @__PURE__ */ b("span", {
303
303
  className: "ml-auto text-text-muted",
304
304
  children: "No events yet"
305
305
  })
306
306
  ]
307
307
  }),
308
- /* @__PURE__ */ C("div", {
308
+ /* @__PURE__ */ x("div", {
309
309
  className: "mt-4 flex items-center gap-2 border-t border-border-seam pt-3",
310
- children: [/* @__PURE__ */ C("button", {
310
+ children: [/* @__PURE__ */ x("button", {
311
311
  onClick: () => Z(n),
312
312
  className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-2 py-1 text-xs font-medium text-text-primary hover:bg-bg-sunken/50",
313
- children: [/* @__PURE__ */ S(b, { className: "h-3.5 w-3.5" }), "Edit"]
314
- }), /* @__PURE__ */ C("button", {
313
+ children: [/* @__PURE__ */ b(v, { className: "h-3.5 w-3.5" }), "Edit"]
314
+ }), /* @__PURE__ */ x("button", {
315
315
  onClick: () => G(n),
316
316
  className: "inline-flex items-center gap-1 rounded-md border border-border-subtle px-2 py-1 text-xs font-medium text-status-error-text hover:bg-status-error-bg",
317
- children: [/* @__PURE__ */ S(ie, { className: "h-3.5 w-3.5" }), "Delete"]
317
+ children: [/* @__PURE__ */ b(oe, { className: "h-3.5 w-3.5" }), "Delete"]
318
318
  })]
319
319
  })
320
320
  ]
321
321
  }, n.id);
322
322
  })
323
323
  }),
324
- /* @__PURE__ */ S(w, {
324
+ /* @__PURE__ */ b(S, {
325
325
  treatment: "insight",
326
326
  className: "mt-6 p-4",
327
- children: /* @__PURE__ */ C("div", {
327
+ children: /* @__PURE__ */ x("div", {
328
328
  className: "flex items-start gap-3",
329
- children: [/* @__PURE__ */ S("span", {
329
+ children: [/* @__PURE__ */ b("span", {
330
330
  className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-lg bg-action-primary-bg/10 text-primary",
331
- children: /* @__PURE__ */ S(re, { className: "h-5 w-5" })
332
- }), /* @__PURE__ */ C("div", {
331
+ children: /* @__PURE__ */ b(ae, { className: "h-5 w-5" })
332
+ }), /* @__PURE__ */ x("div", {
333
333
  className: "min-w-0",
334
- children: [/* @__PURE__ */ S("p", {
334
+ children: [/* @__PURE__ */ b("p", {
335
335
  className: "text-sm font-medium text-text-primary",
336
336
  children: "Privacy first"
337
- }), /* @__PURE__ */ S("p", {
337
+ }), /* @__PURE__ */ b("p", {
338
338
  className: "mt-0.5 text-xs text-text-secondary",
339
339
  children: "Time is recorded only when someone enters or leaves a zone you define — never through continuous background tracking. Location data stays encrypted and visible only within your workspace."
340
340
  })]
341
341
  })]
342
342
  })
343
343
  }),
344
- ue && /* @__PURE__ */ S("div", {
344
+ ue && /* @__PURE__ */ b("div", {
345
345
  className: "mt-6 flex justify-center",
346
- children: /* @__PURE__ */ S("button", {
346
+ children: /* @__PURE__ */ b("button", {
347
347
  onClick: ye,
348
348
  disabled: K,
349
349
  className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50 disabled:opacity-50",
@@ -351,32 +351,32 @@ function k() {
351
351
  })
352
352
  })
353
353
  ] }),
354
- /* @__PURE__ */ C(d, {
354
+ /* @__PURE__ */ x(u, {
355
355
  open: R,
356
356
  onClose: () => z(!1),
357
357
  title: B ? "Edit Geofence" : "Create Geofence",
358
358
  description: "Define a zone that triggers automatic time tracking.",
359
359
  size: "lg",
360
- footer: /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("button", {
360
+ footer: /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("button", {
361
361
  onClick: () => z(!1),
362
362
  className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
363
363
  children: "Cancel"
364
- }), /* @__PURE__ */ S("button", {
364
+ }), /* @__PURE__ */ b("button", {
365
365
  onClick: ge,
366
366
  disabled: N || F || !H.name.trim(),
367
367
  className: "rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:bg-action-primary-bg/90 disabled:opacity-50",
368
368
  children: N || F ? "Saving..." : B ? "Save Changes" : "Create Geofence"
369
369
  })] }),
370
- children: [(se || ce) && /* @__PURE__ */ S("div", {
370
+ children: [(se || ce) && /* @__PURE__ */ b("div", {
371
371
  className: "mb-4 rounded-lg border border-status-error-bg/40 bg-status-error-bg p-3 text-sm text-status-error-text",
372
372
  children: "Failed to save geofence. Please check the values and try again."
373
- }), /* @__PURE__ */ C("div", {
373
+ }), /* @__PURE__ */ x("div", {
374
374
  className: "space-y-4",
375
375
  children: [
376
- /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
376
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
377
377
  className: "block text-sm font-medium text-text-primary",
378
378
  children: "Name"
379
- }), /* @__PURE__ */ S("input", {
379
+ }), /* @__PURE__ */ b("input", {
380
380
  type: "text",
381
381
  placeholder: "e.g. Head Office",
382
382
  value: H.name,
@@ -384,14 +384,14 @@ function k() {
384
384
  ...H,
385
385
  name: e.target.value
386
386
  }),
387
- className: D
387
+ className: T
388
388
  })] }),
389
- /* @__PURE__ */ C("div", {
389
+ /* @__PURE__ */ x("div", {
390
390
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
391
- children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
391
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
392
392
  className: "block text-sm font-medium text-text-primary",
393
393
  children: "Latitude"
394
- }), /* @__PURE__ */ S("input", {
394
+ }), /* @__PURE__ */ b("input", {
395
395
  type: "number",
396
396
  step: "any",
397
397
  placeholder: "0.000000",
@@ -400,11 +400,11 @@ function k() {
400
400
  ...H,
401
401
  latitude: e.target.value
402
402
  }),
403
- className: D
404
- })] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
403
+ className: T
404
+ })] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
405
405
  className: "block text-sm font-medium text-text-primary",
406
406
  children: "Longitude"
407
- }), /* @__PURE__ */ S("input", {
407
+ }), /* @__PURE__ */ b("input", {
408
408
  type: "number",
409
409
  step: "any",
410
410
  placeholder: "0.000000",
@@ -413,15 +413,15 @@ function k() {
413
413
  ...H,
414
414
  longitude: e.target.value
415
415
  }),
416
- className: D
416
+ className: T
417
417
  })] })]
418
418
  }),
419
- /* @__PURE__ */ C("div", {
419
+ /* @__PURE__ */ x("div", {
420
420
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
421
- children: [/* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
421
+ children: [/* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
422
422
  className: "block text-sm font-medium text-text-primary",
423
423
  children: "Radius (meters)"
424
- }), /* @__PURE__ */ S("input", {
424
+ }), /* @__PURE__ */ b("input", {
425
425
  type: "number",
426
426
  placeholder: "100",
427
427
  value: H.radius,
@@ -429,37 +429,37 @@ function k() {
429
429
  ...H,
430
430
  radius: e.target.value
431
431
  }),
432
- className: D
433
- })] }), /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
432
+ className: T
433
+ })] }), /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
434
434
  className: "block text-sm font-medium text-text-primary",
435
435
  children: "Trigger"
436
- }), /* @__PURE__ */ C("select", {
436
+ }), /* @__PURE__ */ x("select", {
437
437
  value: H.trigger,
438
438
  onChange: (e) => U({
439
439
  ...H,
440
440
  trigger: e.target.value
441
441
  }),
442
- className: D,
442
+ className: T,
443
443
  children: [
444
- /* @__PURE__ */ S("option", {
445
- value: h.Enter,
444
+ /* @__PURE__ */ b("option", {
445
+ value: p.Enter,
446
446
  children: "On entry"
447
447
  }),
448
- /* @__PURE__ */ S("option", {
449
- value: h.Exit,
448
+ /* @__PURE__ */ b("option", {
449
+ value: p.Exit,
450
450
  children: "On exit"
451
451
  }),
452
- /* @__PURE__ */ S("option", {
453
- value: h.Both,
452
+ /* @__PURE__ */ b("option", {
453
+ value: p.Both,
454
454
  children: "Entry & exit"
455
455
  })
456
456
  ]
457
457
  })] })]
458
458
  }),
459
- /* @__PURE__ */ C("div", { children: [/* @__PURE__ */ S("label", {
459
+ /* @__PURE__ */ x("div", { children: [/* @__PURE__ */ b("label", {
460
460
  className: "block text-sm font-medium text-text-primary",
461
461
  children: "Address (optional)"
462
- }), /* @__PURE__ */ S("input", {
462
+ }), /* @__PURE__ */ b("input", {
463
463
  type: "text",
464
464
  placeholder: "Street address for reference",
465
465
  value: H.address,
@@ -467,14 +467,14 @@ function k() {
467
467
  ...H,
468
468
  address: e.target.value
469
469
  }),
470
- className: D
470
+ className: T
471
471
  })] }),
472
- /* @__PURE__ */ C("label", {
472
+ /* @__PURE__ */ x("label", {
473
473
  className: "flex items-center justify-between",
474
- children: [/* @__PURE__ */ S("span", {
474
+ children: [/* @__PURE__ */ b("span", {
475
475
  className: "text-sm font-medium text-text-primary",
476
476
  children: "Active"
477
- }), /* @__PURE__ */ S("input", {
477
+ }), /* @__PURE__ */ b("input", {
478
478
  type: "checkbox",
479
479
  checked: H.isActive,
480
480
  onChange: (e) => U({
@@ -487,27 +487,27 @@ function k() {
487
487
  ]
488
488
  })]
489
489
  }),
490
- /* @__PURE__ */ S(d, {
490
+ /* @__PURE__ */ b(u, {
491
491
  open: W !== null,
492
492
  onClose: () => G(null),
493
493
  title: "Delete Geofence",
494
494
  description: "This action cannot be undone.",
495
- footer: /* @__PURE__ */ C(x, { children: [/* @__PURE__ */ S("button", {
495
+ footer: /* @__PURE__ */ x(y, { children: [/* @__PURE__ */ b("button", {
496
496
  onClick: () => G(null),
497
497
  className: "rounded-md border border-border-subtle px-4 py-2 text-sm font-medium text-text-primary hover:bg-bg-sunken/50",
498
498
  children: "Cancel"
499
- }), /* @__PURE__ */ S("button", {
499
+ }), /* @__PURE__ */ b("button", {
500
500
  onClick: _e,
501
501
  disabled: I,
502
502
  className: "rounded-md bg-status-error-bg px-4 py-2 text-sm font-medium text-status-error-text hover:bg-status-error-bg/80 disabled:opacity-50",
503
503
  children: I ? "Deleting..." : "Delete"
504
504
  })] }),
505
- children: /* @__PURE__ */ C("p", {
505
+ children: /* @__PURE__ */ x("p", {
506
506
  className: "text-sm text-text-secondary",
507
507
  children: [
508
508
  "Are you sure you want to delete",
509
509
  " ",
510
- /* @__PURE__ */ S("span", {
510
+ /* @__PURE__ */ b("span", {
511
511
  className: "font-medium text-text-primary",
512
512
  children: W?.name
513
513
  }),
@@ -519,6 +519,6 @@ function k() {
519
519
  });
520
520
  }
521
521
  //#endregion
522
- export { k as GeofencingPage };
522
+ export { D as GeofencingPage };
523
523
 
524
524
  //# sourceMappingURL=GeofencingPage.js.map