11import type { Style } from '@purestack/ts-css'
2- import type { ThemePalette } from '@purestack/ts-style'
2+ import { BREAKPOINTS , mediaBelow , type ThemePalette } from '@purestack/ts-style'
33import { studioTypography } from './studioSkin'
44
55export function registerEcosystemStyles ( root : Style , palette : ThemePalette ) {
6- const tone = palette . semanticTone
6+ registerSectionHeadingStyles ( root , palette )
7+ registerRegorHighlightStyles ( root , palette )
8+ registerPackageStyles ( root , palette )
9+ registerEcosystemNoteStyles ( root , palette )
10+ }
11+
12+ function registerSectionHeadingStyles ( root : Style , palette : ThemePalette ) {
713 root . select ( '.studio .split-heading' ) . css ( {
814 gap : '40px' ,
915 } )
@@ -12,6 +18,157 @@ export function registerEcosystemStyles(root: Style, palette: ThemePalette) {
1218 fontSize : palette . font . size . sm ,
1319 paddingBottom : '3px' ,
1420 } )
21+ }
22+
23+ function registerRegorHighlightStyles ( root : Style , palette : ThemePalette ) {
24+ const tone = palette . semanticTone
25+ root . select ( '.studio .regor-highlight' ) . css ( {
26+ gap : '36px' ,
27+ padding : '36px' ,
28+ marginBottom : '24px' ,
29+ border : `1px solid ${ tone . accent . surface . rest . border } ` ,
30+ borderRadius : palette . radii . lg ,
31+ background : tone . accent . surface . rest . bgcolor ,
32+ color : tone . accent . surface . rest . text ,
33+ } )
34+ root . select ( '.studio .regor-highlight > *' ) . css ( { minWidth : '0' } )
35+ root . select ( '.studio .regor-highlight .eyebrow' ) . css ( {
36+ display : 'flex' ,
37+ alignItems : 'center' ,
38+ gap : '8px' ,
39+ color : tone . accent . surface . rest . text ,
40+ } )
41+ root . select ( '.studio .regor-highlight h3' ) . css ( {
42+ fontSize : palette . font . size . h4 ,
43+ letterSpacing : '-0.5px' ,
44+ lineHeight : '1.25' ,
45+ marginTop : '16px' ,
46+ } )
47+ root . select ( '.studio .regor-summary' ) . css ( {
48+ marginTop : '16px' ,
49+ fontSize : palette . font . size . sm ,
50+ lineHeight : '1.8' ,
51+ } )
52+ root . select ( '.studio .regor-actions' ) . css ( {
53+ gap : '12px' ,
54+ marginTop : '24px' ,
55+ } )
56+ registerRegorConnectionStyles ( root , palette )
57+ root
58+ . media ( mediaBelow ( BREAKPOINTS . sm ) )
59+ . select ( '.studio .regor-highlight' )
60+ . css ( {
61+ gap : '24px' ,
62+ padding : '24px' ,
63+ } )
64+ }
65+
66+ function registerRegorConnectionStyles ( root : Style , palette : ThemePalette ) {
67+ registerRegorLoopPathStyles ( root , palette )
68+ registerRegorLoopNodeStyles ( root , palette )
69+ registerRegorLoopLabelStyles ( root , palette )
70+ root . select ( '.studio .regor-connection figcaption' ) . css ( {
71+ fontSize : palette . font . size . xs ,
72+ lineHeight : '1.8' ,
73+ } )
74+ }
75+
76+ function registerRegorLoopPathStyles ( root : Style , palette : ThemePalette ) {
77+ const tone = palette . semanticTone
78+ root . select ( '.studio .regor-connection' ) . css ( {
79+ margin : '0' ,
80+ textAlign : 'center' ,
81+ } )
82+ root . select ( '.studio .regor-loop' ) . css ( {
83+ position : 'relative' ,
84+ height : '220px' ,
85+ maxWidth : '400px' ,
86+ marginInline : 'auto' ,
87+ } )
88+ root . select ( '.studio .regor-loop-path' ) . css ( {
89+ position : 'absolute' ,
90+ inset : '0' ,
91+ width : '100%' ,
92+ height : '100%' ,
93+ strokeWidth : '1.5' ,
94+ strokeLinecap : 'round' ,
95+ strokeLinejoin : 'round' ,
96+ } )
97+ root
98+ . select ( '.studio .regor-loop-ui' )
99+ . css ( { stroke : tone . accent . text . default } )
100+ root
101+ . select ( '.studio .regor-loop-docs' )
102+ . css ( { stroke : tone . secondary . text . default } )
103+ }
104+
105+ function registerRegorLoopNodeStyles ( root : Style , palette : ThemePalette ) {
106+ const tone = palette . semanticTone
107+ root . select ( '.studio .regor-loop-node' ) . css ( {
108+ position : 'absolute' ,
109+ top : '50%' ,
110+ transform : 'translate(-50%, -50%)' ,
111+ display : 'flex' ,
112+ flexDirection : 'column' ,
113+ alignItems : 'center' ,
114+ gap : '10px' ,
115+ fontSize : palette . font . size . sm ,
116+ } )
117+ root . select ( '.studio .regor-loop-node--regor' ) . css ( {
118+ left : '22.222%' ,
119+ color : tone . accent . text . default ,
120+ } )
121+ root . select ( '.studio .regor-loop-node--purestack' ) . css ( {
122+ left : '77.778%' ,
123+ color : tone . secondary . text . default ,
124+ } )
125+ root . select ( '.studio .regor-loop-mark' ) . css ( {
126+ display : 'grid' ,
127+ placeItems : 'center' ,
128+ width : '64px' ,
129+ height : '64px' ,
130+ border : '1px solid color-mix(in srgb, currentColor 30%, transparent)' ,
131+ borderRadius : palette . radii . lg ,
132+ background : tone . neutral . surface . rest . bgcolor ,
133+ boxShadow : '0 8px 24px color-mix(in srgb, currentColor 10%, transparent)' ,
134+ } )
135+ root . select ( '.studio .regor-loop-mark .icon' ) . css ( {
136+ width : '32px' ,
137+ height : '32px' ,
138+ } )
139+ }
140+
141+ function registerRegorLoopLabelStyles ( root : Style , palette : ThemePalette ) {
142+ const tone = palette . semanticTone
143+ root . select ( '.studio .regor-loop-label' ) . css ( {
144+ position : 'absolute' ,
145+ left : '50%' ,
146+ transform : 'translate(-50%, -50%)' ,
147+ display : 'flex' ,
148+ alignItems : 'center' ,
149+ gap : '8px' ,
150+ padding : '5px 10px' ,
151+ borderRadius : palette . radii . pill ,
152+ background : tone . accent . surface . rest . bgcolor ,
153+ font : `10px ${ studioTypography . mono } ` ,
154+ whiteSpace : 'nowrap' ,
155+ } )
156+ root . select ( '.studio .regor-loop-label--ui' ) . css ( {
157+ top : '35px' ,
158+ color : tone . accent . text . default ,
159+ } )
160+ root . select ( '.studio .regor-loop-label--docs' ) . css ( {
161+ top : '185px' ,
162+ color : tone . secondary . text . default ,
163+ } )
164+ root . select ( '.studio .regor-loop-label .icon' ) . css ( {
165+ width : '14px' ,
166+ height : '14px' ,
167+ } )
168+ }
169+
170+ function registerPackageStyles ( root : Style , palette : ThemePalette ) {
171+ const tone = palette . semanticTone
15172 root . select ( '.studio .package-grid' ) . css ( {
16173 border : `1px solid ${ tone . neutral . border . subtle } ` ,
17174 borderRadius : '7px' ,
@@ -63,6 +220,10 @@ export function registerEcosystemStyles(root: Style, palette: ThemePalette) {
63220 padding : '0' ,
64221 border : '0' ,
65222 } )
223+ }
224+
225+ function registerEcosystemNoteStyles ( root : Style , palette : ThemePalette ) {
226+ const tone = palette . semanticTone
66227 root . select ( '.studio .ecosystem-note' ) . css ( {
67228 gap : '20px' ,
68229 marginTop : '22px' ,
0 commit comments