@dilipod/ui 0.4.4 → 0.4.5

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.
@@ -1 +1 @@
1
- {"version":3,"file":"impact-metrics-form.d.ts","sourceRoot":"","sources":["../../src/components/impact-metrics-form.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,0BAA0B,EAAE,MAAM,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,6BAA6B;IAC7B,cAAc,EAAE,aAAa,CAAA;IAC7B,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,cAAc,EACd,eAAmB,EACnB,YAAwB,EACxB,WAA4B,EAC5B,MAAM,EACN,UAAiB,EACjB,SAAS,GACV,EAAE,sBAAsB,2CAiQxB"}
1
+ {"version":3,"file":"impact-metrics-form.d.ts","sourceRoot":"","sources":["../../src/components/impact-metrics-form.tsx"],"names":[],"mappings":"AAqBA,MAAM,WAAW,aAAa;IAC5B,0BAA0B,EAAE,MAAM,CAAA;IAClC,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,8BAA8B,EAAE,MAAM,CAAA;CACvC;AAED,MAAM,WAAW,sBAAsB;IACrC,0BAA0B;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,6BAA6B;IAC7B,cAAc,EAAE,aAAa,CAAA;IAC7B,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,wFAAwF;IACxF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACvE,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wBAAwB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,cAAc,EACd,eAAmB,EACnB,YAAwB,EACxB,WAA4B,EAC5B,MAAM,EACN,UAAiB,EACjB,SAAS,GACV,EAAE,sBAAsB,2CAuRxB"}
package/dist/index.js CHANGED
@@ -4272,12 +4272,15 @@ function ImpactMetricsForm({
4272
4272
  setIsEditing(false);
4273
4273
  };
4274
4274
  const hoursSavedPerYear = Math.round(metrics.fte_equivalent * HOURS_PER_FTE_YEAR);
4275
+ const timePerTaskHours = metrics.time_saved_minutes_per_run / 60;
4276
+ const impliedFrequencyPerYear = timePerTaskHours > 0 ? Math.round(hoursSavedPerYear / timePerTaskHours) : 0;
4277
+ const impliedFrequencyPerMonth = Math.round(impliedFrequencyPerYear / 12);
4275
4278
  const laborSavingsPerYear = metrics.fte_equivalent * HOURS_PER_FTE_YEAR * metrics.hourly_rate_euros;
4276
4279
  const netAnnualSavings = laborSavingsPerYear - workerCostPerYear;
4277
4280
  return /* @__PURE__ */ jsxRuntime.jsxs(Card, { className: cn("border-[var(--cyan)]/20 bg-gradient-to-br from-white to-[var(--cyan)]/5", className), children: [
4278
4281
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { className: "pb-3", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
4279
4282
  /* @__PURE__ */ jsxRuntime.jsxs(CardTitle, { className: "flex items-center gap-2", children: [
4280
- /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: "sm", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm16-88a16,16,0,1,1-16-16A16,16,0,0,1,144,128Zm-56,0a16,16,0,1,1-16-16A16,16,0,0,1,88,128Zm112,0a16,16,0,1,1-16-16A16,16,0,0,1,200,128Z" }) }) }),
4283
+ /* @__PURE__ */ jsxRuntime.jsx(IconBox, { size: "sm", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "14", height: "14", fill: "currentColor", viewBox: "0 0 256 256", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M232,208a8,8,0,0,1-8,8H32a8,8,0,0,1-8-8V48a8,8,0,0,1,16,0V156.69l50.34-50.35a8,8,0,0,1,11.32,0L128,132.69l58.34-58.35a8,8,0,0,1,11.32,11.32l-64,64a8,8,0,0,1-11.32,0L96,123.31,40,179.31V200H224A8,8,0,0,1,232,208Z" }) }) }),
4281
4284
  "Impact Metrics (ROI)"
4282
4285
  ] }),
4283
4286
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2", children: isEditing ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
@@ -4309,115 +4312,133 @@ function ImpactMetricsForm({
4309
4312
  }
4310
4313
  ) })
4311
4314
  ] }) }),
4312
- /* @__PURE__ */ jsxRuntime.jsx(CardContent, { children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2 lg:grid-cols-4", children: [
4313
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4314
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,40a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,40Zm0,176a80,80,0,1,1,80-80A80.09,80.09,0,0,1,128,216ZM173.66,90.34a8,8,0,0,1,0,11.32l-40,40a8,8,0,0,1-11.32-11.32l40-40A8,8,0,0,1,173.66,90.34ZM96,16a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,16Z" }) }) }),
4315
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4316
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Time per Task" }),
4317
- isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4318
- /* @__PURE__ */ jsxRuntime.jsx(
4319
- "input",
4320
- {
4321
- type: "number",
4322
- value: metrics.time_saved_minutes_per_run,
4323
- onChange: (e) => setMetrics((prev) => ({
4324
- ...prev,
4325
- time_saved_minutes_per_run: parseInt(e.target.value) || 0
4326
- })),
4327
- className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4328
- min: "0"
4329
- }
4330
- ),
4331
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "min" })
4332
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4333
- metrics.time_saved_minutes_per_run,
4334
- " ",
4335
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "min" })
4336
- ] }),
4337
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "How long manually" })
4338
- ] })
4339
- ] }),
4340
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4341
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm0-144a8,8,0,0,1,8,8v4.4c14.25,3.14,24,14.43,24,30.6,0,4.42-3.58,8-8,8s-8-3.58-8-8c0-8.64-7.18-13-16-13s-16,4.36-16,13,7.18,13,16,13c17.64,0,32,11.35,32,29,0,16.17-9.75,27.46-24,30.6V192a8,8,0,0,1-16,0v-4.4c-14.25-3.14-24-14.43-24-30.6a8,8,0,0,1,16,0c0,8.64,7.18,13,16,13s16-4.36,16-13-7.18-13-16-13c-17.64,0-32-11.35-32-29,0-16.17,9.75-27.46,24-30.6V80A8,8,0,0,1,128,72Z" }) }) }),
4342
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4343
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Manual Cost" }),
4344
- isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4345
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u20AC" }),
4346
- /* @__PURE__ */ jsxRuntime.jsx(
4347
- "input",
4348
- {
4349
- type: "number",
4350
- value: metrics.hourly_rate_euros,
4351
- onChange: (e) => setMetrics((prev) => ({
4352
- ...prev,
4353
- hourly_rate_euros: parseFloat(e.target.value) || 0
4354
- })),
4355
- className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4356
- min: "0",
4357
- step: "0.5"
4358
- }
4359
- ),
4360
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "/hr" })
4361
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4362
- "\u20AC",
4363
- metrics.hourly_rate_euros,
4364
- " ",
4365
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "/hr" })
4366
- ] }),
4367
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "Employee hourly cost" })
4368
- ] })
4369
- ] }),
4370
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4371
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8c18.84-32.56,52.14-52,89.07-52s70.23,19.44,89.07,52a8,8,0,1,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z" }) }) }),
4372
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4373
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Job Portion" }),
4374
- isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4375
- /* @__PURE__ */ jsxRuntime.jsx(
4376
- "input",
4377
- {
4378
- type: "number",
4379
- value: Math.round(metrics.fte_equivalent * 100),
4380
- onChange: (e) => setMetrics((prev) => ({
4381
- ...prev,
4382
- fte_equivalent: (parseFloat(e.target.value) || 0) / 100
4383
- })),
4384
- className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4385
- min: "0",
4386
- max: "1000",
4387
- step: "5"
4388
- }
4389
- ),
4390
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "%" })
4391
- ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4392
- Math.round(metrics.fte_equivalent * 100),
4393
- " ",
4394
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "%" })
4395
- ] }),
4396
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
4397
- "% of FTE (",
4398
- hoursSavedPerYear,
4399
- "h/year)"
4315
+ /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { children: [
4316
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-6 md:grid-cols-2 lg:grid-cols-4", children: [
4317
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4318
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,40a96,96,0,1,0,96,96A96.11,96.11,0,0,0,128,40Zm0,176a80,80,0,1,1,80-80A80.09,80.09,0,0,1,128,216ZM173.66,90.34a8,8,0,0,1,0,11.32l-40,40a8,8,0,0,1-11.32-11.32l40-40A8,8,0,0,1,173.66,90.34ZM96,16a8,8,0,0,1,8-8h48a8,8,0,0,1,0,16H104A8,8,0,0,1,96,16Z" }) }) }),
4319
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4320
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Time per Task" }),
4321
+ isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4322
+ /* @__PURE__ */ jsxRuntime.jsx(
4323
+ "input",
4324
+ {
4325
+ type: "number",
4326
+ value: metrics.time_saved_minutes_per_run,
4327
+ onChange: (e) => setMetrics((prev) => ({
4328
+ ...prev,
4329
+ time_saved_minutes_per_run: parseInt(e.target.value) || 0
4330
+ })),
4331
+ className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4332
+ min: "0"
4333
+ }
4334
+ ),
4335
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "min" })
4336
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4337
+ metrics.time_saved_minutes_per_run,
4338
+ " ",
4339
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "min" })
4340
+ ] }),
4341
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "How long manually" })
4342
+ ] })
4343
+ ] }),
4344
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4345
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm0-144a8,8,0,0,1,8,8v4.4c14.25,3.14,24,14.43,24,30.6,0,4.42-3.58,8-8,8s-8-3.58-8-8c0-8.64-7.18-13-16-13s-16,4.36-16,13,7.18,13,16,13c17.64,0,32,11.35,32,29,0,16.17-9.75,27.46-24,30.6V192a8,8,0,0,1-16,0v-4.4c-14.25-3.14-24-14.43-24-30.6a8,8,0,0,1,16,0c0,8.64,7.18,13,16,13s16-4.36,16-13-7.18-13-16-13c-17.64,0-32-11.35-32-29,0-16.17,9.75-27.46,24-30.6V80A8,8,0,0,1,128,72Z" }) }) }),
4346
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4347
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Manual Cost" }),
4348
+ isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4349
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "\u20AC" }),
4350
+ /* @__PURE__ */ jsxRuntime.jsx(
4351
+ "input",
4352
+ {
4353
+ type: "number",
4354
+ value: metrics.hourly_rate_euros,
4355
+ onChange: (e) => setMetrics((prev) => ({
4356
+ ...prev,
4357
+ hourly_rate_euros: parseFloat(e.target.value) || 0
4358
+ })),
4359
+ className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4360
+ min: "0",
4361
+ step: "0.5"
4362
+ }
4363
+ ),
4364
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "/hr" })
4365
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4366
+ "\u20AC",
4367
+ metrics.hourly_rate_euros,
4368
+ " ",
4369
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "/hr" })
4370
+ ] }),
4371
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mt-1", children: "Employee hourly cost" })
4372
+ ] })
4373
+ ] }),
4374
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4375
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M230.92,212c-15.23-26.33-38.7-45.21-66.09-54.16a72,72,0,1,0-73.66,0C63.78,166.78,40.31,185.66,25.08,212a8,8,0,1,0,13.85,8c18.84-32.56,52.14-52,89.07-52s70.23,19.44,89.07,52a8,8,0,1,0,13.85-8ZM72,96a56,56,0,1,1,56,56A56.06,56.06,0,0,1,72,96Z" }) }) }),
4376
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4377
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Job Portion" }),
4378
+ isEditing ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
4379
+ /* @__PURE__ */ jsxRuntime.jsx(
4380
+ "input",
4381
+ {
4382
+ type: "number",
4383
+ value: Math.round(metrics.fte_equivalent * 100),
4384
+ onChange: (e) => setMetrics((prev) => ({
4385
+ ...prev,
4386
+ fte_equivalent: (parseFloat(e.target.value) || 0) / 100
4387
+ })),
4388
+ className: "w-16 px-2 py-1 text-lg font-bold border border-border rounded-sm focus:outline-none focus:ring-2 focus:ring-[var(--cyan)] bg-background",
4389
+ min: "0",
4390
+ max: "1000",
4391
+ step: "5"
4392
+ }
4393
+ ),
4394
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: "%" })
4395
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-2xl font-bold", children: [
4396
+ Math.round(metrics.fte_equivalent * 100),
4397
+ " ",
4398
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-normal text-muted-foreground", children: "%" })
4399
+ ] }),
4400
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
4401
+ "% of FTE (",
4402
+ hoursSavedPerYear,
4403
+ "h/year)"
4404
+ ] })
4405
+ ] })
4406
+ ] }),
4407
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4408
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M240,56v64a8,8,0,0,1-16,0V75.31l-82.34,82.35a8,8,0,0,1-11.32,0L96,123.31,29.66,189.66a8,8,0,0,1-11.32-11.32l72-72a8,8,0,0,1,11.32,0L136,140.69,212.69,64H168a8,8,0,0,1,0-16h64A8,8,0,0,1,240,56Z" }) }) }),
4409
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4410
+ /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Net Annual Savings" }),
4411
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-2xl font-bold", netAnnualSavings >= 0 ? "text-[var(--cyan)]" : "text-red-500"), children: [
4412
+ "\u20AC",
4413
+ netAnnualSavings.toLocaleString(void 0, { maximumFractionDigits: 0 })
4414
+ ] }),
4415
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
4416
+ "\u20AC",
4417
+ laborSavingsPerYear.toLocaleString(void 0, { maximumFractionDigits: 0 }),
4418
+ " labor \u2212 \u20AC",
4419
+ workerCostPerYear,
4420
+ " worker"
4421
+ ] })
4400
4422
  ] })
