@artkit-ai/react 0.0.0-stage → 0.1.0

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 (118) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +145 -2
  3. package/dist/cache.d.ts +35 -0
  4. package/dist/cache.d.ts.map +1 -0
  5. package/dist/cache.js +116 -0
  6. package/dist/cache.js.map +1 -0
  7. package/dist/client.d.ts +79 -0
  8. package/dist/client.d.ts.map +1 -0
  9. package/dist/client.js +260 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/components/approval.d.ts +34 -0
  12. package/dist/components/approval.d.ts.map +1 -0
  13. package/dist/components/approval.js +80 -0
  14. package/dist/components/approval.js.map +1 -0
  15. package/dist/components/card.d.ts +22 -0
  16. package/dist/components/card.d.ts.map +1 -0
  17. package/dist/components/card.js +16 -0
  18. package/dist/components/card.js.map +1 -0
  19. package/dist/components/editor.d.ts +28 -0
  20. package/dist/components/editor.d.ts.map +1 -0
  21. package/dist/components/editor.js +161 -0
  22. package/dist/components/editor.js.map +1 -0
  23. package/dist/components/icons.d.ts +8 -0
  24. package/dist/components/icons.d.ts.map +1 -0
  25. package/dist/components/icons.js +14 -0
  26. package/dist/components/icons.js.map +1 -0
  27. package/dist/components/panel.d.ts +34 -0
  28. package/dist/components/panel.d.ts.map +1 -0
  29. package/dist/components/panel.js +216 -0
  30. package/dist/components/panel.js.map +1 -0
  31. package/dist/components/shared.d.ts +71 -0
  32. package/dist/components/shared.d.ts.map +1 -0
  33. package/dist/components/shared.js +104 -0
  34. package/dist/components/shared.js.map +1 -0
  35. package/dist/components/version-diff.d.ts +35 -0
  36. package/dist/components/version-diff.d.ts.map +1 -0
  37. package/dist/components/version-diff.js +85 -0
  38. package/dist/components/version-diff.js.map +1 -0
  39. package/dist/components/view.d.ts +40 -0
  40. package/dist/components/view.d.ts.map +1 -0
  41. package/dist/components/view.js +75 -0
  42. package/dist/components/view.js.map +1 -0
  43. package/dist/context.d.ts +59 -0
  44. package/dist/context.d.ts.map +1 -0
  45. package/dist/context.js +13 -0
  46. package/dist/context.js.map +1 -0
  47. package/dist/controls.d.ts +145 -0
  48. package/dist/controls.d.ts.map +1 -0
  49. package/dist/controls.js +188 -0
  50. package/dist/controls.js.map +1 -0
  51. package/dist/download.d.ts +4 -0
  52. package/dist/download.d.ts.map +1 -0
  53. package/dist/download.js +20 -0
  54. package/dist/download.js.map +1 -0
  55. package/dist/editor-session.d.ts +184 -0
  56. package/dist/editor-session.d.ts.map +1 -0
  57. package/dist/editor-session.js +614 -0
  58. package/dist/editor-session.js.map +1 -0
  59. package/dist/hooks.d.ts +85 -0
  60. package/dist/hooks.d.ts.map +1 -0
  61. package/dist/hooks.js +297 -0
  62. package/dist/hooks.js.map +1 -0
  63. package/dist/i18n.d.ts +197 -0
  64. package/dist/i18n.d.ts.map +1 -0
  65. package/dist/i18n.js +207 -0
  66. package/dist/i18n.js.map +1 -0
  67. package/dist/index.d.ts +22 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +22 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/kit-css.d.ts +3 -0
  72. package/dist/kit-css.d.ts.map +1 -0
  73. package/dist/kit-css.js +5 -0
  74. package/dist/kit-css.js.map +1 -0
  75. package/dist/line-diff.d.ts +25 -0
  76. package/dist/line-diff.d.ts.map +1 -0
  77. package/dist/line-diff.js +96 -0
  78. package/dist/line-diff.js.map +1 -0
  79. package/dist/partial-json.d.ts +8 -0
  80. package/dist/partial-json.d.ts.map +1 -0
  81. package/dist/partial-json.js +176 -0
  82. package/dist/partial-json.js.map +1 -0
  83. package/dist/provider.d.ts +42 -0
  84. package/dist/provider.d.ts.map +1 -0
  85. package/dist/provider.js +95 -0
  86. package/dist/provider.js.map +1 -0
  87. package/dist/styles.d.ts +25 -0
  88. package/dist/styles.d.ts.map +1 -0
  89. package/dist/styles.js +203 -0
  90. package/dist/styles.js.map +1 -0
  91. package/dist/toolbar.d.ts +90 -0
  92. package/dist/toolbar.d.ts.map +1 -0
  93. package/dist/toolbar.js +233 -0
  94. package/dist/toolbar.js.map +1 -0
  95. package/package.json +50 -3
  96. package/src/cache.ts +132 -0
  97. package/src/client.ts +390 -0
  98. package/src/components/approval.tsx +219 -0
  99. package/src/components/card.tsx +87 -0
  100. package/src/components/editor.tsx +392 -0
  101. package/src/components/icons.tsx +14 -0
  102. package/src/components/panel.tsx +591 -0
  103. package/src/components/shared.tsx +207 -0
  104. package/src/components/version-diff.tsx +266 -0
  105. package/src/components/view.tsx +199 -0
  106. package/src/context.ts +82 -0
  107. package/src/controls.tsx +587 -0
  108. package/src/download.ts +23 -0
  109. package/src/editor-session.ts +738 -0
  110. package/src/hooks.ts +411 -0
  111. package/src/i18n.ts +217 -0
  112. package/src/index.ts +160 -0
  113. package/src/kit-css.ts +5 -0
  114. package/src/line-diff.ts +111 -0
  115. package/src/partial-json.ts +160 -0
  116. package/src/provider.tsx +176 -0
  117. package/src/styles.ts +222 -0
  118. package/src/toolbar.tsx +536 -0
