veslx 0.1.27 → 0.1.28

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 (46) hide show
  1. package/bin/lib/build.ts +2 -1
  2. package/bin/lib/serve.ts +2 -1
  3. package/dist/client/components/header.js +2 -24
  4. package/dist/client/components/header.js.map +1 -1
  5. package/dist/client/components/mdx-components.js +2 -0
  6. package/dist/client/components/mdx-components.js.map +1 -1
  7. package/dist/client/components/post-list-item.js +43 -0
  8. package/dist/client/components/post-list-item.js.map +1 -0
  9. package/dist/client/components/post-list.js +39 -79
  10. package/dist/client/components/post-list.js.map +1 -1
  11. package/dist/client/hooks/use-mdx-content.js +64 -4
  12. package/dist/client/hooks/use-mdx-content.js.map +1 -1
  13. package/dist/client/lib/content-classification.js +1 -22
  14. package/dist/client/lib/content-classification.js.map +1 -1
  15. package/dist/client/pages/content-router.js +2 -10
  16. package/dist/client/pages/content-router.js.map +1 -1
  17. package/dist/client/pages/home.js +7 -20
  18. package/dist/client/pages/home.js.map +1 -1
  19. package/dist/client/pages/index-post.js +34 -0
  20. package/dist/client/pages/index-post.js.map +1 -0
  21. package/dist/client/pages/post.js +1 -3
  22. package/dist/client/pages/post.js.map +1 -1
  23. package/dist/client/pages/slides.js +4 -3
  24. package/dist/client/pages/slides.js.map +1 -1
  25. package/package.json +1 -1
  26. package/plugin/src/plugin.ts +18 -8
  27. package/plugin/src/types.ts +17 -4
  28. package/src/components/header.tsx +2 -20
  29. package/src/components/mdx-components.tsx +3 -1
  30. package/src/components/post-list-item.tsx +54 -0
  31. package/src/components/post-list.tsx +58 -115
  32. package/src/components/welcome.tsx +2 -2
  33. package/src/hooks/use-mdx-content.ts +96 -7
  34. package/src/index.css +12 -0
  35. package/src/lib/content-classification.ts +0 -24
  36. package/src/pages/content-router.tsx +6 -17
  37. package/src/pages/home.tsx +8 -50
  38. package/src/pages/index-post.tsx +59 -0
  39. package/src/pages/post.tsx +1 -3
  40. package/src/pages/slides.tsx +5 -3
  41. package/src/vite-env.d.ts +11 -1
  42. package/vite.config.ts +4 -3
  43. package/dist/client/components/running-bar.js +0 -15
  44. package/dist/client/components/running-bar.js.map +0 -1
  45. package/src/components/content-tabs.tsx +0 -64
  46. package/src/components/running-bar.tsx +0 -21
package/src/vite-env.d.ts CHANGED
@@ -9,6 +9,16 @@ declare module 'virtual:veslx-config' {
9
9
  github: string;
10
10
  defaultView: ContentView;
11
11
  }
12
- const config: SiteConfig;
12
+
13
+ interface SlidesConfig {
14
+ scrollSnap: boolean;
15
+ }
16
+
17
+ interface Config {
18
+ site: SiteConfig;
19
+ slides: SlidesConfig;
20
+ }
21
+
22
+ const config: Config;
13
23
  export default config;
14
24
  }
