@burdenoff/microfe-cosmicintersection 2026.827.1 → 2026.830.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/cosmicintersection/components/ActionMenu.d.ts +1 -1
  2. package/dist/cosmicintersection/components/ActionMenu.d.ts.map +1 -1
  3. package/dist/cosmicintersection/components/ActionMenu.js +51 -54
  4. package/dist/cosmicintersection/components/ActionMenu.js.map +1 -1
  5. package/dist/cosmicintersection/components/EntityFormShell.d.ts +1 -1
  6. package/dist/cosmicintersection/components/EntityFormShell.d.ts.map +1 -1
  7. package/dist/cosmicintersection/components/EntityFormShell.js +29 -27
  8. package/dist/cosmicintersection/components/EntityFormShell.js.map +1 -1
  9. package/dist/cosmicintersection/components/ErrorState.d.ts +1 -1
  10. package/dist/cosmicintersection/components/ErrorState.d.ts.map +1 -1
  11. package/dist/cosmicintersection/components/ErrorState.js +19 -17
  12. package/dist/cosmicintersection/components/ErrorState.js.map +1 -1
  13. package/dist/cosmicintersection/components/FileUploadField.d.ts.map +1 -1
  14. package/dist/cosmicintersection/components/FileUploadField.js +61 -60
  15. package/dist/cosmicintersection/components/FileUploadField.js.map +1 -1
  16. package/dist/cosmicintersection/components/LoadingState.d.ts +1 -1
  17. package/dist/cosmicintersection/components/LoadingState.d.ts.map +1 -1
  18. package/dist/cosmicintersection/components/LoadingState.js +15 -13
  19. package/dist/cosmicintersection/components/LoadingState.js.map +1 -1
  20. package/dist/cosmicintersection/components/PageLayout.d.ts.map +1 -1
  21. package/dist/cosmicintersection/components/PageLayout.js +28 -27
  22. package/dist/cosmicintersection/components/PageLayout.js.map +1 -1
  23. package/dist/cosmicintersection/components/Pagination.d.ts.map +1 -1
  24. package/dist/cosmicintersection/components/Pagination.js +38 -35
  25. package/dist/cosmicintersection/components/Pagination.js.map +1 -1
  26. package/dist/cosmicintersection/components/StatusBadge.d.ts.map +1 -1
  27. package/dist/cosmicintersection/components/StatusBadge.js +30 -9
  28. package/dist/cosmicintersection/components/StatusBadge.js.map +1 -1
  29. package/dist/cosmicintersection/pages/access/AccessPage.d.ts.map +1 -1
  30. package/dist/cosmicintersection/pages/access/AccessPage.js +147 -146
  31. package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
  32. package/dist/cosmicintersection/pages/analyses/AnalysesPage.d.ts.map +1 -1
  33. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +260 -259
  34. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
  35. package/dist/cosmicintersection/pages/collections/CollectionsPage.d.ts.map +1 -1
  36. package/dist/cosmicintersection/pages/collections/CollectionsPage.js +63 -62
  37. package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
  38. package/dist/cosmicintersection/pages/dashboard/DashboardPage.d.ts.map +1 -1
  39. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +132 -131
  40. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
  41. package/dist/cosmicintersection/pages/datasets/DatasetsPage.d.ts.map +1 -1
  42. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +178 -177
  43. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
  44. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.d.ts.map +1 -1
  45. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +138 -145
  46. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -1
  47. package/dist/cosmicintersection/pages/lineage/LineagePage.d.ts.map +1 -1
  48. package/dist/cosmicintersection/pages/lineage/LineagePage.js +78 -88
  49. package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -1
  50. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.d.ts.map +1 -1
  51. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +125 -124
  52. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
  53. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.d.ts.map +1 -1
  54. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +152 -151
  55. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
  56. package/dist/cosmicintersection/pages/releases/ReleasesPage.d.ts.map +1 -1
  57. package/dist/cosmicintersection/pages/releases/ReleasesPage.js +175 -174
  58. package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
  59. package/dist/cosmicintersection/pages/runs/RunsPage.d.ts.map +1 -1
  60. package/dist/cosmicintersection/pages/runs/RunsPage.js +197 -188
  61. package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
  62. package/dist/cosmicintersection/pages/sources/SourcesPage.d.ts.map +1 -1
  63. package/dist/cosmicintersection/pages/sources/SourcesPage.js +65 -64
  64. package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
  65. package/dist/dev/main.d.ts.map +1 -1
  66. package/dist/shared/hooks/useTr.d.ts +12 -0
  67. package/dist/shared/hooks/useTr.d.ts.map +1 -0
  68. package/dist/shared/hooks/useTr.js +16 -0
  69. package/dist/shared/hooks/useTr.js.map +1 -0
  70. package/package.json +1 -1
