@prosefly/astro-components 0.1.0

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 (67) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +108 -0
  3. package/dist/astro-shim.d.ts +4 -0
  4. package/dist/client/accordions.d.ts +7 -0
  5. package/dist/client/accordions.d.ts.map +1 -0
  6. package/dist/client/accordions.js +70 -0
  7. package/dist/client/accordions.js.map +1 -0
  8. package/dist/client/image-gallery.d.ts +7 -0
  9. package/dist/client/image-gallery.d.ts.map +1 -0
  10. package/dist/client/image-gallery.js +103 -0
  11. package/dist/client/image-gallery.js.map +1 -0
  12. package/dist/client/tabs.d.ts +7 -0
  13. package/dist/client/tabs.d.ts.map +1 -0
  14. package/dist/client/tabs.js +160 -0
  15. package/dist/client/tabs.js.map +1 -0
  16. package/dist/icon/index.d.ts +8 -0
  17. package/dist/icon/index.d.ts.map +1 -0
  18. package/dist/icon/index.js +131 -0
  19. package/dist/icon/index.js.map +1 -0
  20. package/dist/icon/middleware.d.ts +3 -0
  21. package/dist/icon/middleware.d.ts.map +1 -0
  22. package/dist/icon/middleware.js +28 -0
  23. package/dist/icon/middleware.js.map +1 -0
  24. package/dist/index.d.ts +13 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +12 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/markdown/image-gallery-plugin.d.ts +3 -0
  29. package/dist/markdown/image-gallery-plugin.d.ts.map +1 -0
  30. package/dist/markdown/image-gallery-plugin.js +125 -0
  31. package/dist/markdown/image-gallery-plugin.js.map +1 -0
  32. package/dist/markdown/image-gallery.css +119 -0
  33. package/dist/markdown/image-gallery.js +1 -0
  34. package/dist/markdown/index.d.ts +3 -0
  35. package/dist/markdown/index.d.ts.map +1 -0
  36. package/dist/markdown/index.js +3 -0
  37. package/dist/markdown/index.js.map +1 -0
  38. package/dist/markdown/package-manager-tabs.d.ts +3 -0
  39. package/dist/markdown/package-manager-tabs.d.ts.map +1 -0
  40. package/dist/markdown/package-manager-tabs.js +329 -0
  41. package/dist/markdown/package-manager-tabs.js.map +1 -0
  42. package/dist/mdx/AccordionItem.astro +54 -0
  43. package/dist/mdx/Accordions.astro +126 -0
  44. package/dist/mdx/Badge.astro +140 -0
  45. package/dist/mdx/Callout.astro +124 -0
  46. package/dist/mdx/Card.astro +138 -0
  47. package/dist/mdx/CardGrid.astro +18 -0
  48. package/dist/mdx/FileTree.astro +231 -0
  49. package/dist/mdx/FileTreeItem.astro +97 -0
  50. package/dist/mdx/Icon.astro +132 -0
  51. package/dist/mdx/Steps.astro +88 -0
  52. package/dist/mdx/TabItem.astro +21 -0
  53. package/dist/mdx/Tabs.astro +272 -0
  54. package/dist/mdx/rehype-file-tree.d.ts +14 -0
  55. package/dist/mdx/rehype-file-tree.d.ts.map +1 -0
  56. package/dist/mdx/rehype-file-tree.js +205 -0
  57. package/dist/mdx/rehype-file-tree.js.map +1 -0
  58. package/dist/mdx/rehype-steps.d.ts +4 -0
  59. package/dist/mdx/rehype-steps.d.ts.map +1 -0
  60. package/dist/mdx/rehype-steps.js +74 -0
  61. package/dist/mdx/rehype-steps.js.map +1 -0
  62. package/dist/mdx/rehype-tabs.d.ts +19 -0
  63. package/dist/mdx/rehype-tabs.d.ts.map +1 -0
  64. package/dist/mdx/rehype-tabs.js +127 -0
  65. package/dist/mdx/rehype-tabs.js.map +1 -0
  66. package/dist/virtual.d.ts +8 -0
  67. package/package.json +57 -0
