@artkit-ai/react 0.1.0 → 0.2.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.
- package/dist/cache.d.ts +7 -11
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +32 -53
- package/dist/cache.js.map +1 -1
- package/dist/client.d.ts +4 -15
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -29
- package/dist/client.js.map +1 -1
- package/dist/components/card.d.ts +2 -2
- package/dist/components/card.d.ts.map +1 -1
- package/dist/components/card.js +3 -3
- package/dist/components/card.js.map +1 -1
- package/dist/components/editor.d.ts +31 -18
- package/dist/components/editor.d.ts.map +1 -1
- package/dist/components/editor.js +81 -131
- package/dist/components/editor.js.map +1 -1
- package/dist/components/icons.d.ts +2 -2
- package/dist/components/icons.d.ts.map +1 -1
- package/dist/components/icons.js +2 -2
- package/dist/components/icons.js.map +1 -1
- package/dist/components/panel.d.ts +13 -16
- package/dist/components/panel.d.ts.map +1 -1
- package/dist/components/panel.js +13 -97
- package/dist/components/panel.js.map +1 -1
- package/dist/components/shared.d.ts +2 -6
- package/dist/components/shared.d.ts.map +1 -1
- package/dist/components/shared.js +2 -6
- package/dist/components/shared.js.map +1 -1
- package/dist/components/view.d.ts +7 -8
- package/dist/components/view.d.ts.map +1 -1
- package/dist/components/view.js +16 -15
- package/dist/components/view.js.map +1 -1
- package/dist/context.d.ts +14 -9
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js.map +1 -1
- package/dist/editor-session.d.ts +77 -165
- package/dist/editor-session.d.ts.map +1 -1
- package/dist/editor-session.js +164 -586
- package/dist/editor-session.js.map +1 -1
- package/dist/hooks.d.ts +2 -23
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +24 -116
- package/dist/hooks.js.map +1 -1
- package/dist/i18n.d.ts +4 -66
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js +6 -68
- package/dist/i18n.js.map +1 -1
- package/dist/index.d.ts +6 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +12 -12
- package/dist/provider.js.map +1 -1
- package/dist/styles.d.ts +1 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +4 -4
- package/package.json +2 -2
- package/src/cache.ts +32 -55
- package/src/client.ts +7 -55
- package/src/components/card.tsx +6 -7
- package/src/components/editor.tsx +208 -308
- package/src/components/icons.tsx +2 -2
- package/src/components/panel.tsx +43 -300
- package/src/components/shared.tsx +3 -12
- package/src/components/view.tsx +26 -29
- package/src/context.ts +16 -11
- package/src/editor-session.ts +197 -675
- package/src/hooks.ts +25 -140
- package/src/i18n.ts +6 -68
- package/src/index.ts +7 -39
- package/src/provider.tsx +13 -13
- package/src/styles.ts +4 -4
- package/dist/components/approval.d.ts +0 -34
- package/dist/components/approval.d.ts.map +0 -1
- package/dist/components/approval.js +0 -80
- package/dist/components/approval.js.map +0 -1
- package/dist/components/version-diff.d.ts +0 -35
- package/dist/components/version-diff.d.ts.map +0 -1
- package/dist/components/version-diff.js +0 -85
- package/dist/components/version-diff.js.map +0 -1
- package/dist/line-diff.d.ts +0 -25
- package/dist/line-diff.d.ts.map +0 -1
- package/dist/line-diff.js +0 -96
- package/dist/line-diff.js.map +0 -1
- package/src/components/approval.tsx +0 -219
- package/src/components/version-diff.tsx +0 -266
- package/src/line-diff.ts +0 -111
|
@@ -1,161 +1,111 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Redo2,
|
|
3
|
-
import { Suspense, use,
|
|
2
|
+
import { Redo2, Save, Undo2 } from 'lucide-react';
|
|
3
|
+
import { Suspense, use, useEffect, useMemo, useState, useSyncExternalStore } from 'react';
|
|
4
4
|
import { useArtkit } from '../context.js';
|
|
5
|
-
import {
|
|
5
|
+
import { DraftSession } from '../editor-session.js';
|
|
6
6
|
import { useArtifact } from '../hooks.js';
|
|
7
7
|
import { hashString } from '../styles.js';
|
|
8
|
-
import {
|
|
9
|
-
import { ArtifactView,
|
|
8
|
+
import { cx, ErrorBoundary, ErrorMessage, Loading, rootAttributes, slot } from './shared.js';
|
|
9
|
+
import { ArtifactView, renderContext } from './view.js';
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* here, when editing starts.
|
|
11
|
+
* Editor of one artifact (spec §11.6). Edits are applied to a local draft; nothing reaches the server. The Save button
|
|
12
|
+
* emits the draft through `onSave`, and Ctrl/Cmd+S does the same. Undo and redo are local.
|
|
14
13
|
*/
|
|
15
14
|
export function ArtifactEditor(props) {
|
|
16
15
|
const ctx = useArtkit();
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const query = useArtifact(id, props.artifact ? { initial: props.artifact } : {});
|
|
20
|
-
const artifact = query.artifact;
|
|
16
|
+
const fetched = useArtifact(props.artifact ? undefined : props.id);
|
|
17
|
+
const artifact = props.artifact ?? fetched.artifact;
|
|
21
18
|
if (!artifact) {
|
|
22
|
-
return (_jsx("div", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx), children:
|
|
19
|
+
return (_jsx("div", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx), children: fetched.error ? (_jsx(ErrorMessage, { error: fetched.error, onRetry: () => void fetched.refresh().catch(() => undefined) })) : (_jsx(Loading, {})) }));
|
|
23
20
|
}
|
|
24
|
-
const editable =
|
|
25
|
-
|
|
26
|
-
|
|
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 } : {}) })] }));
|
|
21
|
+
const editable = !props.readOnly && ctx.hasEditor(artifact.format) && ctx.registry.has(artifact.format);
|
|
22
|
+
if (!editable) {
|
|
23
|
+
return (_jsx("div", { className: cx('ak-root ak-editor', props.className), ...rootAttributes(ctx, artifact.themeId), "data-readonly": "true", children: _jsx(ArtifactView, { artifact: artifact }) }));
|
|
29
24
|
}
|
|
30
25
|
return _jsx(EditingHost, { ...props, artifact: artifact }, artifact.id);
|
|
31
26
|
}
|
|
32
|
-
function EditingHost(
|
|
27
|
+
function EditingHost({ artifact, readOnly, onSave, onChange, className, slots, }) {
|
|
33
28
|
const ctx = useArtkit();
|
|
34
|
-
const {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
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.
|
|
29
|
+
const [session] = useState(() => new DraftSession({ registry: ctx.registry, artifact, locale: ctx.locale }));
|
|
30
|
+
const snapshot = useSyncExternalStore(session.subscribe, session.getSnapshot, session.getSnapshot);
|
|
31
|
+
const [saving, setSaving] = useState(false);
|
|
32
|
+
const [saveError, setSaveError] = useState();
|
|
33
|
+
// A newer artifact from the application (after a save, or a reload) moves the draft forward.
|
|
52
34
|
useEffect(() => {
|
|
53
|
-
session.
|
|
54
|
-
|
|
55
|
-
|
|
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;
|
|
35
|
+
if (artifact.version !== session.getSnapshot().baseVersion ||
|
|
36
|
+
artifact.id !== session.getSnapshot().artifact.id) {
|
|
37
|
+
session.load(artifact);
|
|
90
38
|
}
|
|
91
|
-
}, [
|
|
92
|
-
const [, forceRender] = useState(0);
|
|
39
|
+
}, [artifact, session]);
|
|
93
40
|
useEffect(() => {
|
|
94
|
-
|
|
41
|
+
onChange?.(snapshot);
|
|
42
|
+
}, [snapshot, onChange]);
|
|
43
|
+
const draft = snapshot.artifact;
|
|
44
|
+
const canSave = Boolean(onSave) && snapshot.dirty && !saving && !readOnly;
|
|
45
|
+
async function save() {
|
|
46
|
+
if (!canSave || !onSave)
|
|
95
47
|
return;
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
48
|
+
setSaving(true);
|
|
49
|
+
setSaveError(undefined);
|
|
50
|
+
try {
|
|
51
|
+
await onSave({
|
|
52
|
+
artifactId: draft.id,
|
|
53
|
+
format: draft.format,
|
|
54
|
+
baseVersion: snapshot.baseVersion,
|
|
55
|
+
title: draft.title,
|
|
56
|
+
locale: draft.locale,
|
|
57
|
+
themeId: draft.themeId,
|
|
58
|
+
content: draft.content,
|
|
59
|
+
operations: snapshot.operations,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
setSaveError(error);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
setSaving(false);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function onKeyDown(event) {
|
|
70
|
+
if (event.defaultPrevented || !(event.metaKey || event.ctrlKey))
|
|
106
71
|
return;
|
|
107
72
|
const key = event.key.toLowerCase();
|
|
108
|
-
if (key === '
|
|
73
|
+
if (key === 's') {
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
void save();
|
|
76
|
+
}
|
|
77
|
+
else if (key === 'z' && !event.shiftKey) {
|
|
109
78
|
event.preventDefault();
|
|
110
79
|
session.undo();
|
|
111
80
|
}
|
|
112
|
-
else if (
|
|
81
|
+
else if (key === 'y' || (key === 'z' && event.shiftKey)) {
|
|
113
82
|
event.preventDefault();
|
|
114
83
|
session.redo();
|
|
115
84
|
}
|
|
116
|
-
}
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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 }) }) }) })] }));
|
|
85
|
+
}
|
|
86
|
+
const emit = (operations, options) => {
|
|
87
|
+
void session.apply(operations, { ...(options?.kind ? { kind: options.kind } : {}) });
|
|
88
|
+
};
|
|
89
|
+
const actions = {
|
|
90
|
+
canUndo: snapshot.canUndo,
|
|
91
|
+
canRedo: snapshot.canRedo,
|
|
92
|
+
undo: () => session.undo(),
|
|
93
|
+
redo: () => session.redo(),
|
|
94
|
+
dirty: snapshot.dirty,
|
|
95
|
+
saving,
|
|
96
|
+
canSave,
|
|
97
|
+
save: () => void save(),
|
|
98
|
+
};
|
|
99
|
+
return (_jsxs("section", { className: cx('ak-root ak-editor', className), ...rootAttributes(ctx, draft.themeId), "data-dirty": snapshot.dirty || undefined, onKeyDown: onKeyDown, children: [snapshot.error ? _jsx(ErrorMessage, { error: snapshot.error, onDismiss: () => session.undo() }) : null, saveError ? _jsx(ErrorMessage, { error: saveError }) : null, _jsx("div", { ...slot(slots, 'body', 'ak-editor-body'), children: _jsx(ErrorBoundary, { fallback: (error) => _jsx(ErrorMessage, { error: error }), children: _jsx(Suspense, { fallback: _jsx(Loading, {}), children: _jsx(LoadedEditor, { slots: slots, actions: actions, format: draft.format, content: draft.content, ctx: ctx, themeId: draft.themeId, locale: draft.locale, emit: emit, readOnly: Boolean(readOnly), lint: snapshot.lint }) }) }) })] }));
|
|
144
100
|
}
|
|
145
|
-
function
|
|
146
|
-
const {
|
|
147
|
-
const
|
|
148
|
-
|
|
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')] })] })] }));
|
|
101
|
+
function LoadedEditor({ format, content, ctx, themeId, locale, emit, readOnly, lint, actions, slots, }) {
|
|
102
|
+
const { Editor, css, toolbar } = use(ctx.loadEditor(format));
|
|
103
|
+
const renderCtx = useMemo(() => renderContext(ctx, themeId, locale, 'screen', false), [ctx, themeId, locale]);
|
|
104
|
+
return (_jsxs(_Fragment, { children: [css ? (_jsx("style", { href: `artkit-editor-${format}-${hashString(css)}`, precedence: "artkit", nonce: ctx.nonce, children: css })) : null, toolbar === 'format' ? null : _jsx(HostToolbar, { actions: actions, slots: slots }), _jsx(Editor, { content: content, ctx: renderCtx, emit: emit, readOnly: readOnly, lint: lint, actions: actions })] }));
|
|
155
105
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const {
|
|
159
|
-
return (_jsxs(
|
|
106
|
+
/** Undo, redo, save status and save, drawn by the host above editors that do not draw their own toolbar. */
|
|
107
|
+
function HostToolbar({ actions, slots }) {
|
|
108
|
+
const { t } = useArtkit();
|
|
109
|
+
return (_jsxs("header", { ...slot(slots, 'toolbar', 'ak-editor-toolbar'), children: [_jsxs("div", { className: "ak-editor-history", children: [_jsx("button", { type: "button", className: "ak-button", "data-variant": "quiet", disabled: !actions.canUndo, onClick: actions.undo, "aria-label": t('undo'), title: t('undo'), children: _jsx(Undo2, { "aria-hidden": "true" }) }), _jsx("button", { type: "button", className: "ak-button", "data-variant": "quiet", disabled: !actions.canRedo, onClick: actions.redo, "aria-label": t('redo'), title: t('redo'), children: _jsx(Redo2, { "aria-hidden": "true" }) })] }), _jsx("span", { ...slot(slots, 'status', 'ak-editor-status'), role: "status", "aria-live": "polite", children: actions.dirty ? t('unsaved') : t('saved') }), _jsxs("button", { type: "button", className: "ak-button", "data-variant": "primary", disabled: !actions.canSave, onClick: actions.save, children: [_jsx(Save, { "aria-hidden": "true" }), actions.saving ? t('saving') : t('save')] })] }));
|
|
160
110
|
}
|
|
161
111
|
//# sourceMappingURL=editor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/components/editor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"editor.js","sourceRoot":"","sources":["../../src/components/editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type LucideIcon } from 'lucide-react';
|
|
2
2
|
/** Lucide icon per native kind; unknown kinds get a generic file. */
|
|
3
3
|
export declare const KIND_ICONS: Record<string, LucideIcon>;
|
|
4
|
-
export declare function KindIcon({
|
|
5
|
-
|
|
4
|
+
export declare function KindIcon({ format, className }: {
|
|
5
|
+
format: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
}): import("react").JSX.Element;
|
|
8
8
|
//# sourceMappingURL=icons.d.ts.map
|
|
@@ -1 +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,
|
|
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,MAAM,EAAE,SAAS,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,+BAGrF"}
|
package/dist/components/icons.js
CHANGED
|
@@ -7,8 +7,8 @@ export const KIND_ICONS = {
|
|
|
7
7
|
slides: Presentation,
|
|
8
8
|
diagram: Workflow,
|
|
9
9
|
};
|
|
10
|
-
export function KindIcon({
|
|
11
|
-
const Icon = KIND_ICONS[
|
|
10
|
+
export function KindIcon({ format, className }) {
|
|
11
|
+
const Icon = KIND_ICONS[format] ?? File;
|
|
12
12
|
return _jsx(Icon, { "aria-hidden": "true", focusable: "false", className: className });
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=icons.js.map
|
|
@@ -1 +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,
|
|
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,MAAM,EAAE,SAAS,EAA0C;IACpF,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACxC,OAAO,KAAC,IAAI,mBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,EAAC,SAAS,EAAE,SAAS,GAAI,CAAC;AAC7E,CAAC"}
|
|
@@ -1,26 +1,20 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Artifact } from '@artkit-ai/core';
|
|
2
2
|
import { type ReactNode } from 'react';
|
|
3
|
-
import type {
|
|
4
|
-
import { type
|
|
3
|
+
import type { DraftSnapshot } from '../editor-session.js';
|
|
4
|
+
import { type ArtifactEditorProps } from './editor.js';
|
|
5
5
|
import { type Slots } from './shared.js';
|
|
6
|
-
export type PanelTab = 'view' | '
|
|
7
|
-
export type ArtifactPanelPart = 'header' | 'title' | 'toolbar' | 'tabs' | 'body' | 'code'
|
|
6
|
+
export type PanelTab = 'view' | 'edit' | 'code';
|
|
7
|
+
export type ArtifactPanelPart = 'header' | 'title' | 'toolbar' | 'tabs' | 'body' | 'code';
|
|
8
8
|
export interface ArtifactPanelProps {
|
|
9
9
|
id?: string;
|
|
10
10
|
artifact?: Artifact;
|
|
11
11
|
tab?: PanelTab;
|
|
12
12
|
defaultTab?: PanelTab;
|
|
13
13
|
onTabChange?(tab: PanelTab): void;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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;
|
|
14
|
+
/** Save action of the editor tab: the application decides what saving means. */
|
|
15
|
+
onSave?: ArtifactEditorProps['onSave'];
|
|
16
|
+
/** Draft changes, forwarded from the editor tab. */
|
|
17
|
+
onChange?(snapshot: DraftSnapshot): void;
|
|
24
18
|
/** Export formats; defaults to the provider's server formats plus browser exporters. */
|
|
25
19
|
exportFormats?: string[];
|
|
26
20
|
onClose?(): void;
|
|
@@ -29,6 +23,9 @@ export interface ArtifactPanelProps {
|
|
|
29
23
|
className?: string;
|
|
30
24
|
slots?: Slots<ArtifactPanelPart>;
|
|
31
25
|
}
|
|
32
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Side panel of one artifact: View, Edit and Code tabs and the export menu (spec §13.1). There is no history, approval
|
|
28
|
+
* or archive here: the application owns versions and publication.
|
|
29
|
+
*/
|
|
33
30
|
export declare function ArtifactPanel(props: ArtifactPanelProps): import("react").JSX.Element;
|
|
34
31
|
//# sourceMappingURL=panel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/components/panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAEL,KAAK,SAAS,EAOf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAML,KAAK,KAAK,EAGX,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAChD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAE1F,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,gFAAgF;IAChF,MAAM,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,oDAAoD;IACpD,QAAQ,CAAC,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACzC,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;AAKD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,+BAkItD"}
|
package/dist/components/panel.js
CHANGED
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { ChevronDown, Copy, Download, X } from 'lucide-react';
|
|
3
3
|
import { useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
4
4
|
import { useArtkit } from '../context.js';
|
|
5
|
-
import { useArtifact, useArtifactExport
|
|
6
|
-
import { RejectForm } from './approval.js';
|
|
5
|
+
import { useArtifact, useArtifactExport } from '../hooks.js';
|
|
7
6
|
import { ArtifactEditor } from './editor.js';
|
|
8
|
-
import {
|
|
7
|
+
import { cx, ErrorMessage, formatLabel, Loading, rootAttributes, slot, useAnnouncer, } from './shared.js';
|
|
9
8
|
import { ArtifactView } from './view.js';
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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). */
|
|
9
|
+
const TABS = ['view', 'edit', 'code'];
|
|
10
|
+
const TAB_LABEL = { view: 'tabView', edit: 'tabEdit', code: 'tabCode' };
|
|
11
|
+
/**
|
|
12
|
+
* Side panel of one artifact: View, Edit and Code tabs and the export menu (spec §13.1). There is no history, approval
|
|
13
|
+
* or archive here: the application owns versions and publication.
|
|
14
|
+
*/
|
|
26
15
|
export function ArtifactPanel(props) {
|
|
27
16
|
const ctx = useArtkit();
|
|
28
|
-
const { t
|
|
17
|
+
const { t } = ctx;
|
|
29
18
|
const id = props.id ?? props.artifact?.id;
|
|
30
19
|
const latestQuery = useArtifact(id, props.artifact ? { initial: props.artifact } : {});
|
|
31
20
|
const latest = latestQuery.artifact;
|
|
@@ -35,59 +24,15 @@ export function ArtifactPanel(props) {
|
|
|
35
24
|
setOwnTab(next);
|
|
36
25
|
props.onTabChange?.(next);
|
|
37
26
|
};
|
|
38
|
-
const
|
|
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);
|
|
27
|
+
const exporter = useArtifactExport(id ?? '', latest?.format);
|
|
49
28
|
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
29
|
const baseId = useId();
|
|
55
30
|
if (!latest || !id) {
|
|
56
31
|
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
32
|
}
|
|
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
33
|
async function exportAs(format) {
|
|
89
34
|
try {
|
|
90
|
-
const result = await exporter.exportArtifact(format,
|
|
35
|
+
const result = await exporter.exportArtifact(format, {});
|
|
91
36
|
announce(t('exported', { filename: result.filename }));
|
|
92
37
|
}
|
|
93
38
|
catch {
|
|
@@ -113,18 +58,8 @@ export function ArtifactPanel(props) {
|
|
|
113
58
|
selectTab(next);
|
|
114
59
|
document.getElementById(tabId(next))?.focus();
|
|
115
60
|
};
|
|
116
|
-
const versionOptions = mergeVersions(history.entries, latest.version);
|
|
117
61
|
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-
|
|
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);
|
|
62
|
+
return (_jsxs("aside", { className: cx('ak-root ak-panel', props.className), ...rootAttributes(ctx, latest.themeId), "aria-labelledby": `${baseId}-title`, "data-format": latest.format, 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: formatLabel(ctx, latest.format) }), _jsx("span", { className: "ak-badge", children: t('versionShort', { version: latest.version }) }), props.headerActions, _jsx(ExportMenu, { formats: exportFormats, pending: exporter.pending, onOpen: () => void exporter.loadFormats(), onSelect: (format) => void exportAs(format) }), 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] }), exporter.error ? _jsx(ErrorMessage, { error: exporter.error, className: "ak-panel-notice" }) : null, _jsx("div", { role: "tablist", "aria-label": latest.title, ...slot(props.slots, 'tabs', 'ak-tabs'), 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", { id: panelId(tab), role: "tabpanel", "aria-labelledby": tabId(tab), ...slot(props.slots, 'body', 'ak-panel-body'), children: [tab === 'view' ? _jsx(ArtifactView, { artifact: latest }) : null, tab === 'edit' ? (_jsx(ArtifactEditor, { artifact: latest, ...(props.onSave ? { onSave: props.onSave } : {}), ...(props.onChange ? { onChange: props.onChange } : {}) })) : null, tab === 'code' ? _jsx(CodeTab, { artifact: latest, slots: props.slots }) : null] })] }));
|
|
128
63
|
}
|
|
129
64
|
function CodeTab({ artifact, slots, }) {
|
|
130
65
|
const { t } = useArtkit();
|
|
@@ -137,20 +72,6 @@ function CodeTab({ artifact, slots, }) {
|
|
|
137
72
|
clipboard.writeText(text).then(() => setCopied(true), () => setCopied(false));
|
|
138
73
|
}, 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
74
|
}
|
|
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
75
|
function ExportMenu(props) {
|
|
155
76
|
const { t } = useArtkit();
|
|
156
77
|
const [open, setOpen] = useState(false);
|
|
@@ -208,9 +129,4 @@ function ExportMenu(props) {
|
|
|
208
129
|
props.onSelect(format);
|
|
209
130
|
}, children: format.toUpperCase() }, format)))) })) : null] }));
|
|
210
131
|
}
|
|
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
132
|
//# sourceMappingURL=panel.js.map
|