@@ -36,6 +36,6 @@ export interface ActionMenuProps {
36
36
  * before the destructive handler fires. Safe inside clickable cards/rows — the
37
37
  * trigger and content stop click propagation.
38
38
  */
39
- export declare function ActionMenu({ ariaLabel, onView, onEdit, onDelete, entityName, deleteLabel, extraItems, align, trigger, }: ActionMenuProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export declare function ActionMenu({ ariaLabel, onView, onEdit, onDelete, entityName, deleteLabel: deleteLabelProp, extraItems, align, trigger, }: ActionMenuProps): import("react/jsx-runtime").JSX.Element | null;
40
40
  export default ActionMenu;
41
41
  //# sourceMappingURL=ActionMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMenu.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/ActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB/C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAID;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAsB,EACtB,UAAe,EACf,KAAa,EACb,OAAO,GACR,EAAE,eAAe,kDAgIjB;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ActionMenu.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/ActionMenu.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAoB/C,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAID;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EAAE,eAAe,EAC5B,UAAe,EACf,KAAa,EACb,OAAO,GACR,EAAE,eAAe,kDAsIjB;AAED,eAAe,UAAU,CAAC"}
@@ -1,106 +1,103 @@
1
- import { useState as e } from "react";
2
- import { Fragment as t, jsx as n, jsxs as r } from "react/jsx-runtime";
3
- import { Eye as i, MoreVertical as a, Pencil as o, Trash2 as s } from "lucide-react";
4
- import { AlertDialog as c, AlertDialogAction as l, AlertDialogCancel as u, AlertDialogContent as d, AlertDialogDescription as f, AlertDialogFooter as p, AlertDialogHeader as m, AlertDialogTitle as h, DropdownMenu as g, DropdownMenuContent as _, DropdownMenuItem as v, DropdownMenuSeparator as y, DropdownMenuTrigger as b, buttonVariants as x } from "@burdenoff/fe-libs/ui";
1
+ import { useTr as e } from "../../shared/hooks/useTr.js";
2
+ import { useState as t } from "react";
3
+ import { Fragment as n, jsx as r, jsxs as i } from "react/jsx-runtime";
4
+ import { Eye as a, MoreVertical as o, Pencil as s, Trash2 as c } from "lucide-react";
5
+ import { AlertDialog as l, AlertDialogAction as u, AlertDialogCancel as d, AlertDialogContent as f, AlertDialogDescription as p, AlertDialogFooter as m, AlertDialogHeader as h, AlertDialogTitle as g, DropdownMenu as _, DropdownMenuContent as v, DropdownMenuItem as y, DropdownMenuSeparator as b, DropdownMenuTrigger as x, buttonVariants as S } from "@burdenoff/fe-libs/ui";
5
6
  //#region src/cosmicintersection/components/ActionMenu.tsx
6
- var S = "text-status-error-text focus:text-status-error-text";
7
- function C({ ariaLabel: C, onView: w, onEdit: T, onDelete: E, entityName: D, deleteLabel: O = "Delete", extraItems: k = [], align: A = "end", trigger: j }) {
8
- let [M, N] = e(!1), [P, F] = e(!1), I = async () => {
9
- if (E) try {
10
- F(!0), await E(), N(!1);
7
+ var C = "text-status-error-text focus:text-status-error-text";
8
+ function w({ ariaLabel: w, onView: T, onEdit: E, onDelete: D, entityName: O, deleteLabel: k, extraItems: A = [], align: j = "end", trigger: M }) {
9
+ let N = e(), P = k ?? N("cosmicintersection.common.delete", "Delete"), [F, I] = t(!1), [L, R] = t(!1), z = async () => {
10
+ if (D) try {
11
+ R(!0), await D(), I(!1);
11
12
  } catch {} finally {
12
- F(!1);
13
+ R(!1);
13
14
  }
14
- }, L = j ?? /* @__PURE__ */ n("button", {
15
+ }, B = M ?? /* @__PURE__ */ r("button", {
15
16
  type: "button",
16
17
  className: "inline-flex size-9 items-center justify-center rounded-button text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus max-md:size-11",
17
- "aria-label": C,
18
- children: /* @__PURE__ */ n(a, {
18
+ "aria-label": w,
19
+ children: /* @__PURE__ */ r(o, {
19
20
  className: "size-4",
20
21
  "aria-hidden": "true"
21
22
  })
22
23
  });
23
- return w || T || k.length > 0 || E ? /* @__PURE__ */ r(t, { children: [/* @__PURE__ */ r(g, { children: [/* @__PURE__ */ n(b, {
24
+ return T || E || A.length > 0 || D ? /* @__PURE__ */ i(n, { children: [/* @__PURE__ */ i(_, { children: [/* @__PURE__ */ r(x, {
24
25
  asChild: !0,
25
26
  onClick: (e) => e.stopPropagation(),
26
27
  onKeyDown: (e) => e.stopPropagation(),
27
- children: L
28
- }), /* @__PURE__ */ r(_, {
29
- align: A,
28
+ children: B
29
+ }), /* @__PURE__ */ i(v, {
30
+ align: j,
30
31
  className: "min-w-44",
31
32
  onClick: (e) => e.stopPropagation(),
32
33
  onKeyDown: (e) => e.stopPropagation(),
33
34
  children: [
34
- w ? /* @__PURE__ */ r(v, {
35
+ T ? /* @__PURE__ */ i(y, {
35
36
  className: "cursor-pointer gap-2",
36
- onSelect: () => w(),
37
- children: [/* @__PURE__ */ n(i, {
37
+ onSelect: () => T(),
38
+ children: [/* @__PURE__ */ r(a, {
38
39
  className: "size-4 shrink-0",
39
40
  "aria-hidden": "true"
40
- }), /* @__PURE__ */ n("span", { children: "View" })]
41
+ }), /* @__PURE__ */ r("span", { children: N("cosmicintersection.common.view", "View") })]
41
42
  }) : null,
42
- T ? /* @__PURE__ */ r(v, {
43
+ E ? /* @__PURE__ */ i(y, {
43
44
  className: "cursor-pointer gap-2",
44
- onSelect: () => T(),
45
- children: [/* @__PURE__ */ n(o, {
45
+ onSelect: () => E(),
46
+ children: [/* @__PURE__ */ r(s, {
46
47
  className: "size-4 shrink-0",
47
48
  "aria-hidden": "true"
48
- }), /* @__PURE__ */ n("span", { children: "Edit" })]
49
+ }), /* @__PURE__ */ r("span", { children: N("cosmicintersection.common.edit", "Edit") })]
49
50
  }) : null,
50
- k.map((e) => {
51
+ A.map((e) => {
51
52
  let t = e.icon;
52
- return /* @__PURE__ */ r("div", {
53
+ return /* @__PURE__ */ i("div", {
53
54
  className: "contents",
54
- children: [e.separatorBefore ? /* @__PURE__ */ n(y, {}) : null, /* @__PURE__ */ r(v, {
55
+ children: [e.separatorBefore ? /* @__PURE__ */ r(b, {}) : null, /* @__PURE__ */ i(y, {
55
56
  disabled: e.disabled,
56
57
  onSelect: () => e.onSelect(),
57
- className: `cursor-pointer gap-2 ${e.variant === "danger" ? S : ""}`,
58
- children: [t ? /* @__PURE__ */ n(t, {
58
+ className: `cursor-pointer gap-2 ${e.variant === "danger" ? C : ""}`,
59
+ children: [t ? /* @__PURE__ */ r(t, {
59
60
  className: "size-4 shrink-0",
60
61
  "aria-hidden": "true"
61
- }) : null, /* @__PURE__ */ n("span", {
62
+ }) : null, /* @__PURE__ */ r("span", {
62
63
  className: "min-w-0 truncate",
63
64
  children: e.label
64
65
  })]
65
66
  })]
66
67
  }, e.key);
67
68
  }),
68
- E ? /* @__PURE__ */ r("div", {
69
+ D ? /* @__PURE__ */ i("div", {
69
70
  className: "contents",
70
- children: [w || T || k.length > 0 ? /* @__PURE__ */ n(y, {}) : null, /* @__PURE__ */ r(v, {
71
- className: `cursor-pointer gap-2 ${S}`,
72
- onSelect: () => N(!0),
73
- children: [/* @__PURE__ */ n(s, {
71
+ children: [T || E || A.length > 0 ? /* @__PURE__ */ r(b, {}) : null, /* @__PURE__ */ i(y, {
72
+ className: `cursor-pointer gap-2 ${C}`,
73
+ onSelect: () => I(!0),
74
+ children: [/* @__PURE__ */ r(c, {
74
75
  className: "size-4 shrink-0",
75
76
  "aria-hidden": "true"
76
- }), /* @__PURE__ */ n("span", { children: O })]
77
+ }), /* @__PURE__ */ r("span", { children: P })]
77
78
  })]
78
79
  }) : null
79
80
  ]
80
- })] }), E ? /* @__PURE__ */ n(c, {
81
- open: M,
82
- onOpenChange: (e) => P ? void 0 : N(e),
83
- children: /* @__PURE__ */ r(d, {
81
+ })] }), D ? /* @__PURE__ */ r(l, {
82
+ open: F,
83
+ onOpenChange: (e) => L ? void 0 : I(e),
84
+ children: /* @__PURE__ */ i(f, {
84
85
  onClick: (e) => e.stopPropagation(),
85
- children: [/* @__PURE__ */ r(m, { children: [/* @__PURE__ */ r(h, { children: [O, D ? ` “${D}”?` : "?"] }), /* @__PURE__ */ r(f, { children: [
86
- "This action cannot be undone. ",
87
- D ? `“${D}” ` : "This record ",
88
- "will be permanently affected."
89
- ] })] }), /* @__PURE__ */ r(p, { children: [/* @__PURE__ */ n(u, {
90
- disabled: P,
91
- children: "Cancel"
92
- }), /* @__PURE__ */ n(l, {
86
+ children: [/* @__PURE__ */ i(h, { children: [/* @__PURE__ */ i(g, { children: [P, O ? ` “${O}”?` : "?"] }), /* @__PURE__ */ r(p, { children: N("cosmicintersection.common.confirmDelete", "This action cannot be undone. This record will be permanently affected.") })] }), /* @__PURE__ */ i(m, { children: [/* @__PURE__ */ r(d, {
87
+ disabled: L,
88
+ children: N("cosmicintersection.common.cancel", "Cancel")
89
+ }), /* @__PURE__ */ r(u, {
93
90
  onClick: (e) => {
94
- e.preventDefault(), I();
91
+ e.preventDefault(), z();
95
92
  },
96
- disabled: P,
97
- className: x({ variant: "destructive" }),
98
- children: P ? "Working…" : O
93
+ disabled: L,
94
+ className: S({ variant: "destructive" }),
95
+ children: L ? N("cosmicintersection.common.working", "Working…") : P
99
96
  })] })]
100
97
  })
101
98
  }) : null] }) : null;
102
99
  }
103
100
  //#endregion
104
- export { C as default };
101
+ export { w as default };
105
102
 
106
103
  //# sourceMappingURL=ActionMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionMenu.js","names":[],"sources":["../../../src/cosmicintersection/components/ActionMenu.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Eye, MoreVertical, Pencil, Trash2 } from 'lucide-react';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n buttonVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@burdenoff/fe-libs/ui';\n\nexport interface ActionMenuItem {\n key: string;\n label: string;\n icon?: LucideIcon;\n onSelect: () => void;\n variant?: 'default' | 'danger';\n disabled?: boolean;\n separatorBefore?: boolean;\n}\n\nexport interface ActionMenuProps {\n /** Accessible name for the trigger, e.g. \"Dataset actions\". */\n ariaLabel: string;\n onView?: () => void;\n onEdit?: () => void;\n /**\n * Delete/destructive handler — opens a confirm dialog first. May be async; the\n * dialog stays open until it resolves.\n */\n onDelete?: () => void | Promise<void>;\n /** Name shown inside the confirmation (\"Archive \\\"Kepler DR3\\\"?\"). */\n entityName?: string;\n /** Label for the danger item + confirm button. Defaults to \"Delete\". */\n deleteLabel?: string;\n /** Additional items inserted before the Delete action. */\n extraItems?: ActionMenuItem[];\n align?: 'start' | 'end';\n trigger?: ReactNode;\n}\n\nconst DANGER_ITEM_CLASS = 'text-status-error-text focus:text-status-error-text';\n\n/**\n * Canonical row overflow menu (View / Edit / Delete) for CosmicIntersection list\n * pages. Built on the fe-libs Radix DropdownMenu (keyboard nav, Escape,\n * outside-click, focus return). Delete routes through an AlertDialog confirm\n * before the destructive handler fires. Safe inside clickable cards/rows — the\n * trigger and content stop click propagation.\n */\nexport function ActionMenu({\n ariaLabel,\n onView,\n onEdit,\n onDelete,\n entityName,\n deleteLabel = 'Delete',\n extraItems = [],\n align = 'end',\n trigger,\n}: ActionMenuProps) {\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const handleConfirmDelete = async () => {\n if (!onDelete) {\n return;\n }\n try {\n setDeleting(true);\n await onDelete();\n setConfirmOpen(false);\n } catch {\n // The handler surfaces its own error (toast); keep the dialog open so the\n // user can retry or cancel rather than silently dismissing.\n } finally {\n setDeleting(false);\n }\n };\n\n const triggerNode = trigger ?? (\n <button\n type=\"button\"\n className=\"inline-flex size-9 items-center justify-center rounded-button text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus max-md:size-11\"\n aria-label={ariaLabel}\n >\n <MoreVertical className=\"size-4\" aria-hidden=\"true\" />\n </button>\n );\n\n const hasAnyItem = Boolean(onView || onEdit || extraItems.length > 0 || onDelete);\n if (!hasAnyItem) {\n return null;\n }\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {triggerNode}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className=\"min-w-44\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {onView ? (\n <DropdownMenuItem className=\"cursor-pointer gap-2\" onSelect={() => onView()}>\n <Eye className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>View</span>\n </DropdownMenuItem>\n ) : null}\n {onEdit ? (\n <DropdownMenuItem className=\"cursor-pointer gap-2\" onSelect={() => onEdit()}>\n <Pencil className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>Edit</span>\n </DropdownMenuItem>\n ) : null}\n {extraItems.map((item) => {\n const Icon = item.icon;\n return (\n <div key={item.key} className=\"contents\">\n {item.separatorBefore ? <DropdownMenuSeparator /> : null}\n <DropdownMenuItem\n disabled={item.disabled}\n onSelect={() => item.onSelect()}\n className={`cursor-pointer gap-2 ${item.variant === 'danger' ? DANGER_ITEM_CLASS : ''}`}\n >\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span className=\"min-w-0 truncate\">{item.label}</span>\n </DropdownMenuItem>\n </div>\n );\n })}\n {onDelete ? (\n <div className=\"contents\">\n {onView || onEdit || extraItems.length > 0 ? <DropdownMenuSeparator /> : null}\n <DropdownMenuItem\n className={`cursor-pointer gap-2 ${DANGER_ITEM_CLASS}`}\n onSelect={() => setConfirmOpen(true)}\n >\n <Trash2 className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>{deleteLabel}</span>\n </DropdownMenuItem>\n </div>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {onDelete ? (\n <AlertDialog\n open={confirmOpen}\n onOpenChange={(next) => (deleting ? undefined : setConfirmOpen(next))}\n >\n <AlertDialogContent onClick={(event) => event.stopPropagation()}>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {deleteLabel}\n {entityName ? ` “${entityName}”?` : '?'}\n </AlertDialogTitle>\n <AlertDialogDescription>\n This action cannot be undone. {entityName ? `“${entityName}” ` : 'This record '}\n will be permanently affected.\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={deleting}>Cancel</AlertDialogCancel>\n <AlertDialogAction\n onClick={(event) => {\n event.preventDefault();\n void handleConfirmDelete();\n }}\n disabled={deleting}\n className={buttonVariants({ variant: 'destructive' })}\n >\n {deleting ? 'Working…' : deleteLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n </>\n );\n}\n\nexport default ActionMenu;\n"],"mappings":"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"}
1
+ {"version":3,"file":"ActionMenu.js","names":[],"sources":["../../../src/cosmicintersection/components/ActionMenu.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport type { LucideIcon } from 'lucide-react';\nimport { Eye, MoreVertical, Pencil, Trash2 } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport {\n AlertDialog,\n AlertDialogAction,\n AlertDialogCancel,\n AlertDialogContent,\n AlertDialogDescription,\n AlertDialogFooter,\n AlertDialogHeader,\n AlertDialogTitle,\n buttonVariants,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n} from '@burdenoff/fe-libs/ui';\n\nexport interface ActionMenuItem {\n key: string;\n label: string;\n icon?: LucideIcon;\n onSelect: () => void;\n variant?: 'default' | 'danger';\n disabled?: boolean;\n separatorBefore?: boolean;\n}\n\nexport interface ActionMenuProps {\n /** Accessible name for the trigger, e.g. \"Dataset actions\". */\n ariaLabel: string;\n onView?: () => void;\n onEdit?: () => void;\n /**\n * Delete/destructive handler — opens a confirm dialog first. May be async; the\n * dialog stays open until it resolves.\n */\n onDelete?: () => void | Promise<void>;\n /** Name shown inside the confirmation (\"Archive \\\"Kepler DR3\\\"?\"). */\n entityName?: string;\n /** Label for the danger item + confirm button. Defaults to \"Delete\". */\n deleteLabel?: string;\n /** Additional items inserted before the Delete action. */\n extraItems?: ActionMenuItem[];\n align?: 'start' | 'end';\n trigger?: ReactNode;\n}\n\nconst DANGER_ITEM_CLASS = 'text-status-error-text focus:text-status-error-text';\n\n/**\n * Canonical row overflow menu (View / Edit / Delete) for CosmicIntersection list\n * pages. Built on the fe-libs Radix DropdownMenu (keyboard nav, Escape,\n * outside-click, focus return). Delete routes through an AlertDialog confirm\n * before the destructive handler fires. Safe inside clickable cards/rows — the\n * trigger and content stop click propagation.\n */\nexport function ActionMenu({\n ariaLabel,\n onView,\n onEdit,\n onDelete,\n entityName,\n deleteLabel: deleteLabelProp,\n extraItems = [],\n align = 'end',\n trigger,\n}: ActionMenuProps) {\n const tr = useTr();\n const deleteLabel = deleteLabelProp ?? tr('cosmicintersection.common.delete', 'Delete');\n const [confirmOpen, setConfirmOpen] = useState(false);\n const [deleting, setDeleting] = useState(false);\n\n const handleConfirmDelete = async () => {\n if (!onDelete) {\n return;\n }\n try {\n setDeleting(true);\n await onDelete();\n setConfirmOpen(false);\n } catch {\n // The handler surfaces its own error (toast); keep the dialog open so the\n // user can retry or cancel rather than silently dismissing.\n } finally {\n setDeleting(false);\n }\n };\n\n const triggerNode = trigger ?? (\n <button\n type=\"button\"\n className=\"inline-flex size-9 items-center justify-center rounded-button text-text-secondary transition-colors hover:bg-bg-sunken hover:text-text-primary focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus max-md:size-11\"\n aria-label={ariaLabel}\n >\n <MoreVertical className=\"size-4\" aria-hidden=\"true\" />\n </button>\n );\n\n const hasAnyItem = Boolean(onView || onEdit || extraItems.length > 0 || onDelete);\n if (!hasAnyItem) {\n return null;\n }\n\n return (\n <>\n <DropdownMenu>\n <DropdownMenuTrigger\n asChild\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {triggerNode}\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className=\"min-w-44\"\n onClick={(event) => event.stopPropagation()}\n onKeyDown={(event) => event.stopPropagation()}\n >\n {onView ? (\n <DropdownMenuItem className=\"cursor-pointer gap-2\" onSelect={() => onView()}>\n <Eye className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>{tr('cosmicintersection.common.view', 'View')}</span>\n </DropdownMenuItem>\n ) : null}\n {onEdit ? (\n <DropdownMenuItem className=\"cursor-pointer gap-2\" onSelect={() => onEdit()}>\n <Pencil className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>{tr('cosmicintersection.common.edit', 'Edit')}</span>\n </DropdownMenuItem>\n ) : null}\n {extraItems.map((item) => {\n const Icon = item.icon;\n return (\n <div key={item.key} className=\"contents\">\n {item.separatorBefore ? <DropdownMenuSeparator /> : null}\n <DropdownMenuItem\n disabled={item.disabled}\n onSelect={() => item.onSelect()}\n className={`cursor-pointer gap-2 ${item.variant === 'danger' ? DANGER_ITEM_CLASS : ''}`}\n >\n {Icon ? <Icon className=\"size-4 shrink-0\" aria-hidden=\"true\" /> : null}\n <span className=\"min-w-0 truncate\">{item.label}</span>\n </DropdownMenuItem>\n </div>\n );\n })}\n {onDelete ? (\n <div className=\"contents\">\n {onView || onEdit || extraItems.length > 0 ? <DropdownMenuSeparator /> : null}\n <DropdownMenuItem\n className={`cursor-pointer gap-2 ${DANGER_ITEM_CLASS}`}\n onSelect={() => setConfirmOpen(true)}\n >\n <Trash2 className=\"size-4 shrink-0\" aria-hidden=\"true\" />\n <span>{deleteLabel}</span>\n </DropdownMenuItem>\n </div>\n ) : null}\n </DropdownMenuContent>\n </DropdownMenu>\n\n {onDelete ? (\n <AlertDialog\n open={confirmOpen}\n onOpenChange={(next) => (deleting ? undefined : setConfirmOpen(next))}\n >\n <AlertDialogContent onClick={(event) => event.stopPropagation()}>\n <AlertDialogHeader>\n <AlertDialogTitle>\n {deleteLabel}\n {entityName ? ` “${entityName}”?` : '?'}\n </AlertDialogTitle>\n <AlertDialogDescription>\n {tr(\n 'cosmicintersection.common.confirmDelete',\n 'This action cannot be undone. This record will be permanently affected.'\n )}\n </AlertDialogDescription>\n </AlertDialogHeader>\n <AlertDialogFooter>\n <AlertDialogCancel disabled={deleting}>\n {tr('cosmicintersection.common.cancel', 'Cancel')}\n </AlertDialogCancel>\n <AlertDialogAction\n onClick={(event) => {\n event.preventDefault();\n void handleConfirmDelete();\n }}\n disabled={deleting}\n className={buttonVariants({ variant: 'destructive' })}\n >\n {deleting ? tr('cosmicintersection.common.working', 'Working…') : deleteLabel}\n </AlertDialogAction>\n </AlertDialogFooter>\n </AlertDialogContent>\n </AlertDialog>\n ) : null}\n </>\n );\n}\n\nexport default ActionMenu;\n"],"mappings":"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"}
@@ -20,6 +20,6 @@ export interface EntityFormShellProps {
20
20
  * footer. Error handling stays in the page via the `mutationSucceeded` + `notify`
21
21
  * helpers; this shell owns layout and the submit/cancel controls only.
22
22
  */
23
- export declare function EntityFormShell({ title, description, purpose, backLabel, onBack, onSubmit, submitLabel, savingLabel, saving, submitDisabled, children, }: EntityFormShellProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function EntityFormShell({ title, description, purpose, backLabel, onBack, onSubmit, submitLabel, savingLabel: savingLabelProp, saving, submitDisabled, children, }: EntityFormShellProps): import("react/jsx-runtime").JSX.Element;
24
24
  export default EntityFormShell;
25
25
  //# sourceMappingURL=EntityFormShell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFormShell.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/EntityFormShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,MAAc,EACd,cAAsB,EACtB,QAAQ,GACT,EAAE,oBAAoB,2CAkCtB;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"EntityFormShell.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/EntityFormShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKlD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,EACT,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,MAAc,EACd,cAAsB,EACtB,QAAQ,GACT,EAAE,oBAAoB,2CAoCtB;AAED,eAAe,eAAe,CAAC"}
@@ -1,49 +1,51 @@
1
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
- import { ArrowLeft as n, Save as r } from "lucide-react";
3
- import { Button as i } from "@burdenoff/fe-libs/ui";
1
+ import { useTr as e } from "../../shared/hooks/useTr.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { ArrowLeft as r, Save as i } from "lucide-react";
4
+ import { Button as a } from "@burdenoff/fe-libs/ui";
4
5
  //#region src/cosmicintersection/components/EntityFormShell.tsx
5
- function a({ title: a, description: o, purpose: s, backLabel: c, onBack: l, onSubmit: u, submitLabel: d, savingLabel: f, saving: p = !1, submitDisabled: m = !1, children: h }) {
6
- return /* @__PURE__ */ t("div", {
6
+ function o({ title: o, description: s, purpose: c, backLabel: l, onBack: u, onSubmit: d, submitLabel: f, savingLabel: p, saving: m = !1, submitDisabled: h = !1, children: g }) {
7
+ let _ = e(), v = p ?? _("cosmicintersection.common.saving", "Saving…");
8
+ return /* @__PURE__ */ n("div", {
7
9
  className: "space-y-6 p-6",
8
10
  children: [
9
- /* @__PURE__ */ t("div", { children: [
10
- /* @__PURE__ */ t(i, {
11
+ /* @__PURE__ */ n("div", { children: [
12
+ /* @__PURE__ */ n(a, {
11
13
  type: "button",
12
14
  variant: "ghost",
13
15
  size: "sm",
14
- onClick: l,
15
- children: [/* @__PURE__ */ e(n, { className: "size-4" }), c]
16
+ onClick: u,
17
+ children: [/* @__PURE__ */ t(r, { className: "size-4" }), l]
16
18
  }),
17
- /* @__PURE__ */ e("h1", {
19
+ /* @__PURE__ */ t("h1", {
18
20
  className: "mt-3 text-2xl font-bold text-text-primary",
19
- children: a
21
+ children: o
20
22
  }),
21
- o ? /* @__PURE__ */ e("p", {
23
+ s ? /* @__PURE__ */ t("p", {
22
24
  className: "mt-1 text-sm text-text-secondary",
23
- children: o
25
+ children: s
24
26
  }) : null
25
27
  ] }),
26
- s ? /* @__PURE__ */ e("div", {
28
+ c ? /* @__PURE__ */ t("div", {
27
29
  className: "rounded-card border border-status-info-border bg-status-info-bg-subtle px-4 py-3 text-sm text-text-secondary",
28
- children: s
30
+ children: c
29
31
  }) : null,
30
- /* @__PURE__ */ e("div", {
32
+ /* @__PURE__ */ t("div", {
31
33
  className: "rounded-card border border-border-default bg-bg-elevated p-6",
32
- children: /* @__PURE__ */ t("form", {
33
- onSubmit: u,
34
+ children: /* @__PURE__ */ n("form", {
35
+ onSubmit: d,
34
36
  className: "space-y-4",
35
- children: [h, /* @__PURE__ */ t("div", {
37
+ children: [g, /* @__PURE__ */ n("div", {
36
38
  className: "flex justify-end gap-3",
37
- children: [/* @__PURE__ */ e(i, {
39
+ children: [/* @__PURE__ */ t(a, {
38
40
  type: "button",
39
41
  variant: "outline",
40
- onClick: l,
41
- disabled: p,
42
- children: "Cancel"
43
- }), /* @__PURE__ */ t(i, {
42
+ onClick: u,
43
+ disabled: m,
44
+ children: _("cosmicintersection.common.cancel", "Cancel")
45
+ }), /* @__PURE__ */ n(a, {
44
46
  type: "submit",
45
- disabled: p || m,
46
- children: [/* @__PURE__ */ e(r, { className: "size-4" }), p ? f ?? "Saving…" : d]
47
+ disabled: m || h,
48
+ children: [/* @__PURE__ */ t(i, { className: "size-4" }), m ? v : f]
47
49
  })]
48
50
  })]
49
51
  })
@@ -52,6 +54,6 @@ function a({ title: a, description: o, purpose: s, backLabel: c, onBack: l, onSu
52
54
  });
53
55
  }
54
56
  //#endregion
55
- export { a as default };
57
+ export { o as default };
56
58
 
57
59
  //# sourceMappingURL=EntityFormShell.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityFormShell.js","names":[],"sources":["../../../src/cosmicintersection/components/EntityFormShell.tsx"],"sourcesContent":["import type { FormEvent, ReactNode } from 'react';\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\n\nexport interface EntityFormShellProps {\n title: string;\n description?: string;\n /** Guidance copy rendered in a token-styled banner above the form. */\n purpose?: ReactNode;\n backLabel: string;\n onBack: () => void;\n onSubmit: (event: FormEvent<HTMLFormElement>) => void;\n submitLabel: string;\n savingLabel?: string;\n saving?: boolean;\n submitDisabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Shared CRUD form scaffold: a back link + heading, an optional purpose banner,\n * and a token-styled panel wrapping the fields with a consistent Cancel / Save\n * footer. Error handling stays in the page via the `mutationSucceeded` + `notify`\n * helpers; this shell owns layout and the submit/cancel controls only.\n */\nexport function EntityFormShell({\n title,\n description,\n purpose,\n backLabel,\n onBack,\n onSubmit,\n submitLabel,\n savingLabel,\n saving = false,\n submitDisabled = false,\n children,\n}: EntityFormShellProps) {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"size-4\" />\n {backLabel}\n </Button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">{title}</h1>\n {description ? <p className=\"mt-1 text-sm text-text-secondary\">{description}</p> : null}\n </div>\n\n {purpose ? (\n <div className=\"rounded-card border border-status-info-border bg-status-info-bg-subtle px-4 py-3 text-sm text-text-secondary\">\n {purpose}\n </div>\n ) : null}\n\n <div className=\"rounded-card border border-border-default bg-bg-elevated p-6\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {children}\n <div className=\"flex justify-end gap-3\">\n <Button type=\"button\" variant=\"outline\" onClick={onBack} disabled={saving}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={saving || submitDisabled}>\n <Save className=\"size-4\" />\n {saving ? (savingLabel ?? 'Saving…') : submitLabel}\n </Button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n\nexport default EntityFormShell;\n"],"mappings":";;;;AAyBA,SAAgB,EAAgB,EAC9B,UACA,gBACA,YACA,cACA,WACA,aACA,gBACA,gBACA,YAAS,IACT,oBAAiB,IACjB,eACuB;CACvB,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAQ;KAAQ,MAAK;KAAK,SAAS;eAAzD,CACE,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA,GAC9B,CACK;;IACR,kBAAC,MAAD;KAAI,WAAU;eAA6C;IAAU,CAAA;IACpE,IAAc,kBAAC,KAAD;KAAG,WAAU;eAAoC;IAAe,CAAA,IAAI;GAChF,EAAA,CAAA;GAEJ,IACC,kBAAC,OAAD;IAAK,WAAU;cACZ;GACE,CAAA,IACH;GAEJ,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,QAAD;KAAgB;KAAU,WAAU;eAApC,CACG,GACD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAQ,MAAK;OAAS,SAAQ;OAAU,SAAS;OAAQ,UAAU;iBAAQ;MAEnE,CAAA,GACR,kBAAC,GAAD;OAAQ,MAAK;OAAS,UAAU,KAAU;iBAA1C,CACE,kBAAC,GAAD,EAAM,WAAU,SAAU,CAAA,GACzB,IAAU,KAAe,YAAa,CACjC;QACL;OACD;;GACH,CAAA;EACF;;AAET"}
1
+ {"version":3,"file":"EntityFormShell.js","names":[],"sources":["../../../src/cosmicintersection/components/EntityFormShell.tsx"],"sourcesContent":["import type { FormEvent, ReactNode } from 'react';\nimport { ArrowLeft, Save } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\n\nexport interface EntityFormShellProps {\n title: string;\n description?: string;\n /** Guidance copy rendered in a token-styled banner above the form. */\n purpose?: ReactNode;\n backLabel: string;\n onBack: () => void;\n onSubmit: (event: FormEvent<HTMLFormElement>) => void;\n submitLabel: string;\n savingLabel?: string;\n saving?: boolean;\n submitDisabled?: boolean;\n children: ReactNode;\n}\n\n/**\n * Shared CRUD form scaffold: a back link + heading, an optional purpose banner,\n * and a token-styled panel wrapping the fields with a consistent Cancel / Save\n * footer. Error handling stays in the page via the `mutationSucceeded` + `notify`\n * helpers; this shell owns layout and the submit/cancel controls only.\n */\nexport function EntityFormShell({\n title,\n description,\n purpose,\n backLabel,\n onBack,\n onSubmit,\n submitLabel,\n savingLabel: savingLabelProp,\n saving = false,\n submitDisabled = false,\n children,\n}: EntityFormShellProps) {\n const tr = useTr();\n const savingLabel = savingLabelProp ?? tr('cosmicintersection.common.saving', 'Saving…');\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={onBack}>\n <ArrowLeft className=\"size-4\" />\n {backLabel}\n </Button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">{title}</h1>\n {description ? <p className=\"mt-1 text-sm text-text-secondary\">{description}</p> : null}\n </div>\n\n {purpose ? (\n <div className=\"rounded-card border border-status-info-border bg-status-info-bg-subtle px-4 py-3 text-sm text-text-secondary\">\n {purpose}\n </div>\n ) : null}\n\n <div className=\"rounded-card border border-border-default bg-bg-elevated p-6\">\n <form onSubmit={onSubmit} className=\"space-y-4\">\n {children}\n <div className=\"flex justify-end gap-3\">\n <Button type=\"button\" variant=\"outline\" onClick={onBack} disabled={saving}>\n {tr('cosmicintersection.common.cancel', 'Cancel')}\n </Button>\n <Button type=\"submit\" disabled={saving || submitDisabled}>\n <Save className=\"size-4\" />\n {saving ? savingLabel : submitLabel}\n </Button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n\nexport default EntityFormShell;\n"],"mappings":";;;;;AA0BA,SAAgB,EAAgB,EAC9B,UACA,gBACA,YACA,cACA,WACA,aACA,gBACA,aAAa,GACb,YAAS,IACT,oBAAiB,IACjB,eACuB;CACvB,IAAM,IAAK,EAAM,GACX,IAAc,KAAmB,EAAG,oCAAoC,SAAS;CACvF,OACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA;IACE,kBAAC,GAAD;KAAQ,MAAK;KAAS,SAAQ;KAAQ,MAAK;KAAK,SAAS;eAAzD,CACE,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA,GAC9B,CACK;;IACR,kBAAC,MAAD;KAAI,WAAU;eAA6C;IAAU,CAAA;IACpE,IAAc,kBAAC,KAAD;KAAG,WAAU;eAAoC;IAAe,CAAA,IAAI;GAChF,EAAA,CAAA;GAEJ,IACC,kBAAC,OAAD;IAAK,WAAU;cACZ;GACE,CAAA,IACH;GAEJ,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,QAAD;KAAgB;KAAU,WAAU;eAApC,CACG,GACD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,GAAD;OAAQ,MAAK;OAAS,SAAQ;OAAU,SAAS;OAAQ,UAAU;iBAChE,EAAG,oCAAoC,QAAQ;MAC1C,CAAA,GACR,kBAAC,GAAD;OAAQ,MAAK;OAAS,UAAU,KAAU;iBAA1C,CACE,kBAAC,GAAD,EAAM,WAAU,SAAU,CAAA,GACzB,IAAS,IAAc,CAClB;QACL;OACD;;GACH,CAAA;EACF;;AAET"}
@@ -9,6 +9,6 @@ export interface ErrorStateProps {
9
9
  * Token-styled error surface for failed queries. Uses the semantic status-error
10
10
  * token family (never raw red) so it stays theme-correct and accessible.
11
11
  */
12
- export declare function ErrorState({ title, message, onRetry, retryLabel, className, }: ErrorStateProps): import("react/jsx-runtime").JSX.Element;
12
+ export declare function ErrorState({ title: titleProp, message: messageProp, onRetry, retryLabel: retryLabelProp, className, }: ErrorStateProps): import("react/jsx-runtime").JSX.Element;
13
13
  export default ErrorState;
14
14
  //# sourceMappingURL=ErrorState.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorState.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/ErrorState.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAA8B,EAC9B,OAA0D,EAC1D,OAAO,EACP,UAAoB,EACpB,SAAS,GACV,EAAE,eAAe,2CAoBjB;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ErrorState.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/ErrorState.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,WAAW,EACpB,OAAO,EACP,UAAU,EAAE,cAAc,EAC1B,SAAS,GACV,EAAE,eAAe,2CA6BjB;AAED,eAAe,UAAU,CAAC"}
@@ -1,40 +1,42 @@
1
- import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
- import { AlertTriangle as n } from "lucide-react";
3
- import { Button as r } from "@burdenoff/fe-libs/ui";
1
+ import { useTr as e } from "../../shared/hooks/useTr.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ import { AlertTriangle as r } from "lucide-react";
4
+ import { Button as i } from "@burdenoff/fe-libs/ui";
4
5
  //#region src/cosmicintersection/components/ErrorState.tsx
5
- function i({ title: i = "Something went wrong", message: a = "We could not load this data. Please try again.", onRetry: o, retryLabel: s = "Retry", className: c }) {
6
- return /* @__PURE__ */ t("div", {
6
+ function a({ title: a, message: o, onRetry: s, retryLabel: c, className: l }) {
7
+ let u = e(), d = a ?? u("cosmicintersection.common.error", "Something went wrong"), f = o ?? u("cosmicintersection.common.errorDescription", "We could not load this data. Please try again."), p = c ?? u("cosmicintersection.common.retry", "Retry");
8
+ return /* @__PURE__ */ n("div", {
7
9
  role: "alert",
8
- className: `flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-card border border-status-error-border bg-status-error-bg-subtle px-6 py-10 text-center ${c ?? ""}`,
10
+ className: `flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-card border border-status-error-border bg-status-error-bg-subtle px-6 py-10 text-center ${l ?? ""}`,
9
11
  children: [
10
- /* @__PURE__ */ e("div", {
12
+ /* @__PURE__ */ t("div", {
11
13
  className: "flex size-12 items-center justify-center rounded-full bg-status-error-bg text-status-error-text",
12
- children: /* @__PURE__ */ e(n, {
14
+ children: /* @__PURE__ */ t(r, {
13
15
  className: "size-6",
14
16
  "aria-hidden": "true"
15
17
  })
16
18
  }),
17
- /* @__PURE__ */ t("div", {
19
+ /* @__PURE__ */ n("div", {
18
20
  className: "space-y-1",
19
- children: [/* @__PURE__ */ e("p", {
21
+ children: [/* @__PURE__ */ t("p", {
20
22
  className: "text-sm font-semibold text-status-error-text",
21
- children: i
22
- }), /* @__PURE__ */ e("p", {
23
+ children: d
24
+ }), /* @__PURE__ */ t("p", {
23
25
  className: "mx-auto max-w-md text-sm text-text-secondary",
24
- children: a
26
+ children: f
25
27
  })]
26
28
  }),
27
- o ? /* @__PURE__ */ e(r, {
29
+ s ? /* @__PURE__ */ t(i, {
28
30
  type: "button",
29
31
  variant: "outline",
30
32
  size: "sm",
31
- onClick: o,
32
- children: s
33
+ onClick: s,
34
+ children: p
33
35
  }) : null
34
36
  ]
35
37
  });
36
38
  }
37
39
  //#endregion
38
- export { i as default };
40
+ export { a as default };
39
41
 
40
42
  //# sourceMappingURL=ErrorState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorState.js","names":[],"sources":["../../../src/cosmicintersection/components/ErrorState.tsx"],"sourcesContent":["import { AlertTriangle } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\n\nexport interface ErrorStateProps {\n title?: string;\n message?: string;\n onRetry?: () => void;\n retryLabel?: string;\n className?: string;\n}\n\n/**\n * Token-styled error surface for failed queries. Uses the semantic status-error\n * token family (never raw red) so it stays theme-correct and accessible.\n */\nexport function ErrorState({\n title = 'Something went wrong',\n message = 'We could not load this data. Please try again.',\n onRetry,\n retryLabel = 'Retry',\n className,\n}: ErrorStateProps) {\n return (\n <div\n role=\"alert\"\n className={`flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-card border border-status-error-border bg-status-error-bg-subtle px-6 py-10 text-center ${className ?? ''}`}\n >\n <div className=\"flex size-12 items-center justify-center rounded-full bg-status-error-bg text-status-error-text\">\n <AlertTriangle className=\"size-6\" aria-hidden=\"true\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-status-error-text\">{title}</p>\n <p className=\"mx-auto max-w-md text-sm text-text-secondary\">{message}</p>\n </div>\n {onRetry ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onRetry}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n );\n}\n\nexport default ErrorState;\n"],"mappings":";;;;AAeA,SAAgB,EAAW,EACzB,WAAQ,wBACR,aAAU,kDACV,YACA,gBAAa,SACb,gBACkB;CAClB,OACE,kBAAC,OAAD;EACE,MAAK;EACL,WAAW,iKAAiK,KAAa;YAF3L;GAIE,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAe,WAAU;KAAS,eAAY;IAAQ,CAAA;GACnD,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAAgD;IAAS,CAAA,GACtE,kBAAC,KAAD;KAAG,WAAU;eAAgD;IAAW,CAAA,CACrE;;GACJ,IACC,kBAAC,GAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,MAAK;IAAK,SAAS;cACxD;GACK,CAAA,IACN;EACD;;AAET"}
1
+ {"version":3,"file":"ErrorState.js","names":[],"sources":["../../../src/cosmicintersection/components/ErrorState.tsx"],"sourcesContent":["import { AlertTriangle } from 'lucide-react';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { useTr } from '../../shared/hooks/useTr';\n\nexport interface ErrorStateProps {\n title?: string;\n message?: string;\n onRetry?: () => void;\n retryLabel?: string;\n className?: string;\n}\n\n/**\n * Token-styled error surface for failed queries. Uses the semantic status-error\n * token family (never raw red) so it stays theme-correct and accessible.\n */\nexport function ErrorState({\n title: titleProp,\n message: messageProp,\n onRetry,\n retryLabel: retryLabelProp,\n className,\n}: ErrorStateProps) {\n const tr = useTr();\n const title = titleProp ?? tr('cosmicintersection.common.error', 'Something went wrong');\n const message =\n messageProp ??\n tr(\n 'cosmicintersection.common.errorDescription',\n 'We could not load this data. Please try again.'\n );\n const retryLabel = retryLabelProp ?? tr('cosmicintersection.common.retry', 'Retry');\n return (\n <div\n role=\"alert\"\n className={`flex min-h-[200px] flex-col items-center justify-center gap-3 rounded-card border border-status-error-border bg-status-error-bg-subtle px-6 py-10 text-center ${className ?? ''}`}\n >\n <div className=\"flex size-12 items-center justify-center rounded-full bg-status-error-bg text-status-error-text\">\n <AlertTriangle className=\"size-6\" aria-hidden=\"true\" />\n </div>\n <div className=\"space-y-1\">\n <p className=\"text-sm font-semibold text-status-error-text\">{title}</p>\n <p className=\"mx-auto max-w-md text-sm text-text-secondary\">{message}</p>\n </div>\n {onRetry ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onRetry}>\n {retryLabel}\n </Button>\n ) : null}\n </div>\n );\n}\n\nexport default ErrorState;\n"],"mappings":";;;;;AAgBA,SAAgB,EAAW,EACzB,OAAO,GACP,SAAS,GACT,YACA,YAAY,GACZ,gBACkB;CAClB,IAAM,IAAK,EAAM,GACX,IAAQ,KAAa,EAAG,mCAAmC,sBAAsB,GACjF,IACJ,KACA,EACE,8CACA,gDACF,GACI,IAAa,KAAkB,EAAG,mCAAmC,OAAO;CAClF,OACE,kBAAC,OAAD;EACE,MAAK;EACL,WAAW,iKAAiK,KAAa;YAF3L;GAIE,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD;KAAe,WAAU;KAAS,eAAY;IAAQ,CAAA;GACnD,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,KAAD;KAAG,WAAU;eAAgD;IAAS,CAAA,GACtE,kBAAC,KAAD;KAAG,WAAU;eAAgD;IAAW,CAAA,CACrE;;GACJ,IACC,kBAAC,GAAD;IAAQ,MAAK;IAAS,SAAQ;IAAU,MAAK;IAAK,SAAS;cACxD;GACK,CAAA,IACN;EACD;;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploadField.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/FileUploadField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA6CjE,eAAO,MAAM,qBAAqB,gCAIjC,CAAC;AAaF,UAAU,mBAAmB;IAC3B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;QACvB,MAAM;eAAa,MAAM;;QAAzB,MAAM;eAAa,MAAM;GAKrE;AAED,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gFAAgF;IAChF,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAgB,EAChB,SAAS,GACV,EAAE,oBAAoB,2CA2JtB;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"FileUploadField.d.ts","sourceRoot":"","sources":["../../../src/cosmicintersection/components/FileUploadField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AA8CjE,eAAO,MAAM,qBAAqB,gCAIjC,CAAC;AAaF,UAAU,mBAAmB;IAC3B,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;QACvB,MAAM;eAAa,MAAM;;QAAzB,MAAM;eAAa,MAAM;GAKrE;AAED,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gFAAgF;IAChF,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAgB,EAChB,SAAS,GACV,EAAE,oBAAoB,2CA8KtB;AAED,eAAe,eAAe,CAAC"}