@dominikcz/greg 0.9.27

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 (183) hide show
  1. package/README.md +397 -0
  2. package/bin/greg.js +241 -0
  3. package/bin/init.js +351 -0
  4. package/bin/templates/docs/getting-started.md +47 -0
  5. package/bin/templates/docs/index.md +11 -0
  6. package/bin/templates/greg.config.js +39 -0
  7. package/bin/templates/greg.config.ts +38 -0
  8. package/bin/templates/index.html +16 -0
  9. package/bin/templates/src/App.svelte +5 -0
  10. package/bin/templates/src/app.css +20 -0
  11. package/bin/templates/src/main.js +9 -0
  12. package/bin/templates/svelte.config.js +1 -0
  13. package/bin/templates/tsconfig.json +21 -0
  14. package/bin/templates/vite.config.js +23 -0
  15. package/docs/__partials/markdown/examples/basic.md +4 -0
  16. package/docs/__partials/markdown/examples/diff.md +10 -0
  17. package/docs/__partials/markdown/examples/focus.md +5 -0
  18. package/docs/__partials/markdown/examples/language-title.md +3 -0
  19. package/docs/__partials/markdown/examples/line-highlighting.md +5 -0
  20. package/docs/__partials/markdown/examples/line-numbers.md +5 -0
  21. package/docs/__partials/note.md +4 -0
  22. package/docs/guide/__shared-warning.md +4 -0
  23. package/docs/guide/asset-handling.md +88 -0
  24. package/docs/guide/deploying.md +162 -0
  25. package/docs/guide/getting-started.md +334 -0
  26. package/docs/guide/index.md +23 -0
  27. package/docs/guide/localization.md +290 -0
  28. package/docs/guide/markdown/code.md +95 -0
  29. package/docs/guide/markdown/components-and-mermaid.md +43 -0
  30. package/docs/guide/markdown/containers.md +110 -0
  31. package/docs/guide/markdown/header-anchors.md +34 -0
  32. package/docs/guide/markdown/includes.md +84 -0
  33. package/docs/guide/markdown/index.md +20 -0
  34. package/docs/guide/markdown/inline-attributes.md +21 -0
  35. package/docs/guide/markdown/links-and-toc.md +64 -0
  36. package/docs/guide/markdown/math.md +54 -0
  37. package/docs/guide/markdown/syntax-highlighting.md +75 -0
  38. package/docs/guide/routing.md +150 -0
  39. package/docs/guide/using-svelte.md +88 -0
  40. package/docs/guide/versioning.md +281 -0
  41. package/docs/incompatibilities.md +48 -0
  42. package/docs/index.md +43 -0
  43. package/docs/reference/badge.md +100 -0
  44. package/docs/reference/carbon-ads.md +46 -0
  45. package/docs/reference/code-group.md +126 -0
  46. package/docs/reference/home-page.md +232 -0
  47. package/docs/reference/index.md +18 -0
  48. package/docs/reference/markdowndocs.md +275 -0
  49. package/docs/reference/outline.md +79 -0
  50. package/docs/reference/search.md +263 -0
  51. package/docs/reference/steps.md +200 -0
  52. package/docs/reference/team-page.md +189 -0
  53. package/docs/reference/theme.md +150 -0
  54. package/fakeDocsGenerator/generate_docs.js +310 -0
  55. package/package.json +92 -0
  56. package/scripts/build-versions.js +609 -0
  57. package/scripts/generate-static.js +79 -0
  58. package/scripts/render-markdown.js +420 -0
  59. package/src/lib/MarkdownDocs/AiChat.svelte +936 -0
  60. package/src/lib/MarkdownDocs/BackToTop.svelte +68 -0
  61. package/src/lib/MarkdownDocs/Breadcrumb.svelte +68 -0
  62. package/src/lib/MarkdownDocs/DocsNavigation.svelte +149 -0
  63. package/src/lib/MarkdownDocs/DocsSiteHeader.svelte +758 -0
  64. package/src/lib/MarkdownDocs/DocsVersionSwitcher.svelte +103 -0
  65. package/src/lib/MarkdownDocs/MarkdownDocs.svelte +2115 -0
  66. package/src/lib/MarkdownDocs/MarkdownRenderer.svelte +487 -0
  67. package/src/lib/MarkdownDocs/Outline.svelte +238 -0
  68. package/src/lib/MarkdownDocs/PrevNext.svelte +115 -0
  69. package/src/lib/MarkdownDocs/SearchModal.svelte +1241 -0
  70. package/src/lib/MarkdownDocs/TreeView.svelte +32 -0
  71. package/src/lib/MarkdownDocs/TreeViewItem.svelte +219 -0
  72. package/src/lib/MarkdownDocs/VersionOutdatedNotice.svelte +72 -0
  73. package/src/lib/MarkdownDocs/__tests__/codeDirectives.test.js +54 -0
  74. package/src/lib/MarkdownDocs/__tests__/common.test.js +41 -0
  75. package/src/lib/MarkdownDocs/__tests__/docsExamplesLint.test.js +77 -0
  76. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/__partial-basic.md +3 -0
  77. package/src/lib/MarkdownDocs/__tests__/fixtures/docs/markdown/snippet.js +9 -0
  78. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/part.md +11 -0
  79. package/src/lib/MarkdownDocs/__tests__/fixtures/includes/wrapper.md +5 -0
  80. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.js +8 -0
  81. package/src/lib/MarkdownDocs/__tests__/fixtures/snippets/sample.md +5 -0
  82. package/src/lib/MarkdownDocs/__tests__/helpers.js +67 -0
  83. package/src/lib/MarkdownDocs/__tests__/localeUtils.test.js +204 -0
  84. package/src/lib/MarkdownDocs/__tests__/markdown.test.js +704 -0
  85. package/src/lib/MarkdownDocs/__tests__/markdownRendererRuntime.test.js +65 -0
  86. package/src/lib/MarkdownDocs/__tests__/searchIndexBuilder.test.js +117 -0
  87. package/src/lib/MarkdownDocs/__tests__/sqliteStore.test.js +202 -0
  88. package/src/lib/MarkdownDocs/__tests__/useRouter.test.js +16 -0
  89. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.js +14 -0
  90. package/src/lib/MarkdownDocs/ai/adapters/customAdapter.ts +43 -0
  91. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.js +81 -0
  92. package/src/lib/MarkdownDocs/ai/adapters/ollamaAdapter.ts +116 -0
  93. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.js +92 -0
  94. package/src/lib/MarkdownDocs/ai/adapters/openaiAdapter.ts +137 -0
  95. package/src/lib/MarkdownDocs/ai/aiProvider.ts +31 -0
  96. package/src/lib/MarkdownDocs/ai/characters.js +52 -0
  97. package/src/lib/MarkdownDocs/ai/characters.ts +69 -0
  98. package/src/lib/MarkdownDocs/ai/chunkStore.ts +25 -0
  99. package/src/lib/MarkdownDocs/ai/chunker.js +85 -0
  100. package/src/lib/MarkdownDocs/ai/chunker.ts +135 -0
  101. package/src/lib/MarkdownDocs/ai/docLinker.js +26 -0
  102. package/src/lib/MarkdownDocs/ai/docLinker.ts +36 -0
  103. package/src/lib/MarkdownDocs/ai/promptBuilder.js +33 -0
  104. package/src/lib/MarkdownDocs/ai/promptBuilder.ts +53 -0
  105. package/src/lib/MarkdownDocs/ai/ragPipeline.js +54 -0
  106. package/src/lib/MarkdownDocs/ai/ragPipeline.ts +106 -0
  107. package/src/lib/MarkdownDocs/ai/stores/memoryStore.js +88 -0
  108. package/src/lib/MarkdownDocs/ai/stores/memoryStore.ts +112 -0
  109. package/src/lib/MarkdownDocs/ai/stores/sqliteStore.ts +372 -0
  110. package/src/lib/MarkdownDocs/ai/types.ts +71 -0
  111. package/src/lib/MarkdownDocs/aiServer.js +288 -0
  112. package/src/lib/MarkdownDocs/codeDirectives.js +191 -0
  113. package/src/lib/MarkdownDocs/codeFenceInfo.js +45 -0
  114. package/src/lib/MarkdownDocs/codeGroup.ts +46 -0
  115. package/src/lib/MarkdownDocs/common.ts +47 -0
  116. package/src/lib/MarkdownDocs/docsUtils.js +281 -0
  117. package/src/lib/MarkdownDocs/index.plugins.js +22 -0
  118. package/src/lib/MarkdownDocs/layouts/LayoutDoc.svelte +8 -0
  119. package/src/lib/MarkdownDocs/layouts/LayoutHome.svelte +58 -0
  120. package/src/lib/MarkdownDocs/layouts/LayoutPage.svelte +9 -0
  121. package/src/lib/MarkdownDocs/loadGregConfig.js +82 -0
  122. package/src/lib/MarkdownDocs/localeUtils.ts +682 -0
  123. package/src/lib/MarkdownDocs/markdownRendererRuntime.ts +314 -0
  124. package/src/lib/MarkdownDocs/mermaidThemes.js +319 -0
  125. package/src/lib/MarkdownDocs/navigationUtils.js +22 -0
  126. package/src/lib/MarkdownDocs/rehypeCodeGroup.js +326 -0
  127. package/src/lib/MarkdownDocs/rehypeCodeTitle.js +96 -0
  128. package/src/lib/MarkdownDocs/rehypeToc.js +170 -0
  129. package/src/lib/MarkdownDocs/remarkCodeMeta.js +22 -0
  130. package/src/lib/MarkdownDocs/remarkContainers.js +329 -0
  131. package/src/lib/MarkdownDocs/remarkCustomAnchors.js +42 -0
  132. package/src/lib/MarkdownDocs/remarkEscapeSvelte.js +33 -0
  133. package/src/lib/MarkdownDocs/remarkGlobalComponents.js +65 -0
  134. package/src/lib/MarkdownDocs/remarkImports.js +461 -0
  135. package/src/lib/MarkdownDocs/remarkImportsBrowser.js +349 -0
  136. package/src/lib/MarkdownDocs/remarkInlineAttrs.js +95 -0
  137. package/src/lib/MarkdownDocs/remarkMathToHtml.js +138 -0
  138. package/src/lib/MarkdownDocs/searchIndexBuilder.js +497 -0
  139. package/src/lib/MarkdownDocs/searchServer.js +263 -0
  140. package/src/lib/MarkdownDocs/treeViewTypes.ts +11 -0
  141. package/src/lib/MarkdownDocs/useRouter.svelte.ts +114 -0
  142. package/src/lib/MarkdownDocs/useSplitter.svelte.ts +33 -0
  143. package/src/lib/MarkdownDocs/versioningDefaults.js +20 -0
  144. package/src/lib/MarkdownDocs/vitePluginAiServer.js +204 -0
  145. package/src/lib/MarkdownDocs/vitePluginCopyDocs.js +153 -0
  146. package/src/lib/MarkdownDocs/vitePluginFrontmatter.js +109 -0
  147. package/src/lib/MarkdownDocs/vitePluginGregConfig.js +108 -0
  148. package/src/lib/MarkdownDocs/vitePluginSearchIndex.js +57 -0
  149. package/src/lib/MarkdownDocs/vitePluginSearchServer.js +190 -0
  150. package/src/lib/components/Badge.svelte +59 -0
  151. package/src/lib/components/Button.svelte +138 -0
  152. package/src/lib/components/CarbonAds.svelte +99 -0
  153. package/src/lib/components/CodeGroup.svelte +102 -0
  154. package/src/lib/components/Feature.svelte +209 -0
  155. package/src/lib/components/Features.svelte +123 -0
  156. package/src/lib/components/Hero.svelte +399 -0
  157. package/src/lib/components/Image.svelte +128 -0
  158. package/src/lib/components/Link.svelte +105 -0
  159. package/src/lib/components/SocialLink.svelte +84 -0
  160. package/src/lib/components/SocialLinks.svelte +33 -0
  161. package/src/lib/components/Steps.svelte +143 -0
  162. package/src/lib/components/TeamMember.svelte +273 -0
  163. package/src/lib/components/TeamMembers.svelte +81 -0
  164. package/src/lib/components/TeamPage.svelte +65 -0
  165. package/src/lib/components/TeamPageSection.svelte +108 -0
  166. package/src/lib/components/TeamPageTitle.svelte +89 -0
  167. package/src/lib/components/index.js +24 -0
  168. package/src/lib/portal/context.js +12 -0
  169. package/src/lib/portal/index.js +3 -0
  170. package/src/lib/portal/portal.svelte +14 -0
  171. package/src/lib/portal/slot.svelte +8 -0
  172. package/src/lib/scss/__code.scss +128 -0
  173. package/src/lib/scss/__containers.scss +99 -0
  174. package/src/lib/scss/__markdown.scss +447 -0
  175. package/src/lib/scss/__scrollbar.scss +60 -0
  176. package/src/lib/scss/__steps.scss +100 -0
  177. package/src/lib/scss/__theme.scss +238 -0
  178. package/src/lib/scss/__toc.scss +55 -0
  179. package/src/lib/scss/__utilities.scss +7 -0
  180. package/src/lib/scss/greg.scss +9 -0
  181. package/src/lib/spinner/spinner.svelte +42 -0
  182. package/svelte.config.js +146 -0
  183. package/types/index.d.ts +456 -0