@@ -0,0 +1,161 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Redo2, RotateCcw, Undo2 } from 'lucide-react';
3
+ import { Suspense, use, useCallback, useEffect, useId, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
4
+ import { useArtkit } from '../context.js';
5
+ import { EditorSession } from '../editor-session.js';
6
+ import { useArtifact } from '../hooks.js';
7
+ import { hashString } from '../styles.js';
8
+ import { ChangeList, cx, ErrorBoundary, ErrorMessage, errorMessage, formatDate, Loading, rootAttributes, slot, useAnnouncer, } from './shared.js';
9
+ import { ArtifactView, KindRenderer, renderContext } from './view.js';
10
+ /**
11
+ * Kind editor host (spec §13.1, §13.6). Falls back to `ArtifactView` when the kind has no editor loader,
12
+ * when the permission is `read` or while another actor holds the lock. The editor module is only loaded
13
+ * here, when editing starts.
14
+ */
15
+ export function ArtifactEditor(props) {
16
+ const ctx = useArtkit();
17
+ const { t } = ctx;
18
+ const id = props.id ?? props.artifact?.id;
19
+ const query = useArtifact(id, props.artifact ? { initial: props.artifact } : {});
20
+ const artifact = query.artifact;
21
+ if (!artifact) {
22
+ return (_jsx("div", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx), children: query.error ? (_jsx(ErrorMessage, { error: query.error, onRetry: () => void query.refresh().catch(() => undefined) })) : (_jsx(Loading, {})) }));
23
+ }
24
+ const editable = (props.permission ?? 'edit') === 'edit' &&
25
+ ctx.hasEditor(artifact.kind) &&
26
+ ctx.registry.has(artifact.kind);
27
+ if (!editable || props.lockedBy) {
28
+ return (_jsxs("div", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx, artifact.themeId), "data-readonly": "true", children: [props.lockedBy ? (_jsx("p", { ...slot(props.slots, 'notice', 'ak-notice'), role: "status", children: t('lockedBy', { actor: t(`actor_${props.lockedBy.type}`) }) })) : null, _jsx(ArtifactView, { artifact: artifact, ...(props.lockedBy && props.partial !== undefined ? { partial: props.partial } : {}) })] }));
29
+ }
30
+ return _jsx(EditingHost, { ...props, artifact: artifact }, artifact.id);
31
+ }
32
+ function EditingHost(props) {
33
+ const ctx = useArtkit();
34
+ const { t, client, cache, registry } = ctx;
35
+ const callbacks = useRef(props);
36
+ callbacks.current = props;
37
+ const artifactId = props.artifact.id;
38
+ const [session] = useState(() => new EditorSession({
39
+ registry,
40
+ artifact: props.artifact,
41
+ locale: ctx.locale,
42
+ ...(props.groupingWindowMs === undefined ? {} : { groupingWindowMs: props.groupingWindowMs }),
43
+ send: (request) => client.apply(artifactId, request),
44
+ load: (version) => cache.load(artifactId, version, version === undefined),
45
+ onCommitted: (result) => {
46
+ cache.put(result.artifact);
47
+ callbacks.current.onCommitted?.(result);
48
+ },
49
+ }));
50
+ const state = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);
51
+ // Newer versions from the cache or props (agent commits, refetches) are rebased into the session.
52
+ useEffect(() => {
53
+ session.receive(props.artifact);
54
+ }, [session, props.artifact]);
55
+ useEffect(() => {
56
+ cache.put(state.confirmed);
57
+ }, [cache, state.confirmed]);
58
+ // Unmounting must not lose the last keystrokes still waiting in the grouping window.
59
+ useEffect(() => () => session.flush(), [session]);
60
+ const [live, announce] = useAnnouncer();
61
+ const lastSeq = useRef(0);
62
+ useEffect(() => {
63
+ const event = state.event;
64
+ if (!event || event.seq === lastSeq.current)
65
+ return;
66
+ lastSeq.current = event.seq;
67
+ switch (event.type) {
68
+ case 'saved':
69
+ announce(t('savedVersion', { version: event.version }));
70
+ break;
71
+ case 'undone':
72
+ announce(t('undone'));
73
+ break;
74
+ case 'redone':
75
+ announce(t('redone'));
76
+ break;
77
+ case 'rebased':
78
+ announce(t('agentUpdated', { version: event.version }));
79
+ break;
80
+ case 'rejected':
81
+ case 'rolled_back':
82
+ announce(t('rolledBack', { message: errorMessage(event.error, event.error.message) }));
83
+ callbacks.current.onError?.(event.error);
84
+ break;
85
+ case 'conflict':
86
+ announce(t('conflictTitle'));
87
+ break;
88
+ case 'conflict_resolved':
89
+ break;
90
+ }
91
+ }, [state.event, announce, t]);
92
+ const [, forceRender] = useState(0);
93
+ useEffect(() => {
94
+ if (!state.lockedUntil)
95
+ return;
96
+ const delay = Date.parse(state.lockedUntil) - Date.now();
97
+ if (delay <= 0)
98
+ return;
99
+ const timer = setTimeout(() => forceRender((n) => n + 1), delay + 10);
100
+ return () => clearTimeout(timer);
101
+ }, [state.lockedUntil]);
102
+ const locked = state.lockedUntil !== undefined && Date.parse(state.lockedUntil) > Date.now();
103
+ const readOnly = state.status === 'conflict' || locked;
104
+ const onKeyDown = useCallback((event) => {
105
+ if (event.defaultPrevented || !(event.ctrlKey || event.metaKey) || event.altKey)
106
+ return;
107
+ const key = event.key.toLowerCase();
108
+ if (key === 'z' && !event.shiftKey) {
109
+ event.preventDefault();
110
+ session.undo();
111
+ }
112
+ else if ((key === 'z' && event.shiftKey) || key === 'y') {
113
+ event.preventDefault();
114
+ session.redo();
115
+ }
116
+ }, [session]);
117
+ const onBlur = useCallback((event) => {
118
+ if (!event.currentTarget.contains(event.relatedTarget))
119
+ session.flush();
120
+ }, [session]);
121
+ const view = state.view;
122
+ const renderCtx = useMemo(() => renderContext(ctx, view.themeId, view.locale, 'screen', false), [ctx, view.themeId, view.locale]);
123
+ const lint = useMemo(() => {
124
+ try {
125
+ return registry
126
+ .get(props.artifact.kind)
127
+ .lint(view.content, { locale: view.locale, theme: ctx.themeFor(view.themeId) });
128
+ }
129
+ catch {
130
+ return [];
131
+ }
132
+ }, [ctx, registry, props.artifact.kind, view]);
133
+ const emit = useCallback((operations, options) => {
134
+ session.emit(operations, options);
135
+ }, [session]);
136
+ const statusText = state.status === 'saving'
137
+ ? t('saving')
138
+ : state.status === 'editing'
139
+ ? t('unsaved')
140
+ : state.status === 'conflict'
141
+ ? t('conflictTitle')
142
+ : t('saved');
143
+ return (_jsxs("section", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx, view.themeId), "aria-label": t('editorLabel', { title: view.title }), lang: view.locale, onKeyDown: onKeyDown, onBlur: onBlur, "data-status": state.status, children: [live, _jsxs("div", { ...slot(props.slots, 'toolbar', 'ak-editor-toolbar'), role: "toolbar", "aria-label": t('editorLabel', { title: view.title }), children: [_jsxs("button", { type: "button", className: "ak-button", onClick: session.undo, disabled: !state.canUndo, "aria-keyshortcuts": "Control+Z Meta+Z", children: [_jsx(Undo2, { "aria-hidden": "true" }), t('undo')] }), _jsxs("button", { type: "button", className: "ak-button", onClick: session.redo, disabled: !state.canRedo, "aria-keyshortcuts": "Control+Shift+Z Meta+Shift+Z Control+Y", children: [_jsx(Redo2, { "aria-hidden": "true" }), t('redo')] }), lint.length > 0 ? (_jsx("span", { className: "ak-badge", children: t('lintWarnings', { count: lint.length }) })) : null, _jsx("span", { ...slot(props.slots, 'status', 'ak-editor-status'), "aria-hidden": "true", children: statusText })] }), locked && state.lockedUntil ? (_jsx("p", { ...slot(props.slots, 'notice', 'ak-notice'), role: "status", children: t('lockedUntil', { time: formatDate(state.lockedUntil, ctx.locale) }) })) : null, state.error && state.status !== 'conflict' ? (_jsx(ErrorMessage, { error: state.error, onDismiss: session.dismissError, ...slot(props.slots, 'error', '') })) : null, state.conflict ? _jsx(ConflictBox, { state: state, session: session, slots: props.slots }) : null, _jsx("div", { ...slot(props.slots, 'body', 'ak-view-body'), children: _jsx(ErrorBoundary, { onReset: () => ctx.resetLoad('editor', props.artifact.kind), fallback: (error, reset) => (_jsxs(_Fragment, { children: [_jsx(ErrorMessage, { error: error, onRetry: reset }), _jsx(KindRenderer, { kind: props.artifact.kind, content: view.content, ctx: renderCtx })] })), children: _jsx(Suspense, { fallback: _jsx(KindRenderer, { kind: props.artifact.kind, content: view.content, ctx: renderCtx }), children: _jsx(LoadedEditor, { kind: props.artifact.kind, content: view.content, ctx: renderCtx, emit: emit, readOnly: readOnly, lint: lint }) }) }) })] }));
144
+ }
145
+ function ConflictBox({ state, session, slots, }) {
146
+ const { t } = useArtkit();
147
+ const conflict = state.conflict;
148
+ const first = useRef(null);
149
+ const titleId = useId();
150
+ useEffect(() => {
151
+ first.current?.focus();
152
+ }, []);
153
+ const undoing = conflict.reason === 'undo' || conflict.reason === 'redo';
154
+ return (_jsxs("section", { ...slot(slots, 'conflict', 'ak-conflict'), role: "alert", "aria-labelledby": titleId, children: [_jsx("h3", { className: "ak-conflict-title", id: titleId, children: t('conflictTitle') }), _jsx("p", { children: undoing ? t('conflictUndoBody') : t('conflictBody', { version: conflict.latest.version }) }), _jsx(ChangeList, { changes: conflict.changes }), _jsxs("div", { className: "ak-approval-actions", children: [_jsx("button", { ref: first, type: "button", className: "ak-button", "data-variant": "primary", onClick: () => session.resolveConflict('keep-theirs'), children: t('keepTheirs') }), _jsxs("button", { type: "button", className: "ak-button", onClick: () => session.resolveConflict('reapply'), children: [_jsx(RotateCcw, { "aria-hidden": "true" }), t('reapplyMine')] })] })] }));
155
+ }
156
+ function LoadedEditor({ kind, content, ctx: renderCtx, emit, readOnly, lint, }) {
157
+ const ctx = useArtkit();
158
+ const { Editor, css } = use(ctx.loadEditor(kind));
159
+ return (_jsxs(_Fragment, { children: [css ? (_jsx("style", { href: `artkit-editor-${kind}-${hashString(css)}`, precedence: "artkit", nonce: ctx.nonce, children: css })) : null, _jsx(Editor, { content: content, ctx: renderCtx, emit: emit, readOnly: readOnly, lint: lint })] }));
160
+ }
161
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/components/editor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type LucideIcon } from 'lucide-react';
2
+ /** Lucide icon per native kind; unknown kinds get a generic file. */
3
+ export declare const KIND_ICONS: Record<string, LucideIcon>;
4
+ export declare function KindIcon({ kind, className }: {
5
+ kind: string;
6
+ className?: string;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,UAAU,EAAiC,MAAM,cAAc,CAAC;AAE9F,qEAAqE;AACrE,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAKjD,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGjF"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { File, FileText, Presentation, Sheet, Workflow } from 'lucide-react';
3
+ /** Lucide icon per native kind; unknown kinds get a generic file. */
4
+ export const KIND_ICONS = {
5
+ document: FileText,
6
+ sheet: Sheet,
7
+ slides: Presentation,
8
+ diagram: Workflow,
9
+ };
10
+ export function KindIcon({ kind, className }) {
11
+ const Icon = KIND_ICONS[kind] ?? File;
12
+ return _jsx(Icon, { "aria-hidden": "true", focusable: "false", className: className });
13
+ }
14
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/components/icons.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAmB,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9F,qEAAqE;AACrE,MAAM,CAAC,MAAM,UAAU,GAA+B;IACpD,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,QAAQ;CAClB,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAwC;IAChF,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACtC,OAAO,KAAC,IAAI,mBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,SAAS,EAAE,SAAS,GAAI,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { Actor, Artifact } from '@artkit-ai/core';
2
+ import { type ReactNode } from 'react';
3
+ import type { StatusAction } from '../client.js';
4
+ import { type EditorPermission } from './editor.js';
5
+ import { type Slots } from './shared.js';
6
+ export type PanelTab = 'view' | 'code' | 'history';
7
+ export type ArtifactPanelPart = 'header' | 'title' | 'toolbar' | 'tabs' | 'body' | 'code' | 'history';
8
+ export interface ArtifactPanelProps {
9
+ id?: string;
10
+ artifact?: Artifact;
11
+ tab?: PanelTab;
12
+ defaultTab?: PanelTab;
13
+ onTabChange?(tab: PanelTab): void;
14
+ /** Selected version (undefined = latest). Controlled when `onVersionChange` is given with it. */
15
+ version?: number;
16
+ onVersionChange?(version: number | undefined): void;
17
+ /** `edit` shows the kind editor in the View tab for the latest version (default `read`). */
18
+ permission?: EditorPermission;
19
+ /** Streaming preview and lock state, forwarded to the view/editor. */
20
+ partial?: unknown;
21
+ lockedBy?: Actor | null;
22
+ /** Lifecycle actions offered; defaults depend on the status. `false` hides them. */
23
+ actions?: StatusAction[] | false;
24
+ /** Export formats; defaults to the provider's server formats plus browser exporters. */
25
+ exportFormats?: string[];
26
+ onClose?(): void;
27
+ /** Extra controls rendered in the header. */
28
+ headerActions?: ReactNode;
29
+ className?: string;
30
+ slots?: Slots<ArtifactPanelPart>;
31
+ }
32
+ /** Assistant-style side panel: View, Code and History tabs, version selector, export and lifecycle (spec §13.1). */
33
+ export declare function ArtifactPanel(props: ArtifactPanelProps): import("react").JSX.Element;
34
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAgC,MAAM,iBAAiB,CAAC;AAErF,OAAO,EAEL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,EAQL,KAAK,KAAK,EAIX,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AACnD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;AAEtG,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,GAAG,CAAC,EAAE,QAAQ,CAAC;IACf,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,WAAW,CAAC,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAClC,iGAAiG;IACjG,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IACpD,4FAA4F;IAC5F,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,sEAAsE;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACxB,oFAAoF;IACpF,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IACjC,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,IAAI,IAAI,CAAC;IACjB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;CAClC;AAoBD,oHAAoH;AACpH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAqRtD"}
@@ -0,0 +1,216 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Archive, Check, ChevronDown, Copy, Download, Eye, History, Rocket, Send, X } from 'lucide-react';
3
+ import { useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
4
+ import { useArtkit } from '../context.js';
5
+ import { useArtifact, useArtifactExport, useArtifactHistory } from '../hooks.js';
6
+ import { RejectForm } from './approval.js';
7
+ import { ArtifactEditor } from './editor.js';
8
+ import { ChangeList, cx, ErrorMessage, formatDate, kindLabel, Loading, rootAttributes, StatusBadge, slot, useAnnouncer, } from './shared.js';
9
+ import { ArtifactView } from './view.js';
10
+ const DEFAULT_ACTIONS = {
11
+ draft: ['submit', 'archive'],
12
+ pending_approval: ['approve', 'reject', 'archive'],
13
+ published: ['archive'],
14
+ archived: [],
15
+ };
16
+ const ACTION_FROM = {
17
+ submit: ['draft'],
18
+ approve: ['pending_approval'],
19
+ reject: ['pending_approval'],
20
+ publish: ['draft', 'pending_approval'],
21
+ archive: ['draft', 'pending_approval', 'published'],
22
+ };
23
+ const TABS = ['view', 'code', 'history'];
24
+ const TAB_LABEL = { view: 'tabView', code: 'tabCode', history: 'tabHistory' };
25
+ /** Assistant-style side panel: View, Code and History tabs, version selector, export and lifecycle (spec §13.1). */
26
+ export function ArtifactPanel(props) {
27
+ const ctx = useArtkit();
28
+ const { t, client, cache } = ctx;
29
+ const id = props.id ?? props.artifact?.id;
30
+ const latestQuery = useArtifact(id, props.artifact ? { initial: props.artifact } : {});
31
+ const latest = latestQuery.artifact;
32
+ const [ownTab, setOwnTab] = useState(props.defaultTab ?? 'view');
33
+ const tab = props.tab ?? ownTab;
34
+ const selectTab = (next) => {
35
+ setOwnTab(next);
36
+ props.onTabChange?.(next);
37
+ };
38
+ const [ownVersion, setOwnVersion] = useState(undefined);
39
+ const selectedVersion = props.onVersionChange ? props.version : (props.version ?? ownVersion);
40
+ const selectVersion = (next) => {
41
+ setOwnVersion(next);
42
+ props.onVersionChange?.(next);
43
+ };
44
+ const viewingLatest = selectedVersion === undefined || selectedVersion === latest?.version;
45
+ const selectedQuery = useArtifact(viewingLatest ? undefined : id, selectedVersion === undefined ? {} : { version: selectedVersion });
46
+ const shown = viewingLatest ? latest : selectedQuery.artifact;
47
+ const history = useArtifactHistory(id);
48
+ const exporter = useArtifactExport(id ?? '', latest?.kind);
49
+ const [live, announce] = useAnnouncer();
50
+ const [statusBusy, setStatusBusy] = useState(undefined);
51
+ const [actionError, setActionError] = useState(undefined);
52
+ const [rejecting, setRejecting] = useState(false);
53
+ const [reason, setReason] = useState('');
54
+ const baseId = useId();
55
+ if (!latest || !id) {
56
+ return (_jsx("aside", { className: cx('ak-root ak-panel', props.className), ...rootAttributes(ctx), children: latestQuery.error ? (_jsx(ErrorMessage, { error: latestQuery.error, onRetry: () => void latestQuery.refresh().catch(() => undefined) })) : (_jsx(Loading, {})) }));
57
+ }
58
+ const actions = (props.actions === false ? [] : (props.actions ?? DEFAULT_ACTIONS[latest.status])).filter((action) => ACTION_FROM[action].includes(latest.status));
59
+ async function runAction(action, message) {
60
+ if (!latest)
61
+ return;
62
+ setStatusBusy(action);
63
+ setActionError(undefined);
64
+ try {
65
+ const updated = await client.setStatus(latest.id, action, message);
66
+ cache.put(updated);
67
+ announce(t('statusChanged', { status: t(`status_${updated.status}`) }));
68
+ setRejecting(false);
69
+ setReason('');
70
+ }
71
+ catch (error) {
72
+ setActionError(error);
73
+ }
74
+ finally {
75
+ setStatusBusy(undefined);
76
+ }
77
+ }
78
+ async function restore(version) {
79
+ try {
80
+ const result = await history.restore(version);
81
+ announce(t('restored', { version, newVersion: result.version }));
82
+ selectVersion(undefined);
83
+ }
84
+ catch (error) {
85
+ setActionError(error);
86
+ }
87
+ }
88
+ async function exportAs(format) {
89
+ try {
90
+ const result = await exporter.exportArtifact(format, viewingLatest ? {} : { version: selectedVersion });
91
+ announce(t('exported', { filename: result.filename }));
92
+ }
93
+ catch {
94
+ // The hook keeps the error; it is rendered below.
95
+ }
96
+ }
97
+ const tabId = (name) => `${baseId}-tab-${name}`;
98
+ const panelId = (name) => `${baseId}-panel-${name}`;
99
+ const onTabKeyDown = (event) => {
100
+ const index = TABS.indexOf(tab);
101
+ let next;
102
+ if (event.key === 'ArrowRight')
103
+ next = TABS[(index + 1) % TABS.length];
104
+ else if (event.key === 'ArrowLeft')
105
+ next = TABS[(index + TABS.length - 1) % TABS.length];
106
+ else if (event.key === 'Home')
107
+ next = TABS[0];
108
+ else if (event.key === 'End')
109
+ next = TABS[TABS.length - 1];
110
+ if (!next)
111
+ return;
112
+ event.preventDefault();
113
+ selectTab(next);
114
+ document.getElementById(tabId(next))?.focus();
115
+ };
116
+ const versionOptions = mergeVersions(history.entries, latest.version);
117
+ const exportFormats = props.exportFormats ?? exporter.formats;
118
+ return (_jsxs("aside", { className: cx('ak-root ak-panel', props.className), ...rootAttributes(ctx, latest.themeId), "aria-labelledby": `${baseId}-title`, "data-kind": latest.kind, children: [live, _jsxs("header", { ...slot(props.slots, 'header', 'ak-panel-header'), children: [_jsx("h2", { id: `${baseId}-title`, ...slot(props.slots, 'title', 'ak-panel-title'), children: latest.title }), _jsx("span", { className: "ak-history-meta", children: kindLabel(ctx, latest.kind) }), _jsx(StatusBadge, { status: latest.status }), props.headerActions, props.onClose ? (_jsx("button", { type: "button", className: "ak-button", "data-variant": "quiet", onClick: props.onClose, "aria-label": t('close'), children: _jsx(X, { "aria-hidden": "true" }) })) : null] }), _jsxs("div", { ...slot(props.slots, 'toolbar', 'ak-panel-toolbar'), children: [_jsx("label", { htmlFor: `${baseId}-version`, children: t('version') }), _jsxs("select", { id: `${baseId}-version`, className: "ak-select", value: viewingLatest ? '' : String(selectedVersion), onChange: (event) => selectVersion(event.target.value === '' ? undefined : Number(event.target.value)), children: [_jsx("option", { value: "", children: `${t('versionShort', { version: latest.version })} (${t('latest')})` }), versionOptions
119
+ .filter((version) => version !== latest.version)
120
+ .map((version) => (_jsx("option", { value: String(version), children: t('versionShort', { version }) }, version)))] }), _jsx(ExportMenu, { formats: exportFormats, pending: exporter.pending, onOpen: () => void exporter.loadFormats(), onSelect: (format) => void exportAs(format) }), actions.map((action) => action === 'reject' ? (_jsxs("button", { type: "button", className: "ak-button", "data-variant": "danger", disabled: statusBusy !== undefined, onClick: () => setRejecting(true), children: [_jsx(X, { "aria-hidden": "true" }), t('action_reject')] }, action)) : (_jsxs("button", { type: "button", className: "ak-button", "data-variant": action === 'approve' || action === 'submit' || action === 'publish' ? 'primary' : undefined, disabled: statusBusy !== undefined, onClick: () => void runAction(action), children: [_jsx(ActionIcon, { action: action }), t(`action_${action}`)] }, action)))] }), rejecting ? (_jsx("div", { className: "ak-panel-toolbar", children: _jsx(RejectForm, { busy: statusBusy !== undefined, requireReason: true, reason: reason, onReasonChange: setReason, onSubmit: () => void runAction('reject', reason.trim()), onCancel: () => setRejecting(false) }) })) : null, actionError ? _jsx(ErrorMessage, { error: actionError, onDismiss: () => setActionError(undefined) }) : null, exporter.error ? _jsx(ErrorMessage, { error: exporter.error }) : null, exporter.warnings.length > 0 ? (_jsxs("div", { className: "ak-notice", role: "status", children: [t('exportWarnings'), _jsx("ul", { children: exporter.warnings.map((warning) => (_jsx("li", { children: warning }, warning))) })] })) : null, _jsx("div", { ...slot(props.slots, 'tabs', 'ak-tabs'), role: "tablist", "aria-label": t('tabsLabel'), children: TABS.map((name) => (_jsx("button", { id: tabId(name), type: "button", role: "tab", className: "ak-tab", "aria-selected": tab === name, "aria-controls": panelId(name), tabIndex: tab === name ? 0 : -1, onClick: () => selectTab(name), onKeyDown: onTabKeyDown, children: t(TAB_LABEL[name]) }, name))) }), _jsxs("div", { ...slot(props.slots, 'body', 'ak-panel-body'), role: "tabpanel", id: panelId(tab), "aria-labelledby": tabId(tab), children: [tab === 'view' ? (viewingLatest && (props.permission === 'edit' || props.lockedBy) ? (_jsx(ArtifactEditor, { artifact: latest, permission: props.permission ?? 'read', ...(props.lockedBy ? { lockedBy: props.lockedBy } : {}), ...(props.partial === undefined ? {} : { partial: props.partial }) })) : shown ? (_jsx(ArtifactView, { artifact: shown, ...(viewingLatest && props.partial !== undefined ? { partial: props.partial } : {}) })) : selectedQuery.error ? (_jsx(ErrorMessage, { error: selectedQuery.error })) : (_jsx(Loading, {}))) : null, tab === 'code' ? _jsx(CodeTab, { artifact: shown, slots: props.slots }) : null, tab === 'history' ? (_jsx(HistoryTab, { history: history, latestVersion: latest.version, selectedVersion: viewingLatest ? latest.version : selectedVersion, slots: props.slots, onView: (version) => {
121
+ selectVersion(version === latest.version ? undefined : version);
122
+ selectTab('view');
123
+ }, onRestore: (version) => void restore(version) })) : null] })] }));
124
+ }
125
+ function mergeVersions(entries, latest) {
126
+ const versions = new Set([latest, ...entries.map((entry) => entry.version)]);
127
+ return [...versions].sort((a, b) => b - a);
128
+ }
129
+ function CodeTab({ artifact, slots, }) {
130
+ const { t } = useArtkit();
131
+ const [copied, setCopied] = useState(false);
132
+ const text = useMemo(() => (artifact ? JSON.stringify(artifact.content, null, 2) : ''), [artifact]);
133
+ if (!artifact)
134
+ return _jsx(Loading, {});
135
+ const clipboard = typeof navigator === 'undefined' ? undefined : navigator.clipboard;
136
+ return (_jsxs("div", { className: "ak-code-tab", children: [clipboard ? (_jsxs("button", { type: "button", className: "ak-button", onClick: () => {
137
+ clipboard.writeText(text).then(() => setCopied(true), () => setCopied(false));
138
+ }, children: [_jsx(Copy, { "aria-hidden": "true" }), copied ? t('copied') : t('copy')] })) : null, _jsx("pre", { ...slot(slots, 'code', 'ak-code'), children: _jsx("code", { children: text }) })] }));
139
+ }
140
+ function HistoryTab(props) {
141
+ const ctx = useArtkit();
142
+ const { t } = ctx;
143
+ const { history } = props;
144
+ if (history.error && history.entries.length === 0)
145
+ return _jsx(ErrorMessage, { error: history.error, onRetry: () => void history.refresh() });
146
+ if (history.loading && history.entries.length === 0)
147
+ return _jsx(Loading, {});
148
+ if (history.entries.length === 0)
149
+ return _jsx("p", { className: "ak-notice", children: t('historyEmpty') });
150
+ return (_jsxs("div", { children: [_jsx("ol", { ...slot(props.slots, 'history', 'ak-history'), reversed: true, children: history.entries.map((entry) => (_jsxs("li", { className: "ak-history-entry", "aria-current": entry.version === props.selectedVersion ? 'true' : undefined, children: [_jsxs("div", { className: "ak-history-head", children: [_jsx("strong", { children: t('versionShort', { version: entry.version }) }), _jsxs("span", { className: "ak-history-meta", children: [formatDate(entry.createdAt, ctx.locale), " \u00B7", ' ', t('by', { actor: t(`actor_${entry.actor.type}`) }), entry.restoredFrom !== undefined
151
+ ? ` · ${t('restoredFrom', { version: entry.restoredFrom })}`
152
+ : ''] }), _jsxs("span", { className: "ak-history-actions", children: [_jsxs("button", { type: "button", className: "ak-button", "aria-label": t('viewVersion', { version: entry.version }), onClick: () => props.onView(entry.version), children: [_jsx(Eye, { "aria-hidden": "true" }), t('tabView')] }), entry.version !== props.latestVersion ? (_jsxs("button", { type: "button", className: "ak-button", "aria-label": t('restoreVersion', { version: entry.version }), disabled: history.restoring !== undefined, onClick: () => props.onRestore(entry.version), children: [_jsx(History, { "aria-hidden": "true" }), t('restore')] })) : null] })] }), entry.message ? _jsx("p", { className: "ak-history-meta", children: entry.message }) : null, entry.diff.length > 0 ? _jsx(ChangeList, { changes: entry.diff }) : null] }, entry.version))) }), history.hasMore ? (_jsx("button", { type: "button", className: "ak-button", disabled: history.loading, onClick: () => void history.loadMore(), children: t('loadMore') })) : null] }));
153
+ }
154
+ function ExportMenu(props) {
155
+ const { t } = useArtkit();
156
+ const [open, setOpen] = useState(false);
157
+ const button = useRef(null);
158
+ const list = useRef(null);
159
+ const menuId = useId();
160
+ const items = useCallback(() => [...(list.current?.querySelectorAll('[role="menuitem"]') ?? [])], []);
161
+ useEffect(() => {
162
+ if (open)
163
+ items()[0]?.focus();
164
+ }, [open, items]);
165
+ const close = (refocus) => {
166
+ setOpen(false);
167
+ if (refocus)
168
+ button.current?.focus();
169
+ };
170
+ const onMenuKeyDown = (event) => {
171
+ const all = items();
172
+ const index = all.indexOf(document.activeElement);
173
+ let next;
174
+ if (event.key === 'ArrowDown')
175
+ next = all[(index + 1) % all.length];
176
+ else if (event.key === 'ArrowUp')
177
+ next = all[(index - 1 + all.length) % all.length];
178
+ else if (event.key === 'Home')
179
+ next = all[0];
180
+ else if (event.key === 'End')
181
+ next = all[all.length - 1];
182
+ else if (event.key === 'Escape') {
183
+ event.preventDefault();
184
+ close(true);
185
+ return;
186
+ }
187
+ else if (event.key === 'Tab') {
188
+ close(false);
189
+ return;
190
+ }
191
+ if (next) {
192
+ event.preventDefault();
193
+ next.focus();
194
+ }
195
+ };
196
+ return (_jsxs("div", { className: "ak-menu", children: [_jsxs("button", { ref: button, type: "button", className: "ak-button", "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? menuId : undefined, disabled: props.pending !== undefined, onClick: () => {
197
+ if (!open)
198
+ props.onOpen();
199
+ setOpen(!open);
200
+ }, onKeyDown: (event) => {
201
+ if (event.key === 'ArrowDown' && !open) {
202
+ event.preventDefault();
203
+ props.onOpen();
204
+ setOpen(true);
205
+ }
206
+ }, children: [_jsx(Download, { "aria-hidden": "true" }), props.pending ? t('exporting') : t('export'), _jsx(ChevronDown, { "aria-hidden": "true" })] }), open ? (_jsx("div", { ref: list, id: menuId, role: "menu", className: "ak-menu-list", "aria-label": t('export'), tabIndex: -1, onKeyDown: onMenuKeyDown, children: props.formats.length === 0 ? (_jsx("p", { className: "ak-menu-item", children: t('noExportFormats') })) : (props.formats.map((format) => (_jsx("button", { type: "button", role: "menuitem", className: "ak-menu-item", tabIndex: -1, "aria-label": t('exportAs', { format: format.toUpperCase() }), onClick: () => {
207
+ close(true);
208
+ props.onSelect(format);
209
+ }, children: format.toUpperCase() }, format)))) })) : null] }));
210
+ }
211
+ const ACTION_ICONS = { submit: Send, approve: Check, publish: Rocket, archive: Archive };
212
+ function ActionIcon({ action }) {
213
+ const Icon = ACTION_ICONS[action];
214
+ return Icon ? _jsx(Icon, { "aria-hidden": "true" }) : null;
215
+ }
216
+ //# sourceMappingURL=panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.js","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import type { ArtifactStatus, ChangeSummary } from '@artkit-ai/core';
2
+ import { Component, type CSSProperties, type ErrorInfo, type ReactNode } from 'react';
3
+ import { type ArtkitContextValue } from '../context.js';
4
+ /**
5
+ * Customization without forking (spec §13.5): each named part of a component accepts extra classes and
6
+ * inline styles. Base classes (`ak-*`) stay, so overrides compose with the default CSS.
7
+ */
8
+ export type Slots<Part extends string> = Partial<Record<Part, {
9
+ className?: string;
10
+ style?: CSSProperties;
11
+ }>>;
12
+ export declare function cx(...classes: (string | false | null | undefined)[]): string;
13
+ export declare function slot<Part extends string>(slots: Slots<Part> | undefined, part: Part, base: string): {
14
+ className: string;
15
+ style?: CSSProperties;
16
+ };
17
+ /** Attributes of every artkit root element: theme scope and forced light/dark. */
18
+ export declare function rootAttributes(ctx: ArtkitContextValue, themeId?: string): Record<string, string>;
19
+ export declare function StatusBadge({ status, className }: {
20
+ status: ArtifactStatus;
21
+ className?: string;
22
+ }): import("react").JSX.Element;
23
+ export declare function errorMessage(error: unknown, fallback: string): string;
24
+ export declare function ErrorMessage({ error, onRetry, onDismiss, className, style, }: {
25
+ error: unknown;
26
+ onRetry?: () => void;
27
+ onDismiss?: () => void;
28
+ className?: string;
29
+ style?: CSSProperties;
30
+ }): import("react").JSX.Element;
31
+ export declare function Loading({ label, className, style, }: {
32
+ label?: string;
33
+ className?: string;
34
+ style?: CSSProperties;
35
+ }): import("react").JSX.Element;
36
+ /**
37
+ * Polite live region for screen readers (spec §18.2). The text is cleared first so repeating the same
38
+ * message is announced again.
39
+ */
40
+ export declare function useAnnouncer(): [ReactNode, (message: string) => void];
41
+ export declare function ChangeList({ changes, className, style, }: {
42
+ changes: ChangeSummary[];
43
+ className?: string;
44
+ style?: CSSProperties;
45
+ }): import("react").JSX.Element;
46
+ interface BoundaryProps {
47
+ fallback: (error: unknown, reset: () => void) => ReactNode;
48
+ onReset?: () => void;
49
+ children?: ReactNode;
50
+ }
51
+ /** Catches loader and renderer failures so one broken kind does not take the page down. */
52
+ export declare class ErrorBoundary extends Component<BoundaryProps, {
53
+ error: unknown;
54
+ failed: boolean;
55
+ }> {
56
+ state: {
57
+ error: unknown;
58
+ failed: boolean;
59
+ };
60
+ static getDerivedStateFromError(error: unknown): {
61
+ error: unknown;
62
+ failed: boolean;
63
+ };
64
+ componentDidCatch(_error: unknown, _info: ErrorInfo): void;
65
+ reset: () => void;
66
+ render(): ReactNode;
67
+ }
68
+ export declare function formatDate(value: string, locale: string): string;
69
+ export declare function kindLabel(ctx: ArtkitContextValue, kind: string): string;
70
+ export {};
71
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/components/shared.tsx"],"names":[],"mappings":"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"}