@refrakt-md/marketing 0.7.2 → 0.8.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.
Files changed (45) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/config.js +74 -18
  3. package/dist/config.js.map +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/schema/bento.d.ts +4 -1
  6. package/dist/schema/bento.d.ts.map +1 -1
  7. package/dist/schema/bento.js +3 -0
  8. package/dist/schema/bento.js.map +1 -1
  9. package/dist/schema/comparison.d.ts +2 -2
  10. package/dist/schema/comparison.d.ts.map +1 -1
  11. package/dist/schema/comparison.js +2 -2
  12. package/dist/schema/comparison.js.map +1 -1
  13. package/dist/schema/hero.d.ts +0 -2
  14. package/dist/schema/hero.d.ts.map +1 -1
  15. package/dist/schema/hero.js +0 -2
  16. package/dist/schema/hero.js.map +1 -1
  17. package/dist/tags/bento.d.ts.map +1 -1
  18. package/dist/tags/bento.js +146 -78
  19. package/dist/tags/bento.js.map +1 -1
  20. package/dist/tags/comparison.d.ts.map +1 -1
  21. package/dist/tags/comparison.js +153 -165
  22. package/dist/tags/comparison.js.map +1 -1
  23. package/dist/tags/cta.d.ts.map +1 -1
  24. package/dist/tags/cta.js +36 -37
  25. package/dist/tags/cta.js.map +1 -1
  26. package/dist/tags/feature.d.ts +4 -3
  27. package/dist/tags/feature.d.ts.map +1 -1
  28. package/dist/tags/feature.js +90 -51
  29. package/dist/tags/feature.js.map +1 -1
  30. package/dist/tags/hero.d.ts.map +1 -1
  31. package/dist/tags/hero.js +105 -65
  32. package/dist/tags/hero.js.map +1 -1
  33. package/dist/tags/pricing.d.ts.map +1 -1
  34. package/dist/tags/pricing.js +78 -61
  35. package/dist/tags/pricing.js.map +1 -1
  36. package/dist/tags/steps.d.ts +1 -1
  37. package/dist/tags/steps.d.ts.map +1 -1
  38. package/dist/tags/steps.js +60 -55
  39. package/dist/tags/steps.js.map +1 -1
  40. package/dist/tags/testimonial.d.ts.map +1 -1
  41. package/dist/tags/testimonial.js +45 -35
  42. package/dist/tags/testimonial.js.map +1 -1
  43. package/dist/types.js +4 -4
  44. package/dist/types.js.map +1 -1
  45. package/package.json +4 -4
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import Markdoc from '@markdoc/markdoc';
11
11
  const { Tag, Ast } = Markdoc;
12
- import { attribute, group, Model, createComponentRenderable, createSchema, NodeStream, RenderableNodeCursor, SplitablePageSectionModel, pageSectionProperties } from '@refrakt-md/runes';
12
+ import { group, Model, createContentModelSchema, createComponentRenderable, createSchema, asNodes, NodeStream, RenderableNodeCursor, SplitLayoutModel, pageSectionProperties } from '@refrakt-md/runes';
13
13
  import { schema } from '../types.js';
