@foblex/m-render 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,15 +1,15 @@
1
- @import "./_variables";
2
- @import "./_badge";
3
- @import "./_alert";
4
- @import "./_button";
5
- @import "./_fonts";
6
- @import "./_icons";
7
- @import "./_preview-group";
8
- @import "./_code-group";
9
- @import "./_code-view";
10
- @import "./_code-highlight";
11
- @import './_doc-text';
12
- @import "./_table";
1
+ @use "./variables";
2
+ @use "./badge";
3
+ @use "./alert";
4
+ @use "./button";
5
+ @use "./fonts";
6
+ @use "./icons";
7
+ @use "./preview-group";
8
+ @use "./code-group";
9
+ @use "./code-view";
10
+ @use "./code-highlight";
11
+ @use "./doc-text";
12
+ @use "./table";
13
13
 
14
14
  html {
15
15
  height: 100%;
@@ -1351,8 +1351,10 @@ class MarkdownService {
1351
1351
  _provider = inject(F_PREVIEW_NAVIGATION_PROVIDER, { optional: true });
1352
1352
  _pageLayout = signal({ ...DEFAULT_MARKDOWN_PAGE_LAYOUT_OPTIONS }, ...(ngDevMode ? [{ debugName: "_pageLayout" }] : []));
1353
1353
  _pageSeo = signal(null, ...(ngDevMode ? [{ debugName: "_pageSeo" }] : []));
1354
+ _pageOrigin = signal(null, ...(ngDevMode ? [{ debugName: "_pageOrigin" }] : []));
1354
1355
  pageLayout = this._pageLayout.asReadonly();
1355
1356
  pageSeo = this._pageSeo.asReadonly();
1357
+ pageOrigin = this._pageOrigin.asReadonly();
1356
1358
  constructor() {
1357
1359
  this._markdown
1358
1360
  .use((x) => new ParseSingleCodeItem().render(x))
@@ -1425,15 +1427,17 @@ class MarkdownService {
1425
1427
  _parseFrontMatterData(rawFrontMatter) {
1426
1428
  const layout = { ...DEFAULT_MARKDOWN_PAGE_LAYOUT_OPTIONS };
1427
1429
  const seo = {};
1430
+ const origin = { url: null, label: null };
1428
1431
  rawFrontMatter
1429
1432
  .split(/\r?\n/)
1430
- .forEach((line) => this._parseFrontMatterLine(line, layout, seo));
1433
+ .forEach((line) => this._parseFrontMatterLine(line, layout, seo, origin));
1431
1434
  return {
1432
1435
  layout,
1433
1436
  seo: Object.keys(seo).length ? seo : null,
1437
+ origin: this._resolveOrigin(origin),
1434
1438
  };
1435
1439
  }
1436
- _parseFrontMatterLine(line, layout, seo) {
1440
+ _parseFrontMatterLine(line, layout, seo, origin) {
1437
1441
  const normalizedLine = line.trim();
1438
1442
  if (!normalizedLine || normalizedLine.startsWith('#')) {
1439
1443
  return;
@@ -1450,6 +1454,7 @@ class MarkdownService {
1450
1454
  const boolValue = this._parseBoolean(value);
1451
1455
  this._applyLayoutKey(key, boolValue, layout);
1452
1456
  this._applySeoKey(key, value, boolValue, seo);
1457
+ this._applyOriginKey(key, value, origin);
1453
1458
  }
1454
1459
  _normalizeFrontMatterValue(value) {
1455
1460
  const trimmed = value.trim();
@@ -1574,6 +1579,71 @@ class MarkdownService {
1574
1579
  return;
1575
1580
  }
1576
1581
  }
1582
+ _applyOriginKey(key, value, origin) {
1583
+ switch (key) {
1584
+ case 'origin':
1585
+ case 'originurl':
1586
+ case 'origin_url':
1587
+ case 'original':
1588
+ case 'originalurl':
1589
+ case 'original_url':
1590
+ case 'source':
1591
+ case 'sourceurl':
1592
+ case 'source_url': {
1593
+ const normalizedUrl = this._normalizeOriginUrl(value);
1594
+ if (normalizedUrl) {
1595
+ origin.url = normalizedUrl;
1596
+ }
1597
+ return;
1598
+ }
1599
+ case 'originlabel':
1600
+ case 'origin_label':
1601
+ case 'origintext':
1602
+ case 'origin_text':
1603
+ case 'sourcelabel':
1604
+ case 'source_label':
1605
+ origin.label = value;
1606
+ return;
1607
+ }
1608
+ }
1609
+ _normalizeOriginUrl(value) {
1610
+ const trimmed = value.trim();
1611
+ if (!trimmed) {
1612
+ return null;
1613
+ }
1614
+ const candidate = /^https?:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`;
1615
+ try {
1616
+ const url = new URL(candidate);
1617
+ if (!['http:', 'https:'].includes(url.protocol)) {
1618
+ return null;
1619
+ }
1620
+ return url.toString();
1621
+ }
1622
+ catch {
1623
+ return null;
1624
+ }
1625
+ }
1626
+ _resolveOrigin(origin) {
1627
+ if (!origin.url) {
1628
+ return null;
1629
+ }
1630
+ return {
1631
+ url: origin.url,
1632
+ label: origin.label || this._getOriginLabel(origin.url),
1633
+ };
1634
+ }
1635
+ _getOriginLabel(originUrl) {
1636
+ try {
1637
+ const hostname = new URL(originUrl).hostname.toLowerCase().replace(/^www\./, '');
1638
+ if (hostname === 'medium.com' || hostname.endsWith('.medium.com')) {
1639
+ return 'Originally published on Medium';
1640
+ }
1641
+ return `Originally published on ${hostname}`;
1642
+ }
1643
+ catch {
1644
+ return 'Originally published externally';
1645
+ }
1646
+ }
1577
1647
  _parseNumberOrDefault(value, fallback) {
1578
1648
  const numericValue = Number(value);
1579
1649
  if (!Number.isFinite(numericValue) || numericValue <= 0) {
@@ -1584,6 +1654,7 @@ class MarkdownService {
1584
1654
  _applyPageContext(data) {
1585
1655
  this._pageLayout.set({ ...data.layout });
1586
1656
  this._pageSeo.set(data.seo ? { ...data.seo } : null);
1657
+ this._pageOrigin.set(data.origin ? { ...data.origin } : null);
1587
1658
  }
1588
1659
  _resetPageContext() {
1589
1660
  this._applyPageContext(this._getDefaultFrontMatterData());
@@ -1592,6 +1663,7 @@ class MarkdownService {
1592
1663
  return {
1593
1664
  layout: { ...DEFAULT_MARKDOWN_PAGE_LAYOUT_OPTIONS },
1594
1665
  seo: null,
1666
+ origin: null,
1595
1667
  };
1596
1668
  }
1597
1669
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MarkdownService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
@@ -2104,6 +2176,13 @@ class ExternalComponent {
2104
2176
  };
2105
2177
  } });
2106
2178
  iframeUrl = computed(() => this.data().iframeUrl, ...(ngDevMode ? [{ debugName: "iframeUrl" }] : []));
2179
+ iframeResourceUrl = computed(() => {
2180
+ const url = this.iframeUrl();
2181
+ if (!url) {
2182
+ return undefined;
2183
+ }
2184
+ return this._sanitizer.bypassSecurityTrustResourceUrl(url);
2185
+ }, ...(ngDevMode ? [{ debugName: "iframeResourceUrl" }] : []));
2107
2186
  hasContent = computed(() => !!this.data().selector || !!this.data().iframeUrl, ...(ngDevMode ? [{ debugName: "hasContent" }] : []));
2108
2187
  canToggleFullscreen = computed(() => {
2109
2188
  return this._isBrowser
@@ -2118,6 +2197,7 @@ class ExternalComponent {
2118
2197
  _isBrowser = inject(IS_BROWSER_PLATFORM);
2119
2198
  _mediatr = inject(Mediatr);
2120
2199
  _viewContainerRef = viewChild.required('container', { read: ViewContainerRef });
2200
+ _sanitizer = inject(DomSanitizer);
2121
2201
  ngOnInit() {
2122
2202
  const selector = this.data().selector;
2123
2203
  if (selector) {
@@ -2150,7 +2230,7 @@ class ExternalComponent {
2150
2230
  return this._document.fullscreenElement === this._hostElement.nativeElement;
2151
2231
  }
2152
2232
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ExternalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2153
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: ExternalComponent, isStandalone: true, selector: "external-component", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:fullscreenchange": "onFullscreenChange()" }, properties: { "style.height": "data().height", "class.f-example-view-fullscreen": "isFullscreen()" }, classAttribute: "f-example-view" }, viewQueries: [{ propertyName: "_viewContainerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (canToggleFullscreen()) {\n <button class=\"f-fullscreen-button\"\n type=\"button\"\n [class.exit]=\"isFullscreen()\"\n [attr.aria-label]=\"fullscreenLabel()\"\n [attr.title]=\"fullscreenLabel()\"\n (click)=\"toggleFullscreen()\"></button>\n}\n\n@if (iframeUrl()) {\n <iframe class=\"f-example-iframe\"\n [src]=\"iframeUrl()!\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer\"\n allow=\"fullscreen\"\n allowfullscreen></iframe>\n}\n\n<ng-container #container />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
2233
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: ExternalComponent, isStandalone: true, selector: "external-component", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:fullscreenchange": "onFullscreenChange()" }, properties: { "style.height": "data().height", "class.f-example-view-fullscreen": "isFullscreen()" }, classAttribute: "f-example-view" }, viewQueries: [{ propertyName: "_viewContainerRef", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: "@if (canToggleFullscreen()) {\n <button class=\"f-fullscreen-button\"\n type=\"button\"\n [class.exit]=\"isFullscreen()\"\n [attr.aria-label]=\"fullscreenLabel()\"\n [attr.title]=\"fullscreenLabel()\"\n (click)=\"toggleFullscreen()\"></button>\n}\n\n@if (iframeResourceUrl()) {\n <iframe class=\"f-example-iframe\"\n [src]=\"iframeResourceUrl()\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer\"\n allow=\"fullscreen\"\n allowfullscreen></iframe>\n}\n\n<ng-container #container />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
2154
2234
  }
2155
2235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: ExternalComponent, decorators: [{
2156
2236
  type: Component,
@@ -2158,7 +2238,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
2158
2238
  class: 'f-example-view',
2159
2239
  '[style.height]': 'data().height',
2160
2240
  '[class.f-example-view-fullscreen]': 'isFullscreen()',
2161
- }, template: "@if (canToggleFullscreen()) {\n <button class=\"f-fullscreen-button\"\n type=\"button\"\n [class.exit]=\"isFullscreen()\"\n [attr.aria-label]=\"fullscreenLabel()\"\n [attr.title]=\"fullscreenLabel()\"\n (click)=\"toggleFullscreen()\"></button>\n}\n\n@if (iframeUrl()) {\n <iframe class=\"f-example-iframe\"\n [src]=\"iframeUrl()!\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer\"\n allow=\"fullscreen\"\n allowfullscreen></iframe>\n}\n\n<ng-container #container />\n" }]
2241
+ }, template: "@if (canToggleFullscreen()) {\n <button class=\"f-fullscreen-button\"\n type=\"button\"\n [class.exit]=\"isFullscreen()\"\n [attr.aria-label]=\"fullscreenLabel()\"\n [attr.title]=\"fullscreenLabel()\"\n (click)=\"toggleFullscreen()\"></button>\n}\n\n@if (iframeResourceUrl()) {\n <iframe class=\"f-example-iframe\"\n [src]=\"iframeResourceUrl()\"\n loading=\"lazy\"\n referrerpolicy=\"no-referrer\"\n allow=\"fullscreen\"\n allowfullscreen></iframe>\n}\n\n<ng-container #container />\n" }]
2162
2242
  }], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: true }] }], _viewContainerRef: [{ type: i0.ViewChild, args: ['container', { ...{ read: ViewContainerRef }, isSignal: true }] }], onFullscreenChange: [{
2163
2243
  type: HostListener,
2164
2244
  args: ['document:fullscreenchange']
@@ -3453,6 +3533,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
3453
3533
 
3454
3534
  class MarkdownRenderer {
3455
3535
  value = input.required(...(ngDevMode ? [{ debugName: "value" }] : []));
3536
+ origin = input(null, ...(ngDevMode ? [{ debugName: "origin" }] : []));
3456
3537
  _hostElement = inject(ElementRef).nativeElement;
3457
3538
  _router = inject(Router);
3458
3539
  _injector = inject(Injector);
@@ -3499,14 +3580,14 @@ class MarkdownRenderer {
3499
3580
  this._dynamicComponents.dispose();
3500
3581
  }
3501
3582
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MarkdownRenderer, deps: [], target: i0.ɵɵFactoryTarget.Component });
3502
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MarkdownRenderer, isStandalone: true, selector: "markdown-renderer", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "click": "_onDocumentClick($event)" }, classAttribute: "m-render" }, ngImport: i0, template: "<div [innerHTML]=\"value()\"></div>\n@if (value()) {\n <markdown-footer />\n}\n\n", styles: [":host{display:block;width:100%}@media(min-width:1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}@media(min-width:1280px){:host.expand-no-toc{width:100%}}:host.empty-navigation{margin:auto;max-width:900px}\n"], dependencies: [{ kind: "component", type: MarkdownFooter, selector: "markdown-footer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3583
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.4", type: MarkdownRenderer, isStandalone: true, selector: "markdown-renderer", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: true, transformFunction: null }, origin: { classPropertyName: "origin", publicName: "origin", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_onDocumentClick($event)" }, classAttribute: "m-render" }, ngImport: i0, template: "@if (origin(); as pageOrigin) {\n <p class=\"origin-link\">\n <span class=\"origin-link-label\">{{ pageOrigin.label }}:</span>\n <a [href]=\"pageOrigin.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\">{{ pageOrigin.url }}</a>\n </p>\n}\n<div [innerHTML]=\"value()\"></div>\n@if (value()) {\n <markdown-footer />\n}\n", styles: [":host{display:block;width:100%}@media(min-width:1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}@media(min-width:1280px){:host.expand-no-toc{width:100%}}:host.empty-navigation{margin:auto;max-width:900px}.origin-link{margin:0 0 16px;border-left:2px solid var(--divider-color);padding:8px 12px;background-color:var(--soft-background);line-height:20px;font-size:14px}.origin-link-label{margin-right:4px;font-weight:600}.origin-link a{overflow-wrap:anywhere}\n"], dependencies: [{ kind: "component", type: MarkdownFooter, selector: "markdown-footer" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3503
3584
  }
3504
3585
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MarkdownRenderer, decorators: [{
3505
3586
  type: Component,
3506
3587
  args: [{ selector: 'markdown-renderer', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MarkdownFooter], host: {
3507
3588
  class: 'm-render',
3508
- }, template: "<div [innerHTML]=\"value()\"></div>\n@if (value()) {\n <markdown-footer />\n}\n\n", styles: [":host{display:block;width:100%}@media(min-width:1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}@media(min-width:1280px){:host.expand-no-toc{width:100%}}:host.empty-navigation{margin:auto;max-width:900px}\n"] }]
3509
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], _onDocumentClick: [{
3589
+ }, template: "@if (origin(); as pageOrigin) {\n <p class=\"origin-link\">\n <span class=\"origin-link-label\">{{ pageOrigin.label }}:</span>\n <a [href]=\"pageOrigin.url\"\n target=\"_blank\"\n rel=\"noopener noreferrer nofollow\">{{ pageOrigin.url }}</a>\n </p>\n}\n<div [innerHTML]=\"value()\"></div>\n@if (value()) {\n <markdown-footer />\n}\n", styles: [":host{display:block;width:100%}@media(min-width:1280px){:host{width:calc(100% - var(--on-page-navigation-width) - var(--page-padding))}}@media(min-width:1280px){:host.expand-no-toc{width:100%}}:host.empty-navigation{margin:auto;max-width:900px}.origin-link{margin:0 0 16px;border-left:2px solid var(--divider-color);padding:8px 12px;background-color:var(--soft-background);line-height:20px;font-size:14px}.origin-link-label{margin-right:4px;font-weight:600}.origin-link a{overflow-wrap:anywhere}\n"] }]
3590
+ }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: true }] }], origin: [{ type: i0.Input, args: [{ isSignal: true, alias: "origin", required: false }] }], _onDocumentClick: [{
3510
3591
  type: HostListener,
3511
3592
  args: ['click', ['$event']]
3512
3593
  }] } });
@@ -3518,6 +3599,7 @@ class MarkdownRouter {
3518
3599
  _dataProvider = inject(DocumentationStore);
3519
3600
  _metaService = inject(FMetaService, { optional: true });
3520
3601
  emptyNavigation = !this._dataProvider.getNavigation().length;
3602
+ pageOrigin = this._markdown.pageOrigin;
3521
3603
  shouldExpandContent = computed(() => {
3522
3604
  const layout = this._markdown.pageLayout();
3523
3605
  return layout.hideTableOfContent && layout.expandContentWithoutTableOfContent;
@@ -3531,7 +3613,7 @@ class MarkdownRouter {
3531
3613
  }), tap(() => this._metaService?.applyMarkdownSeo(this._markdown.pageSeo())));
3532
3614
  })), { initialValue: undefined });
3533
3615
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MarkdownRouter, deps: [], target: i0.ɵɵFactoryTarget.Component });
3534
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: MarkdownRouter, isStandalone: true, selector: "markdown-router", host: { attributes: { "ngSkipHydration": "" }, properties: { "class.empty-navigation": "emptyNavigation" } }, ngImport: i0, template: "<markdown-renderer [value]=\"html()\"\n [class.empty-navigation]=\"emptyNavigation\"\n [class.expand-no-toc]=\"shouldExpandContent()\"/>\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}@media(min-width:1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}@media(min-width:1280px){:host.empty-navigation{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2)}}\n"], dependencies: [{ kind: "component", type: MarkdownRenderer, selector: "markdown-renderer", inputs: ["value"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3616
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.4", type: MarkdownRouter, isStandalone: true, selector: "markdown-router", host: { attributes: { "ngSkipHydration": "" }, properties: { "class.empty-navigation": "emptyNavigation" } }, ngImport: i0, template: "<markdown-renderer [value]=\"html()\"\n [origin]=\"pageOrigin()\"\n [class.empty-navigation]=\"emptyNavigation\"\n [class.expand-no-toc]=\"shouldExpandContent()\"/>\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}@media(min-width:1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}@media(min-width:1280px){:host.empty-navigation{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2)}}\n"], dependencies: [{ kind: "component", type: MarkdownRenderer, selector: "markdown-renderer", inputs: ["value", "origin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
3535
3617
  }
3536
3618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImport: i0, type: MarkdownRouter, decorators: [{
3537
3619
  type: Component,
@@ -3540,7 +3622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.4", ngImpor
3540
3622
  '[class.empty-navigation]': 'emptyNavigation',
3541
3623
  }, imports: [
3542
3624
  MarkdownRenderer,
3543
- ], template: "<markdown-renderer [value]=\"html()\"\n [class.empty-navigation]=\"emptyNavigation\"\n [class.expand-no-toc]=\"shouldExpandContent()\"/>\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}@media(min-width:1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}@media(min-width:1280px){:host.empty-navigation{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2)}}\n"] }]
3625
+ ], template: "<markdown-renderer [value]=\"html()\"\n [origin]=\"pageOrigin()\"\n [class.empty-navigation]=\"emptyNavigation\"\n [class.expand-no-toc]=\"shouldExpandContent()\"/>\n", styles: [":host{display:block;width:100%;padding:48px var(--page-padding) 140px}@media(min-width:1280px){:host{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 4)}}@media(min-width:1280px){:host.empty-navigation{padding-right:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2);padding-left:max(var(--page-padding),(100vw - var(--layout-max-width)) / 2)}}\n"] }]
3544
3626
  }] });
3545
3627
 
3546
3628
  var index$2 = /*#__PURE__*/Object.freeze({