@mano8/astro-prompt-m8 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +116 -0
  3. package/dist/src/integration.d.ts +42 -0
  4. package/dist/src/integration.d.ts.map +1 -0
  5. package/dist/src/integration.js +86 -0
  6. package/dist/src/integration.js.map +1 -0
  7. package/dist/src/lib/csp.d.ts +25 -0
  8. package/dist/src/lib/csp.d.ts.map +1 -0
  9. package/dist/src/lib/csp.js +53 -0
  10. package/dist/src/lib/csp.js.map +1 -0
  11. package/dist/src/middleware.d.ts +4 -0
  12. package/dist/src/middleware.d.ts.map +1 -0
  13. package/dist/src/middleware.js +24 -0
  14. package/dist/src/middleware.js.map +1 -0
  15. package/dist/src/runtime/api/admin.d.ts +15 -0
  16. package/dist/src/runtime/api/admin.d.ts.map +1 -0
  17. package/dist/src/runtime/api/admin.js +39 -0
  18. package/dist/src/runtime/api/admin.js.map +1 -0
  19. package/dist/src/runtime/api/blocks.d.ts +24 -0
  20. package/dist/src/runtime/api/blocks.d.ts.map +1 -0
  21. package/dist/src/runtime/api/blocks.js +74 -0
  22. package/dist/src/runtime/api/blocks.js.map +1 -0
  23. package/dist/src/runtime/api/categories.d.ts +7 -0
  24. package/dist/src/runtime/api/categories.d.ts.map +1 -0
  25. package/dist/src/runtime/api/categories.js +49 -0
  26. package/dist/src/runtime/api/categories.js.map +1 -0
  27. package/dist/src/runtime/api/dashboard.d.ts +6 -0
  28. package/dist/src/runtime/api/dashboard.d.ts.map +1 -0
  29. package/dist/src/runtime/api/dashboard.js +21 -0
  30. package/dist/src/runtime/api/dashboard.js.map +1 -0
  31. package/dist/src/runtime/api/index.d.ts +46 -0
  32. package/dist/src/runtime/api/index.d.ts.map +1 -0
  33. package/dist/src/runtime/api/index.js +48 -0
  34. package/dist/src/runtime/api/index.js.map +1 -0
  35. package/dist/src/runtime/api/internal.server.d.ts +18 -0
  36. package/dist/src/runtime/api/internal.server.d.ts.map +1 -0
  37. package/dist/src/runtime/api/internal.server.js +43 -0
  38. package/dist/src/runtime/api/internal.server.js.map +1 -0
  39. package/dist/src/runtime/api/templates.d.ts +14 -0
  40. package/dist/src/runtime/api/templates.d.ts.map +1 -0
  41. package/dist/src/runtime/api/templates.js +108 -0
  42. package/dist/src/runtime/api/templates.js.map +1 -0
  43. package/dist/src/runtime/authAdapter.d.ts +48 -0
  44. package/dist/src/runtime/authAdapter.d.ts.map +1 -0
  45. package/dist/src/runtime/authAdapter.js +62 -0
  46. package/dist/src/runtime/authAdapter.js.map +1 -0
  47. package/dist/src/runtime/client.d.ts +24 -0
  48. package/dist/src/runtime/client.d.ts.map +1 -0
  49. package/dist/src/runtime/client.js +85 -0
  50. package/dist/src/runtime/client.js.map +1 -0
  51. package/dist/src/runtime/compatibility.d.ts +32 -0
  52. package/dist/src/runtime/compatibility.d.ts.map +1 -0
  53. package/dist/src/runtime/compatibility.js +97 -0
  54. package/dist/src/runtime/compatibility.js.map +1 -0
  55. package/dist/src/runtime/config.d.ts +16 -0
  56. package/dist/src/runtime/config.d.ts.map +1 -0
  57. package/dist/src/runtime/config.js +22 -0
  58. package/dist/src/runtime/config.js.map +1 -0
  59. package/dist/src/runtime/errors.d.ts +23 -0
  60. package/dist/src/runtime/errors.d.ts.map +1 -0
  61. package/dist/src/runtime/errors.js +50 -0
  62. package/dist/src/runtime/errors.js.map +1 -0
  63. package/dist/src/runtime/hooks/index.d.ts +9 -0
  64. package/dist/src/runtime/hooks/index.d.ts.map +1 -0
  65. package/dist/src/runtime/hooks/index.js +9 -0
  66. package/dist/src/runtime/hooks/index.js.map +1 -0
  67. package/dist/src/runtime/hooks/useComposePrompt.d.ts +13 -0
  68. package/dist/src/runtime/hooks/useComposePrompt.d.ts.map +1 -0
  69. package/dist/src/runtime/hooks/useComposePrompt.js +17 -0
  70. package/dist/src/runtime/hooks/useComposePrompt.js.map +1 -0
  71. package/dist/src/runtime/hooks/usePromptAdmin.d.ts +10 -0
  72. package/dist/src/runtime/hooks/usePromptAdmin.d.ts.map +1 -0
  73. package/dist/src/runtime/hooks/usePromptAdmin.js +33 -0
  74. package/dist/src/runtime/hooks/usePromptAdmin.js.map +1 -0
  75. package/dist/src/runtime/hooks/usePromptBlock.d.ts +18 -0
  76. package/dist/src/runtime/hooks/usePromptBlock.d.ts.map +1 -0
  77. package/dist/src/runtime/hooks/usePromptBlock.js +25 -0
  78. package/dist/src/runtime/hooks/usePromptBlock.js.map +1 -0
  79. package/dist/src/runtime/hooks/usePromptBlocks.d.ts +22 -0
  80. package/dist/src/runtime/hooks/usePromptBlocks.d.ts.map +1 -0
  81. package/dist/src/runtime/hooks/usePromptBlocks.js +53 -0
  82. package/dist/src/runtime/hooks/usePromptBlocks.js.map +1 -0
  83. package/dist/src/runtime/hooks/usePromptCategories.d.ts +20 -0
  84. package/dist/src/runtime/hooks/usePromptCategories.d.ts.map +1 -0
  85. package/dist/src/runtime/hooks/usePromptCategories.js +53 -0
  86. package/dist/src/runtime/hooks/usePromptCategories.js.map +1 -0
  87. package/dist/src/runtime/hooks/usePromptDashboard.d.ts +13 -0
  88. package/dist/src/runtime/hooks/usePromptDashboard.d.ts.map +1 -0
  89. package/dist/src/runtime/hooks/usePromptDashboard.js +11 -0
  90. package/dist/src/runtime/hooks/usePromptDashboard.js.map +1 -0
  91. package/dist/src/runtime/hooks/usePromptTemplate.d.ts +33 -0
  92. package/dist/src/runtime/hooks/usePromptTemplate.d.ts.map +1 -0
  93. package/dist/src/runtime/hooks/usePromptTemplate.js +43 -0
  94. package/dist/src/runtime/hooks/usePromptTemplate.js.map +1 -0
  95. package/dist/src/runtime/hooks/usePromptTemplates.d.ts +37 -0
  96. package/dist/src/runtime/hooks/usePromptTemplates.d.ts.map +1 -0
  97. package/dist/src/runtime/hooks/usePromptTemplates.js +106 -0
  98. package/dist/src/runtime/hooks/usePromptTemplates.js.map +1 -0
  99. package/dist/src/runtime/listParams.d.ts +27 -0
  100. package/dist/src/runtime/listParams.d.ts.map +1 -0
  101. package/dist/src/runtime/listParams.js +67 -0
  102. package/dist/src/runtime/listParams.js.map +1 -0
  103. package/dist/src/runtime/queryKeys.d.ts +25 -0
  104. package/dist/src/runtime/queryKeys.d.ts.map +1 -0
  105. package/dist/src/runtime/queryKeys.js +29 -0
  106. package/dist/src/runtime/queryKeys.js.map +1 -0
  107. package/dist/src/runtime/react/AdminPromptPanel.d.ts +21 -0
  108. package/dist/src/runtime/react/AdminPromptPanel.d.ts.map +1 -0
  109. package/dist/src/runtime/react/AdminPromptPanel.js +53 -0
  110. package/dist/src/runtime/react/AdminPromptPanel.js.map +1 -0
  111. package/dist/src/runtime/react/PromptBlockLibrary.d.ts +36 -0
  112. package/dist/src/runtime/react/PromptBlockLibrary.d.ts.map +1 -0
  113. package/dist/src/runtime/react/PromptBlockLibrary.js +122 -0
  114. package/dist/src/runtime/react/PromptBlockLibrary.js.map +1 -0
  115. package/dist/src/runtime/react/PromptComposer.d.ts +24 -0
  116. package/dist/src/runtime/react/PromptComposer.d.ts.map +1 -0
  117. package/dist/src/runtime/react/PromptComposer.js +48 -0
  118. package/dist/src/runtime/react/PromptComposer.js.map +1 -0
  119. package/dist/src/runtime/react/PromptProvider.d.ts +16 -0
  120. package/dist/src/runtime/react/PromptProvider.d.ts.map +1 -0
  121. package/dist/src/runtime/react/PromptProvider.js +79 -0
  122. package/dist/src/runtime/react/PromptProvider.js.map +1 -0
  123. package/dist/src/runtime/react/PromptQueryProvider.d.ts +8 -0
  124. package/dist/src/runtime/react/PromptQueryProvider.d.ts.map +1 -0
  125. package/dist/src/runtime/react/PromptQueryProvider.js +11 -0
  126. package/dist/src/runtime/react/PromptQueryProvider.js.map +1 -0
  127. package/dist/src/runtime/react/PromptTemplateEditor.d.ts +36 -0
  128. package/dist/src/runtime/react/PromptTemplateEditor.d.ts.map +1 -0
  129. package/dist/src/runtime/react/PromptTemplateEditor.js +141 -0
  130. package/dist/src/runtime/react/PromptTemplateEditor.js.map +1 -0
  131. package/dist/src/runtime/react/RequireSuperuser.d.ts +7 -0
  132. package/dist/src/runtime/react/RequireSuperuser.d.ts.map +1 -0
  133. package/dist/src/runtime/react/RequireSuperuser.js +10 -0
  134. package/dist/src/runtime/react/RequireSuperuser.js.map +1 -0
  135. package/dist/src/runtime/react/default-ui/index.d.ts +17 -0
  136. package/dist/src/runtime/react/default-ui/index.d.ts.map +1 -0
  137. package/dist/src/runtime/react/default-ui/index.js +23 -0
  138. package/dist/src/runtime/react/default-ui/index.js.map +1 -0
  139. package/dist/src/runtime/react/index.d.ts +8 -0
  140. package/dist/src/runtime/react/index.d.ts.map +1 -0
  141. package/dist/src/runtime/react/index.js +8 -0
  142. package/dist/src/runtime/react/index.js.map +1 -0
  143. package/dist/src/runtime/routes.d.ts +17 -0
  144. package/dist/src/runtime/routes.d.ts.map +1 -0
  145. package/dist/src/runtime/routes.js +33 -0
  146. package/dist/src/runtime/routes.js.map +1 -0
  147. package/dist/src/runtime/schemas.d.ts +286 -0
  148. package/dist/src/runtime/schemas.d.ts.map +1 -0
  149. package/dist/src/runtime/schemas.js +172 -0
  150. package/dist/src/runtime/schemas.js.map +1 -0
  151. package/package.json +99 -0
  152. package/registry/r/admin-prompt-dashboard.json +23 -0
  153. package/registry/r/prompt-block-editor.json +20 -0
  154. package/registry/r/prompt-dashboard-overview.json +22 -0
  155. package/registry/r/prompt-maintenance-panel.json +23 -0
  156. package/registry/r/prompt-template-editor.json +20 -0
  157. package/registry/r/registry.json +37 -0
  158. package/registry.json +86 -0
  159. package/src/routes/admin/prompts.astro +11 -0
  160. package/src/routes/blocks.astro +11 -0
  161. package/src/routes/composer.astro +12 -0
  162. package/src/routes/templates.astro +11 -0
  163. package/src/scaffold/styles/prompt.css +9 -0
