@refrakt-md/plan 0.15.0 → 0.16.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.
Files changed (48) hide show
  1. package/dist/cli-plugin.js +1 -1
  2. package/dist/cli-plugin.js.map +1 -1
  3. package/dist/commands/build.d.ts.map +1 -1
  4. package/dist/commands/build.js +5 -0
  5. package/dist/commands/build.js.map +1 -1
  6. package/dist/commands/plan-behaviors.js +5 -4
  7. package/dist/commands/plan-behaviors.js.map +1 -1
  8. package/dist/commands/render-pipeline.d.ts.map +1 -1
  9. package/dist/commands/render-pipeline.js +24 -3
  10. package/dist/commands/render-pipeline.js.map +1 -1
  11. package/dist/commands/serve.d.ts.map +1 -1
  12. package/dist/commands/serve.js +5 -0
  13. package/dist/commands/serve.js.map +1 -1
  14. package/dist/filter.d.ts +6 -11
  15. package/dist/filter.d.ts.map +1 -1
  16. package/dist/filter.js +7 -65
  17. package/dist/filter.js.map +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/pipeline.d.ts +6 -1
  22. package/dist/pipeline.d.ts.map +1 -1
  23. package/dist/pipeline.js +108 -458
  24. package/dist/pipeline.js.map +1 -1
  25. package/dist/scanner-core.d.ts.map +1 -1
  26. package/dist/scanner-core.js +10 -2
  27. package/dist/scanner-core.js.map +1 -1
  28. package/dist/tags/backlog.d.ts +0 -1
  29. package/dist/tags/backlog.d.ts.map +1 -1
  30. package/dist/tags/backlog.js +62 -39
  31. package/dist/tags/backlog.js.map +1 -1
  32. package/dist/tags/decision-log.d.ts +0 -1
  33. package/dist/tags/decision-log.d.ts.map +1 -1
  34. package/dist/tags/decision-log.js +54 -22
  35. package/dist/tags/decision-log.js.map +1 -1
  36. package/dist/tags/plan-activity.d.ts +0 -1
  37. package/dist/tags/plan-activity.d.ts.map +1 -1
  38. package/dist/tags/plan-activity.js +49 -18
  39. package/dist/tags/plan-activity.js.map +1 -1
  40. package/package.json +8 -8
  41. package/dist/cards.d.ts +0 -23
  42. package/dist/cards.d.ts.map +0 -1
  43. package/dist/cards.js +0 -150
  44. package/dist/cards.js.map +0 -1
  45. package/dist/entity-tabs-behavior.d.ts +0 -13
  46. package/dist/entity-tabs-behavior.d.ts.map +0 -1
  47. package/dist/entity-tabs-behavior.js +0 -94
  48. package/dist/entity-tabs-behavior.js.map +0 -1
@@ -1,29 +1,60 @@
1
1
  import Markdoc from '@markdoc/markdoc';
2
2
  const { Tag } = Markdoc;