@@ -0,0 +1,131 @@
1
+ import { readdir, readFile } from 'node:fs/promises';
2
+ import { extname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ const virtualIconConfigModuleId = 'virtual:prosefly/astro-components/icon/config';
5
+ const resolvedVirtualIconConfigModuleId = `\0${virtualIconConfigModuleId}`;
6
+ const componentIconNames = [
7
+ 'lucide:badge-alert',
8
+ 'lucide:check',
9
+ 'lucide:chevron-right',
10
+ 'lucide:copy',
11
+ 'lucide:file',
12
+ 'lucide:folder',
13
+ 'lucide:folder-open',
14
+ 'lucide:info',
15
+ 'lucide:lightbulb',
16
+ 'lucide:triangle-alert',
17
+ ];
18
+ function addIconName(iconNames, icon) {
19
+ if (!icon) {
20
+ return;
21
+ }
22
+ iconNames.add(icon);
23
+ }
24
+ async function collectStaticIconNames(root) {
25
+ const sourceRoot = join(fileURLToPath(root), 'src');
26
+ const iconNames = new Set();
27
+ const supportedExtensions = new Set(['.astro', '.md', '.mdx']);
28
+ const iconPatterns = [
29
+ /<Icon\b[^>]*\bname\s*=\s*(?:"([^"]+)"|'([^']+)'|\{\s*["']([^"']+)["']\s*\})/g,
30
+ /<[A-Z][\w.:/-]*\b[^>]*\bicon\s*=\s*(?:"([^"]+)"|'([^']+)'|\{\s*["']([^"']+)["']\s*\})/g,
31
+ ];
32
+ async function scanDirectory(directory) {
33
+ let entries;
34
+ try {
35
+ entries = await readdir(directory, { withFileTypes: true });
36
+ }
37
+ catch {
38
+ return;
39
+ }
40
+ await Promise.all(entries.map(async (entry) => {
41
+ const entryPath = join(directory, entry.name);
42
+ if (entry.isDirectory()) {
43
+ await scanDirectory(entryPath);
44
+ return;
45
+ }
46
+ if (!entry.isFile() || !supportedExtensions.has(extname(entry.name))) {
47
+ return;
48
+ }
49
+ const source = await readFile(entryPath, 'utf8');
50
+ for (const iconPattern of iconPatterns) {
51
+ for (const match of source.matchAll(iconPattern)) {
52
+ addIconName(iconNames, match[1] ?? match[2] ?? match[3]);
53
+ }
54
+ }
55
+ }));
56
+ }
57
+ await scanDirectory(sourceRoot);
58
+ return iconNames;
59
+ }
60
+ function groupIconNames(iconNames) {
61
+ const grouped = new Map();
62
+ for (const name of iconNames) {
63
+ const separatorIndex = name.indexOf(':');
64
+ if (separatorIndex <= 0 || separatorIndex === name.length - 1) {
65
+ continue;
66
+ }
67
+ const prefix = name.slice(0, separatorIndex);
68
+ const icon = name.slice(separatorIndex + 1);
69
+ const icons = grouped.get(prefix) ?? new Set();
70
+ icons.add(icon);
71
+ grouped.set(prefix, icons);
72
+ }
73
+ return Object.fromEntries([...grouped.entries()]
74
+ .sort(([left], [right]) => left.localeCompare(right))
75
+ .map(([prefix, icons]) => [prefix, [...icons].sort()]));
76
+ }
77
+ function iconConfigPlugin(config) {
78
+ return {
79
+ name: '@prosefly/astro-components/icon/config',
80
+ resolveId(id) {
81
+ if (id === virtualIconConfigModuleId) {
82
+ return resolvedVirtualIconConfigModuleId;
83
+ }
84
+ },
85
+ load(id) {
86
+ if (id === resolvedVirtualIconConfigModuleId) {
87
+ return `export default ${JSON.stringify(config)};`;
88
+ }
89
+ },
90
+ };
91
+ }
92
+ export default function icon(options = {}) {
93
+ return {
94
+ name: '@prosefly/astro-components/icon',
95
+ hooks: {
96
+ 'astro:config:setup': async ({ addMiddleware, config, updateConfig }) => {
97
+ const iconNames = new Set();
98
+ for (const icon of componentIconNames) {
99
+ addIconName(iconNames, icon);
100
+ }
101
+ for (const icon of options.preload ?? []) {
102
+ addIconName(iconNames, icon);
103
+ }
104
+ if (options.scan !== false) {
105
+ for (const icon of await collectStaticIconNames(config.root)) {
106
+ addIconName(iconNames, icon);
107
+ }
108
+ }
109
+ const iconsByPrefix = groupIconNames(iconNames);
110
+ if (Object.keys(iconsByPrefix).length === 0) {
111
+ return;
112
+ }
113
+ updateConfig({
114
+ vite: {
115
+ plugins: [
116
+ iconConfigPlugin({
117
+ apiBase: (options.apiBase ?? 'https://api.iconify.design').replace(/\/$/, ''),
118
+ iconsByPrefix,
119
+ }),
120
+ ],
121
+ },
122
+ });
123
+ addMiddleware({
124
+ order: 'pre',
125
+ entrypoint: new URL('./middleware.js', import.meta.url),
126
+ });
127
+ },
128
+ },
129
+ };
130
+ }
131
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icon/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from 'astro';
2
+ export declare const onRequest: MiddlewareHandler;
3
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/icon/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AA+B/C,eAAO,MAAM,SAAS,EAAE,iBAavB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import iconConfig from 'virtual:prosefly/astro-components/icon/config';
2
+ let collectionsPromise;
3
+ async function loadIconCollections() {
4
+ const entries = Object.entries(iconConfig.iconsByPrefix).filter(([, icons]) => icons.length > 0);
5
+ if (entries.length === 0) {
6
+ return {};
7
+ }
8
+ const collections = await Promise.all(entries.map(async ([prefix, icons]) => {
9
+ const iconQuery = icons.map((icon) => encodeURIComponent(icon)).join(',');
10
+ const response = await fetch(`${iconConfig.apiBase}/${encodeURIComponent(prefix)}.json?icons=${iconQuery}`);
11
+ if (!response.ok) {
12
+ throw new Error(`Failed to preload Iconify data for "${prefix}" from ${iconConfig.apiBase}.`);
13
+ }
14
+ return [prefix, await response.json()];
15
+ }));
16
+ return Object.fromEntries(collections);
17
+ }
18
+ export const onRequest = async (context, next) => {
19
+ collectionsPromise ??= loadIconCollections();
20
+ const collections = await collectionsPromise;
21
+ const locals = context.locals;
22
+ locals.proseflyIconCollections = {
23
+ ...(locals.proseflyIconCollections ?? {}),
24
+ ...collections,
25
+ };
26
+ return next();
27
+ };
28
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/icon/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,+CAA+C,CAAC;AAGvE,IAAI,kBAAgE,CAAC;AAErE,KAAK,UAAU,mBAAmB;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEjG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE;QACpC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,UAAU,CAAC,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,eAAe,SAAS,EAAE,CAC9E,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,uCAAuC,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,CAC7E,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAsB,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAClE,kBAAkB,KAAK,mBAAmB,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,kBAAkB,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAEtB,CAAC;IAEF,MAAM,CAAC,uBAAuB,GAAG;QAC/B,GAAG,CAAC,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC;QACzC,GAAG,WAAW;KACf,CAAC;IAEF,OAAO,IAAI,EAAE,CAAC;AAChB,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /// <reference path="./astro-shim.d.ts" />
2
+ export { default as AccordionItem } from './mdx/AccordionItem.astro';
3
+ export { default as Accordions } from './mdx/Accordions.astro';
4
+ export { default as Badge } from './mdx/Badge.astro';
5
+ export { default as Callout } from './mdx/Callout.astro';
6
+ export { default as Card } from './mdx/Card.astro';
7
+ export { default as CardGrid } from './mdx/CardGrid.astro';
8
+ export { default as FileTree } from './mdx/FileTree.astro';
9
+ export { default as Icon } from './mdx/Icon.astro';
10
+ export { default as Steps } from './mdx/Steps.astro';
11
+ export { default as TabItem } from './mdx/TabItem.astro';
12
+ export { default as Tabs } from './mdx/Tabs.astro';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ export { default as AccordionItem } from './mdx/AccordionItem.astro';
2
+ export { default as Accordions } from './mdx/Accordions.astro';
3
+ export { default as Badge } from './mdx/Badge.astro';
4
+ export { default as Callout } from './mdx/Callout.astro';
5
+ export { default as Card } from './mdx/Card.astro';
6
+ export { default as CardGrid } from './mdx/CardGrid.astro';
7
+ export { default as FileTree } from './mdx/FileTree.astro';
8
+ export { default as Icon } from './mdx/Icon.astro';
9
+ export { default as Steps } from './mdx/Steps.astro';
10
+ export { default as TabItem } from './mdx/TabItem.astro';
11
+ export { default as Tabs } from './mdx/Tabs.astro';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RehypePlugin } from '@astrojs/markdown-remark';
2
+ export declare const rehypeImageGallery: RehypePlugin;
3
+ //# sourceMappingURL=image-gallery-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-gallery-plugin.d.ts","sourceRoot":"","sources":["../../src/markdown/image-gallery-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAkB7D,eAAO,MAAM,kBAAkB,EAAE,YAIhC,CAAC"}
@@ -0,0 +1,125 @@
1
+ export const rehypeImageGallery = () => {
2
+ return (tree) => {
3
+ visitChildren(tree);
4
+ };
5
+ };
6
+ function visitChildren(node) {
7
+ if (!node.children) {
8
+ return;
9
+ }
10
+ node.children = node.children.map((child) => {
11
+ if (isParagraphElement(child)) {
12
+ const images = getOnlyImageChildren(child);
13
+ if (images) {
14
+ return createImageGallery(images);
15
+ }
16
+ }
17
+ visitChildren(child);
18
+ return child;
19
+ });
20
+ }
21
+ function isParagraphElement(node) {
22
+ return node.type === 'element' && node.tagName === 'p' && Array.isArray(node.children);
23
+ }
24
+ function isImageElement(node) {
25
+ return node.type === 'element' && node.tagName === 'img';
26
+ }
27
+ function isWhitespaceText(node) {
28
+ return node.type === 'text' && typeof node.value === 'string' && node.value.trim() === '';
29
+ }
30
+ function getOnlyImageChildren(paragraph) {
31
+ const content = paragraph.children.filter((child) => !isWhitespaceText(child));
32
+ if (content.length === 0 || !content.every(isImageElement)) {
33
+ return undefined;
34
+ }
35
+ return content;
36
+ }
37
+ function createImageGallery(images) {
38
+ const imageCount = images.length;
39
+ if (imageCount === 1) {
40
+ return {
41
+ type: 'element',
42
+ tagName: 'figure',
43
+ properties: {
44
+ className: ['pl-image-gallery'],
45
+ dataImageCount: String(imageCount),
46
+ },
47
+ children: images,
48
+ };
49
+ }
50
+ return {
51
+ type: 'element',
52
+ tagName: 'figure',
53
+ properties: {
54
+ className: ['pl-image-gallery'],
55
+ dataImageCount: String(imageCount),
56
+ dataPlImageGallery: '',
57
+ },
58
+ children: [
59
+ createGalleryButton('previous'),
60
+ {
61
+ type: 'element',
62
+ tagName: 'div',
63
+ properties: {
64
+ className: ['pl-image-gallery__track'],
65
+ dataPlImageGalleryTrack: '',
66
+ },
67
+ children: images.map(createGalleryItem),
68
+ },
69
+ createGalleryButton('next'),
70
+ ],
71
+ };
72
+ }
73
+ function createGalleryItem(image) {
74
+ return {
75
+ type: 'element',
76
+ tagName: 'span',
77
+ properties: {
78
+ className: ['pl-image-gallery__item'],
79
+ },
80
+ children: [image],
81
+ };
82
+ }
83
+ function createGalleryButton(direction) {
84
+ return {
85
+ type: 'element',
86
+ tagName: 'button',
87
+ properties: {
88
+ ariaLabel: direction === 'previous' ? 'Previous image' : 'Next image',
89
+ className: ['pl-image-gallery__button'],
90
+ dataPlImageGalleryButton: direction,
91
+ type: 'button',
92
+ },
93
+ children: [createChevronIcon(direction)],
94
+ };
95
+ }
96
+ function createChevronIcon(direction) {
97
+ return {
98
+ type: 'element',
99
+ tagName: 'svg',
100
+ properties: {
101
+ ariaHidden: 'true',
102
+ className: ['pl-image-gallery__button-icon'],
103
+ fill: 'none',
104
+ height: '20',
105
+ stroke: 'currentColor',
106
+ strokeLinecap: 'round',
107
+ strokeLinejoin: 'round',
108
+ strokeWidth: '2',
109
+ viewBox: '0 0 24 24',
110
+ width: '20',
111
+ xmlns: 'http://www.w3.org/2000/svg',
112
+ },
113
+ children: [
114
+ {
115
+ type: 'element',
116
+ tagName: 'path',
117
+ properties: {
118
+ d: direction === 'previous' ? 'm15 18-6-6 6-6' : 'm9 18 6-6-6-6',
119
+ },
120
+ children: [],
121
+ },
122
+ ],
123
+ };
124
+ }
125
+ //# sourceMappingURL=image-gallery-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-gallery-plugin.js","sourceRoot":"","sources":["../../src/markdown/image-gallery-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ .pl-image-gallery {
2
+ margin-inline: 0;
3
+ }
4
+
5
+ .pl-image-gallery img {
6
+ display: block;
7
+ margin: 0;
8
+ width: 100%;
9
+ }
10
+
11
+ .pl-image-gallery:not([data-image-count="1"]) {
12
+ --pl-image-gallery-preview-width: 4rem;
13
+ position: relative;
14
+ }
15
+
16
+ .pl-image-gallery__track {
17
+ align-items: flex-start;
18
+ display: flex;
19
+ gap: 0.75rem;
20
+ min-width: 0;
21
+ overflow-x: auto;
22
+ overscroll-behavior-inline: contain;
23
+ scroll-behavior: smooth;
24
+ scroll-padding-inline: 0;
25
+ scroll-snap-type: x mandatory;
26
+ scrollbar-width: none;
27
+ }
28
+
29
+ .pl-image-gallery__track::-webkit-scrollbar {
30
+ display: none;
31
+ }
32
+
33
+ .pl-image-gallery__item {
34
+ align-items: center;
35
+ aspect-ratio: var(--pl-image-gallery-ratio, 3 / 2);
36
+ border-radius: min(var(--pl-radius-lg, 0.75rem), 1rem);
37
+ display: flex;
38
+ flex: 0 0 auto;
39
+ justify-content: center;
40
+ overflow: hidden;
41
+ scroll-snap-align: start;
42
+ width: calc(100% - var(--pl-image-gallery-preview-width));
43
+ }
44
+
45
+ .pl-image-gallery__item img {
46
+ border-radius: inherit;
47
+ height: 100%;
48
+ object-fit: contain;
49
+ width: 100%;
50
+ }
51
+
52
+ @media (max-width: 640px) {
53
+ .pl-image-gallery:not([data-image-count="1"]) {
54
+ --pl-image-gallery-preview-width: 2.75rem;
55
+ }
56
+ }
57
+
58
+ .pl-image-gallery__button {
59
+ align-items: center;
60
+ appearance: none;
61
+ backdrop-filter: blur(8px);
62
+ background: color-mix(in oklab, var(--pl-background, #ffffff) 82%, transparent);
63
+ border: 1px solid color-mix(in oklab, var(--pl-text-muted, #667085) 18%, transparent);
64
+ border-radius: var(--pl-radius-full, 999px);
65
+ color: var(--pl-text-strong, var(--pl-text, #182230));
66
+ cursor: pointer;
67
+ display: inline-flex;
68
+ height: 2rem;
69
+ justify-content: center;
70
+ line-height: 1;
71
+ padding: 0;
72
+ position: absolute;
73
+ top: 50%;
74
+ transform: translateY(-50%);
75
+ transition:
76
+ background-color 160ms ease,
77
+ border-color 160ms ease,
78
+ color 160ms ease,
79
+ opacity 160ms ease;
80
+ width: 2rem;
81
+ z-index: 1;
82
+ }
83
+
84
+ .pl-image-gallery__button[data-pl-image-gallery-button="previous"] {
85
+ inset-inline-start: 0.75rem;
86
+ }
87
+
88
+ .pl-image-gallery__button[data-pl-image-gallery-button="next"] {
89
+ inset-inline-end: 0.75rem;
90
+ }
91
+
92
+ .pl-image-gallery__button:hover {
93
+ background: color-mix(in oklab, var(--pl-background, #ffffff) 94%, transparent);
94
+ border-color: color-mix(in oklab, var(--pl-text-muted, #667085) 30%, transparent);
95
+ }
96
+
97
+ .pl-image-gallery__button:focus-visible {
98
+ outline: 2px solid var(--pl-accent, #4f46e5);
99
+ outline-offset: 2px;
100
+ }
101
+
102
+ .pl-image-gallery__button-icon {
103
+ display: block;
104
+ height: 1.125rem;
105
+ width: 1.125rem;
106
+ }
107
+
108
+ @media (hover: hover) {
109
+ .pl-image-gallery__button {
110
+ opacity: 0;
111
+ pointer-events: none;
112
+ }
113
+
114
+ .pl-image-gallery:hover .pl-image-gallery__button,
115
+ .pl-image-gallery:focus-within .pl-image-gallery__button {
116
+ opacity: 1;
117
+ pointer-events: auto;
118
+ }
119
+ }
@@ -0,0 +1 @@
1
+ import '../client/image-gallery.js';
@@ -0,0 +1,3 @@
1
+ export { rehypeImageGallery } from './image-gallery-plugin.js';
2
+ export { remarkPackageManagerTabs } from './package-manager-tabs.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/markdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { rehypeImageGallery } from './image-gallery-plugin.js';
2
+ export { remarkPackageManagerTabs } from './package-manager-tabs.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/markdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { RemarkPlugin } from '@astrojs/markdown-remark';
2
+ export declare const remarkPackageManagerTabs: RemarkPlugin;
3
+ //# sourceMappingURL=package-manager-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-manager-tabs.d.ts","sourceRoot":"","sources":["../../src/markdown/package-manager-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA4D7D,eAAO,MAAM,wBAAwB,EAAE,YAgCtC,CAAC"}