package/vite.config.ts CHANGED
@@ -80,11 +80,11 @@ export default defineConfig(({ command }) => {
80
80
  reactResolverPlugin(),
81
81
  tailwindcss(),
82
82
  // MDX for slides - splits at --- into <Slide> components
83
- // Matches: SLIDES.mdx, slides.mdx, *.slides.mdx
83
+ // Matches: SLIDES.mdx, SLIDES.md, slides.mdx, slides.md, *.slides.mdx, *.slides.md
84
84
  {
85
85
  enforce: 'pre',
86
86
  ...mdx({
87
- include: /SLIDES\.mdx$|slides\.mdx$/i,
87
+ include: /SLIDES\.mdx?$|slides\.mdx?$/i,
88
88
  remarkPlugins: [
89
89
  ...commonRemarkPlugins,
90
90
  remarkSlides, // Transform --- into <Slide> wrappers
@@ -97,7 +97,8 @@ export default defineConfig(({ command }) => {
97
97
  {
98
98
  enforce: 'pre',
99
99
  ...mdx({
100
- exclude: /SLIDES\.mdx$|slides\.mdx$/i,
100
+ include: /\.mdx?$/,
101
+ exclude: /SLIDES\.mdx?$|slides\.mdx?$/i,
101
102
  remarkPlugins: commonRemarkPlugins,
102
103
  rehypePlugins: [rehypeKatex],
103
104
  providerImportSource: '@mdx-js/react',
@@ -1,15 +0,0 @@
1
- import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
- import { isSimulationRunning } from "../plugin/src/client.js";
3
- function RunningBar() {
4
- const isRunning = isSimulationRunning();
5
- return /* @__PURE__ */ jsx(Fragment, { children: isRunning && // this should stay red not another color
6
- /* @__PURE__ */ jsx("div", { className: "running-bar sticky top-0 z-50 px-[var(--page-padding)] py-2 bg-red-500 text-primary-foreground font-mono text-xs text-center tracking-wide", children: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-3", children: [
7
- /* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-current animate-pulse" }),
8
- /* @__PURE__ */ jsx("span", { className: "uppercase tracking-widest", children: "simulation running" }),
9
- /* @__PURE__ */ jsx("span", { className: "text-primary-foreground/60", children: "Page will auto-refresh on completion" })
10
- ] }) }) });
11
- }
12
- export {
13
- RunningBar
14
- };
15
- //# sourceMappingURL=running-bar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"running-bar.js","sources":["../../../src/components/running-bar.tsx"],"sourcesContent":["import { isSimulationRunning } from \"../../plugin/src/client\";\n\n\nexport function RunningBar() {\n const isRunning = isSimulationRunning();\n\n return (\n <>\n {isRunning && (\n // this should stay red not another color\n <div className=\"running-bar sticky top-0 z-50 px-[var(--page-padding)] py-2 bg-red-500 text-primary-foreground font-mono text-xs text-center tracking-wide\">\n <span className=\"inline-flex items-center gap-3\">\n <span className=\"h-1.5 w-1.5 rounded-full bg-current animate-pulse\" />\n <span className=\"uppercase tracking-widest\">simulation running</span>\n <span className=\"text-primary-foreground/60\">Page will auto-refresh on completion</span>\n </span>\n </div>\n )}\n </>\n )\n}"],"names":[],"mappings":";;AAGO,SAAS,aAAa;AAC3B,QAAM,YAAY,oBAAA;AAElB,SACE,oBAAA,UAAA,EACG,UAAA;AAAA,sBAEE,OAAA,EAAI,WAAU,8IACb,UAAA,qBAAC,QAAA,EAAK,WAAU,kCACd,UAAA;AAAA,IAAA,oBAAC,QAAA,EAAK,WAAU,oDAAA,CAAoD;AAAA,IACpE,oBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,sBAAkB;AAAA,IAC9D,oBAAC,QAAA,EAAK,WAAU,8BAA6B,UAAA,uCAAA,CAAoC;AAAA,EAAA,EAAA,CACnF,GACF,GAEJ;AAEJ;"}
@@ -1,64 +0,0 @@
1
- import { Link } from "react-router-dom";
2
- import { cn } from "@/lib/utils";
3
- import type { ContentView } from "@/lib/content-classification";
4
-
5
- interface ContentTabsProps {
6
- value: ContentView;
7
- counts: { posts: number; docs: number; all: number };
8
- }
9
-
10
- const views: { key: ContentView; label: string; path: string }[] = [
11
- { key: "posts", label: "Posts", path: "/posts" },
12
- { key: "docs", label: "Docs", path: "/docs" },
13
- // { key: "all", label: "All", path: "/all" },
14
- ];
15
-
16
- export function ContentTabs({ value, counts }: ContentTabsProps) {
17
- const hasOnlyPosts = counts.posts > 0 && counts.docs === 0;
18
- const hasOnlyDocs = counts.docs > 0 && counts.posts === 0;
19
-
20
- if (hasOnlyPosts || hasOnlyDocs) {
21
- return null;
22
- }
23
-
24
- const isDisabled = (key: ContentView) => {
25
- if (key === "posts") return counts.posts === 0;
26
- if (key === "docs") return counts.docs === 0;
27
- return false;
28
- };
29
-
30
- return (
31
- <nav className="flex items-center gap-3 font-mono font-medium text-xs text-muted-foreground">
32
- {views.map((view) => {
33
- const disabled = isDisabled(view.key);
34
-
35
- if (disabled) {
36
- return (
37
- <span
38
- key={view.key}
39
- className="opacity-30 cursor-not-allowed"
40
- >
41
- {view.label}
42
- </span>
43
- );
44
- }
45
-
46
- return (
47
- <Link
48
- key={view.key}
49
- to={view.path}
50
- className={cn(
51
- "transition-colors duration-150",
52
- "hover:text-foreground hover:underline hover:underline-offset-4 hover:decoration-primary/60",
53
- value === view.key
54
- ? "text-foreground underline-offset-4 decoration-primary/60"
55
- : ""
56
- )}
57
- >
58
- {view.label}
59
- </Link>
60
- );
61
- })}
62
- </nav>
63
- );
64
- }
@@ -1,21 +0,0 @@
1
- import { isSimulationRunning } from "../../plugin/src/client";
2
-
3
-
4
- export function RunningBar() {
5
- const isRunning = isSimulationRunning();
6
-
7
- return (
8
- <>
9
- {isRunning && (
10
- // this should stay red not another color
11
- <div className="running-bar sticky top-0 z-50 px-[var(--page-padding)] py-2 bg-red-500 text-primary-foreground font-mono text-xs text-center tracking-wide">
12
- <span className="inline-flex items-center gap-3">
13
- <span className="h-1.5 w-1.5 rounded-full bg-current animate-pulse" />
14
- <span className="uppercase tracking-widest">simulation running</span>
15
- <span className="text-primary-foreground/60">Page will auto-refresh on completion</span>
16
- </span>
17
- </div>
18
- )}
19
- </>
20
- )
21
- }