@@ -0,0 +1,200 @@
1
+ ---
2
+ title: Steps
3
+ ---
4
+
5
+ # Steps
6
+
7
+ The `Steps` component renders a numbered, visually connected procedure list —
8
+ ideal for installation guides, tutorials, and any sequential workflow.
9
+ It is inspired by the Starlight `<Steps>` component.
10
+
11
+ ## Usage
12
+
13
+ `Steps` supports two authoring styles:
14
+
15
+ - Markdown tag usage in docs pages (`<Steps>...</Steps>`)
16
+ - Direct component usage in `.svelte` files
17
+
18
+ ### Markdown tag usage
19
+
20
+ Wrap a standard Markdown ordered list with `<Steps>`. No import is needed —
21
+ the component is available automatically on every docs page.
22
+
23
+ ````md
24
+ <Steps>
25
+
26
+ 1. **Install dependencies**
27
+ Run `npm install` in the project root.
28
+
29
+ 2. **Start the dev server**
30
+ ```bash
31
+ npm run dev
32
+ ```
33
+
34
+ 3. **Open the app**
35
+ Navigate to `http://localhost:5173` in your browser.
36
+
37
+ </Steps>
38
+
39
+ **Output:**
40
+ ````
41
+
42
+ **Result:**
43
+
44
+ <Steps>
45
+
46
+ 1. **Install dependencies**
47
+ Run `npm install` in the project root.
48
+
49
+ 2. **Start the dev server**
50
+ Run `npm run dev` in your terminal.
51
+
52
+ 3. **Open the app**
53
+ Navigate to `http://localhost:5173` in your browser.
54
+
55
+ </Steps>
56
+
57
+ ### Direct component usage (`.svelte`)
58
+
59
+ ```svelte
60
+ <script>
61
+ import Steps from '$components/Steps.svelte';
62
+ </script>
63
+
64
+ <Steps>
65
+ <ol>
66
+ <li><strong>Install dependencies</strong>Run <code>npm install</code>.</li>
67
+ <li><strong>Start dev server</strong>Run <code>npm run dev</code>.</li>
68
+ <li><strong>Open app</strong>Visit <code>http://localhost:5173</code>.</li>
69
+ </ol>
70
+ </Steps>
71
+ ```
72
+
73
+ **Output:**
74
+
75
+ Equivalent numbered steps UI as in Markdown usage.
76
+
77
+ ## Step titles
78
+
79
+ The first **bold** text (`**…**`) in each list item is automatically styled
80
+ as a step title — slightly larger and heavier than the body text below it.
81
+
82
+ ````md
83
+ <Steps>
84
+
85
+ 1. **Clone the repository**
86
+ `git clone https://github.com/your-org/your-repo.git`
87
+
88
+ 2. **Configure environment variables**
89
+ Copy `.env.example` to `.env` and fill in the required values.
90
+
91
+ 3. **Run the tests**
92
+ ```bash
93
+ npm test
94
+ ```
95
+
96
+ </Steps>
97
+ ````
98
+
99
+ <Steps>
100
+
101
+ 1. **Clone the repository**
102
+ `git clone https://github.com/your-org/your-repo.git`
103
+
104
+ 2. **Configure environment variables**
105
+ Copy `.env.example` to `.env` and fill in the required values.
106
+
107
+ 3. **Run the tests**
108
+ Run `npm test` to verify everything is set up correctly.
109
+
110
+ </Steps>
111
+
112
+ ## Rich step content
113
+
114
+ Each step can contain any block-level Markdown content — paragraphs, code
115
+ fences, custom containers, images, and nested lists.
116
+
117
+ ````md
118
+ <Steps>
119
+
120
+ 1. **Install the CLI**
121
+
122
+ ::: tip Requires Node.js 18+
123
+ Check your version with `node --version` before proceeding.
124
+ :::
125
+
126
+ ```bash
127
+ npm install -g my-cli
128
+ ```
129
+
130
+ 2. **Initialise a project**
131
+
132
+ ```bash
133
+ my-cli init my-project
134
+ cd my-project
135
+ ```
136
+
137
+ 3. **Deploy**
138
+
139
+ - Review `my-cli.config.js`
140
+ - Run `my-cli deploy`
141
+
142
+ </Steps>
143
+ ````
144
+
145
+ <Steps>
146
+
147
+ 1. **Install the CLI**
148
+
149
+ ::: tip Requires Node.js 18+
150
+ Check your version with `node --version` before proceeding.
151
+ :::
152
+
153
+ ```bash
154
+ npm install -g my-cli
155
+ ```
156
+
157
+ 2. **Initialise a project**
158
+
159
+ ```bash
160
+ my-cli init my-project
161
+ cd my-project
162
+ ```
163
+
164
+ 3. **Deploy**
165
+
166
+ - Review `my-cli.config.js`
167
+ - Run `my-cli deploy`
168
+
169
+ </Steps>
170
+
171
+ ## Props
172
+
173
+ ```ts
174
+ interface Props {
175
+ /** Step content — should be a Markdown ordered list. */
176
+ children?: Snippet;
177
+ }
178
+ ```
179
+
180
+ ## CSS variables
181
+
182
+ The component inherits Greg's accent and border colours automatically.
183
+ Override them globally or per page with CSS:
184
+
185
+ | Variable | Used for | Default value |
186
+ | -------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------- |
187
+ | `--greg-accent` | Number circle border and number colour | `#646cff` (or theme `--greg-accent` value) |
188
+ | `--greg-steps-guide-color` | Connector line between steps | `color-mix(in srgb, var(--greg-accent, #646cff) 42%, var(--greg-border-color, #e5e5ea))` |
189
+ | `--greg-steps-guide-gap` | Gap between each point and connector line | `0.375rem` |
190
+ | `--greg-border-color` | Fallback connector colour (used by guide-color fallback) | `#e5e5ea` (or theme `--greg-border-color` value) |
191
+ | `--greg-color` | Step title text colour | `inherit` (or theme `--greg-color` value) |
192
+
193
+ ```css
194
+ /* Example: teal accent for steps */
195
+ .greg-steps {
196
+ --greg-accent: #0d9488;
197
+ --greg-steps-guide-color: #14b8a6;
198
+ --greg-steps-guide-gap: 0.375rem;
199
+ }
200
+ ```
@@ -0,0 +1,189 @@
1
+ ---
2
+ title: Team Page
3
+ ---
4
+
5
+ # Team Page
6
+
7
+ Greg ships Svelte team-page components.
8
+ There are two ways to display team members: embedded in a doc page, or as a
9
+ dedicated full-page layout.
10
+
11
+ ## Authoring styles
12
+
13
+ Team components are available in both authoring contexts:
14
+
15
+ - Markdown docs pages (`.md`) via component tags
16
+ - Direct `.svelte` usage via imported components
17
+
18
+ ## Show team members inside a page
19
+
20
+ Use `<TeamMembers>` anywhere in a Markdown page:
21
+
22
+ ::: code-group labels=[markdown, output]
23
+
24
+ <<< @/snippets/reference/team-members-example.md
25
+
26
+ <!--@include: @/snippets/reference/team-members-example.md-->
27
+
28
+ :::
29
+
30
+ ### Direct component usage (`.svelte`)
31
+
32
+ ::: code-group labels=[svelte, output]
33
+
34
+ ```svelte
35
+ <script>
36
+ import TeamMembers from '$components/TeamMembers.svelte';
37
+ </script>
38
+
39
+ <TeamMembers
40
+ size="medium"
41
+ members={[
42
+ {
43
+ avatar: 'https://avatars.githubusercontent.com/u/583231?s=96',
44
+ name: 'Monalisa Octocat',
45
+ title: 'Lead Developer',
46
+ links: [{ icon: 'github', link: 'https://github.com/octocat' }],
47
+ },
48
+ {
49
+ avatar: 'https://avatars.githubusercontent.com/u/480938?s=96',
50
+ name: 'Hubot',
51
+ title: 'Automation Bot',
52
+ links: [{ icon: 'github', link: 'https://github.com/hubot' }],
53
+ },
54
+ ]}
55
+ />
56
+ ```
57
+
58
+ <!--@include: @/snippets/reference/team-members-medium-example.md-->
59
+
60
+ :::
61
+
62
+ ### `<TeamMembers>` props
63
+
64
+ ```ts
65
+ interface Props {
66
+ members: TeamMemberData[];
67
+ size?: 'small' | 'medium'; // default: 'medium'
68
+ }
69
+ ```
70
+
71
+ `small` is better for inline use inside regular doc pages; `medium` suits a
72
+ dedicated team page.
73
+
74
+ ## Create a full team page
75
+
76
+ Create a `.md` file (e.g. `docs/team.md`) and use the layout components:
77
+
78
+ ::: code-group labels=[markdown, output]
79
+
80
+ <<< @/snippets/reference/team-full-example.md
81
+
82
+ <!--@include: @/snippets/reference/team-full-example.md-->
83
+
84
+ :::
85
+
86
+ ### Direct component usage (`.svelte`)
87
+
88
+ ::: code-group labels=[svelte, output]
89
+
90
+ ```svelte
91
+ <script>
92
+ import TeamMembers from '$components/TeamMembers.svelte';
93
+ </script>
94
+
95
+ <h3>Our Team</h3>
96
+ <p>The people behind Greg.</p>
97
+
98
+ <h4>Core Team</h4>
99
+ <TeamMembers
100
+ size="medium"
101
+ members={[
102
+ {
103
+ avatar: 'https://avatars.githubusercontent.com/u/10137?s=96',
104
+ name: 'Jane Doe',
105
+ title: 'Creator',
106
+ org: 'Acme Corp',
107
+ orgLink: 'https://acme.com',
108
+ desc: 'Open source enthusiast.',
109
+ links: [
110
+ { icon: 'github', link: 'https://github.com/janedoe' },
111
+ { icon: 'twitter', link: 'https://twitter.com/janedoe' },
112
+ ],
113
+ sponsor: 'https://github.com/sponsors/janedoe',
114
+ },
115
+ {
116
+ avatar: 'https://avatars.githubusercontent.com/u/583231?s=96',
117
+ name: 'Monalisa Octocat',
118
+ title: 'Lead Developer',
119
+ links: [{ icon: 'github', link: 'https://github.com/octocat' }],
120
+ },
121
+ ]}
122
+ />
123
+ ```
124
+
125
+ <!--@include: @/snippets/reference/team-full-example.md-->
126
+
127
+ :::
128
+
129
+ ## Component reference
130
+
131
+ ### `<TeamMember>` props
132
+
133
+ ```ts
134
+ interface TeamMemberData {
135
+ avatar: string; // image URL
136
+ name: string;
137
+ title?: string;
138
+ org?: string;
139
+ orgLink?: string;
140
+ desc?: string; // HTML allowed
141
+ links?: SocialLinkItem[];
142
+ sponsor?: string; // sponsor page URL
143
+ actionText?: string; // button label, default 'Sponsor'
144
+ }
145
+
146
+ interface Props {
147
+ member: TeamMemberData;
148
+ size?: 'small' | 'medium';
149
+ }
150
+ ```
151
+
152
+ ### `<TeamMembers>` props
153
+
154
+ ```ts
155
+ interface Props {
156
+ members: TeamMemberData[];
157
+ size?: 'small' | 'medium';
158
+ }
159
+ ```
160
+
161
+ ### `<TeamPage>`
162
+
163
+ Wrapper that provides correct vertical spacing between sections. Accepts only
164
+ `children` (Svelte snippet).
165
+
166
+ ### `<TeamPageTitle>`
167
+
168
+ Section title block at the top of a `<TeamPage>`. Accepts `title` and `lead`
169
+ props or their snippet variants.
170
+
171
+ ### `<TeamPageSection>`
172
+
173
+ A section within a `<TeamPage>`. Accepts `title` / `lead` props and children.
174
+
175
+ ## Social icons
176
+
177
+ The `icon` property of a `SocialLinkItem` can be:
178
+
179
+ - A **string** name of a built-in icon. Supported values: `github`, `twitter`,
180
+ `x`, `linkedin`, `discord`, `facebook`, `instagram`, `mastodon`, `npm`,
181
+ `slack`, `youtube`.
182
+ - An **object** `{ svg: string }` with custom SVG markup.
183
+
184
+ ```md
185
+ links: [
186
+ { icon: 'github', link: 'https://github.com/...' },
187
+ { icon: { svg: '<svg ...>...</svg>' }, link: 'https://...' },
188
+ ]
189
+ ```
@@ -0,0 +1,150 @@
1
+ ---
2
+ title: Theme & Styling
3
+ ---
4
+
5
+ Greg ships a carefully crafted two-tone design system — a clean purple-accent
6
+ **light** theme and a warm ember **dark** theme. Both are configured entirely via
7
+ CSS custom properties.
8
+
9
+
10
+ ## Dark / light mode
11
+
12
+ The user's OS preference (`prefers-color-scheme`) is detected on first load.
13
+ Greg follows system theme by default and only persists a value in
14
+ `localStorage` after a manual toggle.
15
+
16
+ A light/dark toggle is always visible in the top-right header.
17
+
18
+ When the user toggles theme manually, Greg switches to manual mode and stores:
19
+
20
+ - `greg-theme-source = "manual"`
21
+ - `greg-theme = "light" | "dark"`
22
+
23
+ If system mode is active, those keys are removed and Greg follows
24
+ `prefers-color-scheme`.
25
+
26
+ ## Theme-aware favicon and header logo
27
+
28
+ Greg can switch favicon and header logo from app theme state (`data-theme`), not
29
+ only from browser/system preference.
30
+
31
+ If you need this behavior, use separate assets for each theme, for example:
32
+
33
+ - `/favicon-light.svg`
34
+ - `/favicon-dark.svg`
35
+
36
+ Why two files: a single `favicon.svg` with only
37
+ `@media (prefers-color-scheme: dark)` reacts to system theme. It does not always
38
+ match an in-app manual toggle.
39
+
40
+
41
+ ## CSS variables
42
+
43
+ All visual properties are controlled through CSS custom properties defined on
44
+ `:root` (light) and `[data-theme="dark"]` (dark). Override them in your own
45
+ `src/app.css` or inside a `<style>` block to customise the appearance.
46
+
47
+ ### Layout & colours
48
+
49
+ | Variable | Light default | Description |
50
+ | -------------------------- | ------------- | ------------------------------- |
51
+ | `--greg-background` | `#ffffff` | Page background |
52
+ | `--greg-main-background` | `#ffffff` | Content area background |
53
+ | `--greg-menu-background` | `#f8f8f8` | Sidebar background |
54
+ | `--greg-header-background` | `#ffffff` | Top header background |
55
+ | `--greg-color` | `#1a1a2e` | Primary text colour |
56
+ | `--greg-border-color` | `#e5e5ea` | Divider and border colour |
57
+ | `--greg-accent` | `#646cff` | Primary brand / accent colour |
58
+ | `--greg-accent-light` | `#ececf5` | Soft accent (hover backgrounds) |
59
+ | `--greg-header-height` | `3.5rem` | Top header height |
60
+
61
+ ### Navigation
62
+
63
+ | Variable | Light default | Description |
64
+ | ------------------------------- | ------------- | ---------------------- |
65
+ | `--greg-menu-color` | `#3d3d3d` | Sidebar text colour |
66
+ | `--greg-menu-section-color` | `#7a7a8c` | Section header colour |
67
+ | `--greg-menu-active-background` | `#646cff` | Active link background |
68
+ | `--greg-menu-active-color` | `#ffffff` | Active link text |
69
+ | `--greg-menu-hover-background` | `#ececf5` | Hover background |
70
+
71
+ ### Sidebar splitter
72
+
73
+ | Variable | Light default | Description |
74
+ | ------------------------------------------- | ------------- | ------------------------------------ |
75
+ | `--greg-splitter-handler-background` | `#e5e5ea` | Splitter handle background |
76
+ | `--greg-splitter-handler-color` | `#7a7a8c` | Splitter handle icon colour |
77
+ | `--greg-splitter-active-border` | `#646cff` | Splitter border colour on hover |
78
+ | `--greg-splitter-active-handler-background` | `#646cff` | Splitter handle background on hover |
79
+ | `--greg-splitter-active-handler-color` | `#f8f8f8` | Splitter handle icon colour on hover |
80
+
81
+ ### Code blocks
82
+
83
+ | Variable | Light default | Description |
84
+ | -------------------------- | ------------- | ------------------------- |
85
+ | `--greg-code-background` | `#f0f0f4` | Inline code background |
86
+ | `--greg-code-color` | `#1a1a2e` | Inline code text colour |
87
+ | `--greg-code-inline-color` | `#e4004a` | Inline code inline colour |
88
+
89
+ ### Status colours (containers & badges)
90
+
91
+ | Variable | Description |
92
+ | ------------------------------------------------------------------- | ---------------------- |
93
+ | `--greg-info-border`, `--greg-info-text`, `--greg-info-bg` | Info container / badge |
94
+ | `--greg-tip-border`, `--greg-tip-text`, `--greg-tip-bg` | Tip container / badge |
95
+ | `--greg-warning-border`, `--greg-warning-text`, `--greg-warning-bg` | Warning |
96
+ | `--greg-danger-border`, `--greg-danger-text`, `--greg-danger-bg` | Danger |
97
+
98
+ ### Outline / TOC
99
+
100
+ | Variable | Description |
101
+ | ----------------------- | -------------------------- |
102
+ | `--greg-toc-background` | Outline panel background |
103
+ | `--greg-toc-color` | Section label colour |
104
+ | `--greg-toc-link-color` | Link colour |
105
+ | `--greg-toc-link-hover` | Hover / active link colour |
106
+
107
+
108
+ ## Customising the accent colour
109
+
110
+ ```css
111
+ /* src/app.css */
112
+ :root {
113
+ --greg-accent: #ff6f61;
114
+ --greg-accent-light: rgba(255, 111, 97, 0.12);
115
+ --greg-menu-active-background: #ff6f61;
116
+ }
117
+ ```
118
+
119
+
120
+ ## Resizable sidebar
121
+
122
+ The left navigation panel is **drag-to-resize**. A vertical splitter between the
123
+ sidebar and content area accepts mouse drag events to set the sidebar width.
124
+
125
+ The splitter includes a centered `EllipsisVertical` handle icon from
126
+ `@lucide/svelte` to indicate draggability.
127
+
128
+ Hover visuals are controlled by splitter-specific CSS variables
129
+ (`--greg-splitter-active-border`,
130
+ `--greg-splitter-active-handler-background`,
131
+ `--greg-splitter-active-handler-color`), so you can style it independently of the
132
+ global accent token.
133
+
134
+
135
+ ## Code highlighting theme
136
+
137
+ Code blocks are highlighted by Shiki. Greg uses dual themes by default:
138
+ `github-light` for light mode and `github-dark` for dark mode.
139
+
140
+ To change themes, edit `svelte.config.js`:
141
+
142
+ ```js
143
+ // svelte.config.js
144
+ const shikiThemes = {
145
+ light: 'github-light',
146
+ dark: 'github-dark',
147
+ };
148
+ ```
149
+
150
+ Supported Shiki themes: see [shiki.style/themes](https://shiki.style/themes).