@signalsafe/tree-spec-editor 0.2.0 → 0.2.2

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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +186 -59
  3. package/dist/index.d.ts +11 -3
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +5 -1
  6. package/dist/lib/PanelHeaderCollapseCarets.d.ts +4 -7
  7. package/dist/lib/PanelHeaderCollapseCarets.d.ts.map +1 -1
  8. package/dist/lib/PanelHeaderCollapseCarets.js +2 -10
  9. package/dist/lib/buildDefaultToolbarSpec.d.ts +5 -155
  10. package/dist/lib/buildDefaultToolbarSpec.d.ts.map +1 -1
  11. package/dist/lib/buildDefaultToolbarSpec.js +17 -198
  12. package/dist/lib/panelHelpers.d.ts +1 -7
  13. package/dist/lib/panelHelpers.d.ts.map +1 -1
  14. package/dist/lib/panelHelpers.js +11 -19
  15. package/dist/lib/panelNodeLink.d.ts +13 -0
  16. package/dist/lib/panelNodeLink.d.ts.map +1 -0
  17. package/dist/lib/panelNodeLink.js +12 -0
  18. package/dist/lib/selectionStyles.d.ts +9 -0
  19. package/dist/lib/selectionStyles.d.ts.map +1 -0
  20. package/dist/lib/selectionStyles.js +8 -0
  21. package/dist/lib/toolbar/defaultToolbarTypes.d.ts +89 -0
  22. package/dist/lib/toolbar/defaultToolbarTypes.d.ts.map +1 -0
  23. package/dist/lib/toolbar/defaultToolbarTypes.js +1 -0
  24. package/dist/lib/toolbar/toolbarSectionBuilders.d.ts +10 -0
  25. package/dist/lib/toolbar/toolbarSectionBuilders.d.ts.map +1 -0
  26. package/dist/lib/toolbar/toolbarSectionBuilders.js +153 -0
  27. package/dist/modals/AuditLogModal.d.ts +1 -1
  28. package/dist/modals/AuditLogModal.d.ts.map +1 -1
  29. package/dist/modals/AuditLogModal.js +1 -1
  30. package/dist/modals/DraftHistoryModal.d.ts +1 -1
  31. package/dist/modals/DraftHistoryModal.d.ts.map +1 -1
  32. package/dist/modals/DraftHistoryModal.js +1 -1
  33. package/dist/modals/PublishReviewModal.d.ts +1 -1
  34. package/dist/modals/PublishReviewModal.d.ts.map +1 -1
  35. package/dist/panels/AdvancedJsonPanel.d.ts +1 -1
  36. package/dist/panels/AdvancedJsonPanel.d.ts.map +1 -1
  37. package/dist/panels/AppearancePanel.d.ts +26 -0
  38. package/dist/panels/AppearancePanel.d.ts.map +1 -0
  39. package/dist/panels/AppearancePanel.js +76 -0
  40. package/dist/panels/ChoiceEdgeAppearanceFields.d.ts +10 -0
  41. package/dist/panels/ChoiceEdgeAppearanceFields.d.ts.map +1 -0
  42. package/dist/panels/ChoiceEdgeAppearanceFields.js +13 -0
  43. package/dist/panels/ChoiceTemplatesPanel.d.ts +27 -0
  44. package/dist/panels/ChoiceTemplatesPanel.d.ts.map +1 -0
  45. package/dist/panels/ChoiceTemplatesPanel.js +9 -0
  46. package/dist/panels/GraphEditorInfoPanel.d.ts +5 -2
  47. package/dist/panels/GraphEditorInfoPanel.d.ts.map +1 -1
  48. package/dist/panels/GraphEditorInfoPanel.js +6 -6
  49. package/dist/panels/InspectorPanel.d.ts +3 -78
  50. package/dist/panels/InspectorPanel.d.ts.map +1 -1
  51. package/dist/panels/InspectorPanel.js +20 -60
  52. package/dist/panels/IssuesPanel.d.ts +6 -2
  53. package/dist/panels/IssuesPanel.d.ts.map +1 -1
  54. package/dist/panels/IssuesPanel.js +15 -8
  55. package/dist/panels/NodesPanel.d.ts +3 -1
  56. package/dist/panels/NodesPanel.d.ts.map +1 -1
  57. package/dist/panels/NodesPanel.js +12 -14
  58. package/dist/panels/SelectedEdgePanel.d.ts +10 -3
  59. package/dist/panels/SelectedEdgePanel.d.ts.map +1 -1
  60. package/dist/panels/SelectedEdgePanel.js +5 -6
  61. package/dist/panels/ToolbarPanel.d.ts +4 -6
  62. package/dist/panels/ToolbarPanel.d.ts.map +1 -1
  63. package/dist/panels/ToolbarPanel.js +2 -4
  64. package/dist/panels/inspector/ChoiceEditorCard.d.ts +28 -0
  65. package/dist/panels/inspector/ChoiceEditorCard.d.ts.map +1 -0
  66. package/dist/panels/inspector/ChoiceEditorCard.js +36 -0
  67. package/dist/panels/inspector/ChoiceEditorList.d.ts +25 -0
  68. package/dist/panels/inspector/ChoiceEditorList.d.ts.map +1 -0
  69. package/dist/panels/inspector/ChoiceEditorList.js +10 -0
  70. package/dist/panels/inspector/NodeTypeField.d.ts +8 -0
  71. package/dist/panels/inspector/NodeTypeField.d.ts.map +1 -0
  72. package/dist/panels/inspector/NodeTypeField.js +12 -0
  73. package/dist/panels/inspector/RequiredNodeCard.d.ts +14 -0
  74. package/dist/panels/inspector/RequiredNodeCard.d.ts.map +1 -0
  75. package/dist/panels/inspector/RequiredNodeCard.js +16 -0
  76. package/dist/panels/inspector/choiceActionIconProps.d.ts +12 -0
  77. package/dist/panels/inspector/choiceActionIconProps.d.ts.map +1 -0
  78. package/dist/panels/inspector/choiceActionIconProps.js +26 -0
  79. package/dist/panels/inspector/types.d.ts +77 -0
  80. package/dist/panels/inspector/types.d.ts.map +1 -0
  81. package/dist/panels/inspector/types.js +11 -0
  82. package/package.json +83 -65
