@diagrammo/dgmo 0.47.0 → 0.48.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/auto.js +1 -1
- package/dist/auto.mjs +1 -1
- package/dist/element.js +1 -1
- package/dist/element.mjs +1 -1
- package/package.json +19 -70
- package/dist/advanced.cjs +0 -71648
- package/dist/advanced.d.cts +0 -5719
- package/dist/auto.cjs +0 -70648
- package/dist/auto.d.cts +0 -54
- package/dist/block.cjs +0 -70208
- package/dist/block.d.cts +0 -115
- package/dist/editor.cjs +0 -526
- package/dist/editor.d.cts +0 -26
- package/dist/element.cjs +0 -70530
- package/dist/element.d.cts +0 -62
- package/dist/highlight.cjs +0 -852
- package/dist/highlight.d.cts +0 -49
- package/dist/index.cjs +0 -70491
- package/dist/index.d.cts +0 -160
- package/dist/pert.cjs +0 -325
- package/dist/pert.d.cts +0 -559
- package/dist/themes-1-CuKpeH.d.cts +0 -908
- package/src/advanced.ts +0 -873
- package/src/arc/parser.ts +0 -15
- package/src/arc/renderer.ts +0 -633
- package/src/auto/index.ts +0 -621
- package/src/auto/shared.ts +0 -370
- package/src/auto/styles.ts +0 -73
- package/src/block/layout.ts +0 -198
- package/src/block/parser.ts +0 -427
- package/src/block/renderer.ts +0 -484
- package/src/block/types.ts +0 -67
- package/src/boxes-and-lines/collapse.ts +0 -96
- package/src/boxes-and-lines/focus.ts +0 -257
- package/src/boxes-and-lines/label-placement.ts +0 -339
- package/src/boxes-and-lines/layout-grouped.ts +0 -912
- package/src/boxes-and-lines/layout-layered.ts +0 -722
- package/src/boxes-and-lines/layout-search.ts +0 -1678
- package/src/boxes-and-lines/layout.ts +0 -398
- package/src/boxes-and-lines/parser.ts +0 -1181
- package/src/boxes-and-lines/renderer.ts +0 -1465
- package/src/boxes-and-lines/types.ts +0 -66
- package/src/c4/layout.ts +0 -2441
- package/src/c4/parser.ts +0 -1158
- package/src/c4/renderer.ts +0 -2008
- package/src/c4/types.ts +0 -89
- package/src/chart-type-registry.ts +0 -529
- package/src/chart-types.ts +0 -225
- package/src/chart.ts +0 -685
- package/src/charts-d3/bar.ts +0 -338
- package/src/charts-d3/chord.ts +0 -140
- package/src/charts-d3/function.ts +0 -147
- package/src/charts-d3/funnel.ts +0 -104
- package/src/charts-d3/heatmap.ts +0 -145
- package/src/charts-d3/index.ts +0 -337
- package/src/charts-d3/interactions.ts +0 -477
- package/src/charts-d3/line.ts +0 -344
- package/src/charts-d3/mount.ts +0 -151
- package/src/charts-d3/pie.ts +0 -117
- package/src/charts-d3/polar.ts +0 -89
- package/src/charts-d3/radar.ts +0 -0
- package/src/charts-d3/sankey.ts +0 -0
- package/src/charts-d3/scatter.ts +0 -185
- package/src/charts-d3/shared.ts +0 -208
- package/src/class/layout.ts +0 -326
- package/src/class/parser.ts +0 -635
- package/src/class/renderer.ts +0 -793
- package/src/class/types.ts +0 -58
- package/src/cli-banner.ts +0 -106
- package/src/cli.ts +0 -1080
- package/src/colors-diagnostics.ts +0 -35
- package/src/colors.ts +0 -379
- package/src/completion-types.ts +0 -27
- package/src/completion.ts +0 -2668
- package/src/cycle/layout.ts +0 -1026
- package/src/cycle/parser.ts +0 -387
- package/src/cycle/renderer.ts +0 -653
- package/src/cycle/types.ts +0 -101
- package/src/d3.ts +0 -1434
- package/src/data-chart-parser.ts +0 -1007
- package/src/dgmo-router.ts +0 -296
- package/src/diagnostics-registry.ts +0 -108
- package/src/diagnostics.ts +0 -0
- package/src/dimensions.ts +0 -20
- package/src/directives-registry.ts +0 -396
- package/src/editor/dgmo.grammar +0 -76
- package/src/editor/dgmo.grammar.d.ts +0 -2
- package/src/editor/dgmo.grammar.js +0 -18
- package/src/editor/dgmo.grammar.terms.d.ts +0 -5
- package/src/editor/dgmo.grammar.terms.js +0 -35
- package/src/editor/highlight-api.ts +0 -596
- package/src/editor/highlight.ts +0 -36
- package/src/editor/index.ts +0 -27
- package/src/editor/keywords.ts +0 -128
- package/src/editor/tokens.ts +0 -30
- package/src/element/index.ts +0 -432
- package/src/embed/css.ts +0 -312
- package/src/embed/escape.ts +0 -15
- package/src/embed/index.ts +0 -280
- package/src/er/classify.ts +0 -228
- package/src/er/layout.ts +0 -530
- package/src/er/parser.ts +0 -750
- package/src/er/renderer.ts +0 -725
- package/src/er/types.ts +0 -52
- package/src/error-card.ts +0 -269
- package/src/event-line/diagnostics.ts +0 -117
- package/src/event-line/parser.ts +0 -643
- package/src/event-line/renderer.ts +0 -1742
- package/src/event-line/types.ts +0 -74
- package/src/fonts.ts +0 -3
- package/src/gantt/calculator.ts +0 -979
- package/src/gantt/parser.ts +0 -1641
- package/src/gantt/renderer.ts +0 -3787
- package/src/gantt/resolver.ts +0 -172
- package/src/gantt/types.ts +0 -206
- package/src/graph/diagnostics.ts +0 -64
- package/src/graph/edge-spline.ts +0 -29
- package/src/graph/flowchart-parser.ts +0 -759
- package/src/graph/flowchart-renderer.ts +0 -817
- package/src/graph/layout.ts +0 -472
- package/src/graph/notes.ts +0 -21
- package/src/graph/state-collapse.ts +0 -78
- package/src/graph/state-parser.ts +0 -574
- package/src/graph/state-renderer.ts +0 -653
- package/src/graph/types.ts +0 -65
- package/src/index.ts +0 -261
- package/src/infra/compute.ts +0 -1385
- package/src/infra/layout.ts +0 -888
- package/src/infra/parser.ts +0 -1234
- package/src/infra/renderer.ts +0 -2534
- package/src/infra/roles.ts +0 -75
- package/src/infra/types.ts +0 -216
- package/src/infra/validation.ts +0 -201
- package/src/journey-map/layout.ts +0 -490
- package/src/journey-map/parser.ts +0 -557
- package/src/journey-map/renderer.ts +0 -1580
- package/src/journey-map/types.ts +0 -47
- package/src/kanban/mutations.ts +0 -175
- package/src/kanban/parser.ts +0 -509
- package/src/kanban/renderer.ts +0 -1449
- package/src/kanban/types.ts +0 -39
- package/src/label-layout.ts +0 -368
- package/src/map/colorize.ts +0 -54
- package/src/map/completion.ts +0 -316
- package/src/map/context-labels.ts +0 -609
- package/src/map/data/PROVENANCE.json +0 -1
- package/src/map/data/README.md +0 -40
- package/src/map/data/airport-collisions.json +0 -1
- package/src/map/data/airports.json +0 -1
- package/src/map/data/gazetteer.json +0 -1
- package/src/map/data/lakes.json +0 -1
- package/src/map/data/mountain-ranges.json +0 -1
- package/src/map/data/na-lakes.json +0 -1
- package/src/map/data/na-land.json +0 -1
- package/src/map/data/region-names.json +0 -1
- package/src/map/data/rivers.json +0 -1
- package/src/map/data/types.ts +0 -121
- package/src/map/data/us-states.json +0 -1
- package/src/map/data/water-bodies.json +0 -1
- package/src/map/data/world-coarse.json +0 -1
- package/src/map/data/world-detail.json +0 -1
- package/src/map/diagnostics.ts +0 -134
- package/src/map/dimensions.ts +0 -150
- package/src/map/geo-query.ts +0 -295
- package/src/map/geo.ts +0 -438
- package/src/map/invert.ts +0 -111
- package/src/map/layout.ts +0 -5069
- package/src/map/legend-band.ts +0 -127
- package/src/map/load-data.ts +0 -186
- package/src/map/parser.ts +0 -783
- package/src/map/renderer.ts +0 -1445
- package/src/map/resolved-types.ts +0 -160
- package/src/map/resolver.ts +0 -1146
- package/src/map/types.ts +0 -194
- package/src/mindmap/collapse.ts +0 -67
- package/src/mindmap/layout.ts +0 -649
- package/src/mindmap/parser.ts +0 -430
- package/src/mindmap/renderer.ts +0 -637
- package/src/mindmap/text-wrap.ts +0 -218
- package/src/mindmap/types.ts +0 -56
- package/src/org/collapse.ts +0 -151
- package/src/org/layout.ts +0 -1262
- package/src/org/parser.ts +0 -519
- package/src/org/renderer.ts +0 -866
- package/src/org/resolver.ts +0 -636
- package/src/palettes/atlas.ts +0 -77
- package/src/palettes/blueprint.ts +0 -73
- package/src/palettes/catppuccin.ts +0 -84
- package/src/palettes/color-utils.ts +0 -443
- package/src/palettes/index.ts +0 -67
- package/src/palettes/nord.ts +0 -67
- package/src/palettes/registry.ts +0 -114
- package/src/palettes/slate.ts +0 -73
- package/src/palettes/tidewater.ts +0 -73
- package/src/palettes/tokyo-night.ts +0 -86
- package/src/palettes/types.ts +0 -88
- package/src/pert/analyzer.ts +0 -1183
- package/src/pert/diagnostics.ts +0 -110
- package/src/pert/index.ts +0 -43
- package/src/pert/internal.ts +0 -252
- package/src/pert/layout.ts +0 -971
- package/src/pert/monte-carlo.ts +0 -446
- package/src/pert/parser.ts +0 -1606
- package/src/pert/renderer.ts +0 -4009
- package/src/pert/share-normalize.ts +0 -62
- package/src/pert/types.ts +0 -604
- package/src/pyramid/parser.ts +0 -185
- package/src/pyramid/renderer.ts +0 -768
- package/src/pyramid/types.ts +0 -28
- package/src/quadrant/parser.ts +0 -18
- package/src/quadrant/renderer.ts +0 -638
- package/src/raci/diagnostics.ts +0 -213
- package/src/raci/index.ts +0 -23
- package/src/raci/mutations.ts +0 -321
- package/src/raci/parser.ts +0 -699
- package/src/raci/renderer.ts +0 -1627
- package/src/raci/types.ts +0 -82
- package/src/raci/variants.ts +0 -320
- package/src/render.ts +0 -268
- package/src/ring/parser.ts +0 -212
- package/src/ring/renderer.ts +0 -490
- package/src/ring/types.ts +0 -27
- package/src/sequence/collapse.ts +0 -174
- package/src/sequence/parser.ts +0 -1596
- package/src/sequence/participant-inference.ts +0 -152
- package/src/sequence/renderer.ts +0 -3168
- package/src/sequence/tag-resolution.ts +0 -164
- package/src/sharing.ts +0 -211
- package/src/sitemap/collapse.ts +0 -100
- package/src/sitemap/layout.ts +0 -925
- package/src/sitemap/parser.ts +0 -755
- package/src/sitemap/renderer.ts +0 -828
- package/src/sitemap/types.ts +0 -42
- package/src/slope/parser.ts +0 -18
- package/src/slope/renderer.ts +0 -378
- package/src/swimlane/diagnostics.ts +0 -94
- package/src/swimlane/layout.ts +0 -597
- package/src/swimlane/parser.ts +0 -613
- package/src/swimlane/renderer.ts +0 -681
- package/src/swimlane/types.ts +0 -151
- package/src/tech-radar/interactive.ts +0 -1129
- package/src/tech-radar/layout.ts +0 -197
- package/src/tech-radar/parser.ts +0 -436
- package/src/tech-radar/renderer.ts +0 -1239
- package/src/tech-radar/shared.ts +0 -151
- package/src/tech-radar/types.ts +0 -86
- package/src/themes.ts +0 -22
- package/src/timeline/parser.ts +0 -472
- package/src/timeline/renderer.ts +0 -3024
- package/src/timeline/types.ts +0 -33
- package/src/timeline/viz-parser.ts +0 -21
- package/src/treemap/diagnostics.ts +0 -62
- package/src/treemap/layout-radial.ts +0 -233
- package/src/treemap/layout.ts +0 -189
- package/src/treemap/parser.ts +0 -463
- package/src/treemap/renderer-radial.ts +0 -438
- package/src/treemap/renderer.ts +0 -572
- package/src/treemap/treemap-shared.ts +0 -309
- package/src/treemap/types.ts +0 -60
- package/src/utils/arrow-markers.ts +0 -51
- package/src/utils/arrows-diagnostics.ts +0 -62
- package/src/utils/arrows.ts +0 -227
- package/src/utils/brand.ts +0 -61
- package/src/utils/card.ts +0 -183
- package/src/utils/collapse-engine/tree-edges.ts +0 -115
- package/src/utils/collapse-engine/tree.ts +0 -117
- package/src/utils/d3-helpers.ts +0 -219
- package/src/utils/d3-types.ts +0 -9
- package/src/utils/description-helpers.ts +0 -38
- package/src/utils/duration.ts +0 -312
- package/src/utils/export-container.ts +0 -41
- package/src/utils/expr-eval.ts +0 -27
- package/src/utils/fit-canvas.ts +0 -64
- package/src/utils/hover-styles.ts +0 -673
- package/src/utils/inline-markdown.ts +0 -96
- package/src/utils/legend-constants.ts +0 -48
- package/src/utils/legend-d3.ts +0 -618
- package/src/utils/legend-integration.ts +0 -107
- package/src/utils/legend-layout.ts +0 -776
- package/src/utils/legend-svg.ts +0 -214
- package/src/utils/legend-types.ts +0 -272
- package/src/utils/name-normalize.ts +0 -163
- package/src/utils/note-box/constants.ts +0 -25
- package/src/utils/note-box/index.ts +0 -11
- package/src/utils/note-box/metrics.ts +0 -90
- package/src/utils/note-box/svg.ts +0 -331
- package/src/utils/notes/bounds.ts +0 -30
- package/src/utils/notes/build.ts +0 -131
- package/src/utils/notes/index.ts +0 -18
- package/src/utils/notes/model.ts +0 -19
- package/src/utils/notes/parse.ts +0 -131
- package/src/utils/notes/place.ts +0 -177
- package/src/utils/notes/resolve.ts +0 -88
- package/src/utils/number-format.ts +0 -36
- package/src/utils/parsing.ts +0 -953
- package/src/utils/reserved-key-registry.ts +0 -239
- package/src/utils/safe-href.ts +0 -38
- package/src/utils/scaling.ts +0 -97
- package/src/utils/svg-embed.ts +0 -251
- package/src/utils/tag-groups.ts +0 -607
- package/src/utils/text-measure.ts +0 -122
- package/src/utils/time-ticks.ts +0 -253
- package/src/utils/title-constants.ts +0 -24
- package/src/utils/visual-conventions.ts +0 -61
- package/src/utils/wrapped-desc.ts +0 -87
- package/src/venn/parser.ts +0 -18
- package/src/venn/renderer.ts +0 -1047
- package/src/version-control/diagnostics.ts +0 -67
- package/src/version-control/parser.ts +0 -544
- package/src/version-control/renderer.ts +0 -724
- package/src/version-control/types.ts +0 -100
- package/src/visualizations/parse.ts +0 -1560
- package/src/visualizations/types.ts +0 -262
- package/src/wireframe/layout.ts +0 -479
- package/src/wireframe/parser.ts +0 -1114
- package/src/wireframe/renderer.ts +0 -1318
- package/src/wireframe/types.ts +0 -110
- package/src/wordcloud/parser.ts +0 -18
- package/src/wordcloud/renderer.ts +0 -357
package/src/journey-map/types.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { DgmoError } from '../diagnostics';
|
|
2
|
-
import type { TagGroup } from '../utils/tag-groups';
|
|
3
|
-
|
|
4
|
-
export interface JourneyMapAnnotation {
|
|
5
|
-
readonly type: 'pain' | 'opportunity' | 'thought';
|
|
6
|
-
readonly text: string;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export interface JourneyMapStep {
|
|
10
|
-
readonly id: string;
|
|
11
|
-
readonly title: string;
|
|
12
|
-
readonly score?: number;
|
|
13
|
-
readonly emotionLabel?: string;
|
|
14
|
-
readonly tags: Readonly<Record<string, string>>;
|
|
15
|
-
readonly annotations: readonly JourneyMapAnnotation[];
|
|
16
|
-
readonly description?: string;
|
|
17
|
-
readonly lineNumber: number;
|
|
18
|
-
readonly endLineNumber: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface JourneyMapPhase {
|
|
22
|
-
readonly id: string;
|
|
23
|
-
readonly name: string;
|
|
24
|
-
readonly steps: readonly JourneyMapStep[];
|
|
25
|
-
readonly lineNumber: number;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export interface JourneyMapPersona {
|
|
29
|
-
readonly name: string;
|
|
30
|
-
readonly description?: string;
|
|
31
|
-
readonly color?: string;
|
|
32
|
-
readonly lineNumber: number;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export interface ParsedJourneyMap {
|
|
36
|
-
readonly type: 'journey-map';
|
|
37
|
-
readonly title?: string;
|
|
38
|
-
readonly titleLineNumber?: number;
|
|
39
|
-
readonly persona?: JourneyMapPersona;
|
|
40
|
-
readonly phases: readonly JourneyMapPhase[];
|
|
41
|
-
/** Flat-mode steps (not inside any phase) */
|
|
42
|
-
readonly steps: readonly JourneyMapStep[];
|
|
43
|
-
readonly tagGroups: readonly TagGroup[];
|
|
44
|
-
readonly options: Readonly<Record<string, string>>;
|
|
45
|
-
readonly diagnostics: readonly DgmoError[];
|
|
46
|
-
readonly error: string | null;
|
|
47
|
-
}
|
package/src/kanban/mutations.ts
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import type { ParsedKanban, KanbanCard, KanbanColumn } from './types';
|
|
2
|
-
|
|
3
|
-
const ARCHIVE_COLUMN_NAME = 'archive';
|
|
4
|
-
|
|
5
|
-
// ============================================================
|
|
6
|
-
// computeCardMove — pure function for source text mutation
|
|
7
|
-
// ============================================================
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Compute new file content after moving a card to a different position.
|
|
11
|
-
*
|
|
12
|
-
* @param content - original file content string
|
|
13
|
-
* @param parsed - parsed kanban board
|
|
14
|
-
* @param cardId - id of the card to move
|
|
15
|
-
* @param targetColumnId - id of the destination column
|
|
16
|
-
* @param targetIndex - position within target column (0 = first card)
|
|
17
|
-
* @returns new content string, or null if move is invalid
|
|
18
|
-
*/
|
|
19
|
-
export function computeCardMove(
|
|
20
|
-
content: string,
|
|
21
|
-
parsed: ParsedKanban,
|
|
22
|
-
cardId: string,
|
|
23
|
-
targetColumnId: string,
|
|
24
|
-
targetIndex: number
|
|
25
|
-
): string | null {
|
|
26
|
-
// Find source card and column
|
|
27
|
-
let sourceCard: KanbanCard | null = null;
|
|
28
|
-
let sourceColumn: KanbanColumn | null = null;
|
|
29
|
-
|
|
30
|
-
for (const col of parsed.columns) {
|
|
31
|
-
for (const card of col.cards) {
|
|
32
|
-
if (card.id === cardId) {
|
|
33
|
-
sourceCard = card;
|
|
34
|
-
sourceColumn = col;
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (sourceCard) break;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (!sourceCard || !sourceColumn) return null;
|
|
42
|
-
|
|
43
|
-
const targetColumn = parsed.columns.find((c) => c.id === targetColumnId);
|
|
44
|
-
if (!targetColumn) return null;
|
|
45
|
-
|
|
46
|
-
const lines = content.split('\n');
|
|
47
|
-
|
|
48
|
-
// Extract the card's lines (0-based indices)
|
|
49
|
-
const startIdx = sourceCard.lineNumber - 1;
|
|
50
|
-
const endIdx = sourceCard.endLineNumber - 1;
|
|
51
|
-
const cardLines = lines.slice(startIdx, endIdx + 1);
|
|
52
|
-
|
|
53
|
-
// Remove the card lines from content
|
|
54
|
-
const withoutCard = [...lines.slice(0, startIdx), ...lines.slice(endIdx + 1)];
|
|
55
|
-
|
|
56
|
-
// Compute insertion point (0-based index in withoutCard)
|
|
57
|
-
let insertIdx: number;
|
|
58
|
-
|
|
59
|
-
// Adjust target column and card line numbers after removal
|
|
60
|
-
// Lines after the removed range shift up by the number of removed lines
|
|
61
|
-
const removedCount = endIdx - startIdx + 1;
|
|
62
|
-
const adjustLine = (ln: number): number => {
|
|
63
|
-
// ln is 1-based
|
|
64
|
-
if (ln > endIdx + 1) return ln - removedCount;
|
|
65
|
-
return ln;
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
if (targetIndex === 0) {
|
|
69
|
-
// Insert right after column header line
|
|
70
|
-
const adjColLine = adjustLine(targetColumn.lineNumber);
|
|
71
|
-
insertIdx = adjColLine; // 0-based: insert after the column header line
|
|
72
|
-
} else {
|
|
73
|
-
// Insert after the preceding card's last line
|
|
74
|
-
// Get the cards in the target column, excluding the moved card
|
|
75
|
-
const targetCards = targetColumn.cards.filter((c) => c.id !== cardId);
|
|
76
|
-
const clampedIdx = Math.min(targetIndex, targetCards.length);
|
|
77
|
-
const precedingCard = targetCards[clampedIdx - 1];
|
|
78
|
-
if (!precedingCard) {
|
|
79
|
-
// Fallback: after column header
|
|
80
|
-
const adjColLine = adjustLine(targetColumn.lineNumber);
|
|
81
|
-
insertIdx = adjColLine;
|
|
82
|
-
} else {
|
|
83
|
-
const adjEndLine = adjustLine(precedingCard.endLineNumber);
|
|
84
|
-
insertIdx = adjEndLine; // 0-based: insert after this line
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Splice the card lines into the new position
|
|
89
|
-
const result = [
|
|
90
|
-
...withoutCard.slice(0, insertIdx),
|
|
91
|
-
...cardLines,
|
|
92
|
-
...withoutCard.slice(insertIdx),
|
|
93
|
-
];
|
|
94
|
-
|
|
95
|
-
return result.join('\n');
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// ============================================================
|
|
99
|
-
// computeCardArchive — move card to an Archive section
|
|
100
|
-
// ============================================================
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Move a card to the Archive section at the end of the file.
|
|
104
|
-
* Creates `== Archive ==` if it doesn't exist.
|
|
105
|
-
*
|
|
106
|
-
* @returns new content string, or null if the card is not found
|
|
107
|
-
*/
|
|
108
|
-
export function computeCardArchive(
|
|
109
|
-
content: string,
|
|
110
|
-
parsed: ParsedKanban,
|
|
111
|
-
cardId: string
|
|
112
|
-
): string | null {
|
|
113
|
-
let sourceCard: KanbanCard | null = null;
|
|
114
|
-
for (const col of parsed.columns) {
|
|
115
|
-
for (const card of col.cards) {
|
|
116
|
-
if (card.id === cardId) {
|
|
117
|
-
sourceCard = card;
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
if (sourceCard) break;
|
|
122
|
-
}
|
|
123
|
-
if (!sourceCard) return null;
|
|
124
|
-
|
|
125
|
-
const lines = content.split('\n');
|
|
126
|
-
|
|
127
|
-
// Extract card lines
|
|
128
|
-
const startIdx = sourceCard.lineNumber - 1;
|
|
129
|
-
const endIdx = sourceCard.endLineNumber - 1;
|
|
130
|
-
const cardLines = lines.slice(startIdx, endIdx + 1);
|
|
131
|
-
|
|
132
|
-
// Remove card from its current position
|
|
133
|
-
const withoutCard = [...lines.slice(0, startIdx), ...lines.slice(endIdx + 1)];
|
|
134
|
-
|
|
135
|
-
// Check if an Archive column already exists
|
|
136
|
-
const archiveCol = parsed.columns.find(
|
|
137
|
-
(c) => c.name.toLowerCase() === ARCHIVE_COLUMN_NAME
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
if (archiveCol) {
|
|
141
|
-
// Append to existing archive column
|
|
142
|
-
// Find the last line of the archive column (after removal adjustment)
|
|
143
|
-
const removedCount = endIdx - startIdx + 1;
|
|
144
|
-
let archiveEndLine = archiveCol.lineNumber;
|
|
145
|
-
if (archiveCol.cards.length > 0) {
|
|
146
|
-
const lastCard = archiveCol.cards[archiveCol.cards.length - 1]!;
|
|
147
|
-
archiveEndLine = lastCard.endLineNumber;
|
|
148
|
-
}
|
|
149
|
-
// Adjust for removed lines
|
|
150
|
-
if (archiveEndLine > endIdx + 1) {
|
|
151
|
-
archiveEndLine -= removedCount;
|
|
152
|
-
}
|
|
153
|
-
// Insert after the archive end (0-based in withoutCard)
|
|
154
|
-
const insertIdx = archiveEndLine; // archiveEndLine is 1-based, so this is after that line
|
|
155
|
-
return [
|
|
156
|
-
...withoutCard.slice(0, insertIdx),
|
|
157
|
-
...cardLines,
|
|
158
|
-
...withoutCard.slice(insertIdx),
|
|
159
|
-
].join('\n');
|
|
160
|
-
} else {
|
|
161
|
-
// Create archive section at end of file
|
|
162
|
-
// Ensure trailing newline before the new section
|
|
163
|
-
const trimmedEnd =
|
|
164
|
-
withoutCard.length > 0 &&
|
|
165
|
-
withoutCard[withoutCard.length - 1]!.trim() === ''
|
|
166
|
-
? withoutCard
|
|
167
|
-
: [...withoutCard, ''];
|
|
168
|
-
return [...trimmedEnd, '[Archive]', ...cardLines].join('\n');
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/** Check if a column name is the archive column (case-insensitive). */
|
|
173
|
-
export function isArchiveColumn(name: string): boolean {
|
|
174
|
-
return name.toLowerCase() === ARCHIVE_COLUMN_NAME;
|
|
175
|
-
}
|