@refrakt-md/storytelling 0.8.5 → 0.9.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 (72) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/config.js +54 -12
  3. package/dist/config.js.map +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +3 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/pipeline.d.ts +18 -0
  8. package/dist/pipeline.d.ts.map +1 -0
  9. package/dist/pipeline.js +242 -0
  10. package/dist/pipeline.js.map +1 -0
  11. package/dist/tags/bond.d.ts.map +1 -1
  12. package/dist/tags/bond.js +1 -2
  13. package/dist/tags/bond.js.map +1 -1
  14. package/dist/tags/character.d.ts.map +1 -1
  15. package/dist/tags/character.js +40 -71
  16. package/dist/tags/character.js.map +1 -1
  17. package/dist/tags/common.d.ts +29 -0
  18. package/dist/tags/common.d.ts.map +1 -0
  19. package/dist/tags/common.js +59 -0
  20. package/dist/tags/common.js.map +1 -0
  21. package/dist/tags/faction.d.ts.map +1 -1
  22. package/dist/tags/faction.js +30 -93
  23. package/dist/tags/faction.js.map +1 -1
  24. package/dist/tags/lore.d.ts.map +1 -1
  25. package/dist/tags/lore.js +1 -2
  26. package/dist/tags/lore.js.map +1 -1
  27. package/dist/tags/plot.d.ts.map +1 -1
  28. package/dist/tags/plot.js +28 -58
  29. package/dist/tags/plot.js.map +1 -1
  30. package/dist/tags/realm.d.ts.map +1 -1
  31. package/dist/tags/realm.js +32 -97
  32. package/dist/tags/realm.js.map +1 -1
  33. package/dist/tags/storyboard.d.ts.map +1 -1
  34. package/dist/tags/storyboard.js +14 -10
  35. package/dist/tags/storyboard.js.map +1 -1
  36. package/package.json +4 -4
  37. package/dist/schema/bond.d.ts +0 -8
  38. package/dist/schema/bond.d.ts.map +0 -1
  39. package/dist/schema/bond.js +0 -10
  40. package/dist/schema/bond.js.map +0 -1
  41. package/dist/schema/character.d.ts +0 -10
  42. package/dist/schema/character.d.ts.map +0 -1
  43. package/dist/schema/character.js +0 -11
  44. package/dist/schema/character.js.map +0 -1
  45. package/dist/schema/faction.d.ts +0 -10
  46. package/dist/schema/faction.d.ts.map +0 -1
  47. package/dist/schema/faction.js +0 -11
  48. package/dist/schema/faction.js.map +0 -1
  49. package/dist/schema/lore.d.ts +0 -7
  50. package/dist/schema/lore.d.ts.map +0 -1
  51. package/dist/schema/lore.js +0 -9
  52. package/dist/schema/lore.js.map +0 -1
  53. package/dist/schema/plot.d.ts +0 -15
  54. package/dist/schema/plot.d.ts.map +0 -1
  55. package/dist/schema/plot.js +0 -19
  56. package/dist/schema/plot.js.map +0 -1
  57. package/dist/schema/realm.d.ts +0 -10
  58. package/dist/schema/realm.d.ts.map +0 -1
  59. package/dist/schema/realm.js +0 -11
  60. package/dist/schema/realm.js.map +0 -1
  61. package/dist/schema/story-section.d.ts +0 -4
  62. package/dist/schema/story-section.d.ts.map +0 -1
  63. package/dist/schema/story-section.js +0 -6
  64. package/dist/schema/story-section.js.map +0 -1
  65. package/dist/schema/storyboard.d.ts +0 -8
  66. package/dist/schema/storyboard.d.ts.map +0 -1
  67. package/dist/schema/storyboard.js +0 -10
  68. package/dist/schema/storyboard.js.map +0 -1
  69. package/dist/types.d.ts +0 -23
  70. package/dist/types.d.ts.map +0 -1
  71. package/dist/types.js +0 -24
  72. package/dist/types.js.map +0 -1
@@ -1,38 +1,28 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
1
  import Markdoc from '@markdoc/markdoc';
11
2
  const { Tag } = Markdoc;
