@signalsafe/tree-spec-editor 0.2.0 → 0.2.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.
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/lib/PanelHeaderCollapseCarets.d.ts +4 -7
- package/dist/lib/PanelHeaderCollapseCarets.d.ts.map +1 -1
- package/dist/lib/PanelHeaderCollapseCarets.js +2 -10
- package/dist/lib/buildDefaultToolbarSpec.d.ts +41 -115
- package/dist/lib/buildDefaultToolbarSpec.d.ts.map +1 -1
- package/dist/lib/buildDefaultToolbarSpec.js +102 -137
- package/dist/lib/panelHelpers.d.ts +1 -7
- package/dist/lib/panelHelpers.d.ts.map +1 -1
- package/dist/lib/panelHelpers.js +11 -19
- package/dist/panels/IssuesPanel.d.ts.map +1 -1
- package/dist/panels/IssuesPanel.js +1 -6
- package/dist/panels/NodesPanel.d.ts.map +1 -1
- package/dist/panels/NodesPanel.js +1 -9
- package/dist/panels/ToolbarPanel.d.ts +3 -5
- package/dist/panels/ToolbarPanel.d.ts.map +1 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -42,7 +42,7 @@ export type { DraftHistoryModalProps } from './modals/DraftHistoryModal';
|
|
|
42
42
|
export { default as AuditLogModal } from './modals/AuditLogModal';
|
|
43
43
|
export type { AuditLogModalProps } from './modals/AuditLogModal';
|
|
44
44
|
export { default as ToolbarPanel, TOOLBAR_ITEM_KIND } from './panels/ToolbarPanel';
|
|
45
|
-
export type { ToolbarPanelProps, ToolbarItem, ToolbarItemKind, ToolbarButtonItem, ToolbarDropdownItem, ToolbarDropdownEntry, ToolbarBadgeItem, ToolbarTextItem, ToolbarCustomItem,
|
|
45
|
+
export type { ToolbarPanelProps, ToolbarItem, ToolbarItemKind, ToolbarButtonItem, ToolbarDropdownItem, ToolbarDropdownEntry, ToolbarBadgeItem, ToolbarTextItem, ToolbarCustomItem, } from './panels/ToolbarPanel';
|
|
46
46
|
export { getIssueSeverityBadgeClass } from './lib/panelHelpers';
|
|
47
47
|
export { default as PanelHeaderCollapseCarets } from './lib/PanelHeaderCollapseCarets';
|
|
48
48
|
export { buildDefaultToolbarSpec } from './lib/buildDefaultToolbarSpec';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAE7D,YAAY,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAE3G,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAChF,YAAY,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,YAAY,EACR,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,YAAY,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACnF,YAAY,EACR,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
* Single toggle next to the panel title: **caret-up** while expanded (click to hide body),
|
|
3
|
-
* **caret-down** while collapsed (click to show). Avoids relying on Bootstrap’s `.collapse`
|
|
4
|
-
* transition/CSS, which can fail to hide content in some host bundles.
|
|
5
|
-
*/
|
|
6
|
-
export default function PanelHeaderCollapseCarets({ expanded, onToggle, }: Readonly<{
|
|
1
|
+
export interface PanelHeaderCollapseCaretsProps {
|
|
7
2
|
expanded: boolean;
|
|
8
3
|
onToggle: () => void;
|
|
9
|
-
}
|
|
4
|
+
}
|
|
5
|
+
/** Collapse/expand carets for card panel headers. */
|
|
6
|
+
export default function PanelHeaderCollapseCarets({ expanded, onToggle, }: Readonly<PanelHeaderCollapseCaretsProps>): import("react/jsx-runtime").JSX.Element;
|
|
10
7
|
//# sourceMappingURL=PanelHeaderCollapseCarets.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PanelHeaderCollapseCarets.d.ts","sourceRoot":"","sources":["../../src/lib/PanelHeaderCollapseCarets.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"PanelHeaderCollapseCarets.d.ts","sourceRoot":"","sources":["../../src/lib/PanelHeaderCollapseCarets.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,qDAAqD;AACrD,MAAM,CAAC,OAAO,UAAU,yBAAyB,CAAC,EAC9C,QAAQ,EACR,QAAQ,GACX,EAAE,QAAQ,CAAC,8BAA8B,CAAC,2CAY1C"}
|
|
@@ -1,13 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Single toggle next to the panel title: **caret-up** while expanded (click to hide body),
|
|
4
|
-
* **caret-down** while collapsed (click to show). Avoids relying on Bootstrap’s `.collapse`
|
|
5
|
-
* transition/CSS, which can fail to hide content in some host bundles.
|
|
6
|
-
*/
|
|
2
|
+
/** Collapse/expand carets for card panel headers. */
|
|
7
3
|
export default function PanelHeaderCollapseCarets({ expanded, onToggle, }) {
|
|
8
|
-
return (_jsx("button", { type: "button", className: "btn btn-
|
|
9
|
-
e.preventDefault();
|
|
10
|
-
e.stopPropagation();
|
|
11
|
-
onToggle();
|
|
12
|
-
}, children: _jsx("i", { className: `bi ${expanded ? 'bi-caret-up' : 'bi-caret-down'}`, "aria-hidden": true }) }));
|
|
4
|
+
return (_jsx("button", { type: "button", className: "btn btn-sm btn-link text-body-secondary p-0 ms-1", "aria-expanded": expanded, "aria-label": expanded ? 'Collapse panel' : 'Expand panel', onClick: onToggle, children: _jsx("i", { className: `bi bi-caret-${expanded ? 'up' : 'down'}`, "aria-hidden": true }) }));
|
|
13
5
|
}
|
|
@@ -1,41 +1,43 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import { type ToolbarItem } from '../panels/ToolbarPanel';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
import { type AutosaveStatus, type TreeTemplateSpec } from '@signalsafe/tree-spec-editor-core';
|
|
3
|
+
import { type ToolbarItem } from '../panels/ToolbarPanel.js';
|
|
4
|
+
export { AUTOSAVE_STATUS } from '@signalsafe/tree-spec-editor-core';
|
|
5
|
+
export interface DefaultToolbarCapabilities {
|
|
6
|
+
canValidate?: boolean;
|
|
7
|
+
canListSnapshots?: boolean;
|
|
8
|
+
canListAudit?: boolean;
|
|
9
|
+
canCreateSnapshot?: boolean;
|
|
10
|
+
canCloneToDraft?: boolean;
|
|
11
|
+
canPublish?: boolean;
|
|
12
|
+
}
|
|
12
13
|
export interface DefaultToolbarNodeType {
|
|
13
|
-
/** Node type id (matches `EditorNode.type`). Required unless `divider: true`. */
|
|
14
14
|
type?: string;
|
|
15
|
-
|
|
16
|
-
label?: ReactNode;
|
|
17
|
-
/** Optional patch applied to the spawned node (e.g. starter prompt). */
|
|
18
|
-
patch?: Partial<EditorNode>;
|
|
19
|
-
/** Optional stable id; defaults to `add-<type>`. */
|
|
20
|
-
id?: string;
|
|
21
|
-
/** Render this entry as a visual divider. Ignores `type` / `label` / `patch`. */
|
|
15
|
+
label?: string;
|
|
22
16
|
divider?: boolean;
|
|
17
|
+
id?: string;
|
|
18
|
+
patch?: Record<string, unknown>;
|
|
23
19
|
}
|
|
24
|
-
/** Description of a starter template the host wants in the "Templates" dropdown. */
|
|
25
20
|
export interface DefaultToolbarTemplate {
|
|
26
|
-
/** Template id used as the React key. */
|
|
27
21
|
id: string;
|
|
28
|
-
|
|
29
|
-
label: ReactNode;
|
|
30
|
-
/** Template spec consumed by `actions.insertTemplate`. */
|
|
22
|
+
label: string;
|
|
31
23
|
spec: TreeTemplateSpec;
|
|
32
24
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
25
|
+
export interface DefaultToolbarLabels {
|
|
26
|
+
add?: string;
|
|
27
|
+
templates?: string;
|
|
28
|
+
validate?: string;
|
|
29
|
+
autoLayout?: string;
|
|
30
|
+
resetView?: string;
|
|
31
|
+
preview?: string;
|
|
32
|
+
save?: string;
|
|
33
|
+
publish?: string;
|
|
34
|
+
history?: string;
|
|
35
|
+
audit?: string;
|
|
36
|
+
snapshot?: string;
|
|
37
|
+
clone?: string;
|
|
38
|
+
draftBadge?: string;
|
|
39
|
+
publishedBadge?: string;
|
|
40
|
+
}
|
|
39
41
|
export interface DefaultToolbarState {
|
|
40
42
|
isPublished: boolean;
|
|
41
43
|
saving: boolean;
|
|
@@ -46,112 +48,36 @@ export interface DefaultToolbarState {
|
|
|
46
48
|
hasTree: boolean;
|
|
47
49
|
autosaveStatus: AutosaveStatus;
|
|
48
50
|
}
|
|
49
|
-
/**
|
|
50
|
-
* Minimal subset of {@link UseTreeSpecEditorActions} consumed by
|
|
51
|
-
* {@link buildDefaultToolbarSpec}.
|
|
52
|
-
*/
|
|
53
51
|
export interface DefaultToolbarActions {
|
|
54
|
-
addNodeOfType: (type: string, patch?:
|
|
52
|
+
addNodeOfType: (type: string, patch?: Record<string, unknown>) => void;
|
|
55
53
|
insertTemplate: (spec: TreeTemplateSpec) => void;
|
|
56
54
|
triggerResetView: () => void;
|
|
57
55
|
autoLayout: () => void;
|
|
58
|
-
validate: (
|
|
59
|
-
saveDraft: (
|
|
60
|
-
setShowDraftHistory: (
|
|
61
|
-
setShowAudit: (
|
|
62
|
-
createSnapshot: (
|
|
63
|
-
cloneToDraft: (
|
|
64
|
-
setShowPublishModal: (
|
|
56
|
+
validate: () => void | Promise<void>;
|
|
57
|
+
saveDraft: () => void | Promise<void>;
|
|
58
|
+
setShowDraftHistory: (show: boolean) => void;
|
|
59
|
+
setShowAudit: (show: boolean) => void;
|
|
60
|
+
createSnapshot: () => void | Promise<void>;
|
|
61
|
+
cloneToDraft: () => void | Promise<void>;
|
|
62
|
+
setShowPublishModal: (show: boolean) => void;
|
|
65
63
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Adapter-capability flags consumed by {@link buildDefaultToolbarSpec}.
|
|
68
|
-
* Hosts pass `Boolean(adapter.validate)` (etc.) so the builder can gate the
|
|
69
|
-
* Validate / Draft history / Audit / Snapshot / Clone / Publish buttons.
|
|
70
|
-
*/
|
|
71
|
-
export interface DefaultToolbarCapabilities {
|
|
72
|
-
/** Show the Validate button. */
|
|
73
|
-
canValidate?: boolean;
|
|
74
|
-
/** Show the Draft history button. */
|
|
75
|
-
canListSnapshots?: boolean;
|
|
76
|
-
/** Show the Audit button. */
|
|
77
|
-
canListAudit?: boolean;
|
|
78
|
-
/** Show the Snapshot button. */
|
|
79
|
-
canCreateSnapshot?: boolean;
|
|
80
|
-
/** Show the Clone to Draft button. */
|
|
81
|
-
canCloneToDraft?: boolean;
|
|
82
|
-
/** Show the Publish button. */
|
|
83
|
-
canPublish?: boolean;
|
|
84
|
-
}
|
|
85
|
-
/** Optional labels for the default toolbar; defaults are in en-US. */
|
|
86
|
-
export interface DefaultToolbarLabels {
|
|
87
|
-
add?: ReactNode;
|
|
88
|
-
templates?: ReactNode;
|
|
89
|
-
resetView?: ReactNode;
|
|
90
|
-
autoLayout?: ReactNode;
|
|
91
|
-
validate?: ReactNode;
|
|
92
|
-
draftHistory?: ReactNode;
|
|
93
|
-
audit?: ReactNode;
|
|
94
|
-
snapshot?: ReactNode;
|
|
95
|
-
snapshotInFlight?: ReactNode;
|
|
96
|
-
cloneToDraft?: ReactNode;
|
|
97
|
-
cloneInFlight?: ReactNode;
|
|
98
|
-
saveDraft?: ReactNode;
|
|
99
|
-
saveDraftInFlight?: ReactNode;
|
|
100
|
-
publish?: ReactNode;
|
|
101
|
-
publishInFlight?: ReactNode;
|
|
102
|
-
statusPublished?: ReactNode;
|
|
103
|
-
statusDraft?: ReactNode;
|
|
104
|
-
}
|
|
105
|
-
/** Options for {@link buildDefaultToolbarSpec}. */
|
|
106
64
|
export interface BuildDefaultToolbarSpecOptions {
|
|
107
|
-
/** Editor state from `useTreeSpecEditor` (or a structurally compatible source). */
|
|
108
65
|
state: DefaultToolbarState;
|
|
109
|
-
/** Editor actions from `useTreeSpecEditor`. */
|
|
110
66
|
actions: DefaultToolbarActions;
|
|
111
|
-
/** Adapter-capability flags. Buttons are hidden when their flag is false. */
|
|
112
67
|
capabilities?: DefaultToolbarCapabilities;
|
|
113
|
-
/** Node types the host wants in the "+ Add" dropdown. */
|
|
114
68
|
nodeTypes?: DefaultToolbarNodeType[];
|
|
115
|
-
/** Starter templates the host wants in the "Templates" dropdown. */
|
|
116
69
|
templates?: DefaultToolbarTemplate[];
|
|
117
|
-
/**
|
|
118
|
-
* Optional slot rendered before everything else. Hosts use this for a
|
|
119
|
-
* router-aware back link (e.g. `() => <Link to=...>Back</Link>`).
|
|
120
|
-
*/
|
|
121
70
|
backSlot?: {
|
|
122
71
|
id?: string;
|
|
123
72
|
render: () => ReactNode;
|
|
124
73
|
};
|
|
125
|
-
/**
|
|
126
|
-
* Optional Preview action. When supplied, a `Preview` button is appended
|
|
127
|
-
* after the status badge.
|
|
128
|
-
*/
|
|
129
74
|
preview?: {
|
|
130
75
|
onClick: () => void;
|
|
131
76
|
disabled?: boolean;
|
|
132
|
-
label?: ReactNode;
|
|
133
77
|
};
|
|
134
|
-
/**
|
|
135
|
-
* When `false`, the published/draft badge and autosave status text are not
|
|
136
|
-
* appended to the toolbar (hosts can show them elsewhere, e.g. an info panel).
|
|
137
|
-
* Default: `true`.
|
|
138
|
-
*/
|
|
139
|
-
includePublishedAutosaveStatus?: boolean;
|
|
140
|
-
/** Items appended after the autosave-status text (e.g. project-specific badges). */
|
|
141
|
-
extraItems?: ToolbarItem[];
|
|
142
|
-
/** Override the default English labels. */
|
|
143
78
|
labels?: DefaultToolbarLabels;
|
|
79
|
+
extraItems?: ToolbarItem[];
|
|
144
80
|
}
|
|
145
|
-
/**
|
|
146
|
-
* Build the standard TreeSpec editor toolbar — Reset view / Auto layout /
|
|
147
|
-
* Validate / Draft history / Audit / Snapshot / Clone to Draft / Save Draft /
|
|
148
|
-
* Publish / (optional) status badge + autosave label — and inject host-supplied
|
|
149
|
-
* vocabulary (node types, templates, back-link slot, preview action).
|
|
150
|
-
*
|
|
151
|
-
* This is the opinionated SignalSafe + Bootstrap toolbar layout. Hosts using a
|
|
152
|
-
* different UI library should write their own builder; the
|
|
153
|
-
* {@link useTreeSpecEditor} hook does not depend on this helper.
|
|
154
|
-
*/
|
|
81
|
+
/** Build the default TreeSpec editor toolbar item list from state, actions, and capability flags. */
|
|
155
82
|
export declare function buildDefaultToolbarSpec(options: BuildDefaultToolbarSpecOptions): ToolbarItem[];
|
|
156
|
-
export { AUTOSAVE_STATUS };
|
|
157
83
|
//# sourceMappingURL=buildDefaultToolbarSpec.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildDefaultToolbarSpec.d.ts","sourceRoot":"","sources":["../../src/lib/buildDefaultToolbarSpec.
|
|
1
|
+
{"version":3,"file":"buildDefaultToolbarSpec.d.ts","sourceRoot":"","sources":["../../src/lib/buildDefaultToolbarSpec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,131 +1,90 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { TOOLBAR_ITEM_KIND
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
audit: 'Audit',
|
|
11
|
-
snapshot: 'Snapshot',
|
|
12
|
-
snapshotInFlight: 'Creating…',
|
|
13
|
-
cloneToDraft: 'Clone to Draft',
|
|
14
|
-
cloneInFlight: 'Cloning…',
|
|
15
|
-
saveDraft: 'Save Draft',
|
|
16
|
-
saveDraftInFlight: 'Saving…',
|
|
17
|
-
publish: 'Publish',
|
|
18
|
-
publishInFlight: 'Publishing…',
|
|
19
|
-
statusPublished: 'Published (read-only)',
|
|
20
|
-
statusDraft: 'Draft',
|
|
21
|
-
};
|
|
22
|
-
function titleCase(type) {
|
|
23
|
-
return type
|
|
24
|
-
.split(/[_-]/)
|
|
25
|
-
.filter(Boolean)
|
|
26
|
-
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
27
|
-
.join(' ');
|
|
1
|
+
import { getAutosaveStatusLabel, } from '@signalsafe/tree-spec-editor-core';
|
|
2
|
+
import { TOOLBAR_ITEM_KIND } from '../panels/ToolbarPanel.js';
|
|
3
|
+
export { AUTOSAVE_STATUS } from '@signalsafe/tree-spec-editor-core';
|
|
4
|
+
function appendBackSlot(items, backSlot) {
|
|
5
|
+
items.push({
|
|
6
|
+
kind: TOOLBAR_ITEM_KIND.CUSTOM,
|
|
7
|
+
id: backSlot.id ?? 'back',
|
|
8
|
+
render: backSlot.render,
|
|
9
|
+
});
|
|
28
10
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
label: nt.label ?? titleCase(nt.type),
|
|
61
|
-
onClick: () => actions.addNodeOfType(nt.type, nt.patch),
|
|
62
|
-
disabled: state.isPublished,
|
|
63
|
-
};
|
|
64
|
-
})
|
|
65
|
-
.filter((e) => e !== null);
|
|
66
|
-
items.push({
|
|
67
|
-
kind: TOOLBAR_ITEM_KIND.DROPDOWN,
|
|
68
|
-
id: 'add',
|
|
69
|
-
label: labels.add,
|
|
70
|
-
disabled: state.isPublished,
|
|
71
|
-
entries,
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
if (templates.length > 0) {
|
|
75
|
-
const entries = templates.map((t) => ({
|
|
11
|
+
function appendAddDropdown(items, nodeTypes, actions, labels, isPublished) {
|
|
12
|
+
const addEntries = nodeTypes.map((entry, index) => {
|
|
13
|
+
if (entry.divider) {
|
|
14
|
+
return { id: entry.id ?? `divider-${index}`, label: '', divider: true };
|
|
15
|
+
}
|
|
16
|
+
const type = entry.type ?? 'prompt';
|
|
17
|
+
return {
|
|
18
|
+
id: entry.id ?? `add-${type}`,
|
|
19
|
+
label: entry.label ?? type,
|
|
20
|
+
onClick: () => actions.addNodeOfType(type, entry.patch),
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
if (addEntries.length === 0)
|
|
24
|
+
return;
|
|
25
|
+
items.push({
|
|
26
|
+
kind: TOOLBAR_ITEM_KIND.DROPDOWN,
|
|
27
|
+
id: 'add',
|
|
28
|
+
label: labels.add ?? '+ Add',
|
|
29
|
+
disabled: isPublished,
|
|
30
|
+
entries: addEntries,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function appendTemplatesDropdown(items, templates, actions, labels, isPublished) {
|
|
34
|
+
if (templates.length === 0)
|
|
35
|
+
return;
|
|
36
|
+
items.push({
|
|
37
|
+
kind: TOOLBAR_ITEM_KIND.DROPDOWN,
|
|
38
|
+
id: 'templates',
|
|
39
|
+
label: labels.templates ?? 'Templates',
|
|
40
|
+
disabled: isPublished,
|
|
41
|
+
entries: templates.map((t) => ({
|
|
76
42
|
id: t.id,
|
|
77
43
|
label: t.label,
|
|
78
44
|
onClick: () => actions.insertTemplate(t.spec),
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
label: labels.templates,
|
|
85
|
-
disabled: state.isPublished,
|
|
86
|
-
entries,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
45
|
+
})),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function appendLayoutButtons(items, state, actions, labels) {
|
|
49
|
+
const { isPublished, hasTree } = state;
|
|
89
50
|
items.push({
|
|
90
51
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
91
52
|
id: 'reset-view',
|
|
92
|
-
label: labels.resetView,
|
|
53
|
+
label: labels.resetView ?? 'Reset view',
|
|
54
|
+
disabled: !hasTree,
|
|
93
55
|
onClick: () => actions.triggerResetView(),
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
items.push({
|
|
56
|
+
}, {
|
|
97
57
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
98
58
|
id: 'auto-layout',
|
|
99
|
-
label: labels.autoLayout,
|
|
59
|
+
label: labels.autoLayout ?? 'Auto layout',
|
|
60
|
+
disabled: !hasTree || isPublished,
|
|
100
61
|
onClick: () => actions.autoLayout(),
|
|
101
|
-
disabled: state.isPublished,
|
|
102
62
|
});
|
|
63
|
+
}
|
|
64
|
+
function appendCapabilityButtons(items, capabilities, state, actions, labels) {
|
|
65
|
+
const { isPublished, creatingSnapshot, cloning, hasTree } = state;
|
|
103
66
|
if (capabilities.canValidate) {
|
|
104
67
|
items.push({
|
|
105
68
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
106
69
|
id: 'validate',
|
|
107
|
-
label: labels.validate,
|
|
108
|
-
|
|
109
|
-
onClick: () =>
|
|
110
|
-
void actions.validate();
|
|
111
|
-
},
|
|
112
|
-
disabled: state.saving || state.publishing,
|
|
70
|
+
label: labels.validate ?? 'Validate',
|
|
71
|
+
disabled: !hasTree,
|
|
72
|
+
onClick: () => void actions.validate(),
|
|
113
73
|
});
|
|
114
74
|
}
|
|
115
75
|
if (capabilities.canListSnapshots) {
|
|
116
76
|
items.push({
|
|
117
77
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
118
78
|
id: 'draft-history',
|
|
119
|
-
label: labels.
|
|
79
|
+
label: labels.history ?? 'Draft history',
|
|
120
80
|
onClick: () => actions.setShowDraftHistory(true),
|
|
121
|
-
disabled: state.isPublished,
|
|
122
81
|
});
|
|
123
82
|
}
|
|
124
83
|
if (capabilities.canListAudit) {
|
|
125
84
|
items.push({
|
|
126
85
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
127
86
|
id: 'audit',
|
|
128
|
-
label: labels.audit,
|
|
87
|
+
label: labels.audit ?? 'Audit log',
|
|
129
88
|
onClick: () => actions.setShowAudit(true),
|
|
130
89
|
});
|
|
131
90
|
}
|
|
@@ -133,70 +92,76 @@ export function buildDefaultToolbarSpec(options) {
|
|
|
133
92
|
items.push({
|
|
134
93
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
135
94
|
id: 'snapshot',
|
|
136
|
-
label:
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
},
|
|
140
|
-
disabled: state.isPublished || !state.hasTree || state.creatingSnapshot,
|
|
95
|
+
label: creatingSnapshot ? 'Creating…' : (labels.snapshot ?? 'Snapshot'),
|
|
96
|
+
disabled: isPublished || creatingSnapshot || !hasTree,
|
|
97
|
+
onClick: () => void actions.createSnapshot(),
|
|
141
98
|
});
|
|
142
99
|
}
|
|
143
100
|
if (capabilities.canCloneToDraft) {
|
|
144
101
|
items.push({
|
|
145
102
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
146
103
|
id: 'clone-to-draft',
|
|
147
|
-
label:
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
},
|
|
151
|
-
disabled: state.cloning,
|
|
104
|
+
label: cloning ? 'Cloning…' : (labels.clone ?? 'Clone to draft'),
|
|
105
|
+
disabled: cloning,
|
|
106
|
+
onClick: () => void actions.cloneToDraft(),
|
|
152
107
|
});
|
|
153
108
|
}
|
|
109
|
+
}
|
|
110
|
+
function appendSaveAndPublish(items, capabilities, state, actions, labels, preview) {
|
|
111
|
+
const { isPublished, saving, publishing, canPublish, hasTree } = state;
|
|
154
112
|
items.push({
|
|
155
113
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
156
114
|
id: 'save-draft',
|
|
157
|
-
label:
|
|
158
|
-
|
|
159
|
-
onClick: () =>
|
|
160
|
-
void actions.saveDraft();
|
|
161
|
-
},
|
|
162
|
-
disabled: state.isPublished || state.saving || state.publishing,
|
|
115
|
+
label: saving ? 'Saving…' : (labels.save ?? 'Save draft'),
|
|
116
|
+
disabled: isPublished || saving || !hasTree,
|
|
117
|
+
onClick: () => void actions.saveDraft(),
|
|
163
118
|
});
|
|
164
119
|
if (capabilities.canPublish) {
|
|
165
120
|
items.push({
|
|
166
121
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
167
122
|
id: 'publish',
|
|
168
|
-
label:
|
|
169
|
-
|
|
123
|
+
label: publishing ? 'Publishing…' : (labels.publish ?? 'Publish'),
|
|
124
|
+
disabled: isPublished || publishing || !canPublish,
|
|
170
125
|
onClick: () => actions.setShowPublishModal(true),
|
|
171
|
-
disabled: state.isPublished || !state.canPublish || state.saving || state.publishing,
|
|
172
126
|
});
|
|
173
127
|
}
|
|
174
128
|
if (preview) {
|
|
175
129
|
items.push({
|
|
176
130
|
kind: TOOLBAR_ITEM_KIND.BUTTON,
|
|
177
131
|
id: 'preview',
|
|
178
|
-
label: preview
|
|
179
|
-
variant: 'outline-dark',
|
|
180
|
-
onClick: preview.onClick,
|
|
132
|
+
label: labels.preview ?? 'Preview',
|
|
181
133
|
disabled: preview.disabled ?? false,
|
|
134
|
+
onClick: preview.onClick,
|
|
182
135
|
});
|
|
183
136
|
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
137
|
+
}
|
|
138
|
+
function appendStatusFooter(items, state, labels, extraItems) {
|
|
139
|
+
const { isPublished, autosaveStatus } = state;
|
|
140
|
+
items.push({
|
|
141
|
+
kind: TOOLBAR_ITEM_KIND.BADGE,
|
|
142
|
+
id: 'status',
|
|
143
|
+
label: isPublished
|
|
144
|
+
? (labels.publishedBadge ?? 'Published')
|
|
145
|
+
: (labels.draftBadge ?? 'Draft'),
|
|
146
|
+
variant: isPublished ? 'success' : 'secondary',
|
|
147
|
+
}, {
|
|
148
|
+
kind: TOOLBAR_ITEM_KIND.TEXT,
|
|
149
|
+
id: 'autosave',
|
|
150
|
+
content: getAutosaveStatusLabel(autosaveStatus),
|
|
151
|
+
}, ...extraItems);
|
|
152
|
+
}
|
|
153
|
+
/** Build the default TreeSpec editor toolbar item list from state, actions, and capability flags. */
|
|
154
|
+
export function buildDefaultToolbarSpec(options) {
|
|
155
|
+
const { state, actions, capabilities = {}, nodeTypes = [], templates = [], backSlot, preview, labels = {}, extraItems = [], } = options;
|
|
156
|
+
const items = [];
|
|
157
|
+
if (backSlot) {
|
|
158
|
+
appendBackSlot(items, backSlot);
|
|
196
159
|
}
|
|
197
|
-
|
|
198
|
-
|
|
160
|
+
appendAddDropdown(items, nodeTypes, actions, labels, state.isPublished);
|
|
161
|
+
appendTemplatesDropdown(items, templates, actions, labels, state.isPublished);
|
|
162
|
+
appendLayoutButtons(items, state, actions, labels);
|
|
163
|
+
appendCapabilityButtons(items, capabilities, state, actions, labels);
|
|
164
|
+
appendSaveAndPublish(items, capabilities, state, actions, labels, preview);
|
|
165
|
+
appendStatusFooter(items, state, labels, extraItems);
|
|
199
166
|
return items;
|
|
200
167
|
}
|
|
201
|
-
// Re-exported for tests / hosts wiring the autosave label themselves.
|
|
202
|
-
export { AUTOSAVE_STATUS };
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Map a TreeSpec issue severity to the matching Bootstrap badge classes.
|
|
3
|
-
*
|
|
4
|
-
* This lives in the Bootstrap-flavored package because the returned class
|
|
5
|
-
* names are Bootstrap-specific. Material / Angular shells expose their own
|
|
6
|
-
* equivalent helper.
|
|
7
|
-
*/
|
|
1
|
+
/** Bootstrap severity badge class for issue rows. */
|
|
8
2
|
export declare function getIssueSeverityBadgeClass(severity: string): string;
|
|
9
3
|
//# sourceMappingURL=panelHelpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"panelHelpers.d.ts","sourceRoot":"","sources":["../../src/lib/panelHelpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"panelHelpers.d.ts","sourceRoot":"","sources":["../../src/lib/panelHelpers.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAWnE"}
|
package/dist/lib/panelHelpers.js
CHANGED
|
@@ -1,22 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Bootstrap-flavored helpers for the editor sidebar panels.
|
|
3
|
-
*
|
|
4
|
-
* Pure / framework-agnostic helpers (e.g. {@link buildStableEntries}) live in
|
|
5
|
-
* `@signalsafe/tree-spec-editor-core` and are re-exported from this package's
|
|
6
|
-
* barrel for consumer convenience.
|
|
7
|
-
*/
|
|
8
1
|
import { TREE_SPEC_ISSUE_SEVERITY } from '@signalsafe/tree-spec';
|
|
9
|
-
/**
|
|
10
|
-
* Map a TreeSpec issue severity to the matching Bootstrap badge classes.
|
|
11
|
-
*
|
|
12
|
-
* This lives in the Bootstrap-flavored package because the returned class
|
|
13
|
-
* names are Bootstrap-specific. Material / Angular shells expose their own
|
|
14
|
-
* equivalent helper.
|
|
15
|
-
*/
|
|
2
|
+
/** Bootstrap severity badge class for issue rows. */
|
|
16
3
|
export function getIssueSeverityBadgeClass(severity) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
4
|
+
switch (severity) {
|
|
5
|
+
case TREE_SPEC_ISSUE_SEVERITY.ERROR:
|
|
6
|
+
return 'text-bg-danger';
|
|
7
|
+
case TREE_SPEC_ISSUE_SEVERITY.WARNING:
|
|
8
|
+
return 'text-bg-warning text-dark';
|
|
9
|
+
case TREE_SPEC_ISSUE_SEVERITY.INFO:
|
|
10
|
+
return 'text-bg-info text-dark';
|
|
11
|
+
default:
|
|
12
|
+
return 'text-bg-secondary';
|
|
13
|
+
}
|
|
22
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssuesPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IssuesPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAKxF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uGAAuG;IACvG,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;CAC3C;AA4BD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAChC,MAAM,EACN,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,IAAI,EACJ,KAAgB,EAChB,iBAAyC,EACzC,eAAwC,EACxC,6BAAoC,GACvC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"IssuesPanel.d.ts","sourceRoot":"","sources":["../../src/panels/IssuesPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAKxF,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,aAAa,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9C;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB,0DAA0D;IAC1D,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C;;;;OAIG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uGAAuG;IACvG,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,OAAO,CAAC;CAC3C;AA4BD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,EAChC,MAAM,EACN,eAAe,EACf,aAAa,EACb,WAAW,EACX,mBAAmB,EACnB,IAAI,EACJ,KAAgB,EAChB,iBAAyC,EACzC,eAAwC,EACxC,6BAAoC,GACvC,EAAE,QAAQ,CAAC,gBAAgB,CAAC,2CAmG5B"}
|
|
@@ -36,11 +36,6 @@ export default function IssuesPanel({ issues, lastValidatedAt, onSelectIssue, is
|
|
|
36
36
|
return (_jsxs("div", { className: "card", children: [_jsxs("div", { className: "card-header bg-body-secondary py-2 px-2 d-flex justify-content-between align-items-center gap-2", children: [_jsxs("div", { className: "d-flex align-items-center min-w-0", children: [_jsx("span", { className: "fw-semibold", children: title }), _jsx(PanelHeaderCollapseCarets, { expanded: expanded, onToggle: () => setExpanded((v) => !v) })] }), showValidationSummaryInHeader ? (_jsx("span", { className: "text-muted font-size-12 text-end flex-shrink-0", children: lastValidatedAt ? `Validated ${formatTimestamp(lastValidatedAt)}` : 'Not validated' })) : null] }), _jsx("div", { className: `card-body p-0${expanded ? '' : ' d-none'}`, "aria-hidden": !expanded, children: issues.length === 0 ? (_jsx("div", { className: "list-group list-group-flush", children: _jsx("div", { className: "list-group-item text-muted small py-2 px-3 border-0", children: _jsx("em", { children: "No issues" }) }) })) : (_jsxs(_Fragment, { children: [_jsx(Form.Control, { className: "rounded-0 border-0 border-bottom shadow-none", placeholder: searchPlaceholder, value: issueSearch, onChange: (e) => onIssueSearchChange(e.target.value) }), _jsx("div", { className: "overflow-auto-max-h-320", children: issueEntries.length === 0 ? (_jsx("div", { className: "list-group list-group-flush", children: _jsx("div", { className: "list-group-item text-muted small py-2 px-3 border-0", children: _jsx("em", { children: "No matching issues." }) }) })) : (_jsx("div", { className: "list-group list-group-flush", children: issueEntries.map(({ item: issue, key }) => {
|
|
37
37
|
const typeLabel = nodeTypeLabel(tree, issue.node_id);
|
|
38
38
|
const headerTitle = issueHeaderTitle(issue, typeLabel);
|
|
39
|
-
return (_jsxs("
|
|
40
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
41
|
-
e.preventDefault();
|
|
42
|
-
onSelectIssue(issue);
|
|
43
|
-
}
|
|
44
|
-
}, children: [_jsxs("div", { className: "d-flex w-100 justify-content-between align-items-center gap-2 mb-1", children: [_jsxs("div", { className: "min-w-0 flex-grow-1 text-truncate text-start", title: headerTitle, children: [_jsx("span", { className: "fs-6 fw-semibold text-uppercase", children: issue.node_id ?? '—' }), _jsx("span", { className: "fs-6 text-uppercase text-body-secondary", children: `, ${typeLabel}` })] }), _jsx("span", { className: `badge flex-shrink-0 text-uppercase ${getIssueSeverityBadgeClass(issue.severity)}`, children: issue.severity })] }), _jsx("p", { className: "mb-1 small text-truncate font-monospace", style: { minWidth: 0 }, children: issue.message }), issue.choice_id ? (_jsx("small", { className: "text-body-secondary", children: issue.choice_id })) : null] }, key));
|
|
39
|
+
return (_jsxs("button", { type: "button", className: "list-group-item list-group-item-action px-3 py-2 text-start w-100", onClick: () => onSelectIssue(issue), children: [_jsxs("div", { className: "d-flex w-100 justify-content-between align-items-center gap-2 mb-1", children: [_jsxs("div", { className: "min-w-0 flex-grow-1 text-truncate text-start", title: headerTitle, children: [_jsx("span", { className: "fs-6 fw-semibold text-uppercase", children: issue.node_id ?? '—' }), _jsx("span", { className: "fs-6 text-uppercase text-body-secondary", children: `, ${typeLabel}` })] }), _jsx("span", { className: `badge flex-shrink-0 text-uppercase ${getIssueSeverityBadgeClass(issue.severity)}`, children: issue.severity })] }), _jsx("p", { className: "mb-1 small text-truncate font-monospace", style: { minWidth: 0 }, children: issue.message }), issue.choice_id ? (_jsx("small", { className: "text-body-secondary", children: issue.choice_id })) : null] }, key));
|
|
45
40
|
}) })) })] })) })] }));
|
|
46
41
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodesPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NodesPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAIH,KAAK,UAAU,EACf,KAAK,cAAc,EACtB,MAAM,mCAAmC,CAAC;AAI3C,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AA0BD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,iBAAwC,EACxC,OAA0B,EAC1B,SAAS,EACT,YAAY,EACZ,WAAmB,GACtB,EAAE,QAAQ,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"NodesPanel.d.ts","sourceRoot":"","sources":["../../src/panels/NodesPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,EAIH,KAAK,UAAU,EACf,KAAK,cAAc,EACtB,MAAM,mCAAmC,CAAC;AAI3C,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,mBAAmB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAChD,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mFAAmF;IACnF,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AA0BD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,SAAS,EACT,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,iBAAwC,EACxC,OAA0B,EAC1B,SAAS,EACT,YAAY,EACZ,WAAmB,GACtB,EAAE,QAAQ,CAAC,eAAe,CAAC,2CAqI3B"}
|
|
@@ -43,14 +43,6 @@ export default function NodesPanel({ tree, nodeSearch, selection, showMiniMap, o
|
|
|
43
43
|
const typeLabel = n.type || 'unknown';
|
|
44
44
|
const mutedTop = isSelected ? '' : ' text-body-secondary';
|
|
45
45
|
const mutedMeta = isSelected ? 'opacity-75' : 'text-body-secondary';
|
|
46
|
-
return (_jsxs("div", {
|
|
47
|
-
if (e.key === 'Enter' || e.key === ' ') {
|
|
48
|
-
e.preventDefault();
|
|
49
|
-
onNodeSelect(n.id);
|
|
50
|
-
}
|
|
51
|
-
}, children: [_jsxs("div", { className: "d-flex w-100 justify-content-between align-items-center gap-2 mb-1", children: [_jsxs("div", { className: "min-w-0 flex-grow-1 text-truncate text-start", title: `${n.id}, ${typeLabel}`, children: [_jsx("span", { className: `fs-6 fw-semibold text-uppercase${mutedTop}`, children: n.id }), _jsx("span", { className: `fs-6 text-uppercase ${isSelected ? 'opacity-75' : 'text-body-secondary'}`, children: `, ${typeLabel}` })] }), onDeleteNode ? (_jsx("button", { type: "button", className: "btn p-0 border-0 bg-transparent flex-shrink-0", "aria-label": `Delete node ${n.id}`, title: "Delete node", disabled: isPublished, onClick: (e) => {
|
|
52
|
-
e.stopPropagation();
|
|
53
|
-
onDeleteNode(n.id);
|
|
54
|
-
}, children: _jsx("i", { className: `bi bi-trash action-icon cursor-pointer${isPublished ? ' text-secondary opacity-50' : ' text-danger'}`, "aria-hidden": true }) })) : null] }), _jsx("p", { className: "mb-1 small text-truncate", style: { minWidth: 0 }, children: n.prompt || '(empty)' }), _jsx("small", { className: mutedMeta, children: choiceLine(n) })] }, n.id));
|
|
46
|
+
return (_jsx("div", { className: `list-group-item px-3 py-2${isSelected ? ' active' : ''}`, "aria-current": isSelected ? 'true' : undefined, children: _jsxs("div", { className: "d-flex w-100 justify-content-between align-items-start gap-2", children: [_jsxs("button", { type: "button", className: "btn p-0 border-0 bg-transparent flex-grow-1 text-start", onClick: () => onNodeSelect(n.id), children: [_jsx("div", { className: "d-flex w-100 justify-content-between align-items-center gap-2 mb-1", children: _jsxs("div", { className: "min-w-0 flex-grow-1 text-truncate text-start", title: `${n.id}, ${typeLabel}`, children: [_jsx("span", { className: `fs-6 fw-semibold text-uppercase${mutedTop}`, children: n.id }), _jsx("span", { className: `fs-6 text-uppercase ${isSelected ? 'opacity-75' : 'text-body-secondary'}`, children: `, ${typeLabel}` })] }) }), _jsx("p", { className: "mb-1 small text-truncate", style: { minWidth: 0 }, children: n.prompt || '(empty)' }), _jsx("small", { className: mutedMeta, children: choiceLine(n) })] }), onDeleteNode ? (_jsx("button", { type: "button", className: "btn p-0 border-0 bg-transparent flex-shrink-0", "aria-label": `Delete node ${n.id}`, title: "Delete node", disabled: isPublished, onClick: () => onDeleteNode(n.id), children: _jsx("i", { className: `bi bi-trash action-icon cursor-pointer${isPublished ? ' text-secondary opacity-50' : ' text-danger'}`, "aria-hidden": true }) })) : null] }) }, n.id));
|
|
55
47
|
}) })) }), _jsx("div", { className: "card-footer p-2 border-top", children: _jsxs("div", { className: "d-flex justify-content-between align-items-center", children: [_jsx("div", { className: "text-muted font-size-12", children: tipText }), _jsx(Form.Check, { type: "switch", id: "showMiniMapToggle", label: "Mini-map", checked: showMiniMap, onChange: (e) => onShowMiniMapChange(e.target.checked), className: "font-size-12" })] }) })] })] }));
|
|
56
48
|
}
|
|
@@ -11,8 +11,6 @@
|
|
|
11
11
|
* the package stays free of `react-router` (or any other) routing concerns.
|
|
12
12
|
*/
|
|
13
13
|
import { type ReactNode } from 'react';
|
|
14
|
-
/** Bootstrap variant string (e.g. "outline-secondary", "primary", "success"). */
|
|
15
|
-
export type ToolbarVariant = string;
|
|
16
14
|
/**
|
|
17
15
|
* Discriminator values used by the `kind` field on every {@link ToolbarItem}.
|
|
18
16
|
* Use these constants instead of bare string literals (e.g.
|
|
@@ -34,7 +32,7 @@ export interface ToolbarButtonItem {
|
|
|
34
32
|
label: ReactNode;
|
|
35
33
|
onClick: () => void;
|
|
36
34
|
/** Bootstrap variant. Default: `"outline-secondary"`. */
|
|
37
|
-
variant?:
|
|
35
|
+
variant?: string;
|
|
38
36
|
disabled?: boolean;
|
|
39
37
|
title?: string;
|
|
40
38
|
className?: string;
|
|
@@ -55,7 +53,7 @@ export interface ToolbarDropdownItem {
|
|
|
55
53
|
label: ReactNode;
|
|
56
54
|
entries: ToolbarDropdownEntry[];
|
|
57
55
|
/** Bootstrap variant for the toggle. Default: `"outline-secondary"`. */
|
|
58
|
-
variant?:
|
|
56
|
+
variant?: string;
|
|
59
57
|
disabled?: boolean;
|
|
60
58
|
className?: string;
|
|
61
59
|
}
|
|
@@ -64,7 +62,7 @@ export interface ToolbarBadgeItem {
|
|
|
64
62
|
id?: string;
|
|
65
63
|
label: ReactNode;
|
|
66
64
|
/** Bootstrap badge variant (e.g. `"success"`, `"secondary"`). Default: `"secondary"`. */
|
|
67
|
-
variant?:
|
|
65
|
+
variant?: string;
|
|
68
66
|
className?: string;
|
|
69
67
|
}
|
|
70
68
|
export interface ToolbarTextItem {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolbarPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ToolbarPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD
|
|
1
|
+
{"version":3,"file":"ToolbarPanel.d.ts","sourceRoot":"","sources":["../../src/panels/ToolbarPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGjD;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;CAMpB,CAAC;AAEX,0EAA0E;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAEzF,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC;IACtC,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACjC,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,OAAO,iBAAiB,CAAC,QAAQ,CAAC;IACxC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,SAAS,CAAC;IACjB,yFAAyF;IACzF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,OAAO,iBAAiB,CAAC,IAAI,CAAC;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,SAAS,CAAC;IACnB,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,OAAO,iBAAiB,CAAC,MAAM,CAAC;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oFAAoF;IACpF,MAAM,EAAE,MAAM,SAAS,CAAC;CAC3B;AAED,MAAM,MAAM,WAAW,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,gBAAgB,GAChB,eAAe,GACf,iBAAiB,CAAC;AAExB,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAyED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EACjC,KAAK,EACL,SAAiC,GACpC,EAAE,QAAQ,CAAC,iBAAiB,CAAC,2CAQ7B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signalsafe/tree-spec-editor",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Reusable TreeSpec graph editor (React Flow) and authoring helpers (no API or routing)",
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"test": "cd ../../frontend && yarn vitest run --config vitest.tree-spec-editor.config.ts"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@signalsafe/tree-spec": "^0.1.
|
|
50
|
-
"@signalsafe/tree-spec-editor-core": "^0.1.
|
|
51
|
-
"@signalsafe/tree-spec-editor-react": "^0.1.
|
|
49
|
+
"@signalsafe/tree-spec": "^0.1.4",
|
|
50
|
+
"@signalsafe/tree-spec-editor-core": "^0.1.1",
|
|
51
|
+
"@signalsafe/tree-spec-editor-react": "^0.1.1"
|
|
52
52
|
},
|
|
53
53
|
"peerDependencies": {
|
|
54
54
|
"react": "^18.0.0",
|