14
14
  export class DefinitionModel extends Model {
15
15
  transform() {
@@ -62,33 +62,81 @@ __decorate([
62
62
  __metadata("design:type", NodeStream)
63
63
  ], DefinitionModel.prototype, "description", void 0);
64
64
  export const definition = createSchema(DefinitionModel);
65
- class FeatureModel extends SplitablePageSectionModel {
66
- constructor() {
67
- super(...arguments);
68
- this.split = false;
69
- this.mirror = false;
70
- }
71
- transform() {
72
- const header = this.header.transform();
73
- const definitions = this.definitions
74
- .useNode('item', (node, config) => {
75
- return Markdoc.transform(new Ast.Node('tag', {}, node.children, 'definition'), config);
76
- })
77
- .useNode('list', (node, config) => {
78
- return new Tag('dl', this.split ? {} : { 'data-layout': 'grid', 'data-columns': node.children.length }, node.transformChildren(config));
79
- })
80
- .transform();
81
- const side = this.showcase.transform();
65
+ const alignType = ['left', 'center', 'right'];
66
+ export const feature = createContentModelSchema({
67
+ base: SplitLayoutModel,
68
+ attributes: {
69
+ align: { type: String, required: false, matches: alignType.slice() },
70
+ },
71
+ contentModel: {
72
+ type: 'delimited',
73
+ delimiter: 'hr',
74
+ zones: [
75
+ {
76
+ name: 'content',
77
+ type: 'sequence',
78
+ fields: [
79
+ { name: 'header', match: 'heading|paragraph', optional: true, greedy: true },
80
+ { name: 'definitions', match: 'list', optional: true, greedy: true },
81
+ ],
82
+ },
83
+ {
84
+ name: 'media',
85
+ type: 'sequence',
86
+ fields: [
87
+ { name: 'media', match: 'any', optional: true, greedy: true },
88
+ ],
89
+ },
90
+ ],
91
+ },
92
+ transform(resolved, attrs, config) {
93
+ const contentZone = (resolved.content ?? {});
94
+ const mediaZone = (resolved.media ?? {});
95
+ const header = new RenderableNodeCursor(Markdoc.transform(asNodes(contentZone.header), config));
96
+ // Transform definitions with custom node overrides
97
+ const defConfig = {
98
+ ...config,
99
+ nodes: {
100
+ ...config.nodes,
101
+ item: {
102
+ transform(node, innerConfig) {
103
+ return Markdoc.transform(new Ast.Node('tag', {}, node.children, 'definition'), innerConfig);
104
+ },
105
+ },
106
+ list: {
107
+ transform(node, innerConfig) {
108
+ const layout = attrs.layout || 'stacked';
109
+ return new Tag('dl', layout !== 'stacked' ? {} : { 'data-layout': 'grid', 'data-columns': node.children.length }, node.transformChildren(innerConfig));
110
+ },
111
+ },
112
+ },
113
+ };
114
+ const definitions = new RenderableNodeCursor(Markdoc.transform(asNodes(contentZone.definitions), defConfig));
115
+ const side = new RenderableNodeCursor(Markdoc.transform(asNodes(mediaZone.media), config));
116
+ const align = attrs.align || 'center';
117
+ const layout = attrs.layout || 'stacked';
118
+ const ratio = attrs.ratio || '1 1';
119
+ const valign = attrs.valign || 'top';
120
+ const gap = attrs.gap || 'default';
121
+ const collapse = attrs.collapse;
122
+ const layoutMeta = new Tag('meta', { content: layout });
123
+ const alignMeta = new Tag('meta', { content: align });
124
+ const ratioMeta = layout !== 'stacked' ? new Tag('meta', { content: ratio }) : undefined;
125
+ const valignMeta = layout !== 'stacked' ? new Tag('meta', { content: valign }) : undefined;
126
+ const gapMeta = gap !== 'default' ? new Tag('meta', { content: gap }) : undefined;
127
+ const collapseMeta = collapse ? new Tag('meta', { content: collapse }) : undefined;
82
128
  const headerContent = header.count() > 0 ? [header.wrap('header').next()] : [];
83
129
  const mainContent = new RenderableNodeCursor([...headerContent, ...definitions.toArray()]).wrap('div');
84
- const showcaseContent = side.wrap('div');
85
- const splitMeta = this.split ? new Tag('meta', { content: 'split' }) : undefined;
86
- const mirrorMeta = this.mirror ? new Tag('meta', { content: 'mirror' }) : undefined;
130
+ const mediaContent = side.wrap('div');
87
131
  const children = [
88
- ...(splitMeta ? [splitMeta] : []),
89
- ...(mirrorMeta ? [mirrorMeta] : []),
132
+ layoutMeta,
133
+ alignMeta,
134
+ ...(ratioMeta ? [ratioMeta] : []),
135
+ ...(valignMeta ? [valignMeta] : []),
136
+ ...(gapMeta ? [gapMeta] : []),
137
+ ...(collapseMeta ? [collapseMeta] : []),
90
138
  mainContent.next(),
91
- ...(side.toArray().length > 0 ? [showcaseContent.next()] : []),
139
+ ...(side.toArray().length > 0 ? [mediaContent.next()] : []),
92
140
  ];
93
141
  return createComponentRenderable(schema.Feature, {
94
142
  tag: 'section',
@@ -96,36 +144,27 @@ class FeatureModel extends SplitablePageSectionModel {
96
144
  properties: {
97
145
  ...pageSectionProperties(header),
98
146
  featureItem: definitions.flatten().tag('div'),
99
- split: splitMeta,
100
- mirror: mirrorMeta,
147
+ layout: layoutMeta,
148
+ align: alignMeta,
149
+ ratio: ratioMeta,
150
+ valign: valignMeta,
151
+ gap: gapMeta,
152
+ collapse: collapseMeta,
101
153
  },
102
154
  refs: {
103
- body: mainContent,
104
- showcase: showcaseContent,
155
+ content: mainContent,
156
+ media: mediaContent,
105
157
  },
106
158
  children,
107
159
  });
108
- }
109
- }
110
- __decorate([
111
- attribute({ type: Boolean, required: false }),
112
- __metadata("design:type", Boolean)
113
- ], FeatureModel.prototype, "split", void 0);
114
- __decorate([
115
- attribute({ type: Boolean, required: false }),
116
- __metadata("design:type", Boolean)
117
- ], FeatureModel.prototype, "mirror", void 0);
118
- __decorate([
119
- group({ section: 0, include: ['heading', 'paragraph'] }),
120
- __metadata("design:type", NodeStream)
121
- ], FeatureModel.prototype, "header", void 0);
122
- __decorate([
123
- group({ section: 0, include: ['list'] }),
124
- __metadata("design:type", NodeStream)
125
- ], FeatureModel.prototype, "definitions", void 0);
126
- __decorate([
127
- group({ section: 1 }),
128
- __metadata("design:type", NodeStream)
129
- ], FeatureModel.prototype, "showcase", void 0);
130
- export const feature = createSchema(FeatureModel);
160
+ },
161
+ deprecations: {
162
+ split: {
163
+ newName: 'layout',
164
+ transform: (val, attrs) => val ? (attrs.mirror ? 'split-reverse' : 'split') : undefined,
165
+ },
166
+ mirror: { newName: '_consumed' },
167
+ justify: { newName: 'align' },
168
+ },
169
+ });
131
170
  //# sourceMappingURL=feature.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/tags/feature.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"feature.js","sourceRoot":"","sources":["../../src/tags/feature.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAGvC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AAC7B,OAAO,EAAa,KAAK,EAAE,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACnN,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAOxC,SAAS;QACP,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI;aACjB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE;YAC3B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAClE,IAAI,GAAG;gBAAE,OAAO,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;YACxF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;gBACtE,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,MAAM;oBAAE,OAAO,CAAC,UAAU,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC5F,OAAO,UAAU,CAAC;YACpB,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;YACtE,IAAI,MAAM;gBAAE,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAC9E,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9C,CAAC,CAAC;aACD,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAEvE,OAAO,GAAG,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpE,CAAC,CAAC;aACD,SAAS,EAAE;aACX,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW;aACxB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;aAC1B,SAAS,EAAE,CAAC;QAEf,OAAO,yBAAyB,CAAC,MAAM,CAAC,iBAAiB,EAAE;YACzD,GAAG,EAAE,KAAK;YACV,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC9B,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;gBAC9B,WAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;aAC1B;YACD,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;CACF;AA7CC;IADC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC;8BACjK,UAAU;6CAAC;AAGjB;IADC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC;8BACrB,UAAU;oDAAC;AA4C1B,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC;AAExD,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAEvD,MAAM,CAAC,MAAM,OAAO,GAAG,wBAAwB,CAAC;IAC/C,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE;QACX,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE;KACpE;IACD,YAAY,EAAE;QACb,IAAI,EAAE,WAAW;QACjB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE;YACN;gBACC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE;oBACP,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;oBAC5E,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;iBACpE;aACD;YACD;gBACC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE;oBACP,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;iBAC7D;aACD;SACD;KACD;IACD,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM;QAChC,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAoB,CAAC;QAChE,MAAM,SAAS,GAAG,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAoB,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,oBAAoB,CACtC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAyB,CAC9E,CAAC;QAEF,mDAAmD;QACnD,MAAM,SAAS,GAAG;YACjB,GAAG,MAAM;YACT,KAAK,EAAE;gBACN,GAAG,MAAM,CAAC,KAAK;gBACf,IAAI,EAAE;oBACL,SAAS,CAAC,IAAU,EAAE,WAAgC;wBACrD,OAAO,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,WAAW,CAAC,CAAC;oBAC7F,CAAC;iBACD;gBACD,IAAI,EAAE;oBACL,SAAS,CAAC,IAAU,EAAE,WAAgC;wBACrD,MAAM,MAAM,GAAI,KAAK,CAAC,MAAiB,IAAI,SAAS,CAAC;wBACrD,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;oBACxJ,CAAC;iBACD;aACD;SACD,CAAC;QACF,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAC3C,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,SAAS,CAAyB,CACtF,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,oBAAoB,CACpC,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAyB,CAC3E,CAAC;QAEF,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgB,IAAI,QAAQ,CAAC;QAClD,MAAM,MAAM,GAAI,KAAK,CAAC,MAAiB,IAAI,SAAS,CAAC;QACrD,MAAM,KAAK,GAAI,KAAK,CAAC,KAAgB,IAAI,KAAK,CAAC;QAC/C,MAAM,MAAM,GAAI,KAAK,CAAC,MAAiB,IAAI,KAAK,CAAC;QACjD,MAAM,GAAG,GAAI,KAAK,CAAC,GAAc,IAAI,SAAS,CAAC;QAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAA8B,CAAC;QAEtD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACzF,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,OAAO,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClF,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,MAAM,WAAW,GAAG,IAAI,oBAAoB,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvG,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG;YAChB,UAAU;YACV,SAAS;YACT,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACjC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,WAAW,CAAC,IAAI,EAAE;YAClB,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3D,CAAC;QAEF,OAAO,yBAAyB,CAAC,MAAM,CAAC,OAAO,EAAE;YAChD,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE;gBACX,GAAG,qBAAqB,CAAC,MAAM,CAAC;gBAChC,WAAW,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;gBAC7C,MAAM,EAAE,UAAU;gBAClB,KAAK,EAAE,SAAS;gBAChB,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,UAAU;gBAClB,GAAG,EAAE,OAAO;gBACZ,QAAQ,EAAE,YAAY;aACtB;YACD,IAAI,EAAE;gBACL,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE,YAAY;aACnB;YACD,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IACD,YAAY,EAAE;QACb,KAAK,EAAE;YACN,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,CAAC,GAAQ,EAAE,KAA0B,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;SACjH;QACD,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;QAChC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;KAC7B;CACD,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../src/tags/hero.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAuEvC,eAAO,MAAM,IAAI,gBAA0B,CAAC"}
1
+ {"version":3,"file":"hero.d.ts","sourceRoot":"","sources":["../../src/tags/hero.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAOvC,eAAO,MAAM,IAAI,gBA2If,CAAC"}
package/dist/tags/hero.js CHANGED
@@ -1,86 +1,126 @@
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, group, Model, createComponentRenderable, createSchema, NodeStream, RenderableNodeCursor, linkItem, pageSectionProperties } from '@refrakt-md/runes';
3
+ import { createContentModelSchema, createComponentRenderable, RenderableNodeCursor, SplitLayoutModel, linkItem, pageSectionProperties } from '@refrakt-md/runes';
13
4
  import { schema } from '../types.js';
14
- const alignType = ['left', 'center', 'right'];
15
- class HeroModel extends Model {
16
- constructor() {
17
- super(...arguments);
18
- this.background = '';
19
- this.backgroundImage = '';
20
- this.align = 'center';
21
- }
22
- transform() {
23
- const header = this.header.transform();
24
- const actions = this.actions
25
- .useNode('item', linkItem)
26
- .useNode('fence', node => {
27
- const output = new RenderableNodeCursor([Markdoc.transform(node, this.config)]);
28
- return createComponentRenderable(schema.Command, {
29
- tag: 'div',
30
- properties: {
31
- code: output.flatten().tag('code'),
5
+ export const hero = createContentModelSchema({
6
+ base: SplitLayoutModel,
7
+ attributes: {
8
+ align: { type: String, required: false, matches: ['left', 'center', 'right'] },
9
+ },
10
+ contentModel: {
11
+ type: 'delimited',
12
+ delimiter: 'hr',
13
+ zones: [
14
+ {
15
+ name: 'content',
16
+ type: 'sequence',
17
+ fields: [
18
+ { name: 'eyebrow', match: 'paragraph', optional: true },
19
+ { name: 'headline', match: 'heading', optional: false },
20
+ { name: 'blurb', match: 'paragraph', optional: true },
21
+ { name: 'actions', match: 'list|fence', optional: true, greedy: true },
22
+ ],
23
+ },
24
+ {
25
+ name: 'media',
26
+ type: 'sequence',
27
+ fields: [
28
+ { name: 'media', match: 'any', optional: true, greedy: true },
29
+ ],
30
+ },
31
+ ],
32
+ },
33
+ transform(resolved, attrs, config) {
34
+ const contentZone = (resolved.content ?? {});
35
+ const mediaZone = (resolved.media ?? {});
36
+ // Collect header AST nodes (eyebrow, headline, blurb) and transform
37
+ const headerAstNodes = [
38
+ contentZone.eyebrow,
39
+ contentZone.headline,
40
+ contentZone.blurb,
41
+ ].filter(Boolean);
42
+ const header = new RenderableNodeCursor(Markdoc.transform(headerAstNodes, config));
43
+ // Collect action AST nodes (list and/or fences) and transform with custom handlers
44
+ const actionAstNodes = (Array.isArray(contentZone.actions) ? contentZone.actions : contentZone.actions ? [contentZone.actions] : []);
45
+ // Use the original config inside the fence handler to avoid recursion
46
+ // (same pattern as NodeStream.useNode — the inner transform uses the
47
+ // base config, not the config with custom overrides)
48
+ const baseConfig = config;
49
+ const actionConfig = {
50
+ ...config,
51
+ nodes: {
52
+ ...config.nodes,
53
+ item: linkItem,
54
+ fence: {
55
+ transform(node) {
56
+ const output = new RenderableNodeCursor([Markdoc.transform(node, baseConfig)]);
57
+ return createComponentRenderable(schema.Command, {
58
+ tag: 'div',
59
+ properties: {
60
+ code: output.flatten().tag('code'),
61
+ },
62
+ children: output.next(),
63
+ });
64
+ },
32
65
  },
33
- children: output.next(),
34
- });
35
- })
36
- .transform();
37
- const backgroundMeta = new Tag('meta', { content: this.background });
38
- const backgroundImageMeta = new Tag('meta', { content: this.backgroundImage });
39
- const alignMeta = new Tag('meta', { content: this.align });
66
+ },
67
+ };
68
+ const actions = new RenderableNodeCursor(Markdoc.transform(actionAstNodes, actionConfig));
69
+ // Transform media AST nodes
70
+ const mediaAstNodes = (Array.isArray(mediaZone.media) ? mediaZone.media : []);
71
+ const side = new RenderableNodeCursor(Markdoc.transform(mediaAstNodes, config));
72
+ // Layout attribute defaults
73
+ const align = attrs.align || 'center';
74
+ const layout = attrs.layout || 'stacked';
75
+ const ratio = attrs.ratio || '1 1';
76
+ const valign = attrs.valign || 'top';
77
+ const gap = attrs.gap || 'default';
78
+ const collapse = attrs.collapse;
79
+ // Create meta tags for identity transform
80
+ const alignMeta = new Tag('meta', { content: align });
81
+ const layoutMeta = new Tag('meta', { content: layout });
82
+ const ratioMeta = layout !== 'stacked' ? new Tag('meta', { content: ratio }) : undefined;
83
+ const valignMeta = layout !== 'stacked' ? new Tag('meta', { content: valign }) : undefined;
84
+ const gapMeta = gap !== 'default' ? new Tag('meta', { content: gap }) : undefined;
85
+ const collapseMeta = collapse ? new Tag('meta', { content: collapse }) : undefined;
86
+ // Structural wrapping
40
87
  const actionsDiv = actions.wrap('div');
88
+ const headerContent = header.count() > 0 ? [header.wrap('header').next()] : [];
89
+ const mainContent = new RenderableNodeCursor([
90
+ ...headerContent,
91
+ ...(actions.count() > 0 ? [actionsDiv.next()] : []),
92
+ ]).wrap('div');
93
+ const mediaDiv = side.wrap('div');
41
94
  return createComponentRenderable(schema.Hero, {
42
95
  tag: 'section',
43
96
  property: 'contentSection',
44
97
  properties: {
45
98
  ...pageSectionProperties(header),
46
- background: backgroundMeta,
47
- backgroundImage: backgroundImageMeta,
48
99
  align: alignMeta,
100
+ layout: layoutMeta,
101
+ ratio: ratioMeta,
102
+ valign: valignMeta,
103
+ gap: gapMeta,
104
+ collapse: collapseMeta,
49
105
  action: actions.flatten().tags('li', 'div'),
50
106
  },
51
107
  refs: {
52
108
  actions: actionsDiv,
53
- body: header.wrap('div'),
109
+ content: mainContent,
110
+ media: mediaDiv,
54
111
  },
55
112
  children: [
56
- backgroundMeta,
57
- backgroundImageMeta,
58
113
  alignMeta,
59
- header.wrap('header').next(),
60
- actionsDiv.next(),
114
+ layoutMeta,
115
+ ...(ratioMeta ? [ratioMeta] : []),
116
+ ...(valignMeta ? [valignMeta] : []),
117
+ ...(gapMeta ? [gapMeta] : []),
118
+ ...(collapseMeta ? [collapseMeta] : []),
119
+ mainContent.next(),
120
+ ...(side.toArray().length > 0 ? [mediaDiv.next()] : []),
61
121
  ],
62
122
  });
63
- }
64
- }
65
- __decorate([
66
- attribute({ type: String, required: false }),
67
- __metadata("design:type", String)
68
- ], HeroModel.prototype, "background", void 0);
69
- __decorate([
70
- attribute({ type: String, required: false }),
71
- __metadata("design:type", String)
72
- ], HeroModel.prototype, "backgroundImage", void 0);
73
- __decorate([
74
- attribute({ type: String, required: false, matches: alignType.slice() }),
75
- __metadata("design:type", Object)
76
- ], HeroModel.prototype, "align", void 0);
77
- __decorate([
78
- group({ include: ['heading', 'paragraph'] }),
79
- __metadata("design:type", NodeStream)
80
- ], HeroModel.prototype, "header", void 0);
81
- __decorate([
82
- group({ include: ['list', 'fence'] }),
83
- __metadata("design:type", NodeStream)
84
- ], HeroModel.prototype, "actions", void 0);
85
- export const hero = createSchema(HeroModel);
123
+ },
124
+ deprecations: { justify: { newName: 'align' } },
125
+ });
86
126
  //# sourceMappingURL=hero.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hero.js","sourceRoot":"","sources":["../../src/tags/hero.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,yBAAyB,EAAE,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACxK,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAU,CAAC;AAEvD,MAAM,SAAU,SAAQ,KAAK;IAA7B;;QAEC,eAAU,GAAW,EAAE,CAAC;QAGxB,oBAAe,GAAW,EAAE,CAAC;QAG7B,UAAK,GAA6B,QAAQ,CAAC;IAsD5C,CAAC;IA9CA,SAAS;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO;aAC1B,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC;aACzB,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACxB,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAEhF,OAAO,yBAAyB,CAAC,MAAM,CAAC,OAAO,EAAE;gBAChD,GAAG,EAAE,KAAK;gBACV,UAAU,EAAE;oBACX,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;iBAClC;gBACD,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE;aACvB,CAAC,CAAC;QACJ,CAAC,CAAC;aACD,SAAS,EAAE,CAAC;QAEd,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACrE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE3D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvC,OAAO,yBAAyB,CAAC,MAAM,CAAC,IAAI,EAAE;YAC7C,GAAG,EAAE,SAAS;YACd,QAAQ,EAAE,gBAAgB;YAC1B,UAAU,EAAE;gBACX,GAAG,qBAAqB,CAAC,MAAM,CAAC;gBAChC,UAAU,EAAE,cAAc;gBAC1B,eAAe,EAAE,mBAAmB;gBACpC,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;aAC3C;YACD,IAAI,EAAE;gBACL,OAAO,EAAE,UAAU;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;aACxB;YACD,QAAQ,EAAE;gBACT,cAAc;gBACd,mBAAmB;gBACnB,SAAS;gBACT,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE;gBAC5B,UAAU,CAAC,IAAI,EAAE;aACjB;SACD,CAAC,CAAC;IACJ,CAAC;CACD;AA5DA;IADC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;6CACrB;AAGxB;IADC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;kDAChB;AAG7B;IADC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;;wCAC9B;AAG3C;IADC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,CAAC;8BACrC,UAAU;yCAAC;AAGnB;IADC,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;8BAC7B,UAAU;0CAAC;AAkDrB,MAAM,CAAC,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"hero.js","sourceRoot":"","sources":["../../src/tags/hero.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/tags/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAQ,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,EAAoB,KAAK,EAAgI,MAAM,mBAAmB,CAAC;AA6E1L,eAAO,MAAM,OAAO,gBAA6B,CAAC;AAElD,qBAAa,SAAU,SAAQ,KAAK;IAElC,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,CAAM;IAGnB,QAAQ,EAAE,OAAO,CAAS;IAG1B,QAAQ,EAAE,MAAM,CAAM;IAItB,YAAY,EAAE,MAAM,CAAM;IAE1B,SAAS,IAAI,mBAAmB;CA0BjC;AAED,eAAO,MAAM,IAAI,gBAA0B,CAAC"}
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/tags/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAA4B,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAa,KAAK,EAA6K,MAAM,mBAAmB,CAAC;AAkDhO,eAAO,MAAM,OAAO,gBA6ClB,CAAC;AAEH,qBAAa,SAAU,SAAQ,KAAK;IAElC,IAAI,EAAE,MAAM,CAAC;IAGb,KAAK,EAAE,MAAM,CAAM;IAGnB,QAAQ,EAAE,OAAO,CAAS;IAG1B,QAAQ,EAAE,MAAM,CAAM;IAItB,YAAY,EAAE,MAAM,CAAM;IAE1B,SAAS,IAAI,mBAAmB;CAoCjC;AAED,eAAO,MAAM,IAAI,gBAA0B,CAAC"}
@@ -9,85 +9,93 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import Markdoc from '@markdoc/markdoc';
11
11
  const { Ast, Tag } = Markdoc;
12
- import { attribute, group, Model, createComponentRenderable, createSchema, NodeStream, headingsToList, descriptionHelper as description, pageSectionProperties } from '@refrakt-md/runes';
12
+ import { attribute, Model, createComponentRenderable, createContentModelSchema, createSchema, asNodes, RenderableNodeCursor, headingsToList, descriptionHelper as description, pageSectionProperties } from '@refrakt-md/runes';
13
13
  import { schema } from '../types.js';
14
14
  const NAME_PRICE_PATTERN = /^(.+?)\s*[-–—]\s*(.+)$/;
15
- class PricingModel extends Model {
16
- constructor() {
17
- super(...arguments);
18
- this.headingLevel = undefined;
15
+ const CURRENCY_SYMBOLS = {
16
+ '$': 'USD', '€': 'EUR', '£': 'GBP', '¥': 'JPY', '₹': 'INR',
17
+ 'kr': 'SEK', 'CHF': 'CHF', 'A$': 'AUD', 'C$': 'CAD',
18
+ };
19
+ function inferCurrency(priceText) {
20
+ for (const [symbol, code] of Object.entries(CURRENCY_SYMBOLS)) {
21
+ if (priceText.startsWith(symbol))
22
+ return code;
19
23
  }
20
- convertHeadings(nodes) {
21
- // Auto-detect heading level from the first heading that matches "Name — Price"
22
- const level = this.headingLevel ?? nodes.find(n => {
23
- if (n.type !== 'heading')
24
- return false;
25
- const text = Array.from(n.walk()).filter(c => c.type === 'text').map(t => t.attributes.content).join(' ');
26
- return NAME_PRICE_PATTERN.test(text);
27
- })?.attributes.level;
28
- if (!level)
29
- return nodes;
30
- const converted = headingsToList({ level })(nodes);
31
- const n = converted.length - 1;
32
- if (!converted[n] || converted[n].type !== 'list')
33
- return nodes;
34
- // Only convert items whose heading matches "Name — Price"; keep others as-is
35
- const result = converted.slice(0, n);
36
- for (const item of converted[n].children) {
37
- const heading = item.children[0];
38
- const headingText = Array.from(heading.walk())
39
- .filter(n => n.type === 'text')
40
- .map(t => t.attributes.content)
41
- .join(' ');
42
- const match = headingText.match(NAME_PRICE_PATTERN);
43
- if (match) {
44
- result.push(new Ast.Node('tag', { name: match[1].trim(), price: match[2].trim() }, item.children.slice(1), 'tier'));
45
- }
46
- else {
47
- // Non-matching heading: keep as original heading + body nodes
48
- result.push(heading, ...item.children.slice(1));
49
- }
24
+ return 'USD';
25
+ }
26
+ function convertHeadings(nodes, headingLevel) {
27
+ // Auto-detect heading level from the first heading that matches "Name — Price"
28
+ const level = headingLevel ?? nodes.find(n => {
29
+ if (n.type !== 'heading')
30
+ return false;
31
+ const text = Array.from(n.walk()).filter(c => c.type === 'text').map(t => t.attributes.content).join(' ');
32
+ return NAME_PRICE_PATTERN.test(text);
33
+ })?.attributes.level;
34
+ if (!level)
35
+ return nodes;
36
+ const converted = headingsToList({ level })(nodes);
37
+ const n = converted.length - 1;
38
+ if (!converted[n] || converted[n].type !== 'list')
39
+ return nodes;
40
+ // Only convert items whose heading matches "Name — Price"; keep others as-is
41
+ const result = converted.slice(0, n);
42
+ for (const item of converted[n].children) {
43
+ const heading = item.children[0];
44
+ const headingText = Array.from(heading.walk())
45
+ .filter(n => n.type === 'text')
46
+ .map(t => t.attributes.content)
47
+ .join(' ');
48
+ const match = headingText.match(NAME_PRICE_PATTERN);
49
+ if (match) {
50
+ result.push(new Ast.Node('tag', { name: match[1].trim(), price: match[2].trim() }, item.children.slice(1), 'tier'));
51
+ }
52
+ else {
53
+ // Non-matching heading: keep as original heading + body nodes
54
+ result.push(heading, ...item.children.slice(1));
50
55
  }
51
- return result;
52
- }
53
- processChildren(nodes) {
54
- return super.processChildren(this.convertHeadings(nodes));
55
56
  }
56
- transform() {
57
- const header = this.header.transform();
58
- const tiers = this.tiers.transform();
59
- const tierItems = tiers.tag('li');
57
+ return result;
58
+ }
59
+ export const pricing = createContentModelSchema({
60
+ attributes: {
61
+ headingLevel: { type: Number, required: false },
62
+ },
63
+ contentModel: {
64
+ type: 'sequence',
65
+ fields: [
66
+ { name: 'content', match: 'any', optional: true, greedy: true },
67
+ ],
68
+ },
69
+ transform(resolved, attrs, config) {
70
+ const processed = convertHeadings(asNodes(resolved.content), attrs.headingLevel);
71
+ const allNodes = new RenderableNodeCursor(Markdoc.transform(processed, config));
72
+ // Separate header (headings, paragraphs) from tiers (li items)
73
+ const header = allNodes.tags('h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p');
74
+ const tiers = allNodes.tag('li');
75
+ const sectionProps = pageSectionProperties(header);
60
76
  const tiersList = tiers.wrap('ul', { 'data-layout': 'grid', 'data-columns': tiers.nodes.length });
61
77
  return createComponentRenderable(schema.Pricing, {
62
78
  tag: 'section',
63
79
  property: 'contentSection',
64
80
  properties: {
65
- ...pageSectionProperties(header),
66
- tier: tierItems,
81
+ ...sectionProps,
82
+ tier: tiers,
67
83
  },
68
84
  refs: {
69
85
  tiers: tiersList.tag('ul'),
70
86
  },
87
+ schema: {
88
+ name: sectionProps.headline,
89
+ description: sectionProps.blurb,
90
+ offers: tiers,
91
+ },
71
92
  children: [
72
93
  header.wrap('header').next(),
73
94
  tiersList.next(),
74
95
  ]
75
96
  });
76
- }
77
- }
78
- __decorate([
79
- attribute({ type: Number, required: false }),
80
- __metadata("design:type", Object)
81
- ], PricingModel.prototype, "headingLevel", void 0);
82
- __decorate([
83
- group({ include: ['heading', 'paragraph'] }),
84
- __metadata("design:type", NodeStream)
85
- ], PricingModel.prototype, "header", void 0);
86
- __decorate([
87
- group({ include: ['tag'] }),
88
- __metadata("design:type", NodeStream)
89
- ], PricingModel.prototype, "tiers", void 0);
90
- export const pricing = createSchema(PricingModel);
97
+ },
98
+ });
91
99
  export class TierModel extends Model {
92
100
  constructor() {
93
101
  super(...arguments);
@@ -105,6 +113,10 @@ export class TierModel extends Model {
105
113
  const children = this.transformChildren();
106
114
  const body = children.wrap('div');
107
115
  const currencyMeta = this.currency ? new Tag('meta', { content: this.currency }) : undefined;
116
+ // Schema.org price parsing: extract numeric value and infer currency
117
+ const numericMatch = priceValue.match(/[\d.]+/);
118
+ const parsedPriceMeta = new Tag('meta', { content: numericMatch ? numericMatch[0] : priceValue });
119
+ const resolvedCurrencyMeta = new Tag('meta', { content: this.currency || inferCurrency(priceValue) });
108
120
  return createComponentRenderable(type, {
109
121
  tag: 'li',
110
122
  properties: {
@@ -117,7 +129,12 @@ export class TierModel extends Model {
117
129
  refs: {
118
130
  body: body.tag('div'),
119
131
  },
120
- children: [nameTag, priceTag, ...(currencyMeta ? [currencyMeta] : []), body.next()],
132
+ schema: {
133
+ name: nameTag,
134
+ price: parsedPriceMeta,
135
+ priceCurrency: resolvedCurrencyMeta,
136
+ },
137
+ children: [nameTag, priceTag, parsedPriceMeta, resolvedCurrencyMeta, ...(currencyMeta ? [currencyMeta] : []), body.next()],
121
138
  });
122
139
  }
123
140
  }