3
- import { createContentModelSchema, createComponentRenderable } from '@refrakt-md/runes';
4
- export const PLAN_ACTIVITY_SENTINEL = '__plan-activity-sentinel';
3
+ import { createContentModelSchema, createComponentRenderable, readDeferredBody, COLLECTION_SENTINEL } from '@refrakt-md/runes';
4
+ /**
5
+ * `plan-activity` (SPEC-072 / WORK-284) — thin sugar for a `collection` query
6
+ * over all plan entity types, sorted by recent modification. Lowers to a
7
+ * `collection`-shaped renderable so the shared `resolveCollections` resolver
8
+ * handles selection, sorting, limit, and per-item rendering. The body is an
9
+ * optional override; absent → a default heading-template table (Item / Type /
10
+ * Status / Modified) — an "activity" feed reads as a scannable chronological
11
+ * list of changes, and the per-row Type column keeps mixed-entity rows
12
+ * self-explanatory.
13
+ *
14
+ * Legacy attribute preserved (`limit`, default 10) so existing
15
+ * `{% plan-activity %}` content keeps working. Entities without a `modified`
16
+ * date sort last under the shared sort (instead of being dropped entirely as
17
+ * the previous bespoke resolver did) — accepted per ADR-012.
18
+ */
19
+ const DEFAULT_PLAN_ACTIVITY_BODY = `# Item
20
+ {% link href=$item.url %}**{% $item.id %}** — {% $item.data.title %}{% /link %}
21
+ # Type
22
+ {% humanize($item.type) %}
23
+ # Status
24
+ {% humanize($item.data.status) %}
25
+ # Modified
26
+ {% date($item.data.modified) %}
27
+ `;
5
28
  export const planActivity = createContentModelSchema({
6
29
  attributes: {
7
30
  limit: { type: Number, required: false, default: 10, description: 'Maximum number of recent items to show.' },
8
31
  },
9
- selfClosing: true,
10
- contentModel: {
11
- type: 'sequence',
12
- fields: [],
13
- },
32
+ deferBody: true,
33
+ contentModel: { type: 'sequence', fields: [] },
14
34
  transform(_resolved, attrs) {
15
- const limitMeta = new Tag('meta', { content: String(attrs.limit ?? 10) });
16
- const sentinelMeta = new Tag('meta', { 'data-field': PLAN_ACTIVITY_SENTINEL, content: 'true' });
17
- const placeholder = new Tag('div', {}, []);
18
- return createComponentRenderable({ rune: 'plan-activity',
35
+ const meta = (field, content) => new Tag('meta', { 'data-field': field, content });
36
+ const bodySource = readDeferredBody(attrs) ?? DEFAULT_PLAN_ACTIVITY_BODY;
37
+ const limit = attrs.limit ?? 10;
38
+ const metas = [
39
+ meta('collection-type', 'work,bug,spec,decision,milestone'),
40
+ meta('collection-filter', ''),
41
+ meta('collection-sort', '-modified'),
42
+ meta('collection-group', ''),
43
+ meta('collection-limit', String(limit)),
44
+ meta('collection-fields', ''),
45
+ meta('collection-layout', 'table'),
46
+ meta('collection-group-display', 'headings'),
47
+ meta('collection-empty', ''),
48
+ meta(COLLECTION_SENTINEL, 'true'),
49
+ meta('collection-body', bodySource),
50
+ ];
51
+ const placeholder = new Tag('div', { 'data-name': 'items' }, []);
52
+ return createComponentRenderable({
53
+ rune: 'collection',
19
54
  tag: 'section',
20
- properties: {
21
- limit: limitMeta,
22
- },
23
- refs: {
24
- items: placeholder,
25
- },
26
- children: [limitMeta, sentinelMeta, placeholder],
55
+ properties: {},
56
+ refs: { items: placeholder },
57
+ children: [...metas, placeholder],
27
58
  });
28
59
  },
29
60
  });
@@ -1 +1 @@
1
- {"version":3,"file":"plan-activity.js","sourceRoot":"","sources":["../../src/tags/plan-activity.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAExF,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AAEjE,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;IACpD,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,yCAAyC,EAAE;KAC7G;IACD,WAAW,EAAE,IAAI;IACjB,YAAY,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,EAAE;KACV;IACD,SAAS,CAAC,SAAS,EAAE,KAAK;QACzB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,sBAAsB,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAChG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAE3C,OAAO,yBAAyB,CAAC,EAAE,IAAI,EAAE,eAAe;YACvD,GAAG,EAAE,SAAS;YACd,UAAU,EAAE;gBACX,KAAK,EAAE,SAAS;aAChB;YACD,IAAI,EAAE;gBACL,KAAK,EAAE,WAAW;aAClB;YACD,QAAQ,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,WAAW,CAAC;SAChD,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"plan-activity.js","sourceRoot":"","sources":["../../src/tags/plan-activity.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE/H;;;;;;;;;;;;;;GAcG;AAEH,MAAM,0BAA0B,GAAG;;;;;;;;CAQlC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,wBAAwB,CAAC;IACpD,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,yCAAyC,EAAE;KAC7G;IACD,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;IAC9C,SAAS,CAAC,SAAS,EAAE,KAAK;QACzB,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QACnG,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,0BAA0B,CAAC;QACzE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QAEhC,MAAM,KAAK,GAAG;YACb,IAAI,CAAC,iBAAiB,EAAE,kCAAkC,CAAC;YAC3D,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,iBAAiB,EAAE,WAAW,CAAC;YACpC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;YAClC,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;YAC5C,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC;YACjC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC;SACnC,CAAC;QAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAEjE,OAAO,yBAAyB,CAAC;YAChC,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,SAAS;YACd,UAAU,EAAE,EAAE;YACd,IAAI,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE;YAC5B,QAAQ,EAAE,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC;SACjC,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@refrakt-md/plan",
3
3
  "description": "Planning runes for refrakt.md — specs, work items, bugs, decisions, and milestones",
4
- "version": "0.15.0",
4
+ "version": "0.16.1",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -61,13 +61,13 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "@markdoc/markdoc": "0.4.0",
64
- "@refrakt-md/behaviors": "0.15.0",
65
- "@refrakt-md/content": "0.15.0",
66
- "@refrakt-md/highlight": "0.15.0",
67
- "@refrakt-md/html": "0.15.0",
68
- "@refrakt-md/runes": "0.15.0",
69
- "@refrakt-md/transform": "0.15.0",
70
- "@refrakt-md/types": "0.15.0",
64
+ "@refrakt-md/behaviors": "0.16.1",
65
+ "@refrakt-md/content": "0.16.1",
66
+ "@refrakt-md/highlight": "0.16.1",
67
+ "@refrakt-md/html": "0.16.1",
68
+ "@refrakt-md/runes": "0.16.1",
69
+ "@refrakt-md/transform": "0.16.1",
70
+ "@refrakt-md/types": "0.16.1",
71
71
  "reflect-metadata": "^0.2.0"
72
72
  },
73
73
  "devDependencies": {
package/dist/cards.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import Markdoc from '@markdoc/markdoc';
2
- import type { EntityRegistration } from '@refrakt-md/types';
3
- declare const Tag: typeof Markdoc.Tag;
4
- export declare const WORK_STATUS_SENTIMENT: Record<string, string>;
5
- export declare const BUG_STATUS_SENTIMENT: Record<string, string>;
6
- export declare const PRIORITY_SENTIMENT: Record<string, string>;
7
- export declare const SEVERITY_SENTIMENT: Record<string, string>;
8
- export declare const SPEC_STATUS_SENTIMENT: Record<string, string>;
9
- export declare const DECISION_STATUS_SENTIMENT: Record<string, string>;
10
- export declare const MILESTONE_STATUS_SENTIMENT: Record<string, string>;
11
- /** Build a metadata badge matching the dimension system output */
12
- export declare function buildMetaBadge(label: string, value: string, opts: {
13
- metaType: string;
14
- metaRank: string;
15
- sentiment?: string;
16
- labelHidden?: boolean;
17
- }): InstanceType<typeof Tag>;
18
- /** Build a compact summary card Tag for any plan entity */
19
- export declare function buildEntityCard(entity: EntityRegistration): InstanceType<typeof Tag>;
20
- /** Build a decision log entry Tag */
21
- export declare function buildDecisionEntry(entity: EntityRegistration): InstanceType<typeof Tag>;
22
- export {};
23
- //# sourceMappingURL=cards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"AAIA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,QAAA,MAAQ,GAAG,oBAAY,CAAC;AAIxB,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGxD,CAAC;AACF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGvD,CAAC;AACF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAErD,CAAC;AACF,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAErD,CAAC;AACF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAExD,CAAC;AACF,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE5D,CAAC;AACF,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAE7D,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAClE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAC9E,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CAW3B;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CA8EpF;AAED,qCAAqC;AACrC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,CAyBvF"}
package/dist/cards.js DELETED
@@ -1,150 +0,0 @@
1
- // ─── Entity Card Builders ───
2
- // Construct summary card and entry Tag renderables for plan entities.
3
- // No Node.js API dependencies — safe for edge runtimes.
4
- import Markdoc from '@markdoc/markdoc';
5
- const { Tag } = Markdoc;
6
- // ─── Sentiment maps (matching rune configs in config.ts) ───
7
- export const WORK_STATUS_SENTIMENT = {
8
- draft: 'neutral', ready: 'neutral', 'in-progress': 'neutral',
9
- review: 'caution', done: 'positive', blocked: 'negative',
10
- };
11
- export const BUG_STATUS_SENTIMENT = {
12
- reported: 'neutral', confirmed: 'caution', 'in-progress': 'neutral',
13
- fixed: 'positive', wontfix: 'neutral', duplicate: 'neutral',
14
- };
15
- export const PRIORITY_SENTIMENT = {
16
- critical: 'negative', high: 'caution', medium: 'neutral', low: 'neutral',
17
- };
18
- export const SEVERITY_SENTIMENT = {
19
- critical: 'negative', major: 'caution', minor: 'neutral', trivial: 'neutral',
20
- };
21
- export const SPEC_STATUS_SENTIMENT = {
22
- draft: 'neutral', review: 'caution', accepted: 'positive', superseded: 'caution', deprecated: 'negative',
23
- };
24
- export const DECISION_STATUS_SENTIMENT = {
25
- proposed: 'neutral', accepted: 'positive', superseded: 'caution', deprecated: 'negative',
26
- };
27
- export const MILESTONE_STATUS_SENTIMENT = {
28
- planning: 'neutral', active: 'positive', complete: 'positive',
29
- };
30
- /** Build a metadata badge matching the dimension system output */
31
- export function buildMetaBadge(label, value, opts) {
32
- const labelAttrs = { 'data-meta-label': '' };
33
- if (opts.labelHidden)
34
- labelAttrs['data-meta-label-hidden'] = '';
35
- const labelEl = new Tag('span', labelAttrs, [label]);
36
- const valueEl = new Tag('span', { 'data-meta-value': '' }, [value]);
37
- const attrs = {
38
- 'data-meta-type': opts.metaType,
39
- 'data-meta-rank': opts.metaRank,
40
- };
41
- if (opts.sentiment)
42
- attrs['data-meta-sentiment'] = opts.sentiment;
43
- return new Tag('span', attrs, [labelEl, valueEl]);
44
- }
45
- /** Build a compact summary card Tag for any plan entity */
46
- export function buildEntityCard(entity) {
47
- const type = entity.type;
48
- const id = String(type === 'milestone' ? (entity.data.name ?? entity.id) : (entity.data.id ?? entity.id));
49
- const title = String(entity.data.title ?? '');
50
- const status = String(entity.data.status ?? '');
51
- // Header: ID on the left, status + progress on the right
52
- const headerLeft = [
53
- buildMetaBadge('ID:', id, { metaType: 'id', metaRank: 'primary', labelHidden: true }),
54
- ];
55
- const headerRight = [];
56
- const statusSentiment = type === 'work' ? WORK_STATUS_SENTIMENT[status]
57
- : type === 'bug' ? BUG_STATUS_SENTIMENT[status]
58
- : type === 'spec' ? SPEC_STATUS_SENTIMENT[status]
59
- : type === 'decision' ? DECISION_STATUS_SENTIMENT[status]
60
- : type === 'milestone' ? MILESTONE_STATUS_SENTIMENT[status]
61
- : undefined;
62
- headerRight.push(buildMetaBadge('Status:', status, { metaType: 'status', metaRank: 'primary', sentiment: statusSentiment, labelHidden: true }));
63
- // Progress in header (no circle indicator)
64
- const checkedCount = Number(entity.data.checkedCount ?? 0);
65
- const totalCount = Number(entity.data.totalCount ?? 0);
66
- if (totalCount > 0) {
67
- headerRight.push(new Tag('span', {
68
- class: 'rf-backlog__card-progress',
69
- 'data-checked': String(checkedCount),
70
- 'data-total': String(totalCount),
71
- }, [`${checkedCount}/${totalCount}`]));
72
- }
73
- const header = new Tag('div', { 'data-section': 'header' }, [
74
- new Tag('span', { class: 'rf-backlog__card-header-left' }, headerLeft),
75
- new Tag('span', { class: 'rf-backlog__card-header-right' }, headerRight),
76
- ]);
77
- // Body: title
78
- const titleEl = new Tag('div', { 'data-section': 'title' }, [title]);
79
- // Footer: secondary metadata pills
80
- const footerBadges = [];
81
- if (type === 'work') {
82
- const priority = String(entity.data.priority ?? '');
83
- const complexity = String(entity.data.complexity ?? '');
84
- if (priority)
85
- footerBadges.push(buildMetaBadge('Priority:', priority, { metaType: 'category', metaRank: 'secondary', sentiment: PRIORITY_SENTIMENT[priority] }));
86
- if (complexity && complexity !== 'unknown')
87
- footerBadges.push(buildMetaBadge('Complexity:', complexity, { metaType: 'quantity', metaRank: 'secondary' }));
88
- }
89
- else if (type === 'bug') {
90
- const severity = String(entity.data.severity ?? '');
91
- if (severity)
92
- footerBadges.push(buildMetaBadge('Severity:', severity, { metaType: 'category', metaRank: 'secondary', sentiment: SEVERITY_SENTIMENT[severity] }));
93
- }
94
- else if (type === 'spec') {
95
- const version = String(entity.data.version ?? '');
96
- if (version)
97
- footerBadges.push(buildMetaBadge('Version:', version, { metaType: 'quantity', metaRank: 'secondary' }));
98
- }
99
- else if (type === 'decision') {
100
- const date = String(entity.data.date ?? '');
101
- if (date)
102
- footerBadges.push(buildMetaBadge('Date:', date, { metaType: 'temporal', metaRank: 'secondary' }));
103
- }
104
- else if (type === 'milestone') {
105
- const target = String(entity.data.target ?? '');
106
- if (target)
107
- footerBadges.push(buildMetaBadge('Target:', target, { metaType: 'temporal', metaRank: 'secondary' }));
108
- }
109
- const milestone = String(entity.data.milestone ?? '');
110
- if (milestone)
111
- footerBadges.push(buildMetaBadge('Milestone:', milestone, { metaType: 'tag', metaRank: 'secondary', labelHidden: true }));
112
- const sections = [header, titleEl];
113
- if (footerBadges.length > 0) {
114
- sections.push(new Tag('div', { 'data-section': 'footer' }, footerBadges));
115
- }
116
- const children = entity.sourceUrl
117
- ? [new Tag('a', { class: 'rf-backlog__card-link', href: entity.sourceUrl }, sections)]
118
- : sections;
119
- return new Tag('article', {
120
- class: 'rf-backlog__card',
121
- 'data-type': type,
122
- 'data-status': status,
123
- 'data-id': id,
124
- }, children);
125
- }
126
- /** Build a decision log entry Tag */
127
- export function buildDecisionEntry(entity) {
128
- const id = String(entity.data.id ?? entity.id);
129
- const title = String(entity.data.title ?? '');
130
- const status = String(entity.data.status ?? '');
131
- const date = String(entity.data.date ?? '');
132
- const badges = [
133
- buildMetaBadge('ID:', id, { metaType: 'id', metaRank: 'primary', labelHidden: true }),
134
- buildMetaBadge('Status:', status, { metaType: 'status', metaRank: 'primary', sentiment: DECISION_STATUS_SENTIMENT[status], labelHidden: true }),
135
- ];
136
- if (date)
137
- badges.push(buildMetaBadge('Date:', date, { metaType: 'temporal', metaRank: 'secondary' }));
138
- const header = new Tag('div', { 'data-section': 'header' }, badges);
139
- const titleEl = new Tag('div', { 'data-section': 'title' }, [title]);
140
- const innerChildren = [header, titleEl];
141
- const children = entity.sourceUrl
142
- ? [new Tag('a', { class: 'rf-decision-log__link', href: entity.sourceUrl }, innerChildren)]
143
- : innerChildren;
144
- return new Tag('li', {
145
- class: 'rf-decision-log__entry',
146
- 'data-status': status,
147
- 'data-id': id,
148
- }, children);
149
- }
150
- //# sourceMappingURL=cards.js.map
package/dist/cards.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cards.js","sourceRoot":"","sources":["../src/cards.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- import type { CleanupFn } from '@refrakt-md/behaviors';
2
- /**
3
- * Composite behavior for plan entity tab groups.
4
- *
5
- * Wraps tabsBehavior (ARIA wiring, keyboard nav, panel switching) and adds:
6
- * - Anchor navigation coordination: when the user clicks a TOC link or
7
- * section-nav entry pointing to a heading inside an inactive panel,
8
- * activates that panel first so the browser can scroll to the target.
9
- * - Exposes the active tab name as a data attribute on the container
10
- * so CSS can dim the TOC when a non-Overview tab is active.
11
- */
12
- export declare function entityTabsBehavior(el: HTMLElement): CleanupFn;
13
- //# sourceMappingURL=entity-tabs-behavior.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-tabs-behavior.d.ts","sourceRoot":"","sources":["../src/entity-tabs-behavior.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,WAAW,GAAG,SAAS,CAyF7D"}
@@ -1,94 +0,0 @@
1
- import { tabsBehavior } from '@refrakt-md/behaviors';
2
- /**
3
- * Composite behavior for plan entity tab groups.
4
- *
5
- * Wraps tabsBehavior (ARIA wiring, keyboard nav, panel switching) and adds:
6
- * - Anchor navigation coordination: when the user clicks a TOC link or
7
- * section-nav entry pointing to a heading inside an inactive panel,
8
- * activates that panel first so the browser can scroll to the target.
9
- * - Exposes the active tab name as a data attribute on the container
10
- * so CSS can dim the TOC when a non-Overview tab is active.
11
- */
12
- export function entityTabsBehavior(el) {
13
- const tabsCleanup = tabsBehavior(el);
14
- const cleanups = [];
15
- const tabBar = el.querySelector('[data-name="tabs"]');
16
- const panelsContainer = el.querySelector('[data-name="panels"]');
17
- if (!tabBar || !panelsContainer)
18
- return tabsCleanup;
19
- const buttons = Array.from(tabBar.querySelectorAll('button[role="tab"]'));
20
- const panels = Array.from(panelsContainer.querySelectorAll('[role="tabpanel"]'));
21
- // Set initial active-tab data attribute
22
- el.setAttribute('data-active-tab', buttons[0]?.getAttribute('data-tab') ?? 'overview');
23
- // Watch for tab changes to update the data-active-tab attribute
24
- const observer = new MutationObserver(() => {
25
- const activeButton = buttons.find(b => b.getAttribute('aria-selected') === 'true');
26
- if (activeButton) {
27
- el.setAttribute('data-active-tab', activeButton.getAttribute('data-tab') ?? '');
28
- }
29
- });
30
- for (const btn of buttons) {
31
- observer.observe(btn, { attributes: true, attributeFilter: ['aria-selected'] });
32
- }
33
- cleanups.push(() => observer.disconnect());
34
- /**
35
- * Given a target element ID, find which panel contains it and activate that panel.
36
- * Returns true if a panel switch occurred.
37
- */
38
- function activatePanelForTarget(targetId) {
39
- const target = document.getElementById(targetId);
40
- if (!target)
41
- return false;
42
- // Find which panel contains this target
43
- const containingPanel = panels.find(p => p.contains(target));
44
- if (!containingPanel)
45
- return false;
46
- // If already active, no switch needed
47
- if (containingPanel.getAttribute('data-state') === 'active')
48
- return false;
49
- // Find the button index for this panel and click it
50
- const panelIndex = panels.indexOf(containingPanel);
51
- if (panelIndex >= 0 && buttons[panelIndex]) {
52
- buttons[panelIndex].click();
53
- return true;
54
- }
55
- return false;
56
- }
57
- // Intercept anchor clicks from TOC and section-nav
58
- const onAnchorClick = (e) => {
59
- const link = e.target.closest('a[href^="#"]');
60
- if (!link)
61
- return;
62
- const targetId = link.getAttribute('href')?.slice(1);
63
- if (!targetId)
64
- return;
65
- // Only intercept if the target is inside our tab panels
66
- const target = document.getElementById(targetId);
67
- if (!target || !panelsContainer.contains(target))
68
- return;
69
- if (activatePanelForTarget(targetId)) {
70
- // Panel was switched — re-scroll after the panel becomes visible
71
- e.preventDefault();
72
- requestAnimationFrame(() => {
73
- target.scrollIntoView({ behavior: 'smooth', block: 'start' });
74
- });
75
- }
76
- };
77
- document.addEventListener('click', onAnchorClick);
78
- cleanups.push(() => document.removeEventListener('click', onAnchorClick));
79
- // Handle back/forward navigation with hash changes
80
- const onHashChange = () => {
81
- const hash = window.location.hash.slice(1);
82
- if (hash) {
83
- activatePanelForTarget(hash);
84
- }
85
- };
86
- window.addEventListener('hashchange', onHashChange);
87
- cleanups.push(() => window.removeEventListener('hashchange', onHashChange));
88
- return () => {
89
- tabsCleanup();
90
- el.removeAttribute('data-active-tab');
91
- cleanups.forEach(fn => fn());
92
- };
93
- }
94
- //# sourceMappingURL=entity-tabs-behavior.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entity-tabs-behavior.js","sourceRoot":"","sources":["../src/entity-tabs-behavior.ts"],"names":[],"mappings":"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"}