@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,68 @@
1
+ <script lang="ts">
2
+ import { ArrowUp } from "@lucide/svelte";
3
+
4
+ type Props = {
5
+ /** The scrollable element to watch and scroll to top. */
6
+ target: HTMLElement | undefined;
7
+ /** Accessible label for the button. */
8
+ label?: string;
9
+ };
10
+ let { target, label = "Back to top" }: Props = $props();
11
+
12
+ let visible = $state(false);
13
+
14
+ $effect(() => {
15
+ const el = target;
16
+ if (!el) return;
17
+ const handler = () => {
18
+ visible = el.scrollTop > 300;
19
+ };
20
+ el.addEventListener("scroll", handler, { passive: true });
21
+ return () => el.removeEventListener("scroll", handler);
22
+ });
23
+
24
+ function scrollToTop() {
25
+ target?.scrollTo({ top: 0, behavior: "smooth" });
26
+ }
27
+ </script>
28
+
29
+ {#if visible}
30
+ <button
31
+ class="back-to-top"
32
+ onclick={scrollToTop}
33
+ type="button"
34
+ aria-label={label}
35
+ >
36
+ <ArrowUp size={18} strokeWidth={2.25} aria-hidden="true" />
37
+ </button>
38
+ {/if}
39
+
40
+ <style lang="scss">
41
+ .back-to-top {
42
+ position: fixed;
43
+ bottom: 2rem;
44
+ right: 2rem;
45
+ width: 2.5rem;
46
+ height: 2.5rem;
47
+ border-radius: 50%;
48
+ background: var(--greg-accent);
49
+ color: #fff;
50
+ border: none;
51
+ cursor: pointer;
52
+ font-size: 1.25rem;
53
+ line-height: 1;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25);
58
+ transition:
59
+ opacity 0.2s,
60
+ transform 0.2s;
61
+ z-index: 100;
62
+
63
+ &:hover {
64
+ opacity: 0.85;
65
+ transform: translateY(-2px);
66
+ }
67
+ }
68
+ </style>
@@ -0,0 +1,68 @@
1
+ <script lang="ts">
2
+ import { withBase } from "./common";
3
+ type BreadcrumbItem = { label: string; link: string };
4
+
5
+ type Props = {
6
+ items: BreadcrumbItem[];
7
+ navigate: (path: string) => void;
8
+ /** Root path excluded from display (e.g. '/docs'). */
9
+ srcDir: string;
10
+ };
11
+ let { items, navigate, srcDir }: Props = $props();
12
+
13
+ // Skip the docs-root node and only render when there are at least two levels.
14
+ const display = $derived(items.filter((i) => i.link !== srcDir));
15
+ </script>
16
+
17
+ {#if display.length > 1}
18
+ <nav class="breadcrumb" aria-label="Breadcrumb">
19
+ {#each display as item, i}
20
+ {#if i > 0}<span class="sep" aria-hidden="true">/</span>{/if}
21
+ {#if i < display.length - 1}
22
+ <a
23
+ href={withBase(item.link)}
24
+ class="crumb"
25
+ onclick={(e) => {
26
+ e.preventDefault();
27
+ navigate(item.link);
28
+ }}>{item.label}</a
29
+ >
30
+ {:else}
31
+ <span class="crumb current" aria-current="page"
32
+ >{item.label}</span
33
+ >
34
+ {/if}
35
+ {/each}
36
+ </nav>
37
+ {/if}
38
+
39
+ <style lang="scss">
40
+ .breadcrumb {
41
+ display: flex;
42
+ align-items: center;
43
+ flex-wrap: wrap;
44
+ gap: 0.25rem;
45
+ font-size: 0.8rem;
46
+ color: var(--greg-menu-section-color);
47
+ margin-bottom: 0.75rem;
48
+ }
49
+
50
+ .sep {
51
+ opacity: 0.45;
52
+ }
53
+
54
+ .crumb {
55
+ color: var(--greg-menu-section-color);
56
+ text-decoration: none;
57
+
58
+ &:hover {
59
+ color: var(--greg-accent);
60
+ text-decoration: underline;
61
+ }
62
+
63
+ &.current {
64
+ color: var(--greg-color);
65
+ font-weight: 500;
66
+ }
67
+ }
68
+ </style>
@@ -0,0 +1,149 @@
1
+ <script lang="ts">
2
+ import TreeView from "./TreeView.svelte";
3
+ import { ChevronRight } from "@lucide/svelte";
4
+ import { handleSectionClick } from "./navigationUtils";
5
+
6
+ import type { TreeViewItem } from "./treeViewTypes";
7
+
8
+ interface DocsNavigationProps {
9
+ menu: TreeViewItem[];
10
+ active: string;
11
+ srcDir?: string;
12
+ ariaLabel?: string;
13
+ navigate: (path: string) => void;
14
+ }
15
+ let {
16
+ menu,
17
+ active = "",
18
+ srcDir = "./",
19
+ ariaLabel = "Menu",
20
+ navigate,
21
+ }: DocsNavigationProps = $props();
22
+
23
+ // Items to render: root index page excluded; leaves and sections kept in their sorted order
24
+ let items = $derived(menu.filter((item: any) => item.link !== srcDir));
25
+
26
+ let collapsed = $state(new Set<string>());
27
+
28
+ function toggleSection(key: string) {
29
+ const next = new Set(collapsed);
30
+ if (next.has(key)) next.delete(key);
31
+ else next.add(key);
32
+ collapsed = next;
33
+ }
34
+ </script>
35
+
36
+ <nav aria-label={ariaLabel}>
37
+ {#each items as item}
38
+ {@const isSection = item.children && item.children.length > 0}
39
+ {@const key = item.link ?? item.label}
40
+ {@const isCollapsed = collapsed.has(key)}
41
+ {#if isSection}
42
+ <div class="nav-section">
43
+ <div
44
+ class="nav-section-title"
45
+ class:active={active === item.link}
46
+ class:collapsed={isCollapsed}
47
+ role="button"
48
+ tabindex="0"
49
+ onclick={() =>
50
+ handleSectionClick(item, key, toggleSection, navigate)}
51
+ onkeydown={(e) =>
52
+ (e.key === "Enter" || e.key === " ") &&
53
+ handleSectionClick(item, key, toggleSection, navigate)}
54
+ aria-expanded={!isCollapsed}
55
+ >
56
+ <span
57
+ class="nav-section-label"
58
+ class:active={active === item.link}
59
+ >
60
+ {item.label}{#if item.badge}<span
61
+ class="nav-badge {item.badge?.type ?? 'tip'}"
62
+ >{item.badge?.text}</span
63
+ >{/if}
64
+ </span>
65
+ <span class="nav-section-chevron"><ChevronRight /></span>
66
+ </div>
67
+ {#if !isCollapsed}
68
+ <TreeView tree={item.children} {active} {navigate} />
69
+ {/if}
70
+ </div>
71
+ {:else}
72
+ <div class="nav-leaf">
73
+ <TreeView tree={[item]} {active} {navigate} />
74
+ </div>
75
+ {/if}
76
+ {/each}
77
+ </nav>
78
+
79
+ <style lang="scss">
80
+ nav {
81
+ user-select: none;
82
+ display: flex;
83
+ flex-flow: column nowrap;
84
+ gap: 0.25rem;
85
+ }
86
+
87
+ .nav-section {
88
+ display: flex;
89
+ flex-flow: column nowrap;
90
+ gap: 0.1rem;
91
+ margin-top: 0.75rem;
92
+
93
+ &:first-child {
94
+ margin-top: 0;
95
+ }
96
+ }
97
+
98
+ .nav-leaf {
99
+ margin-top: 0.75rem;
100
+
101
+ &:first-child {
102
+ margin-top: 0;
103
+ }
104
+ }
105
+
106
+ .nav-section-title {
107
+ display: flex;
108
+ align-items: center;
109
+ border-radius: 5px;
110
+ cursor: pointer;
111
+
112
+ &:hover {
113
+ background-color: var(--greg-menu-hover-background);
114
+ .nav-section-label {
115
+ color: var(--greg-color);
116
+ }
117
+ }
118
+ }
119
+
120
+ .nav-section-label {
121
+ flex: 1;
122
+ font-size: 0.8rem;
123
+ font-weight: 700;
124
+ text-transform: uppercase;
125
+ letter-spacing: 0.08em;
126
+ color: var(--greg-menu-section-color);
127
+ padding: 0.25rem 0 0.25rem 0.5rem;
128
+ display: block;
129
+ text-decoration: none;
130
+
131
+ &.active {
132
+ color: var(--greg-accent);
133
+ }
134
+ }
135
+
136
+ .nav-section-chevron {
137
+ padding: 0.25rem 0.5rem;
138
+ color: var(--greg-menu-section-color);
139
+ display: flex;
140
+ align-items: center;
141
+ transition: transform 0.2s ease;
142
+ transform: rotate(90deg);
143
+ pointer-events: none;
144
+
145
+ .nav-section-title.collapsed & {
146
+ transform: rotate(0deg);
147
+ }
148
+ }
149
+ </style>