@@ -0,0 +1,29 @@
1
+ const EMPTY_PARAMS = Object.freeze({});
2
+ function normalizeParams(params = {}) {
3
+ const entries = Object.entries(params)
4
+ .filter((entry) => entry[1] !== undefined)
5
+ .sort(([left], [right]) => left.localeCompare(right));
6
+ return entries.length
7
+ ? Object.freeze(Object.fromEntries(entries))
8
+ : EMPTY_PARAMS;
9
+ }
10
+ export const promptKeys = {
11
+ all: () => ["prompt"],
12
+ blockLists: () => ["prompt", "blocks"],
13
+ blocks: (params = {}) => ["prompt", "blocks", normalizeParams(params)],
14
+ block: (blockId) => ["prompt", "block", blockId],
15
+ blockSlug: (slug) => ["prompt", "block-slug", slug],
16
+ templateLists: () => ["prompt", "templates"],
17
+ templates: (params = {}) => ["prompt", "templates", normalizeParams(params)],
18
+ template: (templateId) => ["prompt", "template", templateId],
19
+ templateSlug: (slug) => ["prompt", "template-slug", slug],
20
+ templateBlocks: (templateId) => ["prompt", "template-blocks", templateId],
21
+ compose: (templateId) => ["prompt", "compose", templateId],
22
+ categoryLists: () => ["prompt", "categories"],
23
+ categories: (params = {}) => ["prompt", "categories", normalizeParams(params)],
24
+ category: (categoryId) => ["prompt", "category", categoryId],
25
+ adminOverview: () => ["prompt", "admin", "overview"],
26
+ dashboardActivity: () => ["prompt", "dashboard", "activity"],
27
+ dashboardActivityCurrent: () => ["prompt", "dashboard", "activity-current"]
28
+ };
29
+ //# sourceMappingURL=queryKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryKeys.js","sourceRoot":"","sources":["../../../src/runtime/queryKeys.ts"],"names":[],"mappings":"AAIA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAoC,CAAC;AAE1E,SAAS,eAAe,CACtB,SAAkB,EAAa;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,MAAM,CACL,CAAC,KAAK,EAAiF,EAAE,CACvF,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,CACzB;SACA,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAExD,OAAO,OAAO,CAAC,MAAM;QACnB,CAAC,CAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAA2C;QACvF,CAAC,CAAE,YAA2C,CAAC;AACnD,CAAC;AAMD,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAU;IAC9B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAU;IAC/C,MAAM,EAAE,CAAC,SAA0B,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAU;IAChG,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAU;IACjE,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,CAAU;IACpE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAU;IACrD,SAAS,EAAE,CAAC,SAA6B,EAAE,EAAE,EAAE,CAC7C,CAAC,QAAQ,EAAE,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,CAAU;IAC3D,QAAQ,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU;IAC7E,YAAY,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,CAAU;IAC1E,cAAc,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,CAAU;IAC1F,OAAO,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU;IAC3E,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,CAAU;IACtD,UAAU,EAAE,CAAC,SAAuB,EAAE,EAAE,EAAE,CACxC,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,CAAU;IAC5D,QAAQ,EAAE,CAAC,UAAkB,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU;IAC7E,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAU;IAC7D,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAU;IACrE,wBAAwB,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,kBAAkB,CAAU;CACrF,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as React from "react";
2
+ export interface AdminPromptDashboardLabels {
3
+ title: string;
4
+ subtitle: string;
5
+ forbidden: string;
6
+ blocks: string;
7
+ templates: string;
8
+ categories: string;
9
+ users: string;
10
+ loading: string;
11
+ error: string;
12
+ emptyActivity: string;
13
+ noCategories: string;
14
+ activityFor: string;
15
+ overviewTitle: string;
16
+ }
17
+ export interface AdminPromptPanelProps {
18
+ labels?: Partial<AdminPromptDashboardLabels>;
19
+ }
20
+ export declare function AdminPromptPanel({ labels }: AdminPromptPanelProps): React.JSX.Element;
21
+ //# sourceMappingURL=AdminPromptPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminPromptPanel.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/AdminPromptPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAkBD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC9C;AAWD,wBAAgB,gBAAgB,CAAC,EAAE,MAAM,EAAE,EAAE,qBAAqB,qBAgFjE"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { usePromptAdmin } from "../hooks/usePromptAdmin.js";
4
+ const DEFAULT_LABELS = {
5
+ title: "Prompt admin",
6
+ subtitle: "Prompt-engine overview at a glance.",
7
+ forbidden: "You need administrator access to view this page.",
8
+ blocks: "Blocks",
9
+ templates: "Templates",
10
+ categories: "Categories",
11
+ users: "Active users",
12
+ loading: "Loading…",
13
+ error: "Could not load admin data.",
14
+ emptyActivity: "No recent activity.",
15
+ noCategories: "No categories yet.",
16
+ activityFor: "Model",
17
+ overviewTitle: "Overview"
18
+ };
19
+ function StatCard({ label, value }) {
20
+ return (_jsxs("div", { className: "rounded-md border bg-card p-4", children: [_jsx("p", { className: "text-sm font-medium text-muted-foreground", children: label }), _jsx("p", { className: "mt-1 text-2xl font-semibold tabular-nums", children: value })] }));
21
+ }
22
+ export function AdminPromptPanel({ labels }) {
23
+ const t = { ...DEFAULT_LABELS, ...labels };
24
+ const { allowed, overview, loading, error, load } = usePromptAdmin();
25
+ const [ready, setReady] = React.useState(false);
26
+ React.useEffect(() => {
27
+ if (!allowed) {
28
+ setReady(true);
29
+ return undefined;
30
+ }
31
+ let cancelled = false;
32
+ void load()
33
+ .catch(() => undefined)
34
+ .finally(() => {
35
+ if (!cancelled)
36
+ setReady(true);
37
+ });
38
+ return () => {
39
+ cancelled = true;
40
+ };
41
+ }, [allowed, load]);
42
+ if (!allowed) {
43
+ return (_jsx("section", { className: "not-content mx-auto w-full max-w-md py-10 text-center text-sm text-muted-foreground", children: t.forbidden }));
44
+ }
45
+ if (!ready && loading) {
46
+ return (_jsx("section", { className: "not-content space-y-6", "aria-busy": "true", children: _jsx("p", { className: "text-sm", children: t.loading }) }));
47
+ }
48
+ if (error && !overview) {
49
+ return (_jsx("section", { className: "not-content", children: _jsx("p", { role: "alert", className: "rounded-md border border-destructive/50 p-4 text-sm text-destructive", children: t.error }) }));
50
+ }
51
+ return (_jsxs("section", { className: "not-content space-y-6", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h2", { className: "text-xl font-semibold tracking-tight", children: t.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: t.subtitle })] }), _jsxs("div", { className: "grid auto-rows-fr gap-4 sm:grid-cols-2 lg:grid-cols-4", children: [_jsx(StatCard, { label: t.blocks, value: overview?.blocks.count ?? 0 }), _jsx(StatCard, { label: t.templates, value: overview?.templates.count ?? 0 }), _jsx(StatCard, { label: t.categories, value: overview?.categories?.count ?? 0 }), _jsx(StatCard, { label: t.users, value: overview?.activity.nb_users ?? 0 })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("h3", { className: "text-base font-semibold", children: t.overviewTitle }), _jsx("ul", { className: "space-y-1 rounded-md border p-4 text-sm", children: (overview?.activity.activity.activity ?? []).length === 0 ? (_jsx("li", { className: "text-muted-foreground", children: t.emptyActivity })) : ((overview?.activity.activity.activity ?? []).map((counter) => (_jsxs("li", { className: "flex justify-between", children: [_jsx("span", { children: counter.model }), _jsxs("span", { className: "tabular-nums", children: ["+", counter.added, " \u00B7 \u21BB", counter.updated] })] }, counter.model)))) })] })] }));
52
+ }
53
+ //# sourceMappingURL=AdminPromptPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AdminPromptPanel.js","sourceRoot":"","sources":["../../../../src/runtime/react/AdminPromptPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import * as React from "react";
2
+ export interface PromptBlockLibraryLabels {
3
+ title: string;
4
+ subtitle: string;
5
+ empty: string;
6
+ error: string;
7
+ loading: string;
8
+ create: string;
9
+ name: string;
10
+ type: string;
11
+ content: string;
12
+ actions: string;
13
+ edit: string;
14
+ deleteLabel: string;
15
+ save: string;
16
+ cancel: string;
17
+ confirmDelete: string;
18
+ dynamicYes: string;
19
+ dynamicNo: string;
20
+ publicYes: string;
21
+ publicNo: string;
22
+ dynamicLabel: string;
23
+ publicLabel: string;
24
+ description: string;
25
+ blockTypeRole: string;
26
+ blockTypeTask: string;
27
+ blockTypeContext: string;
28
+ blockTypeInstruction: string;
29
+ blockTypeExample: string;
30
+ blockTypeFormat: string;
31
+ }
32
+ export interface PromptBlockLibraryProps {
33
+ labels?: Partial<PromptBlockLibraryLabels>;
34
+ }
35
+ export declare function PromptBlockLibrary({ labels }: PromptBlockLibraryProps): React.JSX.Element;
36
+ //# sourceMappingURL=PromptBlockLibrary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptBlockLibrary.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/PromptBlockLibrary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AA4CD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;CAC5C;AAsCD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,qBA+MrE"}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { usePromptBlocks } from "../hooks/usePromptBlocks.js";
4
+ const DEFAULT_LABELS = {
5
+ title: "Prompt blocks",
6
+ subtitle: "Reusable building blocks for prompt templates.",
7
+ empty: "No prompt blocks yet.",
8
+ error: "Could not load prompt blocks.",
9
+ loading: "Loading…",
10
+ create: "New block",
11
+ name: "Name",
12
+ type: "Type",
13
+ content: "Content",
14
+ actions: "Actions",
15
+ edit: "Edit",
16
+ deleteLabel: "Delete",
17
+ save: "Save",
18
+ cancel: "Cancel",
19
+ confirmDelete: "Delete this block?",
20
+ dynamicYes: "Dynamic",
21
+ dynamicNo: "Static",
22
+ publicYes: "Public",
23
+ publicNo: "Private",
24
+ dynamicLabel: "Dynamic",
25
+ publicLabel: "Public",
26
+ description: "Description",
27
+ blockTypeRole: "Role",
28
+ blockTypeTask: "Task",
29
+ blockTypeContext: "Context",
30
+ blockTypeInstruction: "Instruction",
31
+ blockTypeExample: "Example",
32
+ blockTypeFormat: "Format"
33
+ };
34
+ const TYPES = [
35
+ "role",
36
+ "task",
37
+ "context",
38
+ "instruction",
39
+ "example",
40
+ "format"
41
+ ];
42
+ function typeLabel(t, type) {
43
+ switch (type) {
44
+ case "role":
45
+ return t.blockTypeRole;
46
+ case "task":
47
+ return t.blockTypeTask;
48
+ case "context":
49
+ return t.blockTypeContext;
50
+ case "instruction":
51
+ return t.blockTypeInstruction;
52
+ case "example":
53
+ return t.blockTypeExample;
54
+ case "format":
55
+ return t.blockTypeFormat;
56
+ }
57
+ }
58
+ const EMPTY_DRAFT = {
59
+ name: "",
60
+ description: "",
61
+ content: "",
62
+ type: "role",
63
+ is_dynamic: false,
64
+ is_public: false
65
+ };
66
+ export function PromptBlockLibrary({ labels }) {
67
+ const t = { ...DEFAULT_LABELS, ...labels };
68
+ const { data, loading, error, createMutation, updateMutation, deleteMutation, refresh } = usePromptBlocks();
69
+ const [draft, setDraft] = React.useState(null);
70
+ const [editingId, setEditingId] = React.useState(null);
71
+ React.useEffect(() => {
72
+ void refresh();
73
+ }, [refresh]);
74
+ const startEdit = (block) => {
75
+ setEditingId(block.id);
76
+ setDraft({
77
+ id: block.id,
78
+ name: block.name,
79
+ description: block.description ?? "",
80
+ content: block.content,
81
+ type: block.type,
82
+ is_dynamic: block.is_dynamic,
83
+ is_public: block.is_public
84
+ });
85
+ };
86
+ const saveDraft = async () => {
87
+ if (!draft)
88
+ return;
89
+ const body = {
90
+ name: draft.name,
91
+ description: draft.description || null,
92
+ content: draft.content,
93
+ type: draft.type,
94
+ is_dynamic: draft.is_dynamic,
95
+ is_public: draft.is_public
96
+ };
97
+ if (draft.id !== undefined) {
98
+ await updateMutation.mutateAsync({ blockId: draft.id, body });
99
+ }
100
+ else {
101
+ await createMutation.mutateAsync(body);
102
+ }
103
+ setDraft(null);
104
+ setEditingId(null);
105
+ };
106
+ const removeBlock = async (id) => {
107
+ if (!window.confirm(t.confirmDelete))
108
+ return;
109
+ await deleteMutation.mutateAsync(id);
110
+ };
111
+ return (_jsxs("section", { className: "not-content space-y-6", children: [_jsxs("div", { className: "flex flex-wrap items-end justify-between gap-2", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h2", { className: "text-xl font-semibold tracking-tight", children: t.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: t.subtitle })] }), _jsx("button", { type: "button", className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground", onClick: () => {
112
+ setEditingId(null);
113
+ setDraft({ ...EMPTY_DRAFT });
114
+ }, children: t.create })] }), loading && !data ? _jsx("p", { className: "text-sm", children: t.loading }) : null, error && !data ? (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: t.error })) : null, draft ? (_jsxs("form", { className: "space-y-3 rounded-md border bg-card p-4", onSubmit: (e) => {
115
+ e.preventDefault();
116
+ void saveDraft();
117
+ }, children: [_jsxs("label", { className: "block space-y-1 text-sm", children: [_jsx("span", { className: "font-medium", children: t.name }), _jsx("input", { className: "w-full rounded-md border bg-background px-3 py-2", value: draft.name, onChange: (e) => setDraft({ ...draft, name: e.target.value }), required: true })] }), _jsxs("label", { className: "block space-y-1 text-sm", children: [_jsx("span", { className: "font-medium", children: t.description }), _jsx("input", { className: "w-full rounded-md border bg-background px-3 py-2", value: draft.description, onChange: (e) => setDraft({ ...draft, description: e.target.value }) })] }), _jsxs("label", { className: "block space-y-1 text-sm", children: [_jsx("span", { className: "font-medium", children: t.content }), _jsx("textarea", { className: "w-full rounded-md border bg-background px-3 py-2", rows: 4, value: draft.content, onChange: (e) => setDraft({ ...draft, content: e.target.value }), required: true })] }), _jsxs("div", { className: "flex flex-wrap gap-4", children: [_jsxs("label", { className: "block space-y-1 text-sm", children: [_jsx("span", { className: "font-medium", children: t.type }), _jsx("select", { className: "rounded-md border bg-background px-3 py-2", value: draft.type, onChange: (e) => setDraft({ ...draft, type: e.target.value }), children: TYPES.map((type) => (_jsx("option", { value: type, children: typeLabel(t, type) }, type))) })] }), _jsxs("label", { className: "flex items-center gap-2 self-end pb-1 text-sm", children: [_jsx("input", { type: "checkbox", checked: draft.is_dynamic, onChange: (e) => setDraft({ ...draft, is_dynamic: e.target.checked }) }), _jsx("span", { className: "font-medium", children: t.dynamicLabel })] }), _jsxs("label", { className: "flex items-center gap-2 self-end pb-1 text-sm", children: [_jsx("input", { type: "checkbox", checked: draft.is_public, onChange: (e) => setDraft({ ...draft, is_public: e.target.checked }) }), _jsx("span", { className: "font-medium", children: t.publicLabel })] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { type: "submit", className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50", disabled: createMutation.isPending || updateMutation.isPending, children: t.save }), _jsx("button", { type: "button", className: "rounded-md border px-4 py-2 text-sm font-medium", onClick: () => {
118
+ setDraft(null);
119
+ setEditingId(null);
120
+ }, children: t.cancel })] })] })) : null, _jsxs("ul", { className: "divide-y rounded-md border", children: [(data?.data ?? []).map((block) => (_jsxs("li", { className: "flex flex-col gap-2 p-4", children: [_jsxs("div", { className: "flex flex-wrap items-baseline justify-between gap-2", children: [_jsxs("div", { className: "space-y-0.5", children: [_jsx("h3", { className: "text-sm font-semibold", children: block.name }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [typeLabel(t, block.type), " \u00B7", " ", block.is_dynamic ? t.dynamicYes : t.dynamicNo, " \u00B7", " ", block.is_public ? t.publicYes : t.publicNo] })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { type: "button", className: "rounded-md border px-3 py-1 text-xs font-medium", disabled: editingId === block.id, onClick: () => startEdit(block), children: t.edit }), _jsx("button", { type: "button", className: "rounded-md border px-3 py-1 text-xs font-medium text-destructive", disabled: deleteMutation.isPending, onClick: () => void removeBlock(block.id), children: t.deleteLabel })] })] }), _jsx("pre", { className: "whitespace-pre-wrap text-xs text-muted-foreground", children: block.content })] }, block.id))), (data?.data ?? []).length === 0 && !loading && !error ? (_jsx("li", { className: "p-6 text-center text-sm text-muted-foreground", children: t.empty })) : null] })] }));
121
+ }
122
+ //# sourceMappingURL=PromptBlockLibrary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptBlockLibrary.js","sourceRoot":"","sources":["../../../../src/runtime/react/PromptBlockLibrary.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ import type { PromptBlockPublic, PromptTemplatePublic, TemplateBlockPublic } from "../schemas.js";
3
+ export interface PromptComposerLabels {
4
+ title: string;
5
+ subtitle: string;
6
+ pickTemplate: string;
7
+ noTemplate: string;
8
+ composed: string;
9
+ compose: string;
10
+ composing: string;
11
+ composingError: string;
12
+ dynamicFor: string;
13
+ dynamicPlaceholder: string;
14
+ empty: string;
15
+ error: string;
16
+ noBlocks: string;
17
+ }
18
+ export interface PromptComposerProps {
19
+ templateId?: number;
20
+ labels?: Partial<PromptComposerLabels>;
21
+ }
22
+ export declare function PromptComposer({ templateId: initialTemplateId, labels }: PromptComposerProps): React.JSX.Element;
23
+ export type { PromptBlockPublic, PromptTemplatePublic, TemplateBlockPublic };
24
+ //# sourceMappingURL=PromptComposer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptComposer.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/PromptComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAkBD,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACxC;AAED,wBAAgB,cAAc,CAAC,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,EAAE,EAAE,mBAAmB,qBAmH5F;AAED,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { useComposePrompt } from "../hooks/useComposePrompt.js";
4
+ import { usePromptTemplate } from "../hooks/usePromptTemplate.js";
5
+ import { usePromptTemplateBlocks } from "../hooks/usePromptTemplate.js";
6
+ import { usePromptTemplates } from "../hooks/usePromptTemplates.js";
7
+ const DEFAULT_LABELS = {
8
+ title: "Compose prompt",
9
+ subtitle: "Render a template with dynamic block content.",
10
+ pickTemplate: "Template",
11
+ noTemplate: "Select a template to compose",
12
+ composed: "Composed prompt",
13
+ compose: "Compose",
14
+ composing: "Composing…",
15
+ composingError: "Could not compose prompt.",
16
+ dynamicFor: "Dynamic content for",
17
+ dynamicPlaceholder: "Enter dynamic content for this block…",
18
+ empty: "No dynamic blocks.",
19
+ error: "Could not load templates.",
20
+ noBlocks: "This template has no blocks yet."
21
+ };
22
+ export function PromptComposer({ templateId: initialTemplateId, labels }) {
23
+ const t = { ...DEFAULT_LABELS, ...labels };
24
+ const templates = usePromptTemplates();
25
+ const [selectedId, setSelectedId] = React.useState(initialTemplateId);
26
+ const template = usePromptTemplate({ templateId: selectedId });
27
+ const templateBlocks = usePromptTemplateBlocks(selectedId);
28
+ const { compose, composeMutation } = useComposePrompt();
29
+ const [dynamic, setDynamic] = React.useState({});
30
+ const selected = template.data ?? null;
31
+ const blocks = templateBlocks.blocks ?? [];
32
+ React.useEffect(() => {
33
+ if (selectedId !== undefined)
34
+ setDynamic({});
35
+ }, [selectedId]);
36
+ const dynamicBlocks = blocks.filter((b) => b.is_dynamic);
37
+ return (_jsxs("section", { className: "not-content space-y-6", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("h2", { className: "text-xl font-semibold tracking-tight", children: t.title }), _jsx("p", { className: "text-sm text-muted-foreground", children: t.subtitle })] }), _jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: "text-sm font-medium", htmlFor: "prompt-composer-template", children: t.pickTemplate }), _jsxs("select", { id: "prompt-composer-template", className: "w-full rounded-md border bg-background px-3 py-2 text-sm", value: selectedId ?? "", onChange: (e) => setSelectedId(Number(e.target.value) || undefined), children: [_jsx("option", { value: "", children: t.noTemplate }), (templates.data?.data ?? []).map((tpl) => (_jsx("option", { value: tpl.id, children: tpl.name }, tpl.id)))] }), templates.error && !templates.data ? (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: t.error })) : null] }), selected ? (_jsxs("div", { className: "space-y-4", children: [blocks.length === 0 ? (_jsx("p", { className: "rounded-md border border-dashed p-4 text-sm text-muted-foreground", children: t.noBlocks })) : dynamicBlocks.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t.empty })) : (dynamicBlocks.map((block) => (_jsxs("div", { className: "space-y-1", children: [_jsxs("label", { className: "text-sm font-medium", htmlFor: `prompt-dynamic-${block.id}`, children: [t.dynamicFor, ": ", block.name] }), _jsx("textarea", { id: `prompt-dynamic-${block.id}`, className: "w-full rounded-md border bg-background px-3 py-2 text-sm", rows: 3, placeholder: t.dynamicPlaceholder, value: dynamic[block.block_id] ?? "", onChange: (e) => setDynamic((current) => ({
38
+ ...current,
39
+ [block.block_id]: e.target.value
40
+ })) })] }, block.id)))), _jsx("button", { type: "button", className: "rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50", disabled: composeMutation.isPending || !selectedId, onClick: () => {
41
+ if (selectedId === undefined)
42
+ return;
43
+ void compose(selectedId, Object.entries(dynamic)
44
+ .filter(([, v]) => v.trim() !== "")
45
+ .map(([id, content]) => ({ id: Number(id), content })));
46
+ }, children: composeMutation.isPending ? t.composing : t.compose }), composeMutation.error ? (_jsx("p", { role: "alert", className: "text-sm text-destructive", children: t.composingError })) : null, composeMutation.data ? (_jsxs("div", { className: "space-y-1", children: [_jsx("h3", { className: "text-sm font-medium", children: t.composed }), _jsx("pre", { className: "whitespace-pre-wrap rounded-md border bg-muted/30 p-4 text-sm", children: composeMutation.data.content })] })) : null] })) : null] }));
47
+ }
48
+ //# sourceMappingURL=PromptComposer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptComposer.js","sourceRoot":"","sources":["../../../../src/runtime/react/PromptComposer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { type ReactNode } from "react";
2
+ import { type PromptRuntimeConfig } from "../config.js";
3
+ import { type PromptAuthAdapter } from "../authAdapter.js";
4
+ export type PromptContextValue = {
5
+ adapter: PromptAuthAdapter;
6
+ user: unknown;
7
+ isSuperuser: boolean;
8
+ loading: boolean;
9
+ };
10
+ export declare function PromptProvider({ children, config, adapter }: {
11
+ children: ReactNode;
12
+ config?: Partial<PromptRuntimeConfig>;
13
+ adapter?: PromptAuthAdapter;
14
+ }): import("react").JSX.Element;
15
+ export declare function usePromptContext(): PromptContextValue;
16
+ //# sourceMappingURL=PromptProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptProvider.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/PromptProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAmB,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAwB,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAwBF,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,MAAM,EACN,OAAO,EACR,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B,+BAsDA;AAED,wBAAgB,gBAAgB,IAAI,kBAAkB,CAIrD"}
@@ -0,0 +1,79 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useEffect, useMemo, useState } from "react";
3
+ import { configurePrompt } from "../config.js";
4
+ import { getPromptAuthAdapter } from "../authAdapter.js";
5
+ const PromptContext = createContext(null);
6
+ function isPromiseLike(value) {
7
+ return Boolean(value &&
8
+ (typeof value === "object" || typeof value === "function") &&
9
+ "then" in value &&
10
+ typeof value.then === "function");
11
+ }
12
+ function readAdapterUser(adapter) {
13
+ if (!adapter.getUser)
14
+ return { user: null, loading: false };
15
+ try {
16
+ const value = adapter.getUser();
17
+ if (isPromiseLike(value))
18
+ return { user: null, loading: true };
19
+ return { user: value, loading: false };
20
+ }
21
+ catch {
22
+ return { user: null, loading: false };
23
+ }
24
+ }
25
+ export function PromptProvider({ children, config, adapter }) {
26
+ const resolved = adapter ?? getPromptAuthAdapter();
27
+ const [authState, setAuthState] = useState(() => readAdapterUser(resolved));
28
+ useEffect(() => {
29
+ if (config)
30
+ configurePrompt(config);
31
+ }, [config]);
32
+ useEffect(() => {
33
+ if (!resolved.getUser) {
34
+ setAuthState({ user: null, loading: false });
35
+ return undefined;
36
+ }
37
+ let cancelled = false;
38
+ try {
39
+ const value = resolved.getUser();
40
+ if (!isPromiseLike(value)) {
41
+ setAuthState({ user: value, loading: false });
42
+ return undefined;
43
+ }
44
+ setAuthState((current) => ({ ...current, loading: true }));
45
+ Promise.resolve(value)
46
+ .then((nextUser) => {
47
+ if (!cancelled)
48
+ setAuthState({ user: nextUser, loading: false });
49
+ })
50
+ .catch(() => {
51
+ if (!cancelled)
52
+ setAuthState({ user: null, loading: false });
53
+ });
54
+ }
55
+ catch {
56
+ setAuthState({ user: null, loading: false });
57
+ }
58
+ return () => {
59
+ cancelled = true;
60
+ };
61
+ }, [resolved]);
62
+ const currentUserState = readAdapterUser(resolved);
63
+ const user = currentUserState.loading ? authState.user : currentUserState.user;
64
+ const loading = currentUserState.loading ? authState.loading : false;
65
+ const value = useMemo(() => ({
66
+ adapter: resolved,
67
+ user,
68
+ isSuperuser: Boolean(resolved.isSuperuser?.(user)),
69
+ loading
70
+ }), [loading, resolved, user]);
71
+ return _jsx(PromptContext.Provider, { value: value, children: children });
72
+ }
73
+ export function usePromptContext() {
74
+ const context = useContext(PromptContext);
75
+ if (!context)
76
+ throw new Error("usePromptContext must be used inside PromptProvider");
77
+ return context;
78
+ }
79
+ //# sourceMappingURL=PromptProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptProvider.js","sourceRoot":"","sources":["../../../../src/runtime/react/PromptProvider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { QueryClient } from "@tanstack/react-query";
2
+ import { type ReactNode } from "react";
3
+ export type PromptQueryProviderProps = {
4
+ children: ReactNode;
5
+ client?: QueryClient;
6
+ };
7
+ export declare function PromptQueryProvider({ children, client }: PromptQueryProviderProps): import("react").JSX.Element;
8
+ //# sourceMappingURL=PromptQueryProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptQueryProvider.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/PromptQueryProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA2C,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE7D,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,wBAAwB,+BAOjF"}
@@ -0,0 +1,11 @@
1
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
2
+ import { QueryClient, QueryClientContext, QueryClientProvider } from "@tanstack/react-query";
3
+ import { useContext, useState } from "react";
4
+ export function PromptQueryProvider({ children, client }) {
5
+ const parentClient = useContext(QueryClientContext);
6
+ const [ownedClient] = useState(() => client ?? new QueryClient());
7
+ if (parentClient)
8
+ return _jsx(_Fragment, { children: children });
9
+ return _jsx(QueryClientProvider, { client: ownedClient, children: children });
10
+ }
11
+ //# sourceMappingURL=PromptQueryProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptQueryProvider.js","sourceRoot":"","sources":["../../../../src/runtime/react/PromptQueryProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAO7D,MAAM,UAAU,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAA4B;IAChF,MAAM,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;IAElE,IAAI,YAAY;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IAEzC,OAAO,KAAC,mBAAmB,IAAC,MAAM,EAAE,WAAW,YAAG,QAAQ,GAAuB,CAAC;AACpF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import * as React from "react";
2
+ export interface PromptTemplateEditorLabels {
3
+ title: string;
4
+ subtitle: string;
5
+ create: string;
6
+ name: string;
7
+ description: string;
8
+ publicLabel: string;
9
+ save: string;
10
+ cancel: string;
11
+ loading: string;
12
+ empty: string;
13
+ error: string;
14
+ edit: string;
15
+ deleteLabel: string;
16
+ confirmDelete: string;
17
+ blocks: string;
18
+ addBlock: string;
19
+ noBlocksAvailable: string;
20
+ removeBlock: string;
21
+ moveUp: string;
22
+ moveDown: string;
23
+ compose: string;
24
+ composeLabel: string;
25
+ composed: string;
26
+ composing: string;
27
+ composingError: string;
28
+ dynamicFor: string;
29
+ dynamicPlaceholder: string;
30
+ noDynamic: string;
31
+ }
32
+ export interface PromptTemplateEditorProps {
33
+ labels?: Partial<PromptTemplateEditorLabels>;
34
+ }
35
+ export declare function PromptTemplateEditor({ labels }: PromptTemplateEditorProps): React.JSX.Element;
36
+ //# sourceMappingURL=PromptTemplateEditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptTemplateEditor.d.ts","sourceRoot":"","sources":["../../../../src/runtime/react/PromptTemplateEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AA0CD,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,CAAC;CAC9C;AAED,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE,yBAAyB,qBA0TzE"}