veslx 0.1.2 → 0.1.4

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 (78) hide show
  1. package/bin/lib/build.ts +2 -0
  2. package/bin/lib/serve.ts +2 -0
  3. package/dist/client/App.js +17 -0
  4. package/dist/client/App.js.map +1 -0
  5. package/dist/client/components/front-matter.js +33 -0
  6. package/dist/client/components/front-matter.js.map +1 -0
  7. package/dist/client/components/gallery/components/figure-caption.js +14 -0
  8. package/dist/client/components/gallery/components/figure-caption.js.map +1 -0
  9. package/dist/client/components/gallery/components/figure-header.js +13 -0
  10. package/dist/client/components/gallery/components/figure-header.js.map +1 -0
  11. package/dist/client/components/gallery/components/lightbox.js +96 -0
  12. package/dist/client/components/gallery/components/lightbox.js.map +1 -0
  13. package/dist/client/components/gallery/components/loading-image.js +46 -0
  14. package/dist/client/components/gallery/components/loading-image.js.map +1 -0
  15. package/dist/client/components/gallery/hooks/use-gallery-images.js +84 -0
  16. package/dist/client/components/gallery/hooks/use-gallery-images.js.map +1 -0
  17. package/dist/client/components/gallery/hooks/use-lightbox.js +37 -0
  18. package/dist/client/components/gallery/hooks/use-lightbox.js.map +1 -0
  19. package/dist/client/components/gallery/index.js +96 -0
  20. package/dist/client/components/gallery/index.js.map +1 -0
  21. package/dist/client/components/gallery/lib/render-math-in-text.js +42 -0
  22. package/dist/client/components/gallery/lib/render-math-in-text.js.map +1 -0
  23. package/dist/client/components/header.js +60 -0
  24. package/dist/client/components/header.js.map +1 -0
  25. package/dist/client/components/loading.js +15 -0
  26. package/dist/client/components/loading.js.map +1 -0
  27. package/dist/client/components/mdx-components.js +134 -0
  28. package/dist/client/components/mdx-components.js.map +1 -0
  29. package/dist/client/components/mode-toggle.js +39 -0
  30. package/dist/client/components/mode-toggle.js.map +1 -0
  31. package/dist/client/components/page-error.js +39 -0
  32. package/dist/client/components/page-error.js.map +1 -0
  33. package/dist/client/components/parameter-badge.js +48 -0
  34. package/dist/client/components/parameter-badge.js.map +1 -0
  35. package/dist/client/components/parameter-table.js +301 -0
  36. package/dist/client/components/parameter-table.js.map +1 -0
  37. package/dist/client/components/post-list.js +119 -0
  38. package/dist/client/components/post-list.js.map +1 -0
  39. package/dist/client/components/running-bar.js +15 -0
  40. package/dist/client/components/running-bar.js.map +1 -0
  41. package/dist/client/components/slides-renderer.js +75 -0
  42. package/dist/client/components/slides-renderer.js.map +1 -0
  43. package/dist/client/components/theme-provider.js +9 -0
  44. package/dist/client/components/theme-provider.js.map +1 -0
  45. package/dist/client/components/ui/button.js +49 -0
  46. package/dist/client/components/ui/button.js.map +1 -0
  47. package/dist/client/components/ui/carousel.js +195 -0
  48. package/dist/client/components/ui/carousel.js.map +1 -0
  49. package/dist/client/components/ui/dropdown-menu.js +132 -0
  50. package/dist/client/components/ui/dropdown-menu.js.map +1 -0
  51. package/dist/client/hooks/use-key-bindings.js +40 -0
  52. package/dist/client/hooks/use-key-bindings.js.map +1 -0
  53. package/dist/client/hooks/use-mdx-content.js +78 -0
  54. package/dist/client/hooks/use-mdx-content.js.map +1 -0
  55. package/dist/client/lib/constants.js +5 -0
  56. package/dist/client/lib/constants.js.map +1 -0
  57. package/dist/client/lib/format-date.js +8 -0
  58. package/dist/client/lib/format-date.js.map +1 -0
  59. package/dist/client/lib/parameter-utils.js +110 -0
  60. package/dist/client/lib/parameter-utils.js.map +1 -0
  61. package/dist/client/lib/utils.js +9 -0
  62. package/dist/client/lib/utils.js.map +1 -0
  63. package/dist/client/logo_dark.png +0 -0
  64. package/dist/client/logo_light.png +0 -0
  65. package/dist/client/main.js +9 -0
  66. package/dist/client/main.js.map +1 -0
  67. package/dist/client/pages/home.js +30 -0
  68. package/dist/client/pages/home.js.map +1 -0
  69. package/dist/client/pages/post.js +53 -0
  70. package/dist/client/pages/post.js.map +1 -0
  71. package/dist/client/pages/slides.js +137 -0
  72. package/dist/client/pages/slides.js.map +1 -0
  73. package/dist/client/plugin/src/client.js +185 -0
  74. package/dist/client/plugin/src/client.js.map +1 -0
  75. package/package.json +8 -4
  76. package/src/main.tsx +1 -1
  77. package/vite.config.ts +22 -3
  78. package/vite.lib.config.ts +47 -0