12
- import { attribute, Model, createComponentRenderable, createContentModelSchema, createSchema, asNodes, RenderableNodeCursor } from '@refrakt-md/runes';
13
- import { schema } from '../types.js';
14
- class StorySectionModel extends Model {
15
- constructor() {
16
- super(...arguments);
17
- this.name = '';
18
- }
19
- transform() {
20
- const nameTag = new Tag('span', {}, [this.name]);
21
- const body = this.transformChildren().wrap('div');
22
- return createComponentRenderable(schema.CharacterSection, {
3
+ import { createComponentRenderable, createContentModelSchema, asNodes, RenderableNodeCursor } from '@refrakt-md/runes';
4
+ export const characterSection = createContentModelSchema({
5
+ attributes: {
6
+ name: { type: String, required: true },
7
+ },
8
+ contentModel: {
9
+ type: 'sequence',
10
+ fields: [
11
+ { name: 'body', match: 'any', optional: true, greedy: true },
12
+ ],
13
+ },
14
+ transform(resolved, attrs, config) {
15
+ const nameTag = new Tag('span', {}, [attrs.name ?? '']);
16
+ const body = new RenderableNodeCursor(Markdoc.transform(asNodes(resolved.body), config)).wrap('div');
17
+ return createComponentRenderable({ rune: 'character-section',
23
18
  tag: 'div',
24
19
  refs: { name: nameTag, body: body.tag('div') },
25
20
  children: [nameTag, body.next()],
26
21
  });
27
- }
28
- }
29
- __decorate([
30
- attribute({ type: String, required: true }),
31
- __metadata("design:type", String)
32
- ], StorySectionModel.prototype, "name", void 0);
22
+ },
23
+ });
33
24
  const roleType = ['protagonist', 'antagonist', 'supporting', 'minor'];
34
25
  const statusType = ['alive', 'dead', 'unknown', 'missing'];
35
- export const characterSection = createSchema(StorySectionModel);
36
26
  export const character = createContentModelSchema({
37
27
  attributes: {
38
28
  name: { type: String, required: true, description: 'Display name shown in the character header.' },
@@ -72,56 +62,35 @@ export const character = createContentModelSchema({
72
62
  const portraitDiv = hasPortrait ? portrait.wrap('div') : undefined;
73
63
  const sections = sectionNodes.tag('div').typeof('CharacterSection');
74
64
  const hasSections = sections.count() > 0;
75
- const children = [nameTag, roleMeta, statusMeta, aliasesMeta, tagsMeta];
65
+ // Portrait before name so the image appears between header and title in stacked layout.
66
+ const children = [];
76
67
  if (portraitDiv)
77
68
  children.push(portraitDiv.next());
69
+ children.push(nameTag, roleMeta, statusMeta, aliasesMeta, tagsMeta);
78
70
  const schemaMap = {
79
71
  name: nameTag,
80
72
  jobTitle: roleMeta,
81
73
  };
82
- if (hasSections) {
83
- const sectionsContainer = sections.wrap('div');
84
- children.push(sectionsContainer.next());
85
- return createComponentRenderable(schema.Character, {
86
- tag: 'article',
87
- property: 'contentSection',
88
- properties: {
89
- role: roleMeta,
90
- status: statusMeta,
91
- aliases: aliasesMeta,
92
- tags: tagsMeta,
93
- section: sections,
94
- },
95
- refs: {
96
- name: nameTag,
97
- ...(portraitDiv ? { portrait: portraitDiv } : {}),
98
- sections: sectionsContainer,
99
- },
100
- schema: schemaMap,
101
- children,
102
- });
103
- }
104
- else {
105
- const body = sectionNodes.wrap('div');
106
- children.push(body.next());
107
- return createComponentRenderable(schema.Character, {
108
- tag: 'article',
109
- property: 'contentSection',
110
- properties: {
111
- role: roleMeta,
112
- status: statusMeta,
113
- aliases: aliasesMeta,
114
- tags: tagsMeta,
115
- },
116
- refs: {
117
- name: nameTag,
118
- ...(portraitDiv ? { portrait: portraitDiv } : {}),
119
- body,
120
- },
121
- schema: schemaMap,
122
- children,
123
- });
124
- }
74
+ const sectionsContainer = hasSections ? sections.wrap('div') : undefined;
75
+ const body = !hasSections ? sectionNodes.wrap('div') : undefined;
76
+ children.push(hasSections ? sectionsContainer.next() : body.next());
77
+ return createComponentRenderable({ rune: 'character', schemaOrgType: 'Person',
78
+ tag: 'article',
79
+ property: 'contentSection',
80
+ properties: {
81
+ role: roleMeta,
82
+ status: statusMeta,
83
+ aliases: aliasesMeta,
84
+ tags: tagsMeta,
85
+ ...(hasSections ? { section: sections } : {}),
86
+ },
87
+ refs: {
88
+ name: nameTag,
89
+ ...(portraitDiv ? { portrait: portraitDiv } : {}),
90
+ ...(hasSections ? { sections: sectionsContainer } : { body: body }),
91
+ },
92
+ schema: schemaMap,
93
+ children, });
125
94
  },
126
95
  });
127
96
  //# sourceMappingURL=character.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"character.js","sourceRoot":"","sources":["../../src/tags/character.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"character.js","sourceRoot":"","sources":["../../src/tags/character.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import Markdoc from '@markdoc/markdoc';
2
+ import type { RenderableTreeNode } from '@markdoc/markdoc';
3
+ import { RenderableNodeCursor } from '@refrakt-md/runes';
4
+ /**
5
+ * Shared scene-image extraction for storytelling runes (realm, faction).
6
+ *
7
+ * Takes the resolved `scene` field, transforms it, and returns either:
8
+ * - A media div wrapping the extracted `<img>` tag (if the scene was an image)
9
+ * - Extra description nodes (if the scene was text, not an image)
10
+ *
11
+ * Also returns the raw `<img>` tag for SEO schema use.
12
+ */
13
+ export declare function extractScene(sceneResolved: unknown, config: Record<string, any>): {
14
+ sceneDiv: RenderableNodeCursor<Markdoc.Tag> | undefined;
15
+ sceneImgTag: Markdoc.Tag | undefined;
16
+ extraDescription: RenderableTreeNode[];
17
+ };
18
+ /**
19
+ * Shared content assembly for storytelling runes with sections (realm, faction).
20
+ *
21
+ * Takes the extra description nodes, resolved description field, section cursor,
22
+ * and section type name, and returns a wrapped content div.
23
+ */
24
+ export declare function buildStoryContent(extraDescription: RenderableTreeNode[], descriptionResolved: unknown, sectionNodes: RenderableNodeCursor, sectionTypeName: string, config: Record<string, any>): {
25
+ mainContent: RenderableNodeCursor<Markdoc.Tag>;
26
+ sections: RenderableNodeCursor<Markdoc.Tag>;
27
+ hasSections: boolean;
28
+ };
29
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/tags/common.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAW,oBAAoB,EAAqB,MAAM,mBAAmB,CAAC;AAErF;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC3B,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB;IACF,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACxD,WAAW,EAAE,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IACrC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;CACvC,CAmBA;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,gBAAgB,EAAE,kBAAkB,EAAE,EACtC,mBAAmB,EAAE,OAAO,EAC5B,YAAY,EAAE,oBAAoB,EAClC,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB;IACF,WAAW,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/C,QAAQ,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,WAAW,EAAE,OAAO,CAAC;CACrB,CA8BA"}
@@ -0,0 +1,59 @@
1
+ import Markdoc from '@markdoc/markdoc';
2
+ const { Tag } = Markdoc;
3
+ import { asNodes, RenderableNodeCursor, extractMediaImage } from '@refrakt-md/runes';
4
+ /**
5
+ * Shared scene-image extraction for storytelling runes (realm, faction).
6
+ *
7
+ * Takes the resolved `scene` field, transforms it, and returns either:
8
+ * - A media div wrapping the extracted `<img>` tag (if the scene was an image)
9
+ * - Extra description nodes (if the scene was text, not an image)
10
+ *
11
+ * Also returns the raw `<img>` tag for SEO schema use.
12
+ */
13
+ export function extractScene(sceneResolved, config) {
14
+ const sceneAstNodes = asNodes(sceneResolved);
15
+ const sceneRendered = new RenderableNodeCursor(Markdoc.transform(sceneAstNodes, config));
16
+ const sceneImgTag = extractMediaImage(sceneRendered);
17
+ let sceneDiv;
18
+ let extraDescription = [];
19
+ if (sceneImgTag) {
20
+ sceneDiv = new RenderableNodeCursor([sceneImgTag]).wrap('div');
21
+ }
22
+ else if (sceneRendered.count() > 0) {
23
+ // First paragraph was text, not an image — include as description
24
+ extraDescription = sceneRendered.toArray();
25
+ }
26
+ return { sceneDiv, sceneImgTag, extraDescription };
27
+ }
28
+ /**
29
+ * Shared content assembly for storytelling runes with sections (realm, faction).
30
+ *
31
+ * Takes the extra description nodes, resolved description field, section cursor,
32
+ * and section type name, and returns a wrapped content div.
33
+ */
34
+ export function buildStoryContent(extraDescription, descriptionResolved, sectionNodes, sectionTypeName, config) {
35
+ // Transform description paragraphs
36
+ const descAstNodes = asNodes(descriptionResolved);
37
+ const descRendered = new RenderableNodeCursor(Markdoc.transform(descAstNodes, config));
38
+ const sections = sectionNodes.tag('div').typeof(sectionTypeName);
39
+ const hasSections = sections.count() > 0;
40
+ // Build content children (everything except scene)
41
+ const contentChildren = [];
42
+ const allDescNodes = [...extraDescription, ...descRendered.toArray()];
43
+ if (allDescNodes.length > 0) {
44
+ contentChildren.push(...allDescNodes);
45
+ }
46
+ if (hasSections) {
47
+ const sectionsContainer = sections.wrap('div');
48
+ contentChildren.push(sectionsContainer.next());
49
+ }
50
+ else {
51
+ const body = sectionNodes.wrap('div');
52
+ if (sectionNodes.count() > 0) {
53
+ contentChildren.push(body.next());
54
+ }
55
+ }
56
+ const mainContent = new RenderableNodeCursor(contentChildren).wrap('div');
57
+ return { mainContent, sections, hasSections };
58
+ }
59
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/tags/common.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAErF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC3B,aAAsB,EACtB,MAA2B;IAM3B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,IAAI,oBAAoB,CAC7C,OAAO,CAAC,SAAS,CAAC,aAAa,EAAE,MAAM,CAAyB,CAChE,CAAC;IAEF,MAAM,WAAW,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAErD,IAAI,QAAuD,CAAC;IAC5D,IAAI,gBAAgB,GAAyB,EAAE,CAAC;IAEhD,IAAI,WAAW,EAAE,CAAC;QACjB,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAsC,CAAC;IACrG,CAAC;SAAM,IAAI,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;QACtC,kEAAkE;QAClE,gBAAgB,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC;AACpD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAChC,gBAAsC,EACtC,mBAA4B,EAC5B,YAAkC,EAClC,eAAuB,EACvB,MAA2B;IAM3B,mCAAmC;IACnC,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAClD,MAAM,YAAY,GAAG,IAAI,oBAAoB,CAC5C,OAAO,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAyB,CAC/D,CAAC;IAEF,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAsC,CAAC;IACtG,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEzC,mDAAmD;IACnD,MAAM,eAAe,GAAU,EAAE,CAAC;IAClC,MAAM,YAAY,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9B,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACF,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1E,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC/C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"faction.d.ts","sourceRoot":"","sources":["../../src/tags/faction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAsBvC,eAAO,MAAM,cAAc,gBAAoC,CAAC;AAEhE,eAAO,MAAM,OAAO,gBA4JlB,CAAC"}
1
+ {"version":3,"file":"faction.d.ts","sourceRoot":"","sources":["../../src/tags/faction.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAMvC,eAAO,MAAM,cAAc,gBAsBzB,CAAC;AAEH,eAAO,MAAM,OAAO,gBA+FlB,CAAC"}
@@ -1,36 +1,27 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
1
  import Markdoc from '@markdoc/markdoc';
11
2
  const { Tag } = Markdoc;
12
- import { attribute, Model, createComponentRenderable, createContentModelSchema, createSchema, asNodes, RenderableNodeCursor, SplitLayoutModel } from '@refrakt-md/runes';
13
- import { schema } from '../types.js';
14
- class FactionSectionModel extends Model {
15
- constructor() {
16
- super(...arguments);
17
- this.name = '';
18
- }
19
- transform() {
20
- const nameTag = new Tag('span', {}, [this.name]);
21
- const body = this.transformChildren().wrap('div');
22
- return createComponentRenderable(schema.FactionSection, {
3
+ import { createComponentRenderable, createContentModelSchema, asNodes, RenderableNodeCursor, SplitLayoutModel, buildLayoutMetas } from '@refrakt-md/runes';
4
+ import { extractScene, buildStoryContent } from './common.js';
5
+ export const factionSection = createContentModelSchema({
6
+ attributes: {
7
+ name: { type: String, required: true },
8
+ },
9
+ contentModel: {
10
+ type: 'sequence',
11
+ fields: [
12
+ { name: 'body', match: 'any', optional: true, greedy: true },
13
+ ],
14
+ },
15
+ transform(resolved, attrs, config) {
16
+ const nameTag = new Tag('span', {}, [attrs.name ?? '']);
17
+ const body = new RenderableNodeCursor(Markdoc.transform(asNodes(resolved.body), config)).wrap('div');
18
+ return createComponentRenderable({ rune: 'faction-section',
23
19
  tag: 'div',
24
20
  refs: { name: nameTag, body: body.tag('div') },
25
21
  children: [nameTag, body.next()],
26
22
  });
27
- }
28
- }
29
- __decorate([
30
- attribute({ type: String, required: true }),
31
- __metadata("design:type", String)
32
- ], FactionSectionModel.prototype, "name", void 0);
33
- export const factionSection = createSchema(FactionSectionModel);
23
+ },
24
+ });
34
25
  export const faction = createContentModelSchema({
35
26
  base: SplitLayoutModel,
36
27
  attributes: {
@@ -59,80 +50,26 @@ export const faction = createContentModelSchema({
59
50
  // Combine explicit child tags (preamble items) with emitted section tags
60
51
  const allItems = [...asNodes(resolved.items), ...asNodes(resolved.sections)];
61
52
  const sectionNodes = new RenderableNodeCursor(Markdoc.transform(allItems, config));
53
+ // Domain meta tags
62
54
  const nameTag = new Tag('span', {}, [attrs.name ?? '']);
63
55
  const factionTypeMeta = new Tag('meta', { content: attrs.type ?? '' });
64
56
  const alignmentMeta = new Tag('meta', { content: attrs.alignment ?? '' });
65
57
  const sizeMeta = new Tag('meta', { content: attrs.size ?? '' });
66
58
  const tagsMeta = new Tag('meta', { content: attrs.tags ?? '' });
67
59
  // Layout meta tags
68
- const layout = attrs.layout || 'stacked';
69
- const ratio = attrs.ratio || '1 1';
70
- const valign = attrs.valign || 'top';
71
- const gap = attrs.gap || 'default';
72
- const collapse = attrs.collapse;
73
- const layoutMeta = new Tag('meta', { content: layout });
74
- const ratioMeta = layout !== 'stacked' ? new Tag('meta', { content: ratio }) : undefined;
75
- const valignMeta = layout !== 'stacked' ? new Tag('meta', { content: valign }) : undefined;
76
- const gapMeta = gap !== 'default' ? new Tag('meta', { content: gap }) : undefined;
77
- const collapseMeta = collapse ? new Tag('meta', { content: collapse }) : undefined;
78
- // Extract scene image from the first preamble paragraph
79
- const sceneAstNodes = asNodes(resolved.scene);
80
- const sceneRendered = new RenderableNodeCursor(Markdoc.transform(sceneAstNodes, config));
81
- let sceneImgTag;
82
- for (const node of sceneRendered.toArray()) {
83
- if (Markdoc.Tag.isTag(node) && node.name === 'img') {
84
- sceneImgTag = node;
85
- break;
86
- }
87
- if (Markdoc.Tag.isTag(node) && node.name === 'p') {
88
- const img = node.children.find((c) => Markdoc.Tag.isTag(c) && c.name === 'img');
89
- if (img) {
90
- sceneImgTag = img;
91
- break;
92
- }
93
- }
94
- }
95
- let sceneDiv;
96
- let extraDescription = [];
97
- if (sceneImgTag) {
98
- sceneDiv = new RenderableNodeCursor([sceneImgTag]).wrap('div');
99
- }
100
- else if (sceneRendered.count() > 0) {
101
- extraDescription = sceneRendered.toArray();
102
- }
103
- // Transform description paragraphs
104
- const descAstNodes = asNodes(resolved.description);
105
- const descRendered = new RenderableNodeCursor(Markdoc.transform(descAstNodes, config));
106
- const sections = sectionNodes.tag('div').typeof('FactionSection');
107
- const hasSections = sections.count() > 0;
108
- // Build content children (everything except scene)
109
- const contentChildren = [];
110
- const allDescNodes = [...extraDescription, ...descRendered.toArray()];
111
- if (allDescNodes.length > 0) {
112
- contentChildren.push(...allDescNodes);
113
- }
114
- if (hasSections) {
115
- const sectionsContainer = sections.wrap('div');
116
- contentChildren.push(sectionsContainer.next());
117
- }
118
- else {
119
- const body = sectionNodes.wrap('div');
120
- if (sectionNodes.count() > 0) {
121
- contentChildren.push(body.next());
122
- }
123
- }
124
- const mainContent = new RenderableNodeCursor(contentChildren).wrap('div');
60
+ const { metas: layoutMetas, children: layoutChildren } = buildLayoutMetas(attrs);
61
+ const { layout: layoutMeta, ratio: ratioMeta, valign: valignMeta, gap: gapMeta, collapse: collapseMeta } = layoutMetas;
62
+ // Extract scene image (shared helper)
63
+ const { sceneDiv, sceneImgTag, extraDescription } = extractScene(resolved.scene, config);
64
+ // Build content div with sections (shared helper)
65
+ const { mainContent, sections, hasSections } = buildStoryContent(extraDescription, resolved.description, sectionNodes, 'FactionSection', config);
125
66
  // Build children array
126
- const children = [
127
- nameTag, factionTypeMeta, alignmentMeta, sizeMeta, tagsMeta,
128
- layoutMeta,
129
- ...(ratioMeta ? [ratioMeta] : []),
130
- ...(valignMeta ? [valignMeta] : []),
131
- ...(gapMeta ? [gapMeta] : []),
132
- ...(collapseMeta ? [collapseMeta] : []),
133
- ];
67
+ // Scene before name so the image appears between header and title in stacked layout.
68
+ // In split layouts, CSS grid explicit placement controls the visual order.
69
+ const children = [];
134
70
  if (sceneDiv)
135
71
  children.push(sceneDiv.next());
72
+ children.push(nameTag, factionTypeMeta, alignmentMeta, sizeMeta, tagsMeta, ...layoutChildren);
136
73
  children.push(mainContent.next());
137
74
  // SEO schema
138
75
  const schemaMap = {
@@ -141,7 +78,7 @@ export const faction = createContentModelSchema({
141
78
  if (sceneImgTag) {
142
79
  schemaMap.image = sceneImgTag;
143
80
  }
144
- return createComponentRenderable(schema.Faction, {
81
+ return createComponentRenderable({ rune: 'faction', schemaOrgType: 'Organization',
145
82
  tag: 'article',
146
83
  property: 'contentSection',
147
84
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"faction.js","sourceRoot":"","sources":["../../src/tags/faction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"faction.js","sourceRoot":"","sources":["../../src/tags/faction.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lore.d.ts","sourceRoot":"","sources":["../../src/tags/lore.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAMvC,eAAO,MAAM,IAAI,gBAyCf,CAAC"}
1
+ {"version":3,"file":"lore.d.ts","sourceRoot":"","sources":["../../src/tags/lore.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAKvC,eAAO,MAAM,IAAI,gBAyCf,CAAC"}
package/dist/tags/lore.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import Markdoc from '@markdoc/markdoc';
2
2
  const { Tag } = Markdoc;
3
3
  import { createContentModelSchema, createComponentRenderable, asNodes, RenderableNodeCursor } from '@refrakt-md/runes';
4
- import { schema } from '../types.js';
5
4
  export const lore = createContentModelSchema({
6
5
  attributes: {
7
6
  title: { type: String, required: true, description: 'Heading displayed for this lore entry.' },
@@ -21,7 +20,7 @@ export const lore = createContentModelSchema({
21
20
  const spoilerMeta = new Tag('meta', { content: String(attrs.spoiler ?? false) });
22
21
  const tagsMeta = new Tag('meta', { content: attrs.tags ?? '' });
23
22
  const body = new RenderableNodeCursor(Markdoc.transform(asNodes(resolved.body), config)).wrap('div');
24
- return createComponentRenderable(schema.Lore, {
23
+ return createComponentRenderable({ rune: 'lore', schemaOrgType: 'Article',
25
24
  tag: 'article',
26
25
  property: 'contentSection',
27
26
  properties: {
@@ -1 +1 @@
1
- {"version":3,"file":"lore.js","sourceRoot":"","sources":["../../src/tags/lore.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,CAAC,MAAM,IAAI,GAAG,wBAAwB,CAAC;IAC5C,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE;QAC9F,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,8EAA8E,EAAE;QACxI,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,sEAAsE,EAAE;QAChI,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,+DAA+D,EAAE;KACrH;IACD,YAAY,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;SAC5D;KACD;IACD,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,oBAAoB,CACpC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAyB,CACzE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE;YAC7C,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE;gBACX,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,QAAQ;aACd;YACD,IAAI,EAAE;gBACL,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;aACrB;YACD,MAAM,EAAE;gBACP,QAAQ,EAAE,QAAQ;gBAClB,cAAc,EAAE,YAAY;aAC5B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACtE,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"lore.js","sourceRoot":"","sources":["../../src/tags/lore.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEvH,MAAM,CAAC,MAAM,IAAI,GAAG,wBAAwB,CAAC;IAC5C,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,wCAAwC,EAAE;QAC9F,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,8EAA8E,EAAE;QACxI,OAAO,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,sEAAsE,EAAE;QAChI,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,+DAA+D,EAAE;KACrH;IACD,YAAY,EAAE;QACb,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACP,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;SAC5D;KACD;IACD,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,oBAAoB,CACpC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAyB,CACzE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEd,OAAO,yBAAyB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,SAAS;YACxE,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE;gBACX,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,QAAQ;aACd;YACD,IAAI,EAAE;gBACL,KAAK,EAAE,QAAQ;gBACf,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;aACrB;YACD,MAAM,EAAE;gBACP,QAAQ,EAAE,QAAQ;gBAClB,cAAc,EAAE,YAAY;aAC5B;YACD,QAAQ,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;SACtE,CAAC,CAAC;IACJ,CAAC;CACD,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/tags/plot.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAwEvC,eAAO,MAAM,IAAI,gBAA0B,CAAC;AAE5C,eAAO,MAAM,IAAI,gBAgEf,CAAC"}
1
+ {"version":3,"file":"plot.d.ts","sourceRoot":"","sources":["../../src/tags/plot.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAcvC,eAAO,MAAM,IAAI,gBAkDf,CAAC;AAKH,eAAO,MAAM,IAAI,gBAgEf,CAAC"}
package/dist/tags/plot.js CHANGED
@@ -1,17 +1,7 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
1
  import Markdoc from '@markdoc/markdoc';
11
2
  const { Tag } = Markdoc;
12
- import { attribute, Model, createComponentRenderable, createContentModelSchema, createSchema, asNodes } from '@refrakt-md/runes';
3
+ import { createComponentRenderable, createContentModelSchema, asNodes } from '@refrakt-md/runes';
13
4
  import { RenderableNodeCursor } from '@refrakt-md/runes';
14
- import { schema } from '../types.js';
15
5
  // Map marker characters to status strings
16
6
  const MARKER_TO_STATUS = {
17
7
  'x': 'complete',
@@ -19,27 +9,32 @@ const MARKER_TO_STATUS = {
19
9
  ' ': 'planned',
20
10
  '-': 'abandoned',
21
11
  };
22
- class BeatModel extends Model {
23
- constructor() {
24
- super(...arguments);
25
- this.label = '';
26
- this.status = 'planned';
27
- this.description = '';
28
- this.id = '';
29
- this.track = '';
30
- this.follows = '';
31
- }
32
- transform() {
33
- const labelTag = new Tag('span', {}, [this.label]);
12
+ export const beat = createContentModelSchema({
13
+ attributes: {
14
+ label: { type: String, required: true },
15
+ status: { type: String, required: false },
16
+ description: { type: String, required: false },
17
+ id: { type: String, required: false },
18
+ track: { type: String, required: false },
19
+ follows: { type: String, required: false },
20
+ },
21
+ contentModel: {
22
+ type: 'sequence',
23
+ fields: [
24
+ { name: 'body', match: 'any', optional: true, greedy: true },
25
+ ],
26
+ },
27
+ transform(resolved, attrs, config) {
28
+ const labelTag = new Tag('span', {}, [attrs.label ?? '']);
34
29
  // Map raw marker char to status string if needed
35
- const resolvedStatus = MARKER_TO_STATUS[this.status] ?? this.status;
30
+ const resolvedStatus = MARKER_TO_STATUS[attrs.status] ?? (attrs.status || 'planned');
36
31
  const statusMeta = new Tag('meta', { content: resolvedStatus });
37
- const idMeta = new Tag('meta', { content: this.id });
38
- const trackMeta = new Tag('meta', { content: this.track });
39
- const followsMeta = new Tag('meta', { content: this.follows });
32
+ const idMeta = new Tag('meta', { content: attrs.id ?? '' });
33
+ const trackMeta = new Tag('meta', { content: attrs.track ?? '' });
34
+ const followsMeta = new Tag('meta', { content: attrs.follows ?? '' });
40
35
  // Build body from description attribute + any block-level children
41
- const childContent = this.transformChildren();
42
- const descText = this.description.replace(/^[\s—–-]+/, '').trim();
36
+ const childContent = new RenderableNodeCursor(Markdoc.transform(asNodes(resolved.body), config));
37
+ const descText = (attrs.description ?? '').replace(/^[\s—–-]+/, '').trim();
43
38
  const bodyChildren = [];
44
39
  if (descText) {
45
40
  bodyChildren.push(new Tag('p', {}, [descText]));
@@ -48,7 +43,7 @@ class BeatModel extends Model {
48
43
  bodyChildren.push(...childContent.toArray());
49
44
  }
50
45
  const body = new RenderableNodeCursor(bodyChildren).wrap('div');
51
- return createComponentRenderable(schema.Beat, {
46
+ return createComponentRenderable({ rune: 'beat',
52
47
  tag: 'li',
53
48
  properties: {
54
49
  status: statusMeta,
@@ -59,35 +54,10 @@ class BeatModel extends Model {
59
54
  refs: { label: labelTag, body: body.tag('div') },
60
55
  children: [labelTag, statusMeta, idMeta, trackMeta, followsMeta, body.next()],
61
56
  });
62
- }
63
- }
64
- __decorate([
65
- attribute({ type: String, required: true }),
66
- __metadata("design:type", String)
67
- ], BeatModel.prototype, "label", void 0);
68
- __decorate([
69
- attribute({ type: String, required: false }),
70
- __metadata("design:type", String)
71
- ], BeatModel.prototype, "status", void 0);
72
- __decorate([
73
- attribute({ type: String, required: false }),
74
- __metadata("design:type", String)
75
- ], BeatModel.prototype, "description", void 0);
76
- __decorate([
77
- attribute({ type: String, required: false }),
78
- __metadata("design:type", String)
79
- ], BeatModel.prototype, "id", void 0);
80
- __decorate([
81
- attribute({ type: String, required: false }),
82
- __metadata("design:type", String)
83
- ], BeatModel.prototype, "track", void 0);
84
- __decorate([
85
- attribute({ type: String, required: false }),
86
- __metadata("design:type", String)
87
- ], BeatModel.prototype, "follows", void 0);
57
+ },
58
+ });
88
59
  const plotType = ['arc', 'quest', 'subplot', 'campaign', 'episode', 'act', 'chapter'];
89
60
  const structureType = ['linear', 'parallel', 'branching', 'web'];
90
- export const beat = createSchema(BeatModel);
91
61
  export const plot = createContentModelSchema({
92
62
  attributes: {
93
63
  title: { type: String, required: true, description: 'Heading displayed for this plot line.' },
@@ -127,7 +97,7 @@ export const plot = createContentModelSchema({
127
97
  children.push(...descRendered.toArray());
128
98
  }
129
99
  children.push(beatsList);
130
- return createComponentRenderable(schema.Plot, {
100
+ return createComponentRenderable({ rune: 'plot', schemaOrgType: 'CreativeWork',
131
101
  tag: 'section',
132
102
  property: 'contentSection',
133
103
  properties: {