@@ -1,157 +1,7 @@
1
- import type { ReactNode } from 'react';
2
- import { AUTOSAVE_STATUS, type AutosaveStatus, type EditorNode, type TreeTemplateSpec } from '@signalsafe/tree-spec-editor-core';
3
- import { type ToolbarItem } from '../panels/ToolbarPanel';
4
- /**
5
- * Description of a node type the host wants in the "+ Add" dropdown, or a
6
- * visual divider between groups.
7
- *
8
- * Each entry encodes the host's vocabulary: the package never assumes a fixed
9
- * set of node types. When a label is omitted, the type id is title-cased. Pass
10
- * `{ divider: true }` to insert a `<Dropdown.Divider />`.
11
- */
12
- export interface DefaultToolbarNodeType {
13
- /** Node type id (matches `EditorNode.type`). Required unless `divider: true`. */
14
- type?: string;
15
- /** Optional display label; defaults to the title-cased type id. */
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`. */
22
- divider?: boolean;
23
- }
24
- /** Description of a starter template the host wants in the "Templates" dropdown. */
25
- export interface DefaultToolbarTemplate {
26
- /** Template id used as the React key. */
27
- id: string;
28
- /** Display label in the dropdown. */
29
- label: ReactNode;
30
- /** Template spec consumed by `actions.insertTemplate`. */
31
- spec: TreeTemplateSpec;
32
- }
33
- /**
34
- * Minimal subset of {@link UseTreeSpecEditorState} consumed by
35
- * {@link buildDefaultToolbarSpec}. Hosts pass the state object returned by
36
- * `useTreeSpecEditor` (which satisfies this contract structurally) — see the
37
- * `-react` package for the full state type.
38
- */
39
- export interface DefaultToolbarState {
40
- isPublished: boolean;
41
- saving: boolean;
42
- publishing: boolean;
43
- creatingSnapshot: boolean;
44
- cloning: boolean;
45
- canPublish: boolean;
46
- hasTree: boolean;
47
- autosaveStatus: AutosaveStatus;
48
- }
49
- /**
50
- * Minimal subset of {@link UseTreeSpecEditorActions} consumed by
51
- * {@link buildDefaultToolbarSpec}.
52
- */
53
- export interface DefaultToolbarActions {
54
- addNodeOfType: (type: string, patch?: Partial<EditorNode>) => unknown;
55
- insertTemplate: (spec: TreeTemplateSpec) => void;
56
- triggerResetView: () => void;
57
- autoLayout: () => void;
58
- validate: (...args: unknown[]) => unknown;
59
- saveDraft: (...args: unknown[]) => unknown;
60
- setShowDraftHistory: (next: boolean) => void;
61
- setShowAudit: (next: boolean) => void;
62
- createSnapshot: (...args: unknown[]) => unknown;
63
- cloneToDraft: (...args: unknown[]) => unknown;
64
- setShowPublishModal: (next: boolean) => void;
65
- }
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
- export interface BuildDefaultToolbarSpecOptions {
107
- /** Editor state from `useTreeSpecEditor` (or a structurally compatible source). */
108
- state: DefaultToolbarState;
109
- /** Editor actions from `useTreeSpecEditor`. */
110
- actions: DefaultToolbarActions;
111
- /** Adapter-capability flags. Buttons are hidden when their flag is false. */
112
- capabilities?: DefaultToolbarCapabilities;
113
- /** Node types the host wants in the "+ Add" dropdown. */
114
- nodeTypes?: DefaultToolbarNodeType[];
115
- /** Starter templates the host wants in the "Templates" dropdown. */
116
- 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
- backSlot?: {
122
- id?: string;
123
- render: () => ReactNode;
124
- };
125
- /**
126
- * Optional Preview action. When supplied, a `Preview` button is appended
127
- * after the status badge.
128
- */
129
- preview?: {
130
- onClick: () => void;
131
- disabled?: boolean;
132
- label?: ReactNode;
133
- };
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
- labels?: DefaultToolbarLabels;
144
- }
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
- */
1
+ import type { ToolbarItem } from '../panels/ToolbarPanel.js';
2
+ import type { BuildDefaultToolbarSpecOptions } from './toolbar/defaultToolbarTypes.js';
3
+ export { AUTOSAVE_STATUS } from '@signalsafe/tree-spec-editor-core';
4
+ export type { BuildDefaultToolbarSpecOptions, DefaultToolbarActions, DefaultToolbarBackSlot, DefaultToolbarCapabilities, DefaultToolbarLabels, DefaultToolbarNodeType, DefaultToolbarState, DefaultToolbarTemplate, } from './toolbar/defaultToolbarTypes.js';
5
+ /** Build the default TreeSpec editor toolbar item list from state, actions, and capability flags. */
155
6
  export declare function buildDefaultToolbarSpec(options: BuildDefaultToolbarSpecOptions): ToolbarItem[];
156
- export { AUTOSAVE_STATUS };
157
7
  //# sourceMappingURL=buildDefaultToolbarSpec.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildDefaultToolbarSpec.d.ts","sourceRoot":"","sources":["../../src/lib/buildDefaultToolbarSpec.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"buildDefaultToolbarSpec.d.ts","sourceRoot":"","sources":["../../src/lib/buildDefaultToolbarSpec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAW7D,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,kCAAkC,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,YAAY,EACR,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,GACzB,MAAM,kCAAkC,CAAC;AAE1C,qGAAqG;AACrG,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,WAAW,EAAE,CA+B9F"}
@@ -1,202 +1,21 @@
1
- import { AUTOSAVE_STATUS, getAutosaveStatusLabel, } from '@signalsafe/tree-spec-editor-core';
2
- import { TOOLBAR_ITEM_KIND, } from '../panels/ToolbarPanel';
3
- const DEFAULT_LABELS = {
4
- add: '+ Add',
5
- templates: 'Templates',
6
- resetView: 'Reset view',
7
- autoLayout: 'Auto layout',
8
- validate: 'Validate',
9
- draftHistory: 'Draft history',
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(' ');
28
- }
29
- /**
30
- * Build the standard TreeSpec editor toolbar — Reset view / Auto layout /
31
- * Validate / Draft history / Audit / Snapshot / Clone to Draft / Save Draft /
32
- * Publish / (optional) status badge + autosave label — and inject host-supplied
33
- * vocabulary (node types, templates, back-link slot, preview action).
34
- *
35
- * This is the opinionated SignalSafe + Bootstrap toolbar layout. Hosts using a
36
- * different UI library should write their own builder; the
37
- * {@link useTreeSpecEditor} hook does not depend on this helper.
38
- */
1
+ import { appendAddDropdown, appendBackSlot, appendCapabilityButtons, appendLayoutButtons, appendSaveAndPublish, appendTemplatesDropdown, appendUndoRedo, } from './toolbar/toolbarSectionBuilders.js';
2
+ export { AUTOSAVE_STATUS } from '@signalsafe/tree-spec-editor-core';
3
+ /** Build the default TreeSpec editor toolbar item list from state, actions, and capability flags. */
39
4
  export function buildDefaultToolbarSpec(options) {
40
- const { state, actions, capabilities = {}, nodeTypes = [], templates = [], backSlot, preview, extraItems = [], labels: labelOverrides, includePublishedAutosaveStatus = true, } = options;
41
- const labels = { ...DEFAULT_LABELS, ...(labelOverrides ?? {}) };
5
+ const { state, actions, capabilities = {}, nodeTypes = [], templates = [], preview, labels = {}, extraItems = [], showUndoRedo = true, } = options;
42
6
  const items = [];
43
- if (backSlot) {
44
- items.push({
45
- kind: TOOLBAR_ITEM_KIND.CUSTOM,
46
- id: backSlot.id ?? 'back',
47
- render: backSlot.render,
48
- });
49
- }
50
- if (nodeTypes.length > 0) {
51
- const entries = nodeTypes
52
- .map((nt, idx) => {
53
- if (nt.divider) {
54
- return { id: nt.id ?? `divider-${idx}`, label: '', divider: true };
55
- }
56
- if (!nt.type)
57
- return null;
58
- return {
59
- id: nt.id ?? `add-${nt.type}`,
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) => ({
76
- id: t.id,
77
- label: t.label,
78
- onClick: () => actions.insertTemplate(t.spec),
79
- disabled: state.isPublished,
80
- }));
81
- items.push({
82
- kind: TOOLBAR_ITEM_KIND.DROPDOWN,
83
- id: 'templates',
84
- label: labels.templates,
85
- disabled: state.isPublished,
86
- entries,
87
- });
88
- }
89
- items.push({
90
- kind: TOOLBAR_ITEM_KIND.BUTTON,
91
- id: 'reset-view',
92
- label: labels.resetView,
93
- onClick: () => actions.triggerResetView(),
94
- title: 'Reset view to fit graph',
95
- });
96
- items.push({
97
- kind: TOOLBAR_ITEM_KIND.BUTTON,
98
- id: 'auto-layout',
99
- label: labels.autoLayout,
100
- onClick: () => actions.autoLayout(),
101
- disabled: state.isPublished,
102
- });
103
- if (capabilities.canValidate) {
104
- items.push({
105
- kind: TOOLBAR_ITEM_KIND.BUTTON,
106
- id: 'validate',
107
- label: labels.validate,
108
- variant: 'outline-primary',
109
- onClick: () => {
110
- void actions.validate();
111
- },
112
- disabled: state.saving || state.publishing,
113
- });
114
- }
115
- if (capabilities.canListSnapshots) {
116
- items.push({
117
- kind: TOOLBAR_ITEM_KIND.BUTTON,
118
- id: 'draft-history',
119
- label: labels.draftHistory,
120
- onClick: () => actions.setShowDraftHistory(true),
121
- disabled: state.isPublished,
122
- });
123
- }
124
- if (capabilities.canListAudit) {
125
- items.push({
126
- kind: TOOLBAR_ITEM_KIND.BUTTON,
127
- id: 'audit',
128
- label: labels.audit,
129
- onClick: () => actions.setShowAudit(true),
130
- });
131
- }
132
- if (capabilities.canCreateSnapshot) {
133
- items.push({
134
- kind: TOOLBAR_ITEM_KIND.BUTTON,
135
- id: 'snapshot',
136
- label: state.creatingSnapshot ? labels.snapshotInFlight : labels.snapshot,
137
- onClick: () => {
138
- void actions.createSnapshot();
139
- },
140
- disabled: state.isPublished || !state.hasTree || state.creatingSnapshot,
141
- });
142
- }
143
- if (capabilities.canCloneToDraft) {
144
- items.push({
145
- kind: TOOLBAR_ITEM_KIND.BUTTON,
146
- id: 'clone-to-draft',
147
- label: state.cloning ? labels.cloneInFlight : labels.cloneToDraft,
148
- onClick: () => {
149
- void actions.cloneToDraft();
150
- },
151
- disabled: state.cloning,
152
- });
153
- }
154
- items.push({
155
- kind: TOOLBAR_ITEM_KIND.BUTTON,
156
- id: 'save-draft',
157
- label: state.saving ? labels.saveDraftInFlight : labels.saveDraft,
158
- variant: 'primary',
159
- onClick: () => {
160
- void actions.saveDraft();
161
- },
162
- disabled: state.isPublished || state.saving || state.publishing,
163
- });
164
- if (capabilities.canPublish) {
165
- items.push({
166
- kind: TOOLBAR_ITEM_KIND.BUTTON,
167
- id: 'publish',
168
- label: state.publishing ? labels.publishInFlight : labels.publish,
169
- variant: 'success',
170
- onClick: () => actions.setShowPublishModal(true),
171
- disabled: state.isPublished || !state.canPublish || state.saving || state.publishing,
172
- });
173
- }
174
- if (preview) {
175
- items.push({
176
- kind: TOOLBAR_ITEM_KIND.BUTTON,
177
- id: 'preview',
178
- label: preview.label ?? 'Preview',
179
- variant: 'outline-dark',
180
- onClick: preview.onClick,
181
- disabled: preview.disabled ?? false,
182
- });
183
- }
184
- if (includePublishedAutosaveStatus) {
185
- items.push({
186
- kind: TOOLBAR_ITEM_KIND.BADGE,
187
- id: 'status',
188
- label: state.isPublished ? labels.statusPublished : labels.statusDraft,
189
- variant: state.isPublished ? 'success' : 'secondary',
190
- });
191
- items.push({
192
- kind: TOOLBAR_ITEM_KIND.TEXT,
193
- id: 'autosave',
194
- content: getAutosaveStatusLabel(state.autosaveStatus),
195
- });
196
- }
197
- if (extraItems.length > 0)
198
- items.push(...extraItems);
7
+ const toolbarBackSlot = options.toolbarBackSlot;
8
+ if (toolbarBackSlot) {
9
+ appendBackSlot(items, toolbarBackSlot);
10
+ }
11
+ appendAddDropdown(items, nodeTypes, actions, labels, state.isPublished);
12
+ appendTemplatesDropdown(items, templates, actions, labels, state.isPublished);
13
+ appendLayoutButtons(items, state, actions, labels);
14
+ if (showUndoRedo) {
15
+ appendUndoRedo(items, state, actions, labels);
16
+ }
17
+ appendCapabilityButtons(items, capabilities, state, actions, labels);
18
+ appendSaveAndPublish(items, capabilities, state, actions, labels, preview);
19
+ items.push(...extraItems);
199
20
  return items;
200
21
  }
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":"AASA;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAInE"}
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"}
@@ -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
- if (severity === TREE_SPEC_ISSUE_SEVERITY.ERROR)
18
- return 'bg-danger';
19
- if (severity === TREE_SPEC_ISSUE_SEVERITY.WARNING)
20
- return 'bg-warning text-dark';
21
- return 'bg-info';
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
  }
@@ -0,0 +1,13 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { EditorTransition } from '@signalsafe/tree-spec-editor-core';
3
+ export interface PanelNodeLinkContext {
4
+ onNodeSelect?: (nodeId: string) => void;
5
+ }
6
+ /** Clickable node id for panel breadcrumb lines; plain text when `onNodeSelect` is unset. */
7
+ export declare function PanelNodeLink({ nodeId, onNodeSelect, }: Readonly<{
8
+ nodeId: string;
9
+ onNodeSelect?: (nodeId: string) => void;
10
+ }>): ReactNode;
11
+ /** Default `from · choice → to` line for selected transitions. */
12
+ export declare function renderDefaultEdgeBreadcrumb(edge: EditorTransition, { onNodeSelect }: PanelNodeLinkContext): ReactNode;
13
+ //# sourceMappingURL=panelNodeLink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panelNodeLink.d.ts","sourceRoot":"","sources":["../../src/lib/panelNodeLink.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,MAAM,WAAW,oBAAoB;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C;AAED,6FAA6F;AAC7F,wBAAgB,aAAa,CAAC,EAC1B,MAAM,EACN,YAAY,GACf,EAAE,QAAQ,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3C,CAAC,GAAG,SAAS,CAcb;AAED,kEAAkE;AAClE,wBAAgB,2BAA2B,CACvC,IAAI,EAAE,gBAAgB,EACtB,EAAE,YAAY,EAAE,EAAE,oBAAoB,GACvC,SAAS,CAUX"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Clickable node id for panel breadcrumb lines; plain text when `onNodeSelect` is unset. */
3
+ export function PanelNodeLink({ nodeId, onNodeSelect, }) {
4
+ if (!onNodeSelect) {
5
+ return nodeId;
6
+ }
7
+ return (_jsx("button", { type: "button", className: "btn btn-link p-0 align-baseline font-size-12", onClick: () => onNodeSelect(nodeId), children: nodeId }));
8
+ }
9
+ /** Default `from · choice → to` line for selected transitions. */
10
+ export function renderDefaultEdgeBreadcrumb(edge, { onNodeSelect }) {
11
+ return (_jsxs(_Fragment, { children: [_jsx(PanelNodeLink, { nodeId: edge.fromNodeId, onNodeSelect: onNodeSelect }), ' · ', edge.fromChoiceId, ' → ', _jsx(PanelNodeLink, { nodeId: edge.toNodeId, onNodeSelect: onNodeSelect })] }));
12
+ }
@@ -0,0 +1,9 @@
1
+ /** Bootstrap list-group selection highlight (subtle primary background). */
2
+ export declare const LIST_SELECTION_CLASS = "list-group-item-primary";
3
+ /** Dark readable text on {@link LIST_SELECTION_CLASS} rows (sidebar Nodes / Issues). */
4
+ export declare const LIST_SELECTION_TEXT_CLASS = "graph-editor-sidebar-selected";
5
+ /** Canvas / card selection highlight matching list selection. */
6
+ export declare const CANVAS_SELECTION_CLASS = "bg-primary-subtle";
7
+ /** Dark readable text on {@link CANVAS_SELECTION_CLASS} graph nodes. */
8
+ export declare const CANVAS_SELECTION_TEXT_CLASS = "graph-editor-canvas-selected";
9
+ //# sourceMappingURL=selectionStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectionStyles.d.ts","sourceRoot":"","sources":["../../src/lib/selectionStyles.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,4BAA4B,CAAC;AAE9D,wFAAwF;AACxF,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AAEzE,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,sBAAsB,CAAC;AAE1D,wEAAwE;AACxE,eAAO,MAAM,2BAA2B,iCAAiC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /** Bootstrap list-group selection highlight (subtle primary background). */
2
+ export const LIST_SELECTION_CLASS = 'list-group-item-primary';
3
+ /** Dark readable text on {@link LIST_SELECTION_CLASS} rows (sidebar Nodes / Issues). */
4
+ export const LIST_SELECTION_TEXT_CLASS = 'graph-editor-sidebar-selected';
5
+ /** Canvas / card selection highlight matching list selection. */
6
+ export const CANVAS_SELECTION_CLASS = 'bg-primary-subtle';
7
+ /** Dark readable text on {@link CANVAS_SELECTION_CLASS} graph nodes. */
8
+ export const CANVAS_SELECTION_TEXT_CLASS = 'graph-editor-canvas-selected';
@@ -0,0 +1,89 @@
1
+ import type { ReactNode } from 'react';
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
+ }
13
+ export interface DefaultToolbarNodeType {
14
+ type?: string;
15
+ label?: string;
16
+ divider?: boolean;
17
+ id?: string;
18
+ patch?: Record<string, unknown>;
19
+ }
20
+ export interface DefaultToolbarTemplate {
21
+ id: string;
22
+ label: string;
23
+ spec: TreeTemplateSpec;
24
+ }
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
+ undo?: string;
39
+ redo?: string;
40
+ }
41
+ export interface DefaultToolbarState {
42
+ isPublished: boolean;
43
+ saving: boolean;
44
+ publishing: boolean;
45
+ creatingSnapshot: boolean;
46
+ cloning: boolean;
47
+ canPublish: boolean;
48
+ hasTree: boolean;
49
+ autosaveStatus: AutosaveStatus;
50
+ canUndo?: boolean;
51
+ canRedo?: boolean;
52
+ }
53
+ export interface DefaultToolbarActions {
54
+ addNodeOfType: (type: string, patch?: Record<string, unknown>) => void;
55
+ insertTemplate: (spec: TreeTemplateSpec) => void;
56
+ triggerResetView: () => void;
57
+ autoLayout: () => void;
58
+ validate: () => void | Promise<void>;
59
+ saveDraft: () => void | Promise<void>;
60
+ setShowDraftHistory: (show: boolean) => void;
61
+ setShowAudit: (show: boolean) => void;
62
+ createSnapshot: () => void | Promise<void>;
63
+ cloneToDraft: () => void | Promise<void>;
64
+ setShowPublishModal: (show: boolean) => void;
65
+ undo?: () => void;
66
+ redo?: () => void;
67
+ }
68
+ export type DefaultToolbarBackSlot = {
69
+ id?: string;
70
+ render: () => ReactNode;
71
+ };
72
+ export interface BuildDefaultToolbarSpecOptions {
73
+ state: DefaultToolbarState;
74
+ actions: DefaultToolbarActions;
75
+ capabilities?: DefaultToolbarCapabilities;
76
+ nodeTypes?: DefaultToolbarNodeType[];
77
+ templates?: DefaultToolbarTemplate[];
78
+ /** Optional legacy toolbar back control when page breadcrumbs are not used. */
79
+ toolbarBackSlot?: DefaultToolbarBackSlot;
80
+ preview?: {
81
+ onClick: () => void;
82
+ disabled?: boolean;
83
+ };
84
+ labels?: DefaultToolbarLabels;
85
+ extraItems?: ToolbarItem[];
86
+ /** When false, omit Undo/Redo buttons even if `actions.undo` / `actions.redo` are set. Default true. */
87
+ showUndoRedo?: boolean;
88
+ }
89
+ //# sourceMappingURL=defaultToolbarTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultToolbarTypes.d.ts","sourceRoot":"","sources":["../../../src/lib/toolbar/defaultToolbarTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE/F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,MAAM,WAAW,0BAA0B;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACjC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,qBAAqB;IAClC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACvE,cAAc,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,SAAS,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,cAAc,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,MAAM,MAAM,sBAAsB,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,SAAS,CAAA;CAAE,CAAC;AAE9E,MAAM,WAAW,8BAA8B;IAC3C,KAAK,EAAE,mBAAmB,CAAC;IAC3B,OAAO,EAAE,qBAAqB,CAAC;IAC/B,YAAY,CAAC,EAAE,0BAA0B,CAAC;IAC1C,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,SAAS,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACrC,+EAA+E;IAC/E,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC3B,wGAAwG;IACxG,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B"}
@@ -0,0 +1 @@
1
+ export { AUTOSAVE_STATUS } from '@signalsafe/tree-spec-editor-core';
@@ -0,0 +1,10 @@
1
+ import { type ToolbarItem } from '../../panels/ToolbarPanel.js';
2
+ import type { BuildDefaultToolbarSpecOptions, DefaultToolbarActions, DefaultToolbarBackSlot, DefaultToolbarCapabilities, DefaultToolbarLabels, DefaultToolbarNodeType, DefaultToolbarState, DefaultToolbarTemplate } from './defaultToolbarTypes.js';
3
+ export declare function appendBackSlot(items: ToolbarItem[], slot: DefaultToolbarBackSlot): void;
4
+ export declare function appendAddDropdown(items: ToolbarItem[], nodeTypes: DefaultToolbarNodeType[], actions: DefaultToolbarActions, labels: DefaultToolbarLabels, isPublished: boolean): void;
5
+ export declare function appendTemplatesDropdown(items: ToolbarItem[], templates: DefaultToolbarTemplate[], actions: DefaultToolbarActions, labels: DefaultToolbarLabels, isPublished: boolean): void;
6
+ export declare function appendLayoutButtons(items: ToolbarItem[], state: DefaultToolbarState, actions: DefaultToolbarActions, labels: DefaultToolbarLabels): void;
7
+ export declare function appendUndoRedo(items: ToolbarItem[], state: DefaultToolbarState, actions: DefaultToolbarActions, labels: DefaultToolbarLabels): void;
8
+ export declare function appendCapabilityButtons(items: ToolbarItem[], capabilities: DefaultToolbarCapabilities, state: DefaultToolbarState, actions: DefaultToolbarActions, labels: DefaultToolbarLabels): void;
9
+ export declare function appendSaveAndPublish(items: ToolbarItem[], capabilities: DefaultToolbarCapabilities, state: DefaultToolbarState, actions: DefaultToolbarActions, labels: DefaultToolbarLabels, preview: BuildDefaultToolbarSpecOptions['preview']): void;
10
+ //# sourceMappingURL=toolbarSectionBuilders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbarSectionBuilders.d.ts","sourceRoot":"","sources":["../../../src/lib/toolbar/toolbarSectionBuilders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,KAAK,EACR,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACzB,MAAM,0BAA0B,CAAC;AAElC,wBAAgB,cAAc,CAC1B,KAAK,EAAE,WAAW,EAAE,EACpB,IAAI,EAAE,sBAAsB,GAC7B,IAAI,CAMN;AAED,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,WAAW,EAAE,EACpB,SAAS,EAAE,sBAAsB,EAAE,EACnC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,OAAO,GACrB,IAAI,CAsBN;AAED,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,WAAW,EAAE,EACpB,SAAS,EAAE,sBAAsB,EAAE,EACnC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,EAC5B,WAAW,EAAE,OAAO,GACrB,IAAI,CAcN;AAED,wBAAgB,mBAAmB,CAC/B,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,GAC7B,IAAI,CAkBN;AAED,wBAAgB,cAAc,CAC1B,KAAK,EAAE,WAAW,EAAE,EACpB,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,GAC7B,IAAI,CAoBN;AAED,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,WAAW,EAAE,EACpB,YAAY,EAAE,0BAA0B,EACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,GAC7B,IAAI,CAkDN;AAED,wBAAgB,oBAAoB,CAChC,KAAK,EAAE,WAAW,EAAE,EACpB,YAAY,EAAE,0BAA0B,EACxC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,EAAE,8BAA8B,CAAC,SAAS,CAAC,GACnD,IAAI,CA8BN"}