4401
4423
  ] })
4402
4424
  ] }),
4403
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start gap-3", children: [
4404
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-2 rounded-sm bg-[var(--cyan)]/10 shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", className: "text-[var(--cyan)]", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm0-144a8,8,0,0,1,8,8v4.4c14.25,3.14,24,14.43,24,30.6,0,4.42-3.58,8-8,8s-8-3.58-8-8c0-8.64-7.18-13-16-13s-16,4.36-16,13,7.18,13,16,13c17.64,0,32,11.35,32,29,0,16.17-9.75,27.46-24,30.6V192a8,8,0,0,1-16,0v-4.4c-14.25-3.14-24-14.43-24-30.6a8,8,0,0,1,16,0c0,8.64,7.18,13,16,13s16-4.36,16-13-7.18-13-16-13c-17.64,0-32-11.35-32-29,0-16.17,9.75-27.46,24-30.6V80A8,8,0,0,1,128,72Z" }) }) }),
4405
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1", children: [
4406
- /* @__PURE__ */ jsxRuntime.jsx("label", { className: "text-sm text-muted-foreground block mb-1", children: "Net Annual Savings" }),
4407
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: cn("text-2xl font-bold", netAnnualSavings >= 0 ? "text-[var(--cyan)]" : "text-red-500"), children: [
4408
- "\u20AC",
4409
- netAnnualSavings.toLocaleString(void 0, { maximumFractionDigits: 0 })
4410
- ] }),
4411
- /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground mt-1", children: [
4412
- "\u20AC",
4413
- laborSavingsPerYear.toLocaleString(void 0, { maximumFractionDigits: 0 }),
4414
- " labor \u2212 \u20AC",
4415
- workerCostPerYear,
4416
- " worker"
4417
- ] })
4425
+ impliedFrequencyPerYear > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 pt-4 border-t border-border/50", children: /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
4426
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: "Implied frequency:" }),
4427
+ " ",
4428
+ "~",
4429
+ impliedFrequencyPerMonth,
4430
+ "/month (",
4431
+ impliedFrequencyPerYear,
4432
+ "/year)",
4433
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-xs ml-2", children: [
4434
+ "based on ",
4435
+ metrics.time_saved_minutes_per_run,
4436
+ " min/task \xD7 ",
4437
+ Math.round(metrics.fte_equivalent * 100),
4438
+ "% FTE"
4418
4439
  ] })
4419
- ] })
4420
- ] }) })
4440
+ ] }) })
4441
+ ] })
4421
4442
  ] });
4422
4443
  }
4423
4444