@hanzo/ui 5.0.2 → 5.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.
- package/dist/accordion.js +1 -0
- package/dist/accordion.mjs +1 -0
- package/dist/alert-dialog.js +1 -0
- package/dist/alert-dialog.mjs +1 -0
- package/dist/alert.js +1 -0
- package/dist/alert.mjs +1 -0
- package/dist/avatar.js +1 -0
- package/dist/avatar.mjs +1 -0
- package/dist/badge.js +1 -0
- package/dist/badge.mjs +1 -0
- package/dist/breadcrumb.js +1 -0
- package/dist/breadcrumb.mjs +1 -0
- package/dist/calendar.js +1 -0
- package/dist/calendar.mjs +1 -0
- package/dist/carousel.js +1 -0
- package/dist/carousel.mjs +1 -0
- package/dist/checkbox.js +1 -0
- package/dist/checkbox.mjs +1 -0
- package/dist/chunk-3H5S2OQ3.mjs +1 -0
- package/dist/chunk-5GRJ7UQX.js +1 -0
- package/dist/chunk-63HNMH7C.js +1 -0
- package/dist/chunk-72TOQ4DM.mjs +1 -0
- package/dist/chunk-7AEFTV5R.mjs +1 -0
- package/dist/chunk-7M4AVV2R.js +1 -0
- package/dist/chunk-DKPVJSBC.js +1 -0
- package/dist/chunk-EI7MMDWY.js +1 -0
- package/dist/chunk-GANGDIZG.mjs +1 -0
- package/dist/chunk-GRGT2Z4K.js +1 -0
- package/dist/chunk-JCUUC6NY.mjs +1 -0
- package/dist/chunk-JUQMWLIN.js +1 -0
- package/dist/chunk-PRVEIITE.js +1 -0
- package/dist/chunk-SH52AKNZ.js +1 -0
- package/dist/chunk-TU67EJEW.mjs +1 -0
- package/dist/chunk-WN5KN73U.mjs +1 -0
- package/dist/chunk-YSXGDEY5.mjs +1 -0
- package/dist/chunk-Z76OOVUE.mjs +1 -0
- package/dist/collapsible.js +1 -0
- package/dist/collapsible.mjs +1 -0
- package/dist/command.js +1 -0
- package/dist/command.mjs +1 -0
- package/dist/context-menu.js +1 -0
- package/dist/context-menu.mjs +1 -0
- package/dist/dialog.js +1 -0
- package/dist/dialog.mjs +1 -0
- package/dist/drawer.js +1 -0
- package/dist/drawer.mjs +1 -0
- package/dist/dropdown-menu.js +1 -0
- package/dist/dropdown-menu.mjs +1 -0
- package/dist/form.js +1 -0
- package/dist/form.mjs +1 -0
- package/dist/hover-card.js +1 -0
- package/dist/hover-card.mjs +1 -0
- package/dist/index.js +1 -9079
- package/dist/index.mjs +1 -8700
- package/dist/input-otp.js +1 -0
- package/dist/input-otp.mjs +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/lib/utils.mjs +1 -0
- package/dist/navigation-menu.js +1 -0
- package/dist/navigation-menu.mjs +1 -0
- package/dist/popover.js +1 -0
- package/dist/popover.mjs +1 -0
- package/dist/progress.js +1 -0
- package/dist/progress.mjs +1 -0
- package/dist/radio-group.js +1 -0
- package/dist/radio-group.mjs +1 -0
- package/dist/resizable.js +1 -0
- package/dist/resizable.mjs +1 -0
- package/dist/scroll-area.js +1 -0
- package/dist/scroll-area.mjs +1 -0
- package/dist/select.js +1 -0
- package/dist/select.mjs +1 -0
- package/dist/separator.js +1 -0
- package/dist/separator.mjs +1 -0
- package/dist/sheet.js +1 -0
- package/dist/sheet.mjs +1 -0
- package/dist/skeleton.js +1 -0
- package/dist/skeleton.mjs +1 -0
- package/dist/slider.js +1 -0
- package/dist/slider.mjs +1 -0
- package/dist/sonner.js +1 -0
- package/dist/sonner.mjs +1 -0
- package/dist/src/utils.js +1 -0
- package/dist/src/utils.mjs +1 -0
- package/dist/switch.js +1 -0
- package/dist/switch.mjs +1 -0
- package/dist/table.js +1 -0
- package/dist/table.mjs +1 -0
- package/dist/tabs.js +1 -0
- package/dist/tabs.mjs +1 -0
- package/dist/tailwind/index.js +1 -0
- package/dist/tailwind/index.mjs +1 -0
- package/dist/textarea.js +1 -0
- package/dist/textarea.mjs +1 -0
- package/dist/toggle-group.js +1 -0
- package/dist/toggle-group.mjs +1 -0
- package/dist/toggle.js +1 -0
- package/dist/toggle.mjs +1 -0
- package/dist/tooltip.js +1 -0
- package/dist/tooltip.mjs +1 -0
- package/dist/types/index.js +1 -0
- package/dist/types/index.mjs +1 -0
- package/package.json +110 -81
- package/assets/ai-icons.tsx +0 -207
- package/assets/crypto.tsx +0 -33
- package/assets/file-type-icon.tsx +0 -66
- package/assets/file.tsx +0 -45
- package/assets/general.tsx +0 -2318
- package/assets/hanzo-logo.svg +0 -9
- package/assets/hanzo-logo.tsx +0 -17
- package/assets/index.ts +0 -122
- package/assets/index.tsx +0 -4
- package/assets/llm-provider.tsx +0 -1094
- package/blocks/auth/index.ts +0 -6
- package/blocks/auth/login-2fa.tsx +0 -165
- package/blocks/auth/login-basic.tsx +0 -94
- package/blocks/auth/login-social.tsx +0 -148
- package/blocks/auth/magic-link.tsx +0 -129
- package/blocks/auth/password-reset.tsx +0 -97
- package/blocks/auth/signup.tsx +0 -157
- package/blocks/components/accordian-block.tsx +0 -48
- package/blocks/components/block-component-props.ts +0 -11
- package/blocks/components/bullet-cards-block.tsx +0 -46
- package/blocks/components/card-block/index.tsx +0 -171
- package/blocks/components/card-block/link-out-button.tsx +0 -20
- package/blocks/components/card-block/util.ts +0 -28
- package/blocks/components/carte-blanche-block/index.tsx +0 -127
- package/blocks/components/carte-blanche-block/variant-content-left.tsx +0 -49
- package/blocks/components/content.tsx +0 -70
- package/blocks/components/cta-block.tsx +0 -115
- package/blocks/components/enh-heading-block.tsx +0 -204
- package/blocks/components/grid-block/grid-block-mutator.ts +0 -12
- package/blocks/components/grid-block/index.tsx +0 -83
- package/blocks/components/grid-block/mutator-registry.ts +0 -10
- package/blocks/components/grid-block/table-borders.mutator.ts +0 -47
- package/blocks/components/group-block.tsx +0 -83
- package/blocks/components/heading-block.tsx +0 -88
- package/blocks/components/image-block.tsx +0 -111
- package/blocks/components/index.ts +0 -30
- package/blocks/components/screenful-block/content.tsx +0 -123
- package/blocks/components/screenful-block/index.tsx +0 -107
- package/blocks/components/screenful-block/poster-background.tsx +0 -34
- package/blocks/components/screenful-block/video-background.tsx +0 -45
- package/blocks/components/space-block.tsx +0 -66
- package/blocks/components/video-block.tsx +0 -138
- package/blocks/data-display/activity-feed.tsx +0 -242
- package/blocks/data-display/data-table.tsx +0 -235
- package/blocks/data-display/stats-grid.tsx +0 -194
- package/blocks/def/accordian-block.ts +0 -14
- package/blocks/def/block.ts +0 -7
- package/blocks/def/bullet-cards-block.ts +0 -22
- package/blocks/def/card-block.ts +0 -22
- package/blocks/def/carte-blanche-block.ts +0 -21
- package/blocks/def/cta-block.ts +0 -19
- package/blocks/def/element-block.ts +0 -11
- package/blocks/def/enh-heading-block.ts +0 -44
- package/blocks/def/grid-block.ts +0 -16
- package/blocks/def/group-block.ts +0 -11
- package/blocks/def/heading-block.ts +0 -15
- package/blocks/def/image-block.ts +0 -31
- package/blocks/def/index.ts +0 -35
- package/blocks/def/screenful-block.ts +0 -54
- package/blocks/def/space-block.ts +0 -64
- package/blocks/def/video-block.ts +0 -9
- package/blocks/ecommerce/checkout.tsx +0 -242
- package/blocks/ecommerce/index.ts +0 -7
- package/blocks/ecommerce/product-detail.tsx +0 -257
- package/blocks/ecommerce/product-grid.tsx +0 -148
- package/blocks/ecommerce/shopping-cart.tsx +0 -181
- package/blocks/index.ts +0 -2
- package/blocks/marketing/cta-section.tsx +0 -207
- package/blocks/marketing/faq.tsx +0 -159
- package/blocks/marketing/features-grid.tsx +0 -156
- package/blocks/marketing/hero-section.tsx +0 -192
- package/blocks/marketing/index.ts +0 -6
- package/blocks/marketing/pricing-table.tsx +0 -121
- package/blocks/marketing/testimonials.tsx +0 -196
- package/components/index.ts +0 -9
- package/dist/index.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/tailwind.js +0 -2025
- package/dist/tailwind.js.map +0 -1
- package/dist/tailwind.mjs +0 -2013
- package/dist/tailwind.mjs.map +0 -1
- package/dist/types.js +0 -59
- package/dist/types.js.map +0 -1
- package/dist/types.mjs +0 -53
- package/dist/types.mjs.map +0 -1
- package/dist/utils.js +0 -30
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -26
- package/dist/utils.mjs.map +0 -1
- package/frameworks/core/index.ts +0 -6
- package/frameworks/core/utils/index.ts +0 -64
- package/frameworks/react/components/button.tsx +0 -26
- package/frameworks/react/components/index.ts +0 -5
- package/frameworks/react/hooks/index.ts +0 -5
- package/frameworks/react/index.ts +0 -9
- package/frameworks/react/package.json +0 -8
- package/frameworks/react/utils/index.ts +0 -2
- package/frameworks/react-native/index.ts +0 -9
- package/frameworks/react-native/package.json +0 -8
- package/frameworks/registry.json +0 -371
- package/frameworks/setup.sh +0 -69
- package/frameworks/svelte/index.ts +0 -9
- package/frameworks/svelte/package.json +0 -8
- package/frameworks/tracker.json +0 -1854
- package/frameworks/vue/index.ts +0 -9
- package/frameworks/vue/package.json +0 -8
- package/helpers/file.ts +0 -33
- package/helpers/memoization.ts +0 -40
- package/primitives/accordion.tsx +0 -74
- package/primitives/action-button.tsx +0 -42
- package/primitives/alert-dialog.tsx +0 -185
- package/primitives/alert.tsx +0 -74
- package/primitives/apply-typography.tsx +0 -55
- package/primitives/aspect-ratio.tsx +0 -5
- package/primitives/avatar.tsx +0 -57
- package/primitives/background-beams.tsx +0 -142
- package/primitives/badge.tsx +0 -45
- package/primitives/breadcrumb.tsx +0 -130
- package/primitives/breakpoint-indicator.tsx +0 -19
- package/primitives/button.tsx +0 -72
- package/primitives/calendar.tsx +0 -72
- package/primitives/card.tsx +0 -97
- package/primitives/carousel.tsx +0 -238
- package/primitives/chat/chat-input-area.tsx +0 -88
- package/primitives/chat/chat-input.tsx +0 -71
- package/primitives/chat/files-preview.tsx +0 -331
- package/primitives/chat/index.ts +0 -6
- package/primitives/chat/json-form.tsx +0 -8
- package/primitives/chat/message-list.tsx +0 -308
- package/primitives/chat/message.tsx +0 -569
- package/primitives/chat/sqlite-preview.tsx +0 -215
- package/primitives/checkbox.tsx +0 -32
- package/primitives/collapsible.tsx +0 -9
- package/primitives/combobox.tsx +0 -239
- package/primitives/command.tsx +0 -151
- package/primitives/context-menu.tsx +0 -206
- package/primitives/copy-to-clipboard-icon.tsx +0 -60
- package/primitives/dialog-video-controller.tsx +0 -38
- package/primitives/dialog.tsx +0 -128
- package/primitives/dot-pattern.tsx +0 -57
- package/primitives/dots-loader.tsx +0 -13
- package/primitives/drawer.tsx +0 -113
- package/primitives/dropdown-menu.tsx +0 -199
- package/primitives/error-message.tsx +0 -19
- package/primitives/file-uploader.tsx +0 -203
- package/primitives/form.tsx +0 -185
- package/primitives/hover-card.tsx +0 -28
- package/primitives/icons/github.tsx +0 -14
- package/primitives/icons/index.ts +0 -18
- package/primitives/icons/youtube-logo.tsx +0 -59
- package/primitives/index-client.ts +0 -4
- package/primitives/index-common.ts +0 -304
- package/primitives/index-next.ts +0 -4
- package/primitives/input-otp.tsx +0 -65
- package/primitives/input.tsx +0 -128
- package/primitives/label.tsx +0 -21
- package/primitives/list-adaptor.ts +0 -12
- package/primitives/list-box.tsx +0 -74
- package/primitives/loading-spinner.tsx +0 -33
- package/primitives/markdown-preview.tsx +0 -612
- package/primitives/mermaid.tsx +0 -196
- package/primitives/navigation-menu.tsx +0 -147
- package/primitives/next/image.tsx +0 -91
- package/primitives/next/index.ts +0 -7
- package/primitives/next/inline-icon.tsx +0 -36
- package/primitives/next/link-element.tsx +0 -109
- package/primitives/next/mdx-link.tsx +0 -22
- package/primitives/next/media-stack.tsx +0 -52
- package/primitives/next/nav-items.tsx +0 -45
- package/primitives/next/youtube-embed.tsx +0 -83
- package/primitives/pagination.tsx +0 -117
- package/primitives/popover.tsx +0 -34
- package/primitives/pretty-json-print.tsx +0 -28
- package/primitives/progress.tsx +0 -27
- package/primitives/prompt-textarea.tsx +0 -72
- package/primitives/qr-code.tsx +0 -112
- package/primitives/radio-group.tsx +0 -42
- package/primitives/resizable.tsx +0 -47
- package/primitives/scroll-area.tsx +0 -57
- package/primitives/search-input.tsx +0 -66
- package/primitives/select.tsx +0 -122
- package/primitives/separator.tsx +0 -26
- package/primitives/sheet.tsx +0 -139
- package/primitives/skeleton.tsx +0 -18
- package/primitives/slider.tsx +0 -63
- package/primitives/sonner.tsx +0 -35
- package/primitives/step-indicator.tsx +0 -69
- package/primitives/stepper.tsx +0 -272
- package/primitives/switch.tsx +0 -27
- package/primitives/table.tsx +0 -105
- package/primitives/tabs.tsx +0 -50
- package/primitives/text-area.tsx +0 -26
- package/primitives/text-link.tsx +0 -27
- package/primitives/textarea.tsx +0 -64
- package/primitives/textfield.tsx +0 -78
- package/primitives/toast.tsx +0 -30
- package/primitives/toggle-group.tsx +0 -63
- package/primitives/toggle.tsx +0 -44
- package/primitives/tooltip.tsx +0 -47
- package/primitives/video-player.tsx +0 -23
- package/src/button.ts +0 -1
- package/src/hooks/index.ts +0 -7
- package/src/hooks/use-click-away.ts +0 -31
- package/src/hooks/use-combined-refs.ts +0 -22
- package/src/hooks/use-copy-clipboard.ts +0 -30
- package/src/hooks/use-debounce.ts +0 -17
- package/src/hooks/use-fill-ids.ts +0 -25
- package/src/hooks/use-map.ts +0 -26
- package/src/hooks/use-measure.ts +0 -42
- package/src/hooks/use-reverse-video-playback.ts +0 -43
- package/src/hooks/use-scroll-restoration.ts +0 -50
- package/src/index-lean.ts +0 -87
- package/src/index.ts +0 -54
- package/src/mcp/README.md +0 -141
- package/src/mcp/enhanced-server.ts +0 -1208
- package/src/mcp/index.ts +0 -518
- package/src/mcp/package.json +0 -10
- package/src/registry/api.ts +0 -164
- package/src/registry/index.ts +0 -60
- package/src/registry/package.json +0 -10
- package/src/utils.ts +0 -19
- package/tailwind/colors.tailwind.js +0 -53
- package/tailwind/fontFamily.tailwind.ts +0 -7
- package/tailwind/fontSize.tailwind.ts +0 -13
- package/tailwind/index.ts +0 -7
- package/tailwind/safelist.tailwind.js +0 -26
- package/tailwind/screens.tailwind.js +0 -8
- package/tailwind/spacing.tailwind.js +0 -65
- package/tailwind/tailwind.config.hanzo-preset.d.ts +0 -5
- package/tailwind/tailwind.config.hanzo-preset.js +0 -915
- package/tailwind/tw-font-desc.ts +0 -15
- package/tailwind/typo-plugin/get-plugin-styles.js +0 -679
- package/tailwind/typo-plugin/index.d.ts +0 -9
- package/tailwind/typo-plugin/index.js +0 -141
- package/tailwind/typo-plugin/utils.js +0 -60
- package/tailwind/typography-test.mdx +0 -35
- package/tailwind/z-index.tailwind.js +0 -71
- package/types/animation-def.ts +0 -3
- package/types/breakpoints.ts +0 -11
- package/types/bullet-item.ts +0 -10
- package/types/button-def.ts +0 -39
- package/types/dimensions.ts +0 -8
- package/types/grid-def.ts +0 -56
- package/types/image-def.ts +0 -32
- package/types/index.ts +0 -30
- package/types/link-def.ts +0 -56
- package/types/media-stack-def.ts +0 -31
- package/types/t-shirt-size.ts +0 -5
- package/types/tshirt-dimensions.ts +0 -20
- package/types/video-def.ts +0 -25
- package/util/blob.ts +0 -33
- package/util/copy-to-clipboard.ts +0 -17
- package/util/create-shadow-root.ts +0 -22
- package/util/date.ts +0 -84
- package/util/debounce.ts +0 -11
- package/util/file.ts +0 -15
- package/util/format-and-abbreviate-as-currency.ts +0 -125
- package/util/format-text.ts +0 -34
- package/util/format-to-max-char.ts +0 -68
- package/util/index-client.ts +0 -3
- package/util/index.ts +0 -112
- package/util/number-abbreviate.ts +0 -49
- package/util/specifier.ts +0 -43
- package/util/spread-to-transform.ts +0 -25
- package/util/step-animation.ts +0 -90
- package/util/timing.ts +0 -3
- package/util/toasts.tsx +0 -17
- package/util/two-way-map.ts +0 -19
package/primitives/mermaid.tsx
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
// import { save } from '@tauri-apps/plugin-dialog'; // Not available in web environment
|
|
2
|
-
// import * as fs from '@tauri-apps/plugin-fs'; // Not available in web environment
|
|
3
|
-
import { RotateCcw, Download } from 'lucide-react';
|
|
4
|
-
import mermaid from 'mermaid';
|
|
5
|
-
import { FC, useEffect, useRef, useState, useCallback } from 'react';
|
|
6
|
-
import { toast } from 'sonner';
|
|
7
|
-
import { cn } from '../src/utils';
|
|
8
|
-
import { Button } from './button';
|
|
9
|
-
import { SyntaxHighlighterProps } from './markdown-preview';
|
|
10
|
-
import { Tooltip, TooltipContent, TooltipTrigger } from './tooltip';
|
|
11
|
-
|
|
12
|
-
export type MermaidDiagramProps = SyntaxHighlighterProps & {
|
|
13
|
-
className?: string;
|
|
14
|
-
isRunning?: boolean;
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
mermaid.initialize({
|
|
18
|
-
startOnLoad: true,
|
|
19
|
-
mindmap: {
|
|
20
|
-
useWidth: 800,
|
|
21
|
-
},
|
|
22
|
-
theme: 'dark',
|
|
23
|
-
fontSize: 18,
|
|
24
|
-
darkMode: true,
|
|
25
|
-
fontFamily: 'Inter',
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const generateId = () => `mermaid-${Math.random().toString(36).slice(2)}`;
|
|
29
|
-
|
|
30
|
-
const downloadBlob = async (blob: Blob, filename: string) => {
|
|
31
|
-
// Web-compatible download (instead of Tauri)
|
|
32
|
-
try {
|
|
33
|
-
const link = document.createElement('a');
|
|
34
|
-
link.href = URL.createObjectURL(blob);
|
|
35
|
-
link.download = filename;
|
|
36
|
-
document.body.appendChild(link);
|
|
37
|
-
link.click();
|
|
38
|
-
document.body.removeChild(link);
|
|
39
|
-
URL.revokeObjectURL(link.href);
|
|
40
|
-
toast.success('Mermaid diagram saved successfully');
|
|
41
|
-
} catch (error) {
|
|
42
|
-
toast.error('Failed to download diagram');
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
export const MermaidDiagram: FC<MermaidDiagramProps> = ({
|
|
47
|
-
code,
|
|
48
|
-
className,
|
|
49
|
-
isRunning,
|
|
50
|
-
}) => {
|
|
51
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
52
|
-
const lastCode = useRef<string | null>(null);
|
|
53
|
-
const [instance, setInstance] = useState<any>(null);
|
|
54
|
-
|
|
55
|
-
const isComplete = !isRunning;
|
|
56
|
-
|
|
57
|
-
const resetZoom = useCallback(() => {
|
|
58
|
-
instance?.fit();
|
|
59
|
-
instance?.center();
|
|
60
|
-
}, [instance]);
|
|
61
|
-
|
|
62
|
-
const downloadSVG = useCallback(() => {
|
|
63
|
-
if (ref.current) {
|
|
64
|
-
const svg = ref.current.innerHTML;
|
|
65
|
-
const blob = new Blob([svg], { type: 'image/svg+xml' });
|
|
66
|
-
void downloadBlob(blob, 'mermaid-diagram.svg');
|
|
67
|
-
}
|
|
68
|
-
}, []);
|
|
69
|
-
|
|
70
|
-
const enableZoom = useCallback(() => {
|
|
71
|
-
instance?.enablePan();
|
|
72
|
-
instance?.enableZoom();
|
|
73
|
-
}, [instance]);
|
|
74
|
-
|
|
75
|
-
const disableZoom = useCallback(() => {
|
|
76
|
-
instance?.disablePan();
|
|
77
|
-
instance?.disableZoom();
|
|
78
|
-
}, [instance]);
|
|
79
|
-
|
|
80
|
-
const handleFocus = useCallback(() => {
|
|
81
|
-
enableZoom();
|
|
82
|
-
}, [enableZoom]);
|
|
83
|
-
|
|
84
|
-
const handleBlur = useCallback(() => {
|
|
85
|
-
disableZoom();
|
|
86
|
-
}, [disableZoom]);
|
|
87
|
-
|
|
88
|
-
const handleClick = useCallback(() => {
|
|
89
|
-
if (ref.current) {
|
|
90
|
-
ref.current.focus();
|
|
91
|
-
}
|
|
92
|
-
}, []);
|
|
93
|
-
|
|
94
|
-
useEffect(() => {
|
|
95
|
-
if (!isComplete || !ref.current || !code) return;
|
|
96
|
-
|
|
97
|
-
if (lastCode.current === code) return;
|
|
98
|
-
|
|
99
|
-
void (async () => {
|
|
100
|
-
try {
|
|
101
|
-
const id = generateId();
|
|
102
|
-
const { svg } = await mermaid.render(id, code);
|
|
103
|
-
|
|
104
|
-
if (ref.current) {
|
|
105
|
-
ref.current.innerHTML = svg;
|
|
106
|
-
|
|
107
|
-
const svgElement = ref.current.querySelector('svg');
|
|
108
|
-
if (svgElement) {
|
|
109
|
-
svgElement.setAttribute('height', '100%');
|
|
110
|
-
svgElement.setAttribute('width', '100%');
|
|
111
|
-
svgElement.style.height = '100%';
|
|
112
|
-
svgElement.style.width = '100%';
|
|
113
|
-
svgElement.style.position = 'absolute';
|
|
114
|
-
svgElement.style.top = '0';
|
|
115
|
-
svgElement.style.left = '0';
|
|
116
|
-
|
|
117
|
-
// Dynamically import svg-pan-zoom only on client side
|
|
118
|
-
if (typeof window !== 'undefined') {
|
|
119
|
-
const svgPanZoomModule = await import('svg-pan-zoom');
|
|
120
|
-
const svgPanZoom = svgPanZoomModule.default || svgPanZoomModule;
|
|
121
|
-
|
|
122
|
-
const panZoomInstance = svgPanZoom(svgElement);
|
|
123
|
-
panZoomInstance.fit();
|
|
124
|
-
panZoomInstance.center();
|
|
125
|
-
panZoomInstance.zoomAtPoint(1, { x: 0, y: 0 });
|
|
126
|
-
panZoomInstance.disablePan();
|
|
127
|
-
panZoomInstance.disableZoom();
|
|
128
|
-
setInstance(panZoomInstance);
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
lastCode.current = code;
|
|
134
|
-
} catch (e) {
|
|
135
|
-
console.warn('Failed to render Mermaid diagram:', e);
|
|
136
|
-
}
|
|
137
|
-
})();
|
|
138
|
-
}, [code, isComplete]);
|
|
139
|
-
|
|
140
|
-
return (
|
|
141
|
-
<div className="relative">
|
|
142
|
-
<div className="absolute top-2 right-2 z-10 flex gap-1">
|
|
143
|
-
<Tooltip>
|
|
144
|
-
<TooltipTrigger asChild>
|
|
145
|
-
<Button
|
|
146
|
-
variant="tertiary"
|
|
147
|
-
size="icon"
|
|
148
|
-
onClick={resetZoom}
|
|
149
|
-
className="text-text-secondary"
|
|
150
|
-
>
|
|
151
|
-
<RotateCcw size={14} />
|
|
152
|
-
</Button>
|
|
153
|
-
</TooltipTrigger>
|
|
154
|
-
<TooltipContent>
|
|
155
|
-
<p>Reset Zoom</p>
|
|
156
|
-
</TooltipContent>
|
|
157
|
-
</Tooltip>
|
|
158
|
-
<Tooltip>
|
|
159
|
-
<TooltipTrigger asChild>
|
|
160
|
-
<Button
|
|
161
|
-
variant="tertiary"
|
|
162
|
-
size="icon"
|
|
163
|
-
onClick={downloadSVG}
|
|
164
|
-
className="text-text-secondary"
|
|
165
|
-
>
|
|
166
|
-
<Download size={14} />
|
|
167
|
-
</Button>
|
|
168
|
-
</TooltipTrigger>
|
|
169
|
-
<TooltipContent>
|
|
170
|
-
<p>Download SVG</p>
|
|
171
|
-
</TooltipContent>
|
|
172
|
-
</Tooltip>
|
|
173
|
-
</div>
|
|
174
|
-
<div
|
|
175
|
-
onClick={handleClick}
|
|
176
|
-
className="text-text-secondary bg-bg-quaternary absolute right-2 bottom-2 z-10 rounded px-2 py-1 text-xs"
|
|
177
|
-
>
|
|
178
|
-
Click to focus, then scroll to zoom & drag to pan
|
|
179
|
-
</div>
|
|
180
|
-
<div
|
|
181
|
-
ref={ref}
|
|
182
|
-
tabIndex={0}
|
|
183
|
-
onFocus={handleFocus}
|
|
184
|
-
onBlur={handleBlur}
|
|
185
|
-
onClick={handleClick}
|
|
186
|
-
className={cn(
|
|
187
|
-
'text-text-secondary bg-bg-quaternary focus:ring-opacity-50 relative w-full cursor-grab overflow-hidden rounded-b-lg p-4 py-10 text-center text-sm focus:cursor-grabbing focus:ring-2 focus:ring-blue-500 focus:outline-none',
|
|
188
|
-
className,
|
|
189
|
-
)}
|
|
190
|
-
style={{ width: '100%', minHeight: '400px' }}
|
|
191
|
-
>
|
|
192
|
-
Drawing diagram...
|
|
193
|
-
</div>
|
|
194
|
-
</div>
|
|
195
|
-
);
|
|
196
|
-
};
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
import * as NavigationMenuPrimitive from '@radix-ui/react-navigation-menu'
|
|
5
|
-
import { cva } from 'class-variance-authority'
|
|
6
|
-
import { ChevronDown } from 'lucide-react'
|
|
7
|
-
|
|
8
|
-
import { cn } from '../util'
|
|
9
|
-
|
|
10
|
-
const NavigationMenu = React.forwardRef<
|
|
11
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Root>,
|
|
12
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Root>
|
|
13
|
-
>(({ className, children, ...props }, ref) => (
|
|
14
|
-
<NavigationMenuPrimitive.Root
|
|
15
|
-
ref={ref}
|
|
16
|
-
className={cn(
|
|
17
|
-
'relative z-10 flex max-w-max flex-1 items-center justify-center',
|
|
18
|
-
className
|
|
19
|
-
)}
|
|
20
|
-
{...props}
|
|
21
|
-
>
|
|
22
|
-
{children}
|
|
23
|
-
{/* <NavigationMenuViewport /> */}
|
|
24
|
-
</NavigationMenuPrimitive.Root>
|
|
25
|
-
))
|
|
26
|
-
NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName
|
|
27
|
-
|
|
28
|
-
const NavigationMenuList = React.forwardRef<
|
|
29
|
-
React.ElementRef<typeof NavigationMenuPrimitive.List>,
|
|
30
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.List>
|
|
31
|
-
>(({ className, ...props }, ref) => (
|
|
32
|
-
<NavigationMenuPrimitive.List
|
|
33
|
-
ref={ref}
|
|
34
|
-
className={cn(
|
|
35
|
-
'group flex flex-1 list-none items-center justify-center space-x-1',
|
|
36
|
-
className
|
|
37
|
-
)}
|
|
38
|
-
{...props}
|
|
39
|
-
/>
|
|
40
|
-
))
|
|
41
|
-
NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName
|
|
42
|
-
|
|
43
|
-
const NavigationMenuItem = React.forwardRef<
|
|
44
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Item>,
|
|
45
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Item>
|
|
46
|
-
>(({ className, ...props }, ref) => (
|
|
47
|
-
<NavigationMenuPrimitive.Item
|
|
48
|
-
ref={ref}
|
|
49
|
-
className={cn("relative", className)}
|
|
50
|
-
{...props}
|
|
51
|
-
/>
|
|
52
|
-
))
|
|
53
|
-
NavigationMenuItem.displayName = 'NavigationMenuItem'
|
|
54
|
-
|
|
55
|
-
const navigationMenuTriggerStyle = cva(
|
|
56
|
-
'group inline-flex h-10 w-max items-center justify-center rounded-md bg-background px-4 py-2 ' +
|
|
57
|
-
'text-sm font-medium transition-colors hover:bg-level-1 text-foreground hover:text-accent ' +
|
|
58
|
-
' focus:text-accent focus:outline-none disabled:pointer-events-none disabled:opacity-50 ' +
|
|
59
|
-
'data-[active]:bg-level-1/50 data-[state=open]:bg-level-1/50'
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
const NavigationMenuTrigger = React.forwardRef<
|
|
63
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Trigger>,
|
|
64
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Trigger>
|
|
65
|
-
>(({ className, children, ...props }, ref) => (
|
|
66
|
-
<NavigationMenuPrimitive.Trigger
|
|
67
|
-
ref={ref}
|
|
68
|
-
className={cn(navigationMenuTriggerStyle(), 'group', className)}
|
|
69
|
-
{...props}
|
|
70
|
-
>
|
|
71
|
-
{children}{' '}
|
|
72
|
-
<ChevronDown
|
|
73
|
-
className='relative top-[1px] ml-1 h-3 w-3 transition duration-200 group-data-[state=open]:rotate-180'
|
|
74
|
-
aria-hidden='true'
|
|
75
|
-
/>
|
|
76
|
-
</NavigationMenuPrimitive.Trigger>
|
|
77
|
-
))
|
|
78
|
-
NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName
|
|
79
|
-
|
|
80
|
-
const NavigationMenuContent = React.forwardRef<
|
|
81
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Content>,
|
|
82
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Content>
|
|
83
|
-
>(({ className, ...props }, ref) => (
|
|
84
|
-
<NavigationMenuPrimitive.Content
|
|
85
|
-
ref={ref}
|
|
86
|
-
className={cn(
|
|
87
|
-
"right-0 absolute",
|
|
88
|
-
"absolute top-full w-fit bg-popover mt-[5px]",
|
|
89
|
-
"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 bg-background overflow-hidden rounded-md border",
|
|
90
|
-
className
|
|
91
|
-
)}
|
|
92
|
-
{...props}
|
|
93
|
-
/>
|
|
94
|
-
))
|
|
95
|
-
NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName
|
|
96
|
-
|
|
97
|
-
const NavigationMenuLink = NavigationMenuPrimitive.Link
|
|
98
|
-
|
|
99
|
-
const NavigationMenuViewport = React.forwardRef<
|
|
100
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Viewport>,
|
|
101
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Viewport>
|
|
102
|
-
>(({ className, ...props }, ref) => (
|
|
103
|
-
<div className={cn('absolute left-0 top-full flex justify-center')}>
|
|
104
|
-
<NavigationMenuPrimitive.Viewport
|
|
105
|
-
className={cn(
|
|
106
|
-
'origin-top-center relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border ',
|
|
107
|
-
'bg-background text-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 md:w-[var(--radix-navigation-menu-viewport-width)]',
|
|
108
|
-
className
|
|
109
|
-
)}
|
|
110
|
-
ref={ref}
|
|
111
|
-
{...props}
|
|
112
|
-
/>
|
|
113
|
-
</div>
|
|
114
|
-
))
|
|
115
|
-
NavigationMenuViewport.displayName =
|
|
116
|
-
NavigationMenuPrimitive.Viewport.displayName
|
|
117
|
-
|
|
118
|
-
const NavigationMenuIndicator = React.forwardRef<
|
|
119
|
-
React.ElementRef<typeof NavigationMenuPrimitive.Indicator>,
|
|
120
|
-
React.ComponentPropsWithoutRef<typeof NavigationMenuPrimitive.Indicator>
|
|
121
|
-
>(({ className, ...props }, ref) => (
|
|
122
|
-
<NavigationMenuPrimitive.Indicator
|
|
123
|
-
ref={ref}
|
|
124
|
-
className={cn(
|
|
125
|
-
'top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden',
|
|
126
|
-
'data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in',
|
|
127
|
-
className
|
|
128
|
-
)}
|
|
129
|
-
{...props}
|
|
130
|
-
>
|
|
131
|
-
<div className='relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm bg-border shadow-md' />
|
|
132
|
-
</NavigationMenuPrimitive.Indicator>
|
|
133
|
-
))
|
|
134
|
-
NavigationMenuIndicator.displayName =
|
|
135
|
-
NavigationMenuPrimitive.Indicator.displayName
|
|
136
|
-
|
|
137
|
-
export {
|
|
138
|
-
navigationMenuTriggerStyle,
|
|
139
|
-
NavigationMenu,
|
|
140
|
-
NavigationMenuList,
|
|
141
|
-
NavigationMenuItem,
|
|
142
|
-
NavigationMenuContent,
|
|
143
|
-
NavigationMenuTrigger,
|
|
144
|
-
NavigationMenuLink,
|
|
145
|
-
NavigationMenuIndicator,
|
|
146
|
-
NavigationMenuViewport,
|
|
147
|
-
}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import NextImage from 'next/image'
|
|
3
|
-
|
|
4
|
-
// @ts-ignore
|
|
5
|
-
const { ImageDef, Dimensions, MediaTransform } = {}
|
|
6
|
-
import { constrain, cn, spreadToTransform } from '../../util'
|
|
7
|
-
|
|
8
|
-
const Image: React.FC<{
|
|
9
|
-
def: ImageDef
|
|
10
|
-
constrainTo?: Dimensions
|
|
11
|
-
transform?: MediaTransform
|
|
12
|
-
fullWidth?: boolean
|
|
13
|
-
className?: string
|
|
14
|
-
preload?: boolean
|
|
15
|
-
}> = ({
|
|
16
|
-
def,
|
|
17
|
-
constrainTo,
|
|
18
|
-
transform={},
|
|
19
|
-
fullWidth=false,
|
|
20
|
-
className='',
|
|
21
|
-
preload=false
|
|
22
|
-
}) => {
|
|
23
|
-
|
|
24
|
-
const {
|
|
25
|
-
src,
|
|
26
|
-
alt: _alt,
|
|
27
|
-
dim,
|
|
28
|
-
sizes,
|
|
29
|
-
svgFillClass: _svgFillClass,
|
|
30
|
-
} = def
|
|
31
|
-
|
|
32
|
-
const toSpread: any = {}
|
|
33
|
-
if (fullWidth) {
|
|
34
|
-
toSpread.style = {
|
|
35
|
-
width: '100%',
|
|
36
|
-
height: 'auto',
|
|
37
|
-
...spreadToTransform(transform)
|
|
38
|
-
}
|
|
39
|
-
if (constrainTo) {
|
|
40
|
-
toSpread.style.maxWidth = constrainTo.w
|
|
41
|
-
toSpread.style.maxHeight = constrainTo.h
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
const resolved = constrainTo ? constrain(dim, constrainTo) : dim
|
|
46
|
-
toSpread.width = resolved.w
|
|
47
|
-
toSpread.height = resolved.h
|
|
48
|
-
toSpread.style = {...spreadToTransform(transform)}
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (sizes) {
|
|
52
|
-
toSpread.sizes = sizes
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Note: cannot be spread (a Next thing)
|
|
56
|
-
let alt: string
|
|
57
|
-
if (_alt) {
|
|
58
|
-
alt = _alt
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
const tokens = src.split('/')
|
|
62
|
-
// Something remotely meaningful
|
|
63
|
-
alt = (tokens.length > 0) ? tokens[tokens.length - 1] : src
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const svgFillClass = _svgFillClass ?? ''
|
|
67
|
-
|
|
68
|
-
return (fullWidth) ? (
|
|
69
|
-
<div className='relative flex flex-col items-center justify-center w-full'>
|
|
70
|
-
<NextImage
|
|
71
|
-
src={src}
|
|
72
|
-
alt={alt}
|
|
73
|
-
{...toSpread}
|
|
74
|
-
priority={preload}
|
|
75
|
-
loading={preload ? 'eager' : 'lazy'}
|
|
76
|
-
className={cn(svgFillClass, className)}
|
|
77
|
-
/>
|
|
78
|
-
</div>
|
|
79
|
-
) : (
|
|
80
|
-
<NextImage
|
|
81
|
-
src={src}
|
|
82
|
-
alt={alt}
|
|
83
|
-
{...toSpread}
|
|
84
|
-
priority={preload}
|
|
85
|
-
loading={preload ? 'eager' : 'lazy'}
|
|
86
|
-
className={cn(svgFillClass, className)}
|
|
87
|
-
/>
|
|
88
|
-
)
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export default Image
|
package/primitives/next/index.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { default as Image } from './image'
|
|
2
|
-
export { default as InlineIcon } from './inline-icon'
|
|
3
|
-
export { default as LinkElement } from './link-element'
|
|
4
|
-
export { default as MDXLink } from './mdx-link'
|
|
5
|
-
export { default as MediaStack } from './media-stack'
|
|
6
|
-
export { default as NavItems } from './nav-items'
|
|
7
|
-
export { default as YouTubeEmbed } from './youtube-embed'
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import Image from 'next/image'
|
|
3
|
-
|
|
4
|
-
interface InlineIconProps {
|
|
5
|
-
/**
|
|
6
|
-
* If a ReactNode is passed in, it should be set to 'w-full h-auto' so that it can be sized
|
|
7
|
-
* according to width of parent.
|
|
8
|
-
*/
|
|
9
|
-
icon: React.ReactNode;
|
|
10
|
-
/** default should be handled by calling code. */
|
|
11
|
-
size?: number;
|
|
12
|
-
agent?: string;
|
|
13
|
-
className?: string;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const InlineIcon: React.FC<InlineIconProps> = ({
|
|
17
|
-
icon,
|
|
18
|
-
size,
|
|
19
|
-
agent,
|
|
20
|
-
className=''
|
|
21
|
-
}) => {
|
|
22
|
-
if (!icon) return null
|
|
23
|
-
|
|
24
|
-
const phone = agent === 'phone'
|
|
25
|
-
if (typeof icon === 'string') {
|
|
26
|
-
const _size = (phone && size) ? (size * .75) : size
|
|
27
|
-
return (<Image src={icon} width={_size} height={_size} alt='icon' className={className}/>)
|
|
28
|
-
}
|
|
29
|
-
return (
|
|
30
|
-
<div className={className}>
|
|
31
|
-
{icon}
|
|
32
|
-
</div>
|
|
33
|
-
)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export default InlineIcon
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react'
|
|
2
|
-
import Link from 'next/link'
|
|
3
|
-
|
|
4
|
-
import type { LinkDef } from '../../types'
|
|
5
|
-
import { buttonVariants } from '../button'
|
|
6
|
-
import { cn, type VariantProps } from '../../util'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* If this is rendered directly (and not auto generated in a Block)
|
|
10
|
-
* and it has any children, title, icon, and iconAfter
|
|
11
|
-
* are ignore.
|
|
12
|
-
*/
|
|
13
|
-
const LinkElement: React.FC<
|
|
14
|
-
PropsWithChildren &
|
|
15
|
-
VariantProps<typeof buttonVariants> &
|
|
16
|
-
{
|
|
17
|
-
def: LinkDef,
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Use to trigger other events in addition to the
|
|
21
|
-
* link action itself. For example, to also close a drawer menu.
|
|
22
|
-
*/
|
|
23
|
-
onClick?: () => void
|
|
24
|
-
|
|
25
|
-
/** overrides def (eg, for title area)*/
|
|
26
|
-
icon?: React.ReactNode
|
|
27
|
-
/** overrides def */
|
|
28
|
-
iconAfter?: boolean
|
|
29
|
-
className?: string,
|
|
30
|
-
}> = ({
|
|
31
|
-
def,
|
|
32
|
-
// DO NOT provide a default to any of the props that also appear in def!
|
|
33
|
-
onClick,
|
|
34
|
-
size,
|
|
35
|
-
variant,
|
|
36
|
-
rounded,
|
|
37
|
-
icon,
|
|
38
|
-
iconAfter,
|
|
39
|
-
className = '',
|
|
40
|
-
children,
|
|
41
|
-
} ) => {
|
|
42
|
-
|
|
43
|
-
const {
|
|
44
|
-
href,
|
|
45
|
-
newTab,
|
|
46
|
-
variant: defVariant,
|
|
47
|
-
size: defSize,
|
|
48
|
-
rounded: defRounded,
|
|
49
|
-
title
|
|
50
|
-
} = def
|
|
51
|
-
|
|
52
|
-
const linkProps: any = {}
|
|
53
|
-
|
|
54
|
-
// As per LinkDef docs
|
|
55
|
-
if (href.startsWith('http') || href.startsWith('mailto')) {
|
|
56
|
-
linkProps.rel = 'noreferrer noopener'
|
|
57
|
-
if (newTab ?? true) {
|
|
58
|
-
linkProps.target = '_blank'
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
else if (newTab) {
|
|
62
|
-
linkProps.target = '_blank'
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
const toSpread = {
|
|
66
|
-
href,
|
|
67
|
-
...(onClick ? { onClick } : {}),
|
|
68
|
-
...linkProps
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
const Contents: React.FC = () => {
|
|
72
|
-
|
|
73
|
-
if (React.Children.count(children) > 0) return children
|
|
74
|
-
|
|
75
|
-
// Props > def fields > defaults.
|
|
76
|
-
const _icon = (icon) ? icon : (def.icon) ? def.icon : undefined
|
|
77
|
-
const _iconAfter = (iconAfter) ? iconAfter : (def.iconAfter) ? def.iconAfter : false
|
|
78
|
-
|
|
79
|
-
// 'title' is not guaranteed as it could be an icon only button / link
|
|
80
|
-
return (<>
|
|
81
|
-
{_icon && !_iconAfter && (<div className='pr-1'>{_icon}</div>)}
|
|
82
|
-
{title && (<div>{title}</div>)}
|
|
83
|
-
{_icon && _iconAfter && (<div className='pl-1'>{_icon}</div>)}
|
|
84
|
-
</>)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return (
|
|
88
|
-
<Link
|
|
89
|
-
className={cn(
|
|
90
|
-
buttonVariants({
|
|
91
|
-
variant: variant ? variant : (defVariant ? defVariant : 'link'),
|
|
92
|
-
size: (!defVariant || defVariant.includes('link') || variant?.includes('link')) ?
|
|
93
|
-
'link'
|
|
94
|
-
:
|
|
95
|
-
(size ? size : defSize),
|
|
96
|
-
rounded: rounded ? rounded : (defRounded ? defRounded : 'md'),
|
|
97
|
-
}),
|
|
98
|
-
// This is a "label only" LinkDef. cf: footer"
|
|
99
|
-
((href.length > 0 || onClick) ? '' : 'pointer-events-none'),
|
|
100
|
-
className
|
|
101
|
-
)}
|
|
102
|
-
{...toSpread}
|
|
103
|
-
>
|
|
104
|
-
<Contents />
|
|
105
|
-
</Link>
|
|
106
|
-
)
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
export default LinkElement
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React, { AnchorHTMLAttributes, type PropsWithChildren } from 'react'
|
|
2
|
-
import Link from 'next/link'
|
|
3
|
-
|
|
4
|
-
const MDXLink: React.FC<AnchorHTMLAttributes<HTMLAnchorElement> > = ({
|
|
5
|
-
href,
|
|
6
|
-
children,
|
|
7
|
-
...rest
|
|
8
|
-
}) => {
|
|
9
|
-
|
|
10
|
-
// internal link
|
|
11
|
-
if (href && (href.startsWith('/'))) {
|
|
12
|
-
return (
|
|
13
|
-
<Link href={href} {...rest}>
|
|
14
|
-
{children}
|
|
15
|
-
</Link>
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return <a target="_blank" href={href} {...rest} >{children}</a>
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export default MDXLink
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
import React from 'react'
|
|
3
|
-
|
|
4
|
-
import { cn, constrain, spreadToTransform } from '../../util'
|
|
5
|
-
import type { MediaStackDef, Dimensions } from '../../types'
|
|
6
|
-
|
|
7
|
-
import Image from './image'
|
|
8
|
-
import VideoPlayer from '../video-player'
|
|
9
|
-
|
|
10
|
-
const MediaStack: React.FC<{
|
|
11
|
-
media: MediaStackDef
|
|
12
|
-
constrainTo?: Dimensions
|
|
13
|
-
clx?: string
|
|
14
|
-
}> = ({
|
|
15
|
-
media,
|
|
16
|
-
constrainTo: cnst = {w: 250, h: 250},
|
|
17
|
-
clx=''
|
|
18
|
-
}) => {
|
|
19
|
-
const {img, video, mediaTransform} = media
|
|
20
|
-
|
|
21
|
-
const transform = mediaTransform ?? {}
|
|
22
|
-
|
|
23
|
-
// Order of precedence: MP4 > Image
|
|
24
|
-
if (video) {
|
|
25
|
-
const dim = constrain(video.dim.md, cnst)
|
|
26
|
-
return (
|
|
27
|
-
<VideoPlayer
|
|
28
|
-
className={clx}
|
|
29
|
-
sources={video.sources}
|
|
30
|
-
width={dim.w}
|
|
31
|
-
height={dim.h}
|
|
32
|
-
style={{
|
|
33
|
-
minHeight: dim.h, // prevents layout jumps
|
|
34
|
-
...spreadToTransform(transform)
|
|
35
|
-
}}
|
|
36
|
-
{...video.videoProps}
|
|
37
|
-
/>
|
|
38
|
-
)
|
|
39
|
-
}
|
|
40
|
-
return img ? (
|
|
41
|
-
<Image
|
|
42
|
-
def={img}
|
|
43
|
-
constrainTo={cnst}
|
|
44
|
-
className={clx}
|
|
45
|
-
transform={transform}
|
|
46
|
-
/>
|
|
47
|
-
) : (
|
|
48
|
-
<div style={{width: cnst.w, height: cnst.h}} className={cn('bg-level-2', clx)} />
|
|
49
|
-
)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
export default MediaStack
|