@xyd-js/components 0.0.0-build-8b31648-20250923204702 → 0.0.0-build-ec04de2-20250930214016
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/CHANGELOG.md +2 -2
- package/dist/{Button-6A7unxBT.js → Button-DaGbohmU.js} +2 -2
- package/dist/{Button-6A7unxBT.js.map → Button-DaGbohmU.js.map} +1 -1
- package/dist/{CodeSample-DA-TjeYa.js → CodeSample-CR2M8ZSQ.js} +2 -2
- package/dist/{CodeSample-DA-TjeYa.js.map → CodeSample-CR2M8ZSQ.js.map} +1 -1
- package/dist/{Icon-Dc8GILYQ.js → Icon-DNVZYQRd.js} +2 -2
- package/dist/{Icon-Dc8GILYQ.js.map → Icon-DNVZYQRd.js.map} +1 -1
- package/dist/{PageFirstSlide-CWQbuuIw.js → PageFirstSlide-cMlCilou.js} +2 -2
- package/dist/{PageFirstSlide-CWQbuuIw.js.map → PageFirstSlide-cMlCilou.js.map} +1 -1
- package/dist/{TabsAnalytics-D88SsAna.js → TabsAnalytics-CTn2UVp2.js} +2 -2
- package/dist/{TabsAnalytics-D88SsAna.js.map → TabsAnalytics-CTn2UVp2.js.map} +1 -1
- package/dist/{Update-ITj2CgIR.js → Update-C5JrIUtZ.js} +2 -2
- package/dist/{Update-ITj2CgIR.js.map → Update-C5JrIUtZ.js.map} +1 -1
- package/dist/{VideoGuide-B5GYVCMy.js → VideoGuide-KhfKuGJQ.js} +2 -2
- package/dist/{VideoGuide-B5GYVCMy.js.map → VideoGuide-KhfKuGJQ.js.map} +1 -1
- package/dist/{_rollupPluginBabelHelpers-iq1gUDHm.js → _rollupPluginBabelHelpers-jB-N4e5C.js} +1 -1
- package/dist/_rollupPluginBabelHelpers-jB-N4e5C.js.map +1 -0
- package/dist/coder.d.ts +1 -0
- package/dist/coder.js +1 -1
- package/dist/content.d.ts +1 -0
- package/dist/content.js +1 -1
- package/dist/index.css +17 -17
- package/dist/layouts.js +1 -1
- package/dist/pages.js +1 -1
- package/dist/system.js +1 -1
- package/dist/{useUXClick-BytfW2o9.js → useUXClick-ClOrrTc_.js} +2 -2
- package/dist/{useUXClick-BytfW2o9.js.map → useUXClick-ClOrrTc_.js.map} +1 -1
- package/dist/{useUXEvents-CnzubHLH.js → useUXEvents-Cf7JR4Jf.js} +1 -1
- package/dist/{useUXEvents-CnzubHLH.js.map → useUXEvents-Cf7JR4Jf.js.map} +1 -1
- package/dist/{useUXScrollDepth-CIw1SSDV.js → useUXScrollDepth-C9D0GGmR.js} +1 -1
- package/dist/{useUXScrollDepth-CIw1SSDV.js.map → useUXScrollDepth-C9D0GGmR.js.map} +1 -1
- package/dist/uxsdk.js +1 -1
- package/dist/writer.js +1 -1
- package/package.json +2 -2
- package/src/coder/CodeSample/CodeSample.tsx +5 -1
- package/src/coder/CodeTabs/CodeTabs.tsx +120 -105
- package/dist/_rollupPluginBabelHelpers-iq1gUDHm.js.map +0 -1
|
@@ -24,16 +24,18 @@ export interface CodeSampleProps {
|
|
|
24
24
|
descriptionHead?: string
|
|
25
25
|
descriptionContent?: string | React.ReactNode
|
|
26
26
|
descriptionIcon?: string
|
|
27
|
+
markdownFormat?: boolean
|
|
27
28
|
kind?: "secondary"
|
|
28
29
|
controlByMeta?: boolean // TODO: BETTER IN THE FUTURE
|
|
29
30
|
}
|
|
30
31
|
|
|
31
|
-
const CodeContext = React.createContext<{
|
|
32
|
+
export const CodeContext = React.createContext<{
|
|
32
33
|
size?: "full"
|
|
33
34
|
lineNumbers?: boolean
|
|
34
35
|
descriptionHead?: string
|
|
35
36
|
descriptionContent?: string | React.ReactNode
|
|
36
37
|
descriptionIcon?: string
|
|
38
|
+
markdownFormat?: boolean
|
|
37
39
|
}>({})
|
|
38
40
|
|
|
39
41
|
export function CodeSample(props: CodeSampleProps) {
|
|
@@ -58,6 +60,7 @@ function $ThemedCodeSample(props: CodeSampleProps) {
|
|
|
58
60
|
descriptionHead: props.descriptionHead,
|
|
59
61
|
descriptionContent: props.descriptionContent,
|
|
60
62
|
descriptionIcon: props.descriptionIcon,
|
|
63
|
+
markdownFormat: props.markdownFormat,
|
|
61
64
|
}}>
|
|
62
65
|
<Code.Pre
|
|
63
66
|
codeblock={highlighted[0]}
|
|
@@ -85,6 +88,7 @@ function $ThemedCodeSample(props: CodeSampleProps) {
|
|
|
85
88
|
descriptionHead: props.descriptionHead,
|
|
86
89
|
descriptionContent: props.descriptionContent,
|
|
87
90
|
descriptionIcon: props.descriptionIcon,
|
|
91
|
+
markdownFormat: props.markdownFormat,
|
|
88
92
|
}}>
|
|
89
93
|
<$CodeSampleTabs
|
|
90
94
|
description={props.description}
|
|
@@ -1,128 +1,143 @@
|
|
|
1
|
-
import React, { useState, useEffect } from "react";
|
|
2
|
-
import {Tabs as TabsPrimitive} from "radix-ui"; // TODO: remove and use separation
|
|
3
|
-
import {
|
|
4
|
-
HighlightedCode,
|
|
5
|
-
} from "codehike/code"
|
|
1
|
+
import React, { useState, useEffect, useContext } from "react";
|
|
2
|
+
import { Tabs as TabsPrimitive } from "radix-ui"; // TODO: remove and use separation
|
|
3
|
+
import { HighlightedCode } from "codehike/code";
|
|
6
4
|
|
|
7
|
-
import {
|
|
8
|
-
CodeCopy,
|
|
9
|
-
} from "../CodeCopy";
|
|
5
|
+
import { CodeCopy } from "../CodeCopy";
|
|
10
6
|
import * as cn from "./CodeTabs.styles"; // TODO: style by highlighted?
|
|
11
7
|
import { SyntaxHighlightedCode } from "../CodeTheme/CodeTheme";
|
|
12
8
|
import { useCodeSampleAnalytics } from "../CodeSample/CodeSampleAnalytics";
|
|
13
9
|
import { useUXEvents } from "../../uxsdk";
|
|
10
|
+
import { CodeContext } from "../CodeSample/CodeSample";
|
|
14
11
|
|
|
15
12
|
export interface CodeTabsProps {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
description: string;
|
|
14
|
+
highlighted: SyntaxHighlightedCode[];
|
|
15
|
+
className?: string;
|
|
16
|
+
controlByMeta?: boolean; // TODO: BETTER IN THE FUTURE
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
export function withCodeTabs(PreComponent) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return null
|
|
48
|
-
}
|
|
20
|
+
return function CodeTabs(props: CodeTabsProps) {
|
|
21
|
+
const isSingle = props?.highlighted?.length === 1 && !props.description;
|
|
22
|
+
const defaultValue =
|
|
23
|
+
props.highlighted[0]?.meta || props.highlighted[0]?.lang;
|
|
24
|
+
const [activeTab, setActiveTab] = useState(defaultValue);
|
|
25
|
+
const {markdownFormat} = useContext(CodeContext);
|
|
26
|
+
|
|
27
|
+
const codeSampleAnalytics = useCodeSampleAnalytics();
|
|
28
|
+
const ux = useUXEvents();
|
|
29
|
+
|
|
30
|
+
// Reset active tab when highlighted prop changes
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
setActiveTab(defaultValue);
|
|
33
|
+
}, [defaultValue]);
|
|
34
|
+
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
codeSampleAnalytics.setActiveTab(activeTab);
|
|
37
|
+
}, []);
|
|
38
|
+
|
|
39
|
+
function changeTab(value: string) {
|
|
40
|
+
setActiveTab(value);
|
|
41
|
+
codeSampleAnalytics.setActiveTab(value);
|
|
42
|
+
ux.docs.code.tab_change({ tab: value });
|
|
43
|
+
}
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
part="root"
|
|
54
|
-
data-single={String(isSingle)}
|
|
55
|
-
data-nodescription={!props.description ? "true" : undefined}
|
|
56
|
-
className={`${cn.CodeTabsRoot}`}
|
|
57
|
-
style={props.highlighted[0]?.style}
|
|
58
|
-
value={activeTab}
|
|
59
|
-
onValueChange={changeTab}
|
|
60
|
-
>
|
|
61
|
-
<$LanguageTabSwitcher
|
|
62
|
-
description={props.description}
|
|
63
|
-
highlighted={props.highlighted}
|
|
64
|
-
/>
|
|
45
|
+
if (props?.highlighted?.length === 0) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
65
48
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
style={codeblock?.style || codeblock?.style}
|
|
70
|
-
codeblock={codeblock}
|
|
71
|
-
/>
|
|
72
|
-
</TabsPrimitive.Content>
|
|
73
|
-
))}
|
|
74
|
-
</TabsPrimitive.Root>
|
|
75
|
-
</xyd-codetabs>
|
|
76
|
-
)
|
|
49
|
+
let ContentRoot = TabsPrimitive.Content
|
|
50
|
+
if (markdownFormat) { // TODO: BETTER IN THE FUTURE
|
|
51
|
+
ContentRoot = React.Fragment
|
|
77
52
|
}
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<xyd-codetabs className={`${cn.CodeTabsHost} ${props.className || ""}`}>
|
|
56
|
+
<TabsPrimitive.Root
|
|
57
|
+
part="root"
|
|
58
|
+
data-single={String(isSingle)}
|
|
59
|
+
data-nodescription={!props.description ? "true" : undefined}
|
|
60
|
+
className={`${cn.CodeTabsRoot}`}
|
|
61
|
+
style={props.highlighted[0]?.style}
|
|
62
|
+
value={activeTab}
|
|
63
|
+
onValueChange={changeTab}
|
|
64
|
+
>
|
|
65
|
+
<$LanguageTabSwitcher
|
|
66
|
+
description={props.description}
|
|
67
|
+
highlighted={props.highlighted}
|
|
68
|
+
/>
|
|
69
|
+
|
|
70
|
+
{props.highlighted?.map((codeblock, i) => (
|
|
71
|
+
<ContentRoot
|
|
72
|
+
value={codeblock.meta || codeblock.lang}
|
|
73
|
+
key={i}
|
|
74
|
+
>
|
|
75
|
+
<PreComponent
|
|
76
|
+
style={codeblock?.style || codeblock?.style}
|
|
77
|
+
codeblock={codeblock}
|
|
78
|
+
/>
|
|
79
|
+
</ContentRoot>
|
|
80
|
+
))}
|
|
81
|
+
</TabsPrimitive.Root>
|
|
82
|
+
</xyd-codetabs>
|
|
83
|
+
);
|
|
84
|
+
};
|
|
78
85
|
}
|
|
79
86
|
|
|
80
87
|
interface LanguageTabSwitcherProps {
|
|
81
|
-
|
|
82
|
-
|
|
88
|
+
description: string;
|
|
89
|
+
highlighted: HighlightedCode[];
|
|
83
90
|
}
|
|
84
91
|
|
|
85
92
|
function $LanguageTabSwitcher(props: LanguageTabSwitcherProps) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
const isSingle = props?.highlighted?.length === 1 && !props.description;
|
|
94
|
+
|
|
95
|
+
const highlighted = props.highlighted.filter(
|
|
96
|
+
(item, index, self) =>
|
|
97
|
+
index ===
|
|
98
|
+
self.findIndex((t) => (t.meta || t.lang) === (item.meta || item.lang))
|
|
99
|
+
);
|
|
100
|
+
return (
|
|
101
|
+
<xyd-codetabs-languages
|
|
102
|
+
data-single={String(isSingle)}
|
|
103
|
+
className={`
|
|
94
104
|
${cn.CodeTabsLanguagesHost}
|
|
95
|
-
`}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{props.description}
|
|
101
|
-
</div>
|
|
102
|
-
</div>
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
<TabsPrimitive.List part="languages-list">
|
|
106
|
-
{highlighted?.map(({ meta, lang }, i) => {
|
|
107
|
-
if (isSingle) {
|
|
108
|
-
return null
|
|
109
|
-
}
|
|
110
|
-
return <TabsPrimitive.Trigger
|
|
111
|
-
part="language-trigger"
|
|
112
|
-
value={meta || lang}
|
|
113
|
-
key={i}
|
|
114
|
-
>
|
|
115
|
-
{meta || lang}
|
|
116
|
-
</TabsPrimitive.Trigger>
|
|
117
|
-
})}
|
|
118
|
-
</TabsPrimitive.List>
|
|
119
|
-
|
|
120
|
-
<div part="copy">
|
|
121
|
-
{highlighted?.map((codeblock, i) => (
|
|
122
|
-
<TabsPrimitive.Content value={codeblock.meta || codeblock.lang} asChild key={i}>
|
|
123
|
-
<CodeCopy text={codeblock.value} />
|
|
124
|
-
</TabsPrimitive.Content>
|
|
125
|
-
))}
|
|
105
|
+
`}
|
|
106
|
+
>
|
|
107
|
+
{props.description && (
|
|
108
|
+
<div part="description">
|
|
109
|
+
<div part="description-item">{props.description}</div>
|
|
126
110
|
</div>
|
|
111
|
+
)}
|
|
112
|
+
|
|
113
|
+
<TabsPrimitive.List part="languages-list">
|
|
114
|
+
{highlighted?.map(({ meta, lang }, i) => {
|
|
115
|
+
if (isSingle) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return (
|
|
119
|
+
<TabsPrimitive.Trigger
|
|
120
|
+
part="language-trigger"
|
|
121
|
+
value={meta || lang}
|
|
122
|
+
key={i}
|
|
123
|
+
>
|
|
124
|
+
{meta || lang}
|
|
125
|
+
</TabsPrimitive.Trigger>
|
|
126
|
+
);
|
|
127
|
+
})}
|
|
128
|
+
</TabsPrimitive.List>
|
|
129
|
+
|
|
130
|
+
<div part="copy">
|
|
131
|
+
{highlighted?.map((codeblock, i) => (
|
|
132
|
+
<TabsPrimitive.Content
|
|
133
|
+
value={codeblock.meta || codeblock.lang}
|
|
134
|
+
asChild
|
|
135
|
+
key={i}
|
|
136
|
+
>
|
|
137
|
+
<CodeCopy text={codeblock.value} />
|
|
138
|
+
</TabsPrimitive.Content>
|
|
139
|
+
))}
|
|
140
|
+
</div>
|
|
127
141
|
</xyd-codetabs-languages>
|
|
142
|
+
);
|
|
128
143
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_rollupPluginBabelHelpers-iq1gUDHm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
|