Skip to content

Commit 3ad9c2e

Browse files
committed
.
1 parent 3f9df08 commit 3ad9c2e

7 files changed

Lines changed: 35 additions & 58 deletions

File tree

app/components/Package/Playgrounds.vue

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ const providerIcons: Record<string, string> = {
1717
'nuxt-new': 'i-simple-icons:nuxtdotjs',
1818
'vite-new': 'i-simple-icons:vite',
1919
'jsfiddle': 'i-lucide:code',
20+
'storybook': 'i-simple-icons:storybook',
2021
}
2122
2223
// Map provider id to color class
@@ -30,6 +31,7 @@ const providerColors: Record<string, string> = {
3031
'nuxt-new': 'text-provider-nuxt',
3132
'vite-new': 'text-provider-vite',
3233
'jsfiddle': 'text-provider-jsfiddle',
34+
'storybook': 'text-provider-storybook',
3335
}
3436
3537
function getIcon(provider: string): string {

app/components/VersionSelector.vue

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,15 +74,7 @@ const versionToTags = computed(() => buildVersionToTagsMap(props.distTags))
7474
7575
/** Get URL for a specific version */
7676
function getVersionUrl(version: string): string {
77-
let url = props.urlPattern.replace('{version}', version)
78-
// Replace storyid placeholder if it exists
79-
if (url.includes('{storyid}')) {
80-
// Get current storyid from route query
81-
const route = useRoute()
82-
const currentStoryId = route.query.storyid as string
83-
url = url.replace('{storyid}', currentStoryId || '')
84-
}
85-
return url
77+
return props.urlPattern.replace('{version}', version)
8678
}
8779
8880
/** Safe semver comparison with fallback */

app/pages/package-stories/[...path].vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ const { data: pkg } = usePackage(packageName)
5252
// URL pattern for version selector - maintain current story if available
5353
const versionUrlPattern = computed(() => {
5454
const base = `/package-stories/${packageName.value}/v/{version}`
55-
// Use placeholder for storyid that will be handled by version switch watcher
56-
return currentStoryId.value ? `${base}?storyid={storyid}` : base
55+
// Directly include the current storyid if available
56+
return currentStoryId.value ? `${base}?storyid=${currentStoryId.value}` : base
5757
})
5858
5959
// Fetch package.json to get Storybook URL
@@ -383,7 +383,7 @@ defineOgImageComponent('Default', {
383383
</div>
384384
<div class="flex items-center gap-2">
385385
<a
386-
:href="packageJson.storybook.url"
386+
:href="packageJson.storybook.url + '?path=/story/' + currentStoryId"
387387
target="_blank"
388388
rel="noopener noreferrer"
389389
class="px-2 py-1 font-mono text-xs text-fg-muted bg-bg-subtle border border-border rounded hover:text-fg hover:border-border-hover transition-colors inline-flex items-center gap-1"

app/pages/package/[[org]]/[name].vue

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,20 @@ const {
131131
},
132132
)
133133
134+
const playgroundLinks = computed(() => [
135+
...readmeData.value.playgroundLinks,
136+
...(packageJson.value?.storybook
137+
? [
138+
{
139+
url: packageJson.value.storybook.url,
140+
provider: 'storybook',
141+
providerName: 'Storybook',
142+
label: 'Storybook',
143+
},
144+
]
145+
: []),
146+
])
147+
134148
//copy README file as Markdown
135149
const { copied: copiedReadme, copy: copyReadme } = useClipboard({
136150
source: () => '',
@@ -186,9 +200,7 @@ const {
186200
immediate: false,
187201
},
188202
)
189-
onMounted(() => {
190-
fetchInstallSize()
191-
})
203+
onMounted(() => fetchInstallSize())
192204
193205
const { data: skillsData } = useLazyFetch<SkillsListResponse>(
194206
() => {
@@ -805,6 +817,15 @@ const showSkeleton = shallowRef(false)
805817
>
806818
{{ $t('package.links.code') }}
807819
</LinkBase>
820+
<LinkBase
821+
v-if="packageJson?.storybook"
822+
variant="button-secondary"
823+
:to="{ name: 'stories', params: { path: [pkg.name, 'v', resolvedVersion] } }"
824+
aria-keyshortcuts="."
825+
classicon="i-carbon:code"
826+
>
827+
stories
828+
</LinkBase>
808829
<LinkBase
809830
variant="button-secondary"
810831
:to="{ name: 'compare', query: { packages: pkg.name } }"
@@ -1385,23 +1406,7 @@ const showSkeleton = shallowRef(false)
13851406
/>
13861407

13871408
<!-- Playground links -->
1388-
<PackagePlaygrounds
1389-
v-if="readmeData?.playgroundLinks?.length"
1390-
:links="readmeData.playgroundLinks"
1391-
/>
1392-
1393-
<!-- <StorybookPlaygrounds
1394-
v-if="readmeData?.storybookPlaygrounds?.length"
1395-
:links="readmeData.storybookPlaygroundLinks"
1396-
/> -->
1397-
1398-
<a v-if="packageJson?.storybook" :href="packageJson.storybook.url">storybook</a>
1399-
<a
1400-
v-if="packageJson?.storybook"
1401-
:href="`/package-stories/${pkg.name}/v/${resolvedVersion}`"
1402-
>sb internal</a
1403-
>
1404-
<!-- :to="{ name: 'code', params: { path: [pkg.name, 'v', resolvedVersion] } }" -->
1409+
<PackagePlaygrounds v-if="playgroundLinks.length" :links="playgroundLinks" />
14051410

14061411
<PackageCompatibility :engines="displayVersion?.engines" />
14071412

app/utils/storybook-tree.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,13 @@ export function transformStorybookEntries(
99
const tree: StorybookFileTree[] = []
1010
const dirMap = new Map<string, StorybookFileTree>()
1111

12-
// Sort entries by title for consistent ordering
13-
const sortedEntries = Object.values(entries).sort((a, b) =>
14-
(a.title || '').localeCompare(b.title || ''),
15-
)
16-
17-
for (const entry of sortedEntries) {
12+
// Use entries in original order to preserve object key ordering
13+
for (const [_id, entry] of Object.entries(entries)) {
1814
// Parse title into path parts
1915
// "Example/Button/Primary" -> ["Example", "Button", "Primary"]
2016
if (!entry.title) continue
2117
const parts = entry.title.split('/')
22-
const storyName = parts.pop()! // Last part is the story name
18+
const storyName = entry.name
2319
const storyPath = parts.join('/') || '' || ''
2420

2521
// Create directories as needed

lunaria/files/en-GB.json

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -669,25 +669,6 @@
669669
},
670670
"file_path": "File path"
671671
},
672-
"stories": {
673-
"stories_label": "Stories",
674-
"story_path": "Story path",
675-
"root": "Stories",
676-
"version_required": "Version is required to browse stories",
677-
"go_to_package": "Go to package",
678-
"loading_stories": "Loading Storybook stories...",
679-
"no_storybook_found": "No Storybook found",
680-
"check_package_json": "Check if this package has Storybook configuration in package.json",
681-
"back_to_package": "Back to package",
682-
"failed_to_load_stories": "Failed to load Storybook stories",
683-
"storybook_unavailable": "The Storybook instance may be unavailable or misconfigured",
684-
"open_storybook": "Open Storybook",
685-
"story": "Story",
686-
"open_in_storybook": "Open in Storybook",
687-
"select_story": "Select a story from the tree to view it here",
688-
"toggle_tree": "Toggle story tree",
689-
"close_tree": "Close story tree"
690-
},
691672
"badges": {
692673
"provenance": {
693674
"verified": "verified",

uno.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ export default defineConfig({
100100
nuxt: '#00DC82',
101101
vite: '#646CFF',
102102
jsfiddle: '#0084FF',
103+
storybook: '#FF4785',
103104
},
104105
},
105106
animation: {

0 commit comments

Comments
 (0)