@alistigo/artifact-core-components-react 0.3.6 → 0.4.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.
@@ -2,8 +2,8 @@ import { type ReactNode } from "react";
2
2
  export interface ArtifactContextMenuContainerProps {
3
3
  icon: ReactNode;
4
4
  children: ReactNode;
5
- /** Optional badge rendered to the left of the icon button (e.g. a Draft status pill). */
6
- statusBadge?: ReactNode;
5
+ /** Optional badge renderer — receives the toggle handler and renders to the left of the icon button. */
6
+ statusBadge?: ((onToggle: () => void) => ReactNode) | undefined;
7
7
  }
8
8
  export declare function ArtifactContextMenuContainer({ icon, children, statusBadge, }: ArtifactContextMenuContainerProps): ReactNode;
9
9
  //# sourceMappingURL=ArtifactContextMenuContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ArtifactContextMenuContainer.d.ts","sourceRoot":"","sources":["../../src/components/ArtifactContextMenuContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAE5D,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,yFAAyF;IACzF,WAAW,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,iCAAiC,GAAG,SAAS,CAyD/C"}
1
+ {"version":3,"file":"ArtifactContextMenuContainer.d.ts","sourceRoot":"","sources":["../../src/components/ArtifactContextMenuContainer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAE5D,MAAM,WAAW,iCAAiC;IAChD,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,SAAS,CAAC;IACpB,wGAAwG;IACxG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,SAAS,CAAC,GAAG,SAAS,CAAC;CACjE;AAGD,wBAAgB,4BAA4B,CAAC,EAC3C,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,iCAAiC,GAAG,SAAS,CA6D/C"}
@@ -0,0 +1,3 @@
1
+ import type { ReactNode } from "react";
2
+ export declare function AsyncProgressBar(): ReactNode;
3
+ //# sourceMappingURL=AsyncProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncProgressBar.d.ts","sourceRoot":"","sources":["../../src/components/AsyncProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,wBAAgB,gBAAgB,IAAI,SAAS,CAmB5C"}
@@ -0,0 +1,10 @@
1
+ import { type ReactNode } from "react";
2
+ export interface AsyncProgressContextValue {
3
+ startOp: () => () => void;
4
+ pending: boolean;
5
+ }
6
+ export declare function AsyncProgressProvider({ children }: {
7
+ children: ReactNode;
8
+ }): ReactNode;
9
+ export declare function useAsyncProgress(): AsyncProgressContextValue;
10
+ //# sourceMappingURL=AsyncProgressContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsyncProgressContext.d.ts","sourceRoot":"","sources":["../../src/components/AsyncProgressContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,SAAS,EAAqC,MAAM,OAAO,CAAC;AAEzF,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,MAAM,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB;AAID,wBAAgB,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,GAAG,SAAS,CAatF;AAED,wBAAgB,gBAAgB,IAAI,yBAAyB,CAM5D"}
package/dist/index.d.ts CHANGED
@@ -3,6 +3,9 @@ export type { ArtifactContextMenuContainerProps } from "./components/ArtifactCon
3
3
  export { ArtifactContextMenuContainer } from "./components/ArtifactContextMenuContainer.js";
4
4
  export type { ArtifactInfoPanelProps } from "./components/ArtifactInfoPanel.js";
5
5
  export { ArtifactInfoPanel } from "./components/ArtifactInfoPanel.js";
6
+ export { AsyncProgressBar } from "./components/AsyncProgressBar.js";
7
+ export type { AsyncProgressContextValue } from "./components/AsyncProgressContext.js";
8
+ export { AsyncProgressProvider, useAsyncProgress } from "./components/AsyncProgressContext.js";
6
9
  export type { ErrorScreenProps } from "./components/ErrorScreen.js";
7
10
  export { ErrorScreen } from "./components/ErrorScreen.js";
8
11
  export type { LoadingScreenProps } from "./components/LoadingScreen.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EAAE,iCAAiC,EAAE,MAAM,8CAA8C,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,YAAY,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAC/F,YAAY,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,34 +1,36 @@
1
- import { jsxs as r, Fragment as c, jsx as e } from "react/jsx-runtime";
2
- import { useState as o, useEffect as A } from "react";
3
- const g = "data:image/png;base64,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";
4
- function x({
5
- icon: a,
1
+ import { jsxs as n, Fragment as u, jsx as e } from "react/jsx-runtime";
2
+ import { useState as c, useEffect as d, createContext as m, useCallback as w, useContext as h } from "react";
3
+ const f = "data:image/png;base64,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";
4
+ function C({
5
+ icon: r,
6
6
  children: t,
7
- statusBadge: l
7
+ statusBadge: i
8
8
  }) {
9
- const [n, i] = o(!1);
10
- return A(() => {
11
- if (!n) return;
12
- const s = (d) => {
13
- d.key === "Escape" && i(!1);
9
+ const [a, s] = c(!1), l = () => {
10
+ s((o) => !o);
11
+ };
12
+ return d(() => {
13
+ if (!a) return;
14
+ const o = (g) => {
15
+ g.key === "Escape" && s(!1);
14
16
  };
15
- return window.addEventListener("keydown", s), () => window.removeEventListener("keydown", s);
16
- }, [n]), /* @__PURE__ */ r(c, { children: [
17
+ return window.addEventListener("keydown", o), () => window.removeEventListener("keydown", o);
18
+ }, [a]), /* @__PURE__ */ n(u, { children: [
17
19
  /* @__PURE__ */ e(
18
20
  "button",
19
21
  {
20
22
  type: "button",
21
23
  "aria-label": "Close artifact info",
22
24
  tabIndex: -1,
23
- onClick: () => i(!1),
24
- className: `fixed inset-0 z-30 bg-black/20 transition-opacity duration-300 ${n ? "opacity-100" : "pointer-events-none opacity-0"}`
25
+ onClick: () => s(!1),
26
+ className: `fixed inset-0 z-30 bg-black/20 transition-opacity duration-300 ${a ? "opacity-100" : "pointer-events-none opacity-0"}`
25
27
  }
26
28
  ),
27
- /* @__PURE__ */ e("div", { className: "pointer-events-none fixed inset-x-0 top-0 z-40 flex justify-end pr-4", children: /* @__PURE__ */ r(
29
+ /* @__PURE__ */ e("div", { className: "pointer-events-none fixed inset-x-0 top-0 z-40 flex justify-end pr-4", children: /* @__PURE__ */ n(
28
30
  "div",
29
31
  {
30
32
  className: "pointer-events-auto relative w-72 transition-transform duration-300 ease-out",
31
- style: { transform: n ? "translateY(0)" : "translateY(-100%)" },
33
+ style: { transform: a ? "translateY(0)" : "translateY(-100%)" },
32
34
  children: [
33
35
  /* @__PURE__ */ e(
34
36
  "div",
@@ -36,24 +38,24 @@ function x({
36
38
  role: "dialog",
37
39
  "aria-modal": "true",
38
40
  "aria-label": "Alistigo artifact info",
39
- "aria-hidden": !n,
40
- inert: !n,
41
- className: `relative z-10 rounded-bl-xl border border-gray-200 bg-white p-4 transition-shadow duration-300 ${n ? "shadow-xl" : ""}`,
41
+ "aria-hidden": !a,
42
+ inert: !a,
43
+ className: `relative z-10 rounded-bl-xl border border-gray-200 bg-white p-4 transition-shadow duration-300 ${a ? "shadow-xl" : ""}`,
42
44
  children: t
43
45
  }
44
46
  ),
45
- /* @__PURE__ */ r("div", { className: "-mt-px absolute top-full right-0 z-20 flex items-start gap-1", children: [
46
- l,
47
+ /* @__PURE__ */ n("div", { className: "-mt-px absolute top-full right-0 z-20 flex items-start gap-1", children: [
48
+ i?.(l),
47
49
  /* @__PURE__ */ e(
48
50
  "button",
49
51
  {
50
52
  type: "button",
51
53
  "data-testid": "alistigo-badge",
52
- onClick: () => i((s) => !s),
54
+ onClick: l,
53
55
  "aria-label": "Alistigo artifact info",
54
- "aria-expanded": n,
56
+ "aria-expanded": a,
55
57
  className: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-b-lg border-x border-t border-b border-t-white border-gray-200 bg-white shadow-md hover:border-gray-400 focus:outline-none",
56
- children: a
58
+ children: r
57
59
  }
58
60
  )
59
61
  ] })
@@ -62,60 +64,89 @@ function x({
62
64
  ) })
63
65
  ] });
64
66
  }
65
- function u({ plugins: a }) {
66
- return a.length === 0 ? /* @__PURE__ */ e("p", { className: "text-center text-gray-400 text-xs", children: "No plugins loaded" }) : /* @__PURE__ */ e("ul", { className: "flex flex-col gap-2", children: a.map((t) => /* @__PURE__ */ r(
67
+ function x({ plugins: r }) {
68
+ return r.length === 0 ? /* @__PURE__ */ e("p", { className: "text-center text-gray-400 text-xs", children: "No plugins loaded" }) : /* @__PURE__ */ e("ul", { className: "flex flex-col gap-2", children: r.map((t) => /* @__PURE__ */ n(
67
69
  "li",
68
70
  {
69
71
  "data-plugin-name": t.name,
70
72
  "data-plugin-status": t.status,
71
73
  className: "flex items-start justify-between gap-2",
72
74
  children: [
73
- /* @__PURE__ */ r("div", { className: "min-w-0", children: [
75
+ /* @__PURE__ */ n("div", { className: "min-w-0", children: [
74
76
  /* @__PURE__ */ e("p", { className: "truncate text-gray-800 text-xs font-medium", children: t.name }),
75
- /* @__PURE__ */ r("p", { className: "text-gray-400 text-xs", children: [
77
+ /* @__PURE__ */ n("p", { className: "text-gray-400 text-xs", children: [
76
78
  "v",
77
79
  t.version
78
80
  ] }),
79
81
  t.error != null && /* @__PURE__ */ e("p", { className: "mt-0.5 text-red-500 text-xs", children: t.error })
80
82
  ] }),
81
- /* @__PURE__ */ r("div", { className: "flex shrink-0 items-center gap-1.5", children: [
83
+ /* @__PURE__ */ n("div", { className: "flex shrink-0 items-center gap-1.5", children: [
82
84
  /* @__PURE__ */ e("span", { className: "rounded bg-gray-100 px-1.5 py-0.5 text-gray-500 text-xs", children: t.type }),
83
- /* @__PURE__ */ e(m, { status: t.status })
85
+ /* @__PURE__ */ e(b, { status: t.status })
84
86
  ] })
85
87
  ]
86
88
  },
87
89
  t.name
88
90
  )) });
89
91
  }
90
- function m({ status: a }) {
92
+ function b({ status: r }) {
91
93
  return /* @__PURE__ */ e("span", { className: `h-2 w-2 rounded-full ${{
92
94
  active: "bg-green-500",
93
95
  loading: "bg-amber-400",
94
96
  inactive: "bg-gray-300",
95
97
  error: "bg-red-500"
96
- }[a]}` });
98
+ }[r]}` });
97
99
  }
98
- function f({
99
- artifactName: a,
100
+ function N({
101
+ artifactName: r,
100
102
  artifactVersion: t,
101
- plugins: l
103
+ plugins: i
102
104
  }) {
103
- return /* @__PURE__ */ r("div", { className: "flex flex-col gap-4", children: [
104
- /* @__PURE__ */ r("div", { children: [
105
- /* @__PURE__ */ e("p", { className: "font-semibold text-gray-900 text-sm", children: a }),
106
- /* @__PURE__ */ r("p", { className: "text-gray-400 text-xs", children: [
105
+ return /* @__PURE__ */ n("div", { className: "flex flex-col gap-4", children: [
106
+ /* @__PURE__ */ n("div", { children: [
107
+ /* @__PURE__ */ e("p", { className: "font-semibold text-gray-900 text-sm", children: r }),
108
+ /* @__PURE__ */ n("p", { className: "text-gray-400 text-xs", children: [
107
109
  "v",
108
110
  t
109
111
  ] })
110
112
  ] }),
111
- /* @__PURE__ */ e(u, { plugins: l })
113
+ /* @__PURE__ */ e(x, { plugins: i })
112
114
  ] });
113
115
  }
114
- function b({ error: a, onReset: t }) {
115
- return /* @__PURE__ */ r("div", { className: "flex min-h-screen flex-col items-center justify-center gap-4 bg-white p-8", children: [
116
- /* @__PURE__ */ r("div", { className: "flex flex-col items-center gap-2 text-center", children: [
116
+ const A = m(null);
117
+ function U({ children: r }) {
118
+ const [t, i] = c(0), a = w(() => (i((s) => s + 1), () => i((s) => s - 1)), []);
119
+ return /* @__PURE__ */ e(A.Provider, { value: { startOp: a, pending: t > 0 }, children: r });
120
+ }
121
+ function p() {
122
+ const r = h(A);
123
+ return r === null ? { startOp: () => () => {
124
+ }, pending: !1 } : r;
125
+ }
126
+ function B() {
127
+ const { pending: r } = p();
128
+ return r ? /* @__PURE__ */ n("div", { className: "fixed bottom-0 left-0 right-0 z-50 h-0.5 overflow-hidden bg-blue-100", children: [
129
+ /* @__PURE__ */ e("style", { children: `
130
+ @keyframes alistigo-progress {
131
+ 0% { left: -55%; width: 55%; }
132
+ 60% { left: 100%; width: 55%; }
133
+ 100% { left: 100%; width: 0; }
134
+ }
135
+ ` }),
136
+ /* @__PURE__ */ e(
137
+ "div",
138
+ {
139
+ className: "absolute top-0 h-full rounded-full bg-blue-500",
140
+ style: { animation: "alistigo-progress 1.4s ease-in-out infinite" }
141
+ }
142
+ )
143
+ ] }) : null;
144
+ }
145
+ function k({ error: r, onReset: t }) {
146
+ return /* @__PURE__ */ n("div", { className: "flex min-h-screen flex-col items-center justify-center gap-4 bg-white p-8", children: [
147
+ /* @__PURE__ */ n("div", { className: "flex flex-col items-center gap-2 text-center", children: [
117
148
  /* @__PURE__ */ e("p", { className: "text-lg font-semibold text-red-600", children: "Something went wrong" }),
118
- /* @__PURE__ */ e("p", { className: "max-w-sm text-sm text-gray-500", children: a.message })
149
+ /* @__PURE__ */ e("p", { className: "max-w-sm text-sm text-gray-500", children: r.message })
119
150
  ] }),
120
151
  t != null && /* @__PURE__ */ e(
121
152
  "button",
@@ -128,33 +159,33 @@ function b({ error: a, onReset: t }) {
128
159
  )
129
160
  ] });
130
161
  }
131
- function p({ artifactName: a }) {
132
- return /* @__PURE__ */ r("div", { className: "flex min-h-screen flex-col items-center justify-center gap-4 bg-white", children: [
133
- /* @__PURE__ */ r("div", { className: "relative flex h-20 w-20 items-center justify-center", children: [
162
+ function j({ artifactName: r }) {
163
+ return /* @__PURE__ */ n("div", { className: "flex min-h-screen flex-col items-center justify-center gap-4 bg-white", children: [
164
+ /* @__PURE__ */ n("div", { className: "relative flex h-20 w-20 items-center justify-center", children: [
134
165
  /* @__PURE__ */ e("div", { className: "absolute inset-0 animate-spin rounded-full border-2 border-gray-200 border-t-gray-800" }),
135
- /* @__PURE__ */ e("img", { src: g, alt: "Alistigo", className: "h-14 w-14 rounded-2xl" })
166
+ /* @__PURE__ */ e("img", { src: f, alt: "Alistigo", className: "h-14 w-14 rounded-2xl" })
136
167
  ] }),
137
- a != null && /* @__PURE__ */ e("p", { className: "text-sm text-gray-500", children: a })
168
+ r != null && /* @__PURE__ */ e("p", { className: "text-sm text-gray-500", children: r })
138
169
  ] });
139
170
  }
140
- function y({ title: a, onClose: t, children: l, footer: n }) {
141
- return A(() => {
142
- const i = (s) => {
143
- s.key === "Escape" && t();
171
+ function D({ title: r, onClose: t, children: i, footer: a }) {
172
+ return d(() => {
173
+ const s = (l) => {
174
+ l.key === "Escape" && t();
144
175
  };
145
- return document.addEventListener("keydown", i), () => document.removeEventListener("keydown", i);
146
- }, [t]), /* @__PURE__ */ r("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [
176
+ return document.addEventListener("keydown", s), () => document.removeEventListener("keydown", s);
177
+ }, [t]), /* @__PURE__ */ n("div", { className: "fixed inset-0 z-50 flex items-center justify-center", children: [
147
178
  /* @__PURE__ */ e("div", { className: "absolute inset-0 bg-black/40", onClick: t, "aria-hidden": "true" }),
148
- /* @__PURE__ */ r(
179
+ /* @__PURE__ */ n(
149
180
  "div",
150
181
  {
151
182
  role: "dialog",
152
183
  "aria-modal": "true",
153
- "aria-label": a,
184
+ "aria-label": r,
154
185
  className: "relative w-96 max-w-[90vw] rounded-2xl bg-white shadow-2xl",
155
186
  children: [
156
- /* @__PURE__ */ r("div", { className: "flex items-center justify-between border-b border-gray-100 px-5 py-4", children: [
157
- /* @__PURE__ */ e("h2", { className: "font-semibold text-gray-900 text-sm", children: a }),
187
+ /* @__PURE__ */ n("div", { className: "flex items-center justify-between border-b border-gray-100 px-5 py-4", children: [
188
+ /* @__PURE__ */ e("h2", { className: "font-semibold text-gray-900 text-sm", children: r }),
158
189
  /* @__PURE__ */ e(
159
190
  "button",
160
191
  {
@@ -174,20 +205,23 @@ function y({ title: a, onClose: t, children: l, footer: n }) {
174
205
  }
175
206
  )
176
207
  ] }),
177
- /* @__PURE__ */ e("div", { className: "p-5", children: l }),
178
- n != null && /* @__PURE__ */ e("div", { className: "flex justify-end gap-2 border-t border-gray-100 px-5 py-3", children: n })
208
+ /* @__PURE__ */ e("div", { className: "p-5", children: i }),
209
+ a != null && /* @__PURE__ */ e("div", { className: "flex justify-end gap-2 border-t border-gray-100 px-5 py-3", children: a })
179
210
  ]
180
211
  }
181
212
  )
182
213
  ] });
183
214
  }
184
215
  export {
185
- x as ArtifactContextMenuContainer,
186
- f as ArtifactInfoPanel,
187
- b as ErrorScreen,
188
- p as LoadingScreen,
189
- y as Modal,
190
- u as PluginList,
191
- g as alistigoLogoUrl
216
+ C as ArtifactContextMenuContainer,
217
+ N as ArtifactInfoPanel,
218
+ B as AsyncProgressBar,
219
+ U as AsyncProgressProvider,
220
+ k as ErrorScreen,
221
+ j as LoadingScreen,
222
+ D as Modal,
223
+ x as PluginList,
224
+ f as alistigoLogoUrl,
225
+ p as useAsyncProgress
192
226
  };
193
227
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/assets/logo.png","../src/components/ArtifactContextMenuContainer.tsx","../src/components/PluginList.tsx","../src/components/ArtifactInfoPanel.tsx","../src/components/ErrorScreen.tsx","../src/components/LoadingScreen.tsx","../src/components/Modal.tsx"],"sourcesContent":["export default \"data:image/png;base64,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\"","import { type ReactNode, useEffect, useState } from \"react\";\n\nexport interface ArtifactContextMenuContainerProps {\n icon: ReactNode;\n children: ReactNode;\n /** Optional badge rendered to the left of the icon button (e.g. a Draft status pill). */\n statusBadge?: ReactNode;\n}\n\nexport function ArtifactContextMenuContainer({\n icon,\n children,\n statusBadge,\n}: ArtifactContextMenuContainerProps): ReactNode {\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n return (\n <>\n <button\n type=\"button\"\n aria-label=\"Close artifact info\"\n tabIndex={-1}\n onClick={() => setOpen(false)}\n className={`fixed inset-0 z-30 bg-black/20 transition-opacity duration-300 ${\n open ? \"opacity-100\" : \"pointer-events-none opacity-0\"\n }`}\n />\n <div className=\"pointer-events-none fixed inset-x-0 top-0 z-40 flex justify-end pr-4\">\n <div\n className=\"pointer-events-auto relative w-72 transition-transform duration-300 ease-out\"\n style={{ transform: open ? \"translateY(0)\" : \"translateY(-100%)\" }}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Alistigo artifact info\"\n aria-hidden={!open}\n inert={!open}\n className={`relative z-10 rounded-bl-xl border border-gray-200 bg-white p-4 transition-shadow duration-300 ${\n open ? \"shadow-xl\" : \"\"\n }`}\n >\n {children}\n </div>\n <div className=\"-mt-px absolute top-full right-0 z-20 flex items-start gap-1\">\n {statusBadge}\n <button\n type=\"button\"\n data-testid=\"alistigo-badge\"\n onClick={() => setOpen((v) => !v)}\n aria-label=\"Alistigo artifact info\"\n aria-expanded={open}\n className=\"flex h-8 w-8 cursor-pointer items-center justify-center rounded-b-lg border-x border-t border-b border-t-white border-gray-200 bg-white shadow-md hover:border-gray-400 focus:outline-none\"\n >\n {icon}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type { PluginInfo } from \"./types.js\";\n\nexport interface PluginListProps {\n plugins: PluginInfo[];\n}\n\nexport function PluginList({ plugins }: PluginListProps): ReactNode {\n if (plugins.length === 0) {\n return <p className=\"text-center text-gray-400 text-xs\">No plugins loaded</p>;\n }\n\n return (\n <ul className=\"flex flex-col gap-2\">\n {plugins.map((plugin) => (\n <li\n key={plugin.name}\n data-plugin-name={plugin.name}\n data-plugin-status={plugin.status}\n className=\"flex items-start justify-between gap-2\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-gray-800 text-xs font-medium\">{plugin.name}</p>\n <p className=\"text-gray-400 text-xs\">v{plugin.version}</p>\n {plugin.error != null && <p className=\"mt-0.5 text-red-500 text-xs\">{plugin.error}</p>}\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <span className=\"rounded bg-gray-100 px-1.5 py-0.5 text-gray-500 text-xs\">\n {plugin.type}\n </span>\n <StatusDot status={plugin.status} />\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\nfunction StatusDot({ status }: { status: PluginInfo[\"status\"] }): ReactNode {\n const colors: Record<PluginInfo[\"status\"], string> = {\n active: \"bg-green-500\",\n loading: \"bg-amber-400\",\n inactive: \"bg-gray-300\",\n error: \"bg-red-500\",\n };\n return <span className={`h-2 w-2 rounded-full ${colors[status]}`} />;\n}\n","import type { ReactNode } from \"react\";\nimport { PluginList } from \"./PluginList.js\";\nimport type { PluginInfo } from \"./types.js\";\n\nexport interface ArtifactInfoPanelProps {\n artifactName: string;\n artifactVersion: string;\n plugins: PluginInfo[];\n}\n\nexport function ArtifactInfoPanel({\n artifactName,\n artifactVersion,\n plugins,\n}: ArtifactInfoPanelProps): ReactNode {\n return (\n <div className=\"flex flex-col gap-4\">\n <div>\n <p className=\"font-semibold text-gray-900 text-sm\">{artifactName}</p>\n <p className=\"text-gray-400 text-xs\">v{artifactVersion}</p>\n </div>\n <PluginList plugins={plugins} />\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ErrorScreenProps {\n error: Error;\n onReset?: (() => void) | undefined;\n}\n\nexport function ErrorScreen({ error, onReset }: ErrorScreenProps): ReactNode {\n return (\n <div className=\"flex min-h-screen flex-col items-center justify-center gap-4 bg-white p-8\">\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <p className=\"text-lg font-semibold text-red-600\">Something went wrong</p>\n <p className=\"max-w-sm text-sm text-gray-500\">{error.message}</p>\n </div>\n {onReset != null && (\n <button\n type=\"button\"\n onClick={onReset}\n className=\"rounded-md bg-gray-900 px-4 py-2 text-sm text-white hover:bg-gray-700\"\n >\n Try again\n </button>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport logoUrl from \"../assets/logo.png\";\n\nexport interface LoadingScreenProps {\n artifactName?: string | undefined;\n}\n\nexport function LoadingScreen({ artifactName }: LoadingScreenProps): ReactNode {\n return (\n <div className=\"flex min-h-screen flex-col items-center justify-center gap-4 bg-white\">\n <div className=\"relative flex h-20 w-20 items-center justify-center\">\n <div className=\"absolute inset-0 animate-spin rounded-full border-2 border-gray-200 border-t-gray-800\" />\n <img src={logoUrl} alt=\"Alistigo\" className=\"h-14 w-14 rounded-2xl\" />\n </div>\n {artifactName != null && <p className=\"text-sm text-gray-500\">{artifactName}</p>}\n </div>\n );\n}\n","import { type ReactNode, useEffect } from \"react\";\n\nexport interface ModalProps {\n title: string;\n onClose: () => void;\n children: ReactNode;\n footer?: ReactNode;\n}\n\nexport function Modal({ title, onClose, children, footer }: ModalProps): ReactNode {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [onClose]);\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/40\" onClick={onClose} aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className=\"relative w-96 max-w-[90vw] rounded-2xl bg-white shadow-2xl\"\n >\n <div className=\"flex items-center justify-between border-b border-gray-100 px-5 py-4\">\n <h2 className=\"font-semibold text-gray-900 text-sm\">{title}</h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-gray-400 hover:bg-gray-100 hover:text-gray-700\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M11 3L3 11M3 3l8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"p-5\">{children}</div>\n {footer != null && (\n <div className=\"flex justify-end gap-2 border-t border-gray-100 px-5 py-3\">{footer}</div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["logoUrl","ArtifactContextMenuContainer","icon","children","statusBadge","open","setOpen","useState","useEffect","onKeyDown","e","jsxs","Fragment","jsx","v","PluginList","plugins","plugin","StatusDot","status","ArtifactInfoPanel","artifactName","artifactVersion","ErrorScreen","error","onReset","LoadingScreen","Modal","title","onClose","footer","handleKeyDown"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/assets/logo.png","../src/components/ArtifactContextMenuContainer.tsx","../src/components/PluginList.tsx","../src/components/ArtifactInfoPanel.tsx","../src/components/AsyncProgressContext.tsx","../src/components/AsyncProgressBar.tsx","../src/components/ErrorScreen.tsx","../src/components/LoadingScreen.tsx","../src/components/Modal.tsx"],"sourcesContent":["export default \"data:image/png;base64,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\"","import { type ReactNode, useEffect, useState } from \"react\";\n\nexport interface ArtifactContextMenuContainerProps {\n icon: ReactNode;\n children: ReactNode;\n /** Optional badge renderer — receives the toggle handler and renders to the left of the icon button. */\n statusBadge?: ((onToggle: () => void) => ReactNode) | undefined;\n}\n\n// fallow-ignore-next-line complexity\nexport function ArtifactContextMenuContainer({\n icon,\n children,\n statusBadge,\n}: ArtifactContextMenuContainerProps): ReactNode {\n const [open, setOpen] = useState(false);\n\n const handleToggle = (): void => {\n setOpen((v) => !v);\n };\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (e: KeyboardEvent): void => {\n if (e.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open]);\n\n return (\n <>\n <button\n type=\"button\"\n aria-label=\"Close artifact info\"\n tabIndex={-1}\n onClick={() => setOpen(false)}\n className={`fixed inset-0 z-30 bg-black/20 transition-opacity duration-300 ${\n open ? \"opacity-100\" : \"pointer-events-none opacity-0\"\n }`}\n />\n <div className=\"pointer-events-none fixed inset-x-0 top-0 z-40 flex justify-end pr-4\">\n <div\n className=\"pointer-events-auto relative w-72 transition-transform duration-300 ease-out\"\n style={{ transform: open ? \"translateY(0)\" : \"translateY(-100%)\" }}\n >\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Alistigo artifact info\"\n aria-hidden={!open}\n inert={!open}\n className={`relative z-10 rounded-bl-xl border border-gray-200 bg-white p-4 transition-shadow duration-300 ${\n open ? \"shadow-xl\" : \"\"\n }`}\n >\n {children}\n </div>\n <div className=\"-mt-px absolute top-full right-0 z-20 flex items-start gap-1\">\n {statusBadge?.(handleToggle)}\n <button\n type=\"button\"\n data-testid=\"alistigo-badge\"\n onClick={handleToggle}\n aria-label=\"Alistigo artifact info\"\n aria-expanded={open}\n className=\"flex h-8 w-8 cursor-pointer items-center justify-center rounded-b-lg border-x border-t border-b border-t-white border-gray-200 bg-white shadow-md hover:border-gray-400 focus:outline-none\"\n >\n {icon}\n </button>\n </div>\n </div>\n </div>\n </>\n );\n}\n","import type { ReactNode } from \"react\";\nimport type { PluginInfo } from \"./types.js\";\n\nexport interface PluginListProps {\n plugins: PluginInfo[];\n}\n\nexport function PluginList({ plugins }: PluginListProps): ReactNode {\n if (plugins.length === 0) {\n return <p className=\"text-center text-gray-400 text-xs\">No plugins loaded</p>;\n }\n\n return (\n <ul className=\"flex flex-col gap-2\">\n {plugins.map((plugin) => (\n <li\n key={plugin.name}\n data-plugin-name={plugin.name}\n data-plugin-status={plugin.status}\n className=\"flex items-start justify-between gap-2\"\n >\n <div className=\"min-w-0\">\n <p className=\"truncate text-gray-800 text-xs font-medium\">{plugin.name}</p>\n <p className=\"text-gray-400 text-xs\">v{plugin.version}</p>\n {plugin.error != null && <p className=\"mt-0.5 text-red-500 text-xs\">{plugin.error}</p>}\n </div>\n <div className=\"flex shrink-0 items-center gap-1.5\">\n <span className=\"rounded bg-gray-100 px-1.5 py-0.5 text-gray-500 text-xs\">\n {plugin.type}\n </span>\n <StatusDot status={plugin.status} />\n </div>\n </li>\n ))}\n </ul>\n );\n}\n\nfunction StatusDot({ status }: { status: PluginInfo[\"status\"] }): ReactNode {\n const colors: Record<PluginInfo[\"status\"], string> = {\n active: \"bg-green-500\",\n loading: \"bg-amber-400\",\n inactive: \"bg-gray-300\",\n error: \"bg-red-500\",\n };\n return <span className={`h-2 w-2 rounded-full ${colors[status]}`} />;\n}\n","import type { ReactNode } from \"react\";\nimport { PluginList } from \"./PluginList.js\";\nimport type { PluginInfo } from \"./types.js\";\n\nexport interface ArtifactInfoPanelProps {\n artifactName: string;\n artifactVersion: string;\n plugins: PluginInfo[];\n}\n\nexport function ArtifactInfoPanel({\n artifactName,\n artifactVersion,\n plugins,\n}: ArtifactInfoPanelProps): ReactNode {\n return (\n <div className=\"flex flex-col gap-4\">\n <div>\n <p className=\"font-semibold text-gray-900 text-sm\">{artifactName}</p>\n <p className=\"text-gray-400 text-xs\">v{artifactVersion}</p>\n </div>\n <PluginList plugins={plugins} />\n </div>\n );\n}\n","import { createContext, type ReactNode, useCallback, useContext, useState } from \"react\";\n\nexport interface AsyncProgressContextValue {\n startOp: () => () => void;\n pending: boolean;\n}\n\nconst AsyncProgressContext = createContext<AsyncProgressContextValue | null>(null);\n\nexport function AsyncProgressProvider({ children }: { children: ReactNode }): ReactNode {\n const [count, setCount] = useState(0);\n\n const startOp = useCallback((): (() => void) => {\n setCount((c) => c + 1);\n return () => setCount((c) => c - 1);\n }, []);\n\n return (\n <AsyncProgressContext.Provider value={{ startOp, pending: count > 0 }}>\n {children}\n </AsyncProgressContext.Provider>\n );\n}\n\nexport function useAsyncProgress(): AsyncProgressContextValue {\n const ctx = useContext(AsyncProgressContext);\n if (ctx === null) {\n return { startOp: () => () => {}, pending: false };\n }\n return ctx;\n}\n","import type { ReactNode } from \"react\";\nimport { useAsyncProgress } from \"./AsyncProgressContext.js\";\n\nexport function AsyncProgressBar(): ReactNode {\n const { pending } = useAsyncProgress();\n if (!pending) return null;\n\n return (\n <div className=\"fixed bottom-0 left-0 right-0 z-50 h-0.5 overflow-hidden bg-blue-100\">\n <style>{`\n @keyframes alistigo-progress {\n 0% { left: -55%; width: 55%; }\n 60% { left: 100%; width: 55%; }\n 100% { left: 100%; width: 0; }\n }\n `}</style>\n <div\n className=\"absolute top-0 h-full rounded-full bg-blue-500\"\n style={{ animation: \"alistigo-progress 1.4s ease-in-out infinite\" }}\n />\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\n\nexport interface ErrorScreenProps {\n error: Error;\n onReset?: (() => void) | undefined;\n}\n\nexport function ErrorScreen({ error, onReset }: ErrorScreenProps): ReactNode {\n return (\n <div className=\"flex min-h-screen flex-col items-center justify-center gap-4 bg-white p-8\">\n <div className=\"flex flex-col items-center gap-2 text-center\">\n <p className=\"text-lg font-semibold text-red-600\">Something went wrong</p>\n <p className=\"max-w-sm text-sm text-gray-500\">{error.message}</p>\n </div>\n {onReset != null && (\n <button\n type=\"button\"\n onClick={onReset}\n className=\"rounded-md bg-gray-900 px-4 py-2 text-sm text-white hover:bg-gray-700\"\n >\n Try again\n </button>\n )}\n </div>\n );\n}\n","import type { ReactNode } from \"react\";\nimport logoUrl from \"../assets/logo.png\";\n\nexport interface LoadingScreenProps {\n artifactName?: string | undefined;\n}\n\nexport function LoadingScreen({ artifactName }: LoadingScreenProps): ReactNode {\n return (\n <div className=\"flex min-h-screen flex-col items-center justify-center gap-4 bg-white\">\n <div className=\"relative flex h-20 w-20 items-center justify-center\">\n <div className=\"absolute inset-0 animate-spin rounded-full border-2 border-gray-200 border-t-gray-800\" />\n <img src={logoUrl} alt=\"Alistigo\" className=\"h-14 w-14 rounded-2xl\" />\n </div>\n {artifactName != null && <p className=\"text-sm text-gray-500\">{artifactName}</p>}\n </div>\n );\n}\n","import { type ReactNode, useEffect } from \"react\";\n\nexport interface ModalProps {\n title: string;\n onClose: () => void;\n children: ReactNode;\n footer?: ReactNode;\n}\n\nexport function Modal({ title, onClose, children, footer }: ModalProps): ReactNode {\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => document.removeEventListener(\"keydown\", handleKeyDown);\n }, [onClose]);\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\n <div className=\"absolute inset-0 bg-black/40\" onClick={onClose} aria-hidden=\"true\" />\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={title}\n className=\"relative w-96 max-w-[90vw] rounded-2xl bg-white shadow-2xl\"\n >\n <div className=\"flex items-center justify-between border-b border-gray-100 px-5 py-4\">\n <h2 className=\"font-semibold text-gray-900 text-sm\">{title}</h2>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"flex h-6 w-6 items-center justify-center rounded-md text-gray-400 hover:bg-gray-100 hover:text-gray-700\"\n >\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M11 3L3 11M3 3l8 8\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n />\n </svg>\n </button>\n </div>\n <div className=\"p-5\">{children}</div>\n {footer != null && (\n <div className=\"flex justify-end gap-2 border-t border-gray-100 px-5 py-3\">{footer}</div>\n )}\n </div>\n </div>\n );\n}\n"],"names":["logoUrl","ArtifactContextMenuContainer","icon","children","statusBadge","open","setOpen","useState","handleToggle","v","useEffect","onKeyDown","e","jsxs","Fragment","jsx","PluginList","plugins","plugin","StatusDot","status","ArtifactInfoPanel","artifactName","artifactVersion","AsyncProgressContext","createContext","AsyncProgressProvider","count","setCount","startOp","useCallback","c","useAsyncProgress","ctx","useContext","AsyncProgressBar","pending","ErrorScreen","error","onReset","LoadingScreen","Modal","title","onClose","footer","handleKeyDown"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alistigo/artifact-core-components-react",
3
- "version": "0.3.6",
3
+ "version": "0.4.1",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "description": "Platform-level React UI components shared by all Alistigo artifacts — LoadingScreen, ErrorScreen, ArtifactContextMenuContainer, ArtifactInfoPanel. Built on Tailwind v4.",