Skip to content

Commit 025b1ae

Browse files
authored
Merge pull request #13 from PureStackStudio/cleanup-studio-plugin
Cleanup studio plugin by removing manual file generations.
2 parents 1e52bf1 + 31b09ba commit 025b1ae

45 files changed

Lines changed: 986 additions & 1066 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎biome.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
"files": {
44
"includes": [
55
"**",
6+
"!frontend/out",
7+
"!**/.*",
68
"!**/dist",
79
"!**/node_modules",
810
"!**/.yarn",

‎frontend/docs/dataGuide.ts‎

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,17 @@ export function createChartAppearanceState(): ChartAppearanceState {
6464
}
6565
}
6666

67+
export interface ChartAppearanceControls {
68+
tone: Ref<SemanticTone>
69+
variant: Ref<ComponentVariant>
70+
variantMode: Ref<ComponentVariantMode>
71+
width: Ref<number | string>
72+
showWidth?: RefOrValue<boolean>
73+
prefix: RefOrValue<string>
74+
}
75+
6776
export function defineChartAppearanceControls() {
68-
return defineComponent<{
69-
tone: Ref<SemanticTone>
70-
variant: Ref<ComponentVariant>
71-
variantMode: Ref<ComponentVariantMode>
72-
width: Ref<number | string>
73-
showWidth?: RefOrValue<boolean>
74-
prefix: RefOrValue<string>
75-
}>(
77+
return defineComponent<ChartAppearanceControls>(
7678
html`<Grid columns="1" columnsMd="3">
7779
<FormSelectField :id="prefix + '-tone'" label="Chart tone" :model="tone" :options="tones"/>
7880
<FormSelectField :id="prefix + '-variant'" label="Chart variant" :model="variant" :options="variants"/>
@@ -94,11 +96,13 @@ export function defineChartAppearanceControls() {
9496
)
9597
}
9698

99+
export interface ChartAppearanceGallery {
100+
component: RefOrValue<string>
101+
axis: RefOrValue<'tone' | 'variant' | 'mode'>
102+
}
103+
97104
export function defineChartAppearanceGallery() {
98-
return defineComponent<{
99-
component: RefOrValue<string>
100-
axis: RefOrValue<'tone' | 'variant' | 'mode'>
101-
}>(
105+
return defineComponent<ChartAppearanceGallery>(
102106
html`<div class="component-appearance-grid data-chart-gallery">
103107
<div class="component-appearance-cell" r-for="sample in samples">
104108
<code>{{ sample.label }}</code>

‎frontend/docs/docsComponents.ts‎

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
import type { SiteConfig } from '@purestack/ts-common'
2-
import { defineConsentPreviewComponent } from '../purestack.studio/components/site/consent/preview'
3-
import { defineNavMenuPreviewComponent } from '../purestack.studio/components/site/nav-menu/preview'
4-
import { definePageTocPreviewComponent } from '../purestack.studio/components/site/page-toc/preview'
5-
import { defineSignInPreviewComponent } from '../purestack.studio/components/site/sign-in/preview'
6-
import { defineTopBarPreviewComponent } from '../purestack.studio/components/site/top-bar/preview'
72
import { defineApiPropertyComponent } from './apiProperty'
83
import { defineComponentGuideComponents } from './componentGuide'
94
import { defineChartAppearanceGallery } from './dataGuide'
105
import { defineFormAppearanceGallery } from './formAppearance'
116
import { defineLandingAppearanceGallery } from './landingGuide'
127
import { defineModalExampleComponents } from './modal'
138
import { defineSemanticToneGallery } from './semanticToneGuide'
14-
import { defineSiteAppearanceGallery } from './siteGuide'
9+
import {
10+
defineConsentPreviewComponent,
11+
defineNavMenuPreviewComponent,
12+
definePageTocPreviewComponent,
13+
defineSignInPreviewComponent,
14+
defineTopBarPreviewComponent,
15+
} from './sitePreviewComponents'
16+
import { defineSiteAppearanceGallery } from './sitePreviews'
1517

1618
export function defineDocumentationComponents(site: SiteConfig) {
1719
return {

‎frontend/docs/landingGuide.ts‎

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ const variants: ComponentVariant[] = [
2323
'none',
2424
]
2525

26+
export interface LandingAppearanceGallery {
27+
component: RefOrValue<string>
28+
axis: RefOrValue<'tone' | 'variant' | 'mode'>
29+
}
30+
2631
/** Full, simultaneously visible samples of each component's public appearance API. */
2732
export function defineLandingAppearanceGallery() {
28-
return defineComponent<{
29-
component: RefOrValue<string>
30-
axis: RefOrValue<'tone' | 'variant' | 'mode'>
31-
}>(
33+
return defineComponent<LandingAppearanceGallery>(
3234
html`<div class="component-appearance-grid landing-appearance-gallery">
3335
<div class="component-appearance-cell" r-for="sample in samples">
3436
<code>{{ sample.label }}</code>

‎frontend/docs/previewTemplate.ts‎

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import type { PageTemplate } from '@purestack/ts-common'
2+
import { h } from '@purestack/ts-html'
3+
4+
const previewStyles = `
5+
html,body{margin:0;min-height:0;height:auto}
6+
body.preview{display:block;min-height:0!important;padding:8px;box-sizing:border-box}
7+
.site-guide-samples{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,16rem),1fr));gap:1rem}
8+
.site-guide-sample{min-width:0}
9+
.site-guide-sample>code{display:block;margin:0 0 1rem}
10+
.site-guide-sample iframe{width:100%;border:0;display:block}
11+
.preview .nav__menu,.preview .page-toc{position:static!important;width:100%!important;max-height:none!important}
12+
.preview .page-toc__panel-toggle,.preview .page-toc__restore-toggle,.preview .nav__panel-toggle,.preview .nav__collapse-toggle{display:none!important}
13+
.site-guide-sample .consent{position:static!important;pointer-events:auto!important}
14+
.site-guide-sample .consent__banner{position:static!important;display:block!important;max-width:none!important;width:100%!important}
15+
.site-guide-sample .consent__panel,.site-guide-sample [data-consent-settings]{display:none!important}
16+
.site-guide-sample .site-footer{margin:0;padding:1rem}
17+
.site-guide-sample .site-footer__inner{padding:0}
18+
.site-guide-sample .site-footer__bottom{flex-direction:column!important;align-items:start!important}
19+
.site-guide-sample .sign-in__panel{position:static!important;transform:none!important;min-width:0!important;width:100%!important}
20+
.site-guide-sample .sign-in{width:100%}
21+
.preview .topbar{position:static!important;padding:.5rem!important}
22+
.site-guide-sample .topbar__search{min-width:0}
23+
.site-guide-sample .text-title{font-size:1.15rem;line-height:1.35}
24+
.site-guide-sample .site-logo{max-width:100%}
25+
`
26+
27+
// Presentation only: page head, assets, and component runtimes come from PureStack.
28+
const frameScript = `
29+
document.querySelectorAll('.site-guide-sample details.sign-in').forEach(menu=>menu.open=true);
30+
document.querySelectorAll('.site-guide-sample .consent__banner').forEach(banner=>{banner.hidden=false;banner.removeAttribute('aria-hidden')});
31+
if(window.parent!==window){
32+
const sync=()=>{document.documentElement.dataset.theme=parent.document.documentElement.dataset.theme||'light';document.documentElement.setAttribute('data-theme-ready','true')};
33+
sync();
34+
new MutationObserver(sync).observe(parent.document.documentElement,{attributes:true,attributeFilter:['data-theme']});
35+
const minimumHeight=frameElement ? parseFloat(frameElement.style.height)||0 : 0;
36+
const resize=()=>{if(frameElement)frameElement.style.height=Math.max(minimumHeight,Math.ceil(document.body.getBoundingClientRect().height))+'px'};
37+
new ResizeObserver(resize).observe(document.body);
38+
addEventListener('load',resize);
39+
}
40+
`
41+
42+
export const previewTemplate: PageTemplate = ({ head, bodyHtml, pageInfo }) => {
43+
head.push(h('style').raw(previewStyles))
44+
return h('html')
45+
.attr({ lang: pageInfo.locale ?? 'en' })
46+
.push(
47+
head,
48+
h('body')
49+
.class('preview template-doc doc-content tone--neutral')
50+
.raw(bodyHtml)
51+
.push(h('script').raw(frameScript)),
52+
)
53+
}

‎frontend/docs/semanticToneGuide.ts‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,12 @@ const variants: ComponentVariant[] = [
4949
'none',
5050
]
5151

52+
export interface SemanticToneGallery {
53+
axis: RefOrValue<string>
54+
}
55+
5256
export function defineSemanticToneGallery() {
53-
return defineComponent<{ axis: RefOrValue<string> }>(
57+
return defineComponent<SemanticToneGallery>(
5458
html`<div class="component-appearance-grid tone-guide-gallery">
5559
<article class="component-appearance-cell" r-for="sample in samples" :data-tone-sample="sample.label">
5660
<code>{{ sample.label }}</code>

0 commit comments

Comments
 (0)