@@ -0,0 +1,49 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Slot } from "@radix-ui/react-slot";
4
+ import { cva } from "class-variance-authority";
5
+ import { cn } from "../../lib/utils.js";
6
+ const buttonVariants = cva(
7
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
8
+ {
9
+ variants: {
10
+ variant: {
11
+ default: "bg-primary text-primary-foreground hover:bg-primary/90",
12
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
13
+ outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
14
+ secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
15
+ ghost: "hover:bg-accent hover:text-accent-foreground",
16
+ link: "text-primary underline-offset-4 hover:underline"
17
+ },
18
+ size: {
19
+ default: "h-10 px-4 py-2",
20
+ sm: "h-9 rounded-md px-3",
21
+ lg: "h-11 rounded-md px-8",
22
+ icon: "h-10 w-10"
23
+ }
24
+ },
25
+ defaultVariants: {
26
+ variant: "default",
27
+ size: "default"
28
+ }
29
+ }
30
+ );
31
+ const Button = React.forwardRef(
32
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
33
+ const Comp = asChild ? Slot : "button";
34
+ return /* @__PURE__ */ jsx(
35
+ Comp,
36
+ {
37
+ className: cn(buttonVariants({ variant, size, className })),
38
+ ref,
39
+ ...props
40
+ }
41
+ );
42
+ }
43
+ );
44
+ Button.displayName = "Button";
45
+ export {
46
+ Button,
47
+ buttonVariants
48
+ };
49
+ //# sourceMappingURL=button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.js","sources":["../../../../src/components/ui/button.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline:\n \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary:\n \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : \"button\"\n return (\n <Comp\n className={cn(buttonVariants({ variant, size, className }))}\n ref={ref}\n {...props}\n />\n )\n }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n"],"names":[],"mappings":";;;;;AAMA,MAAM,iBAAiB;AAAA,EACrB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,SAAS;AAAA,QACT,aACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,OAAO;AAAA,QACP,MAAM;AAAA,MAAA;AAAA,MAER,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MAAA;AAAA,IACR;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,IAAA;AAAA,EACR;AAEJ;AAQA,MAAM,SAAS,MAAM;AAAA,EACnB,CAAC,EAAE,WAAW,SAAS,MAAM,UAAU,OAAO,GAAG,MAAA,GAAS,QAAQ;AAChE,UAAM,OAAO,UAAU,OAAO;AAC9B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,GAAG,eAAe,EAAE,SAAS,MAAM,UAAA,CAAW,CAAC;AAAA,QAC1D;AAAA,QACC,GAAG;AAAA,MAAA;AAAA,IAAA;AAAA,EAGV;AACF;AACA,OAAO,cAAc;"}
@@ -0,0 +1,195 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import useEmblaCarousel from "embla-carousel-react";
4
+ import { ArrowLeft, ArrowRight } from "lucide-react";
5
+ import { cn } from "../../lib/utils.js";
6
+ import { Button } from "./button.js";
7
+ const CarouselContext = React.createContext(null);
8
+ function useCarousel() {
9
+ const context = React.useContext(CarouselContext);
10
+ if (!context) {
11
+ throw new Error("useCarousel must be used within a <Carousel />");
12
+ }
13
+ return context;
14
+ }
15
+ const Carousel = React.forwardRef(
16
+ ({
17
+ orientation = "horizontal",
18
+ opts,
19
+ setApi,
20
+ plugins,
21
+ className,
22
+ children,
23
+ ...props
24
+ }, ref) => {
25
+ const [carouselRef, api] = useEmblaCarousel(
26
+ {
27
+ ...opts,
28
+ axis: orientation === "horizontal" ? "x" : "y"
29
+ },
30
+ plugins
31
+ );
32
+ const [canScrollPrev, setCanScrollPrev] = React.useState(false);
33
+ const [canScrollNext, setCanScrollNext] = React.useState(false);
34
+ const onSelect = React.useCallback((api2) => {
35
+ if (!api2) {
36
+ return;
37
+ }
38
+ setCanScrollPrev(api2.canScrollPrev());
39
+ setCanScrollNext(api2.canScrollNext());
40
+ }, []);
41
+ const scrollPrev = React.useCallback(() => {
42
+ api == null ? void 0 : api.scrollPrev();
43
+ }, [api]);
44
+ const scrollNext = React.useCallback(() => {
45
+ api == null ? void 0 : api.scrollNext();
46
+ }, [api]);
47
+ const handleKeyDown = React.useCallback(
48
+ (event) => {
49
+ if (event.key === "ArrowLeft") {
50
+ event.preventDefault();
51
+ scrollPrev();
52
+ } else if (event.key === "ArrowRight") {
53
+ event.preventDefault();
54
+ scrollNext();
55
+ }
56
+ },
57
+ [scrollPrev, scrollNext]
58
+ );
59
+ React.useEffect(() => {
60
+ if (!api || !setApi) {
61
+ return;
62
+ }
63
+ setApi(api);
64
+ }, [api, setApi]);
65
+ React.useEffect(() => {
66
+ if (!api) {
67
+ return;
68
+ }
69
+ onSelect(api);
70
+ api.on("reInit", onSelect);
71
+ api.on("select", onSelect);
72
+ return () => {
73
+ api == null ? void 0 : api.off("select", onSelect);
74
+ };
75
+ }, [api, onSelect]);
76
+ return /* @__PURE__ */ jsx(
77
+ CarouselContext.Provider,
78
+ {
79
+ value: {
80
+ carouselRef,
81
+ api,
82
+ opts,
83
+ orientation: orientation || ((opts == null ? void 0 : opts.axis) === "y" ? "vertical" : "horizontal"),
84
+ scrollPrev,
85
+ scrollNext,
86
+ canScrollPrev,
87
+ canScrollNext
88
+ },
89
+ children: /* @__PURE__ */ jsx(
90
+ "div",
91
+ {
92
+ ref,
93
+ onKeyDownCapture: handleKeyDown,
94
+ className: cn("relative", className),
95
+ role: "region",
96
+ "aria-roledescription": "carousel",
97
+ ...props,
98
+ children
99
+ }
100
+ )
101
+ }
102
+ );
103
+ }
104
+ );
105
+ Carousel.displayName = "Carousel";
106
+ const CarouselContent = React.forwardRef(({ className, ...props }, ref) => {
107
+ const { carouselRef, orientation } = useCarousel();
108
+ return /* @__PURE__ */ jsx("div", { ref: carouselRef, className: "overflow-hidden", children: /* @__PURE__ */ jsx(
109
+ "div",
110
+ {
111
+ ref,
112
+ className: cn(
113
+ "flex",
114
+ orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
115
+ className
116
+ ),
117
+ ...props
118
+ }
119
+ ) });
120
+ });
121
+ CarouselContent.displayName = "CarouselContent";
122
+ const CarouselItem = React.forwardRef(({ className, ...props }, ref) => {
123
+ const { orientation } = useCarousel();
124
+ return /* @__PURE__ */ jsx(
125
+ "div",
126
+ {
127
+ ref,
128
+ role: "group",
129
+ "aria-roledescription": "slide",
130
+ className: cn(
131
+ "min-w-0 shrink-0 grow-0 basis-full",
132
+ orientation === "horizontal" ? "pl-4" : "pt-4",
133
+ className
134
+ ),
135
+ ...props
136
+ }
137
+ );
138
+ });
139
+ CarouselItem.displayName = "CarouselItem";
140
+ const CarouselPrevious = React.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
141
+ const { orientation, scrollPrev, canScrollPrev } = useCarousel();
142
+ return /* @__PURE__ */ jsxs(
143
+ Button,
144
+ {
145
+ ref,
146
+ variant,
147
+ size,
148
+ className: cn(
149
+ "absolute h-8 w-8 rounded-full",
150
+ orientation === "horizontal" ? "-left-12 top-1/2 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
151
+ className
152
+ ),
153
+ disabled: !canScrollPrev,
154
+ onClick: scrollPrev,
155
+ ...props,
156
+ children: [
157
+ /* @__PURE__ */ jsx(ArrowLeft, { className: "h-4 w-4" }),
158
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Previous slide" })
159
+ ]
160
+ }
161
+ );
162
+ });
163
+ CarouselPrevious.displayName = "CarouselPrevious";
164
+ const CarouselNext = React.forwardRef(({ className, variant = "outline", size = "icon", ...props }, ref) => {
165
+ const { orientation, scrollNext, canScrollNext } = useCarousel();
166
+ return /* @__PURE__ */ jsxs(
167
+ Button,
168
+ {
169
+ ref,
170
+ variant,
171
+ size,
172
+ className: cn(
173
+ "absolute h-8 w-8 rounded-full",
174
+ orientation === "horizontal" ? "-right-12 top-1/2 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
175
+ className
176
+ ),
177
+ disabled: !canScrollNext,
178
+ onClick: scrollNext,
179
+ ...props,
180
+ children: [
181
+ /* @__PURE__ */ jsx(ArrowRight, { className: "h-4 w-4" }),
182
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Next slide" })
183
+ ]
184
+ }
185
+ );
186
+ });
187
+ CarouselNext.displayName = "CarouselNext";
188
+ export {
189
+ Carousel,
190
+ CarouselContent,
191
+ CarouselItem,
192
+ CarouselNext,
193
+ CarouselPrevious
194
+ };
195
+ //# sourceMappingURL=carousel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel.js","sources":["../../../../src/components/ui/carousel.tsx"],"sourcesContent":["import * as React from \"react\"\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\"\nimport { ArrowLeft, ArrowRight } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/button\"\n\ntype CarouselApi = UseEmblaCarouselType[1]\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>\ntype CarouselOptions = UseCarouselParameters[0]\ntype CarouselPlugin = UseCarouselParameters[1]\n\ntype CarouselProps = {\n opts?: CarouselOptions\n plugins?: CarouselPlugin\n orientation?: \"horizontal\" | \"vertical\"\n setApi?: (api: CarouselApi) => void\n}\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0]\n api: ReturnType<typeof useEmblaCarousel>[1]\n scrollPrev: () => void\n scrollNext: () => void\n canScrollPrev: boolean\n canScrollNext: boolean\n} & CarouselProps\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null)\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext)\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\")\n }\n\n return context\n}\n\nconst Carousel = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement> & CarouselProps\n>(\n (\n {\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n )\n const [canScrollPrev, setCanScrollPrev] = React.useState(false)\n const [canScrollNext, setCanScrollNext] = React.useState(false)\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) {\n return\n }\n\n setCanScrollPrev(api.canScrollPrev())\n setCanScrollNext(api.canScrollNext())\n }, [])\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev()\n }, [api])\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext()\n }, [api])\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault()\n scrollPrev()\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault()\n scrollNext()\n }\n },\n [scrollPrev, scrollNext]\n )\n\n React.useEffect(() => {\n if (!api || !setApi) {\n return\n }\n\n setApi(api)\n }, [api, setApi])\n\n React.useEffect(() => {\n if (!api) {\n return\n }\n\n onSelect(api)\n api.on(\"reInit\", onSelect)\n api.on(\"select\", onSelect)\n\n return () => {\n api?.off(\"select\", onSelect)\n }\n }, [api, onSelect])\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n ref={ref}\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n )\n }\n)\nCarousel.displayName = \"Carousel\"\n\nconst CarouselContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { carouselRef, orientation } = useCarousel()\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\">\n <div\n ref={ref}\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n )\n})\nCarouselContent.displayName = \"CarouselContent\"\n\nconst CarouselItem = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n const { orientation } = useCarousel()\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-roledescription=\"slide\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n )\n})\nCarouselItem.displayName = \"CarouselItem\"\n\nconst CarouselPrevious = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-left-12 top-1/2 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n )\n})\nCarouselPrevious.displayName = \"CarouselPrevious\"\n\nconst CarouselNext = React.forwardRef<\n HTMLButtonElement,\n React.ComponentProps<typeof Button>\n>(({ className, variant = \"outline\", size = \"icon\", ...props }, ref) => {\n const { orientation, scrollNext, canScrollNext } = useCarousel()\n\n return (\n <Button\n ref={ref}\n variant={variant}\n size={size}\n className={cn(\n \"absolute h-8 w-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"-right-12 top-1/2 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight className=\"h-4 w-4\" />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n )\n})\nCarouselNext.displayName = \"CarouselNext\"\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n}\n"],"names":["api"],"mappings":"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"}
@@ -0,0 +1,132 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
4
+ import { ChevronRight, Check, Circle } from "lucide-react";
5
+ import { cn } from "../../lib/utils.js";
6
+ const DropdownMenu = DropdownMenuPrimitive.Root;
7
+ const DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
8
+ const DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup;
9
+ const DropdownMenuSubTrigger = React.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs(
10
+ DropdownMenuPrimitive.SubTrigger,
11
+ {
12
+ ref,
13
+ className: cn(
14
+ "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
15
+ inset && "pl-8",
16
+ className
17
+ ),
18
+ ...props,
19
+ children: [
20
+ children,
21
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto" })
22
+ ]
23
+ }
24
+ ));
25
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName;
26
+ const DropdownMenuSubContent = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
27
+ DropdownMenuPrimitive.SubContent,
28
+ {
29
+ ref,
30
+ className: cn(
31
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
32
+ className
33
+ ),
34
+ ...props
35
+ }
36
+ ));
37
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName;
38
+ const DropdownMenuContent = React.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ jsx(
39
+ DropdownMenuPrimitive.Content,
40
+ {
41
+ ref,
42
+ sideOffset,
43
+ className: cn(
44
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
45
+ className
46
+ ),
47
+ ...props
48
+ }
49
+ ) }));
50
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
51
+ const DropdownMenuItem = React.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
52
+ DropdownMenuPrimitive.Item,
53
+ {
54
+ ref,
55
+ className: cn(
56
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
57
+ inset && "pl-8",
58
+ className
59
+ ),
60
+ ...props
61
+ }
62
+ ));
63
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
64
+ const DropdownMenuCheckboxItem = React.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs(
65
+ DropdownMenuPrimitive.CheckboxItem,
66
+ {
67
+ ref,
68
+ className: cn(
69
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
70
+ className
71
+ ),
72
+ checked,
73
+ ...props,
74
+ children: [
75
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }) }),
76
+ children
77
+ ]
78
+ }
79
+ ));
80
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName;
81
+ const DropdownMenuRadioItem = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
82
+ DropdownMenuPrimitive.RadioItem,
83
+ {
84
+ ref,
85
+ className: cn(
86
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
87
+ className
88
+ ),
89
+ ...props,
90
+ children: [
91
+ /* @__PURE__ */ jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx(DropdownMenuPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx(Circle, { className: "h-2 w-2 fill-current" }) }) }),
92
+ children
93
+ ]
94
+ }
95
+ ));
96
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName;
97
+ const DropdownMenuLabel = React.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx(
98
+ DropdownMenuPrimitive.Label,
99
+ {
100
+ ref,
101
+ className: cn(
102
+ "px-2 py-1.5 text-sm font-semibold",
103
+ inset && "pl-8",
104
+ className
105
+ ),
106
+ ...props
107
+ }
108
+ ));
109
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
110
+ const DropdownMenuSeparator = React.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
111
+ DropdownMenuPrimitive.Separator,
112
+ {
113
+ ref,
114
+ className: cn("-mx-1 my-1 h-px bg-muted", className),
115
+ ...props
116
+ }
117
+ ));
118
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
119
+ export {
120
+ DropdownMenu,
121
+ DropdownMenuCheckboxItem,
122
+ DropdownMenuContent,
123
+ DropdownMenuItem,
124
+ DropdownMenuLabel,
125
+ DropdownMenuRadioGroup,
126
+ DropdownMenuRadioItem,
127
+ DropdownMenuSeparator,
128
+ DropdownMenuSubContent,
129
+ DropdownMenuSubTrigger,
130
+ DropdownMenuTrigger
131
+ };
132
+ //# sourceMappingURL=dropdown-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dropdown-menu.js","sources":["../../../../src/components/ui/dropdown-menu.tsx"],"sourcesContent":["import * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimport { Check, ChevronRight, Circle } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n \"flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName =\n DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n \"z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName =\n DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n \"z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]\",\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName =\n DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n \"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn(\n \"px-2 py-1.5 text-sm font-semibold\",\n inset && \"pl-8\",\n className\n )}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn(\"-mx-1 my-1 h-px bg-muted\", className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({\n className,\n ...props\n}: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn(\"ml-auto text-xs tracking-widest opacity-60\", className)}\n {...props}\n />\n )\n}\nDropdownMenuShortcut.displayName = \"DropdownMenuShortcut\"\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { useEffect } from "react";
2
+ function useKeyBindings(bindings, options = {}) {
3
+ const { enabled = true, ignoreModifiers = true } = options;
4
+ useEffect(() => {
5
+ const handleKeyDown = (e) => {
6
+ const isEnabled = typeof enabled === "function" ? enabled() : enabled;
7
+ if (!isEnabled) return;
8
+ if (ignoreModifiers && (e.metaKey || e.ctrlKey || e.altKey)) {
9
+ const hasModifierBinding = bindings.some((b) => {
10
+ const mods = b.modifiers || {};
11
+ return mods.meta || mods.ctrl || mods.alt;
12
+ });
13
+ if (!hasModifierBinding) return;
14
+ }
15
+ for (const binding of bindings) {
16
+ const keys = Array.isArray(binding.key) ? binding.key : [binding.key];
17
+ const mods = binding.modifiers || {};
18
+ if (!keys.includes(e.key)) continue;
19
+ if (mods.meta !== void 0 && mods.meta !== e.metaKey) continue;
20
+ if (mods.ctrl !== void 0 && mods.ctrl !== e.ctrlKey) continue;
21
+ if (mods.alt !== void 0 && mods.alt !== e.altKey) continue;
22
+ if (mods.shift !== void 0 && mods.shift !== e.shiftKey) continue;
23
+ if (ignoreModifiers && !binding.modifiers && (e.metaKey || e.ctrlKey || e.altKey)) {
24
+ continue;
25
+ }
26
+ if (binding.preventDefault !== false) {
27
+ e.preventDefault();
28
+ }
29
+ binding.action();
30
+ return;
31
+ }
32
+ };
33
+ window.addEventListener("keydown", handleKeyDown);
34
+ return () => window.removeEventListener("keydown", handleKeyDown);
35
+ }, [bindings, enabled, ignoreModifiers]);
36
+ }
37
+ export {
38
+ useKeyBindings
39
+ };
40
+ //# sourceMappingURL=use-key-bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-key-bindings.js","sources":["../../../src/hooks/use-key-bindings.ts"],"sourcesContent":["import { useEffect } from \"react\";\n\ntype KeyModifiers = {\n meta?: boolean;\n ctrl?: boolean;\n alt?: boolean;\n shift?: boolean;\n};\n\ntype KeyBinding = {\n key: string | string[];\n action: () => void;\n modifiers?: KeyModifiers;\n preventDefault?: boolean;\n};\n\ntype UseKeyBindingsOptions = {\n enabled?: boolean | (() => boolean);\n ignoreModifiers?: boolean;\n};\n\nexport function useKeyBindings(\n bindings: KeyBinding[],\n options: UseKeyBindingsOptions = {}\n) {\n const { enabled = true, ignoreModifiers = true } = options;\n\n useEffect(() => {\n const handleKeyDown = (e: KeyboardEvent) => {\n const isEnabled = typeof enabled === \"function\" ? enabled() : enabled;\n if (!isEnabled) return;\n\n // By default, ignore events with modifier keys unless explicitly specified\n if (ignoreModifiers && (e.metaKey || e.ctrlKey || e.altKey)) {\n // Check if any binding explicitly wants this modifier combination\n const hasModifierBinding = bindings.some((b) => {\n const mods = b.modifiers || {};\n return mods.meta || mods.ctrl || mods.alt;\n });\n if (!hasModifierBinding) return;\n }\n\n for (const binding of bindings) {\n const keys = Array.isArray(binding.key) ? binding.key : [binding.key];\n const mods = binding.modifiers || {};\n\n // Check if key matches\n if (!keys.includes(e.key)) continue;\n\n // Check modifiers if specified\n if (mods.meta !== undefined && mods.meta !== e.metaKey) continue;\n if (mods.ctrl !== undefined && mods.ctrl !== e.ctrlKey) continue;\n if (mods.alt !== undefined && mods.alt !== e.altKey) continue;\n if (mods.shift !== undefined && mods.shift !== e.shiftKey) continue;\n\n // If ignoreModifiers is true and no modifiers specified, skip if any modifier is pressed\n if (ignoreModifiers && !binding.modifiers && (e.metaKey || e.ctrlKey || e.altKey)) {\n continue;\n }\n\n if (binding.preventDefault !== false) {\n e.preventDefault();\n }\n binding.action();\n return;\n }\n };\n\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [bindings, enabled, ignoreModifiers]);\n}\n"],"names":[],"mappings":";AAqBO,SAAS,eACd,UACA,UAAiC,IACjC;AACA,QAAM,EAAE,UAAU,MAAM,kBAAkB,SAAS;AAEnD,YAAU,MAAM;AACd,UAAM,gBAAgB,CAAC,MAAqB;AAC1C,YAAM,YAAY,OAAO,YAAY,aAAa,YAAY;AAC9D,UAAI,CAAC,UAAW;AAGhB,UAAI,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS;AAE3D,cAAM,qBAAqB,SAAS,KAAK,CAAC,MAAM;AAC9C,gBAAM,OAAO,EAAE,aAAa,CAAA;AAC5B,iBAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;AAAA,QACxC,CAAC;AACD,YAAI,CAAC,mBAAoB;AAAA,MAC3B;AAEA,iBAAW,WAAW,UAAU;AAC9B,cAAM,OAAO,MAAM,QAAQ,QAAQ,GAAG,IAAI,QAAQ,MAAM,CAAC,QAAQ,GAAG;AACpE,cAAM,OAAO,QAAQ,aAAa,CAAA;AAGlC,YAAI,CAAC,KAAK,SAAS,EAAE,GAAG,EAAG;AAG3B,YAAI,KAAK,SAAS,UAAa,KAAK,SAAS,EAAE,QAAS;AACxD,YAAI,KAAK,SAAS,UAAa,KAAK,SAAS,EAAE,QAAS;AACxD,YAAI,KAAK,QAAQ,UAAa,KAAK,QAAQ,EAAE,OAAQ;AACrD,YAAI,KAAK,UAAU,UAAa,KAAK,UAAU,EAAE,SAAU;AAG3D,YAAI,mBAAmB,CAAC,QAAQ,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS;AACjF;AAAA,QACF;AAEA,YAAI,QAAQ,mBAAmB,OAAO;AACpC,YAAE,eAAA;AAAA,QACJ;AACA,gBAAQ,OAAA;AACR;AAAA,MACF;AAAA,IACF;AAEA,WAAO,iBAAiB,WAAW,aAAa;AAChD,WAAO,MAAM,OAAO,oBAAoB,WAAW,aAAa;AAAA,EAClE,GAAG,CAAC,UAAU,SAAS,eAAe,CAAC;AACzC;"}
@@ -0,0 +1,78 @@
1
+ import { useState, useEffect } from "react";
2
+ function useMDXContent(path) {
3
+ const [Content, setContent] = useState(null);
4
+ const [frontmatter, setFrontmatter] = useState(void 0);
5
+ const [loading, setLoading] = useState(true);
6
+ const [error, setError] = useState(null);
7
+ useEffect(() => {
8
+ let cancelled = false;
9
+ setLoading(true);
10
+ setError(null);
11
+ import("virtual:content-modules").then(({ modules }) => {
12
+ const matchingKey = Object.keys(modules).find(
13
+ (key) => key.endsWith(`/${path}/README.mdx`)
14
+ );
15
+ const loader = matchingKey ? modules[matchingKey] : null;
16
+ if (!loader) {
17
+ throw new Error(`MDX module not found for path: ${path}`);
18
+ }
19
+ return loader();
20
+ }).then((mod) => {
21
+ if (!cancelled) {
22
+ setContent(() => mod.default);
23
+ setFrontmatter(mod.frontmatter);
24
+ setLoading(false);
25
+ }
26
+ }).catch((err) => {
27
+ if (!cancelled) {
28
+ setError(err);
29
+ setLoading(false);
30
+ }
31
+ });
32
+ return () => {
33
+ cancelled = true;
34
+ };
35
+ }, [path]);
36
+ return { Content, frontmatter, loading, error };
37
+ }
38
+ function useMDXSlides(path) {
39
+ const [Content, setContent] = useState(null);
40
+ const [frontmatter, setFrontmatter] = useState(void 0);
41
+ const [loading, setLoading] = useState(true);
42
+ const [error, setError] = useState(null);
43
+ useEffect(() => {
44
+ let cancelled = false;
45
+ setLoading(true);
46
+ setError(null);
47
+ import("virtual:content-modules").then(({ slides }) => {
48
+ const matchingKey = Object.keys(slides).find(
49
+ (key) => key.endsWith(`/${path}/SLIDES.mdx`)
50
+ );
51
+ const loader = matchingKey ? slides[matchingKey] : null;
52
+ if (!loader) {
53
+ throw new Error(`Slides module not found for path: ${path}`);
54
+ }
55
+ return loader();
56
+ }).then((mod) => {
57
+ if (!cancelled) {
58
+ setContent(() => mod.default);
59
+ setFrontmatter(mod.frontmatter);
60
+ setLoading(false);
61
+ }
62
+ }).catch((err) => {
63
+ if (!cancelled) {
64
+ setError(err);
65
+ setLoading(false);
66
+ }
67
+ });
68
+ return () => {
69
+ cancelled = true;
70
+ };
71
+ }, [path]);
72
+ return { Content, frontmatter, loading, error };
73
+ }
74
+ export {
75
+ useMDXContent,
76
+ useMDXSlides
77
+ };
78
+ //# sourceMappingURL=use-mdx-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-mdx-content.js","sources":["../../../src/hooks/use-mdx-content.ts"],"sourcesContent":["import { useState, useEffect } from 'react'\nimport type { ComponentType } from 'react'\n\ninterface MDXModule {\n default: ComponentType<{ components?: Record<string, ComponentType> }>\n frontmatter?: {\n title?: string\n description?: string\n date?: string\n visibility?: string\n }\n}\n\ntype ModuleLoader = () => Promise<MDXModule>\ntype ModuleMap = Record<string, ModuleLoader>\n\nexport function useMDXContent(path: string) {\n const [Content, setContent] = useState<MDXModule['default'] | null>(null)\n const [frontmatter, setFrontmatter] = useState<MDXModule['frontmatter']>(undefined)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n let cancelled = false\n setLoading(true)\n setError(null)\n\n // Dynamic import to avoid pre-bundling issues\n import('virtual:content-modules')\n .then(({ modules }) => {\n const matchingKey = Object.keys(modules).find(key =>\n key.endsWith(`/${path}/README.mdx`)\n )\n const loader = matchingKey ? (modules as ModuleMap)[matchingKey] : null\n\n if (!loader) {\n throw new Error(`MDX module not found for path: ${path}`)\n }\n\n return loader()\n })\n .then((mod) => {\n if (!cancelled) {\n setContent(() => mod.default)\n setFrontmatter(mod.frontmatter)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err)\n setLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [path])\n\n return { Content, frontmatter, loading, error }\n}\n\nexport function useMDXSlides(path: string) {\n const [Content, setContent] = useState<MDXModule['default'] | null>(null)\n const [frontmatter, setFrontmatter] = useState<MDXModule['frontmatter']>(undefined)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<Error | null>(null)\n\n useEffect(() => {\n let cancelled = false\n setLoading(true)\n setError(null)\n\n // Dynamic import to avoid pre-bundling issues\n import('virtual:content-modules')\n .then(({ slides }) => {\n const matchingKey = Object.keys(slides).find(key =>\n key.endsWith(`/${path}/SLIDES.mdx`)\n )\n const loader = matchingKey ? (slides as ModuleMap)[matchingKey] : null\n\n if (!loader) {\n throw new Error(`Slides module not found for path: ${path}`)\n }\n\n return loader()\n })\n .then((mod) => {\n if (!cancelled) {\n setContent(() => mod.default)\n setFrontmatter(mod.frontmatter)\n setLoading(false)\n }\n })\n .catch((err) => {\n if (!cancelled) {\n setError(err)\n setLoading(false)\n }\n })\n\n return () => {\n cancelled = true\n }\n }, [path])\n\n return { Content, frontmatter, loading, error }\n}\n"],"names":[],"mappings":";AAgBO,SAAS,cAAc,MAAc;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsC,IAAI;AACxE,QAAM,CAAC,aAAa,cAAc,IAAI,SAAmC,MAAS;AAClF,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AAErD,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,eAAW,IAAI;AACf,aAAS,IAAI;AAGb,WAAO,yBAAyB,EAC7B,KAAK,CAAC,EAAE,cAAc;AACrB,YAAM,cAAc,OAAO,KAAK,OAAO,EAAE;AAAA,QAAK,CAAA,QAC5C,IAAI,SAAS,IAAI,IAAI,aAAa;AAAA,MAAA;AAEpC,YAAM,SAAS,cAAe,QAAsB,WAAW,IAAI;AAEnE,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,kCAAkC,IAAI,EAAE;AAAA,MAC1D;AAEA,aAAO,OAAA;AAAA,IACT,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,WAAW;AACd,mBAAW,MAAM,IAAI,OAAO;AAC5B,uBAAe,IAAI,WAAW;AAC9B,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,UAAI,CAAC,WAAW;AACd,iBAAS,GAAG;AACZ,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAEH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,EAAE,SAAS,aAAa,SAAS,MAAA;AAC1C;AAEO,SAAS,aAAa,MAAc;AACzC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAsC,IAAI;AACxE,QAAM,CAAC,aAAa,cAAc,IAAI,SAAmC,MAAS;AAClF,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB,IAAI;AAErD,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,eAAW,IAAI;AACf,aAAS,IAAI;AAGb,WAAO,yBAAyB,EAC7B,KAAK,CAAC,EAAE,aAAa;AACpB,YAAM,cAAc,OAAO,KAAK,MAAM,EAAE;AAAA,QAAK,CAAA,QAC3C,IAAI,SAAS,IAAI,IAAI,aAAa;AAAA,MAAA;AAEpC,YAAM,SAAS,cAAe,OAAqB,WAAW,IAAI;AAElE,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,qCAAqC,IAAI,EAAE;AAAA,MAC7D;AAEA,aAAO,OAAA;AAAA,IACT,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,WAAW;AACd,mBAAW,MAAM,IAAI,OAAO;AAC5B,uBAAe,IAAI,WAAW;AAC9B,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,UAAI,CAAC,WAAW;AACd,iBAAS,GAAG;AACZ,mBAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AAEH,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,IAAI,CAAC;AAET,SAAO,EAAE,SAAS,aAAa,SAAS,MAAA;AAC1C;"}
@@ -0,0 +1,5 @@
1
+ const FULLSCREEN_DATA_ATTR = "data-fullscreen-active";
2
+ export {
3
+ FULLSCREEN_DATA_ATTR
4
+ };
5
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../src/lib/constants.ts"],"sourcesContent":["// Data attributes for fullscreen components\nexport const FULLSCREEN_DATA_ATTR = \"data-fullscreen-active\";\n\n/**\n * Check if any fullscreen component (Gallery or Slides) is currently active.\n * Components using fullscreen should set the data-fullscreen-active attribute.\n */\nexport function isFullscreenActive(): boolean {\n return document.querySelector(`[${FULLSCREEN_DATA_ATTR}=\"true\"]`) !== null;\n}\n"],"names":[],"mappings":"AACO,MAAM,uBAAuB;"}
@@ -0,0 +1,8 @@
1
+ import { format } from "date-fns";
2
+ function formatDate(date) {
3
+ return format(new Date(date), "dd MMM, yy");
4
+ }
5
+ export {
6
+ formatDate
7
+ };
8
+ //# sourceMappingURL=format-date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-date.js","sources":["../../../src/lib/format-date.tsx"],"sourcesContent":["\nimport { format } from 'date-fns'\n\nexport function formatDate(date: string | number | Date): string {\n return format(new Date(date), \"dd MMM, yy\")\n}"],"names":[],"mappings":";AAGO,SAAS,WAAW,MAAsC;AAC/D,SAAO,OAAO,IAAI,KAAK,IAAI,GAAG,YAAY;AAC5C;"}