storybook-i18n
Version:
Tool to set the locale in Storybook for i18n
68 lines (65 loc) • 1.94 kB
JavaScript
import { ADDON_ID, TOOL_ID, EVENT_NAME } from './chunk-Y77HUBL6.js';
import React from 'react';
import { addons, types, useGlobals, useChannel } from 'storybook/manager-api';
import { WithTooltip, TooltipLinkList, IconButton } from 'storybook/internal/components';
import { GlobeIcon } from '@storybook/icons';
var getValue = (value) => {
if (typeof value === "string") {
return { title: value };
}
return {
title: value.title || "",
icon: value.icon,
right: value.right
};
};
var getLocales = (locales, locale, onSelect) => locales ? Object.entries(locales).map(([key, value]) => ({
...getValue(value),
id: key,
active: key === locale,
onClick: () => onSelect(key)
})) : [
{
id: "none",
title: "No locales in parameters",
active: true,
onClick: () => {
}
}
];
var Tool = () => {
const [globals, updateGlobals] = useGlobals();
const { locale, locales } = globals;
const emit = useChannel({});
return /* @__PURE__ */ React.createElement(
WithTooltip,
{
closeOnOutsideClick: true,
placement: "top",
tooltip: ({ onHide }) => /* @__PURE__ */ React.createElement(
TooltipLinkList,
{
links: getLocales(locales, locale, (selected) => {
if (selected !== locale) {
updateGlobals({ locale: selected });
emit(EVENT_NAME, selected);
}
onHide();
})
}
),
trigger: "click"
},
/* @__PURE__ */ React.createElement(IconButton, { key: "i18n-locale", title: "Locale Selector" }, /* @__PURE__ */ React.createElement(GlobeIcon, null))
);
};
var Tool_default = Tool;
// src/manager.tsx
addons.register(ADDON_ID, () => {
addons.add(TOOL_ID, {
title: "Storybook i18n",
type: types.TOOL,
match: ({ viewMode }) => !!viewMode?.match(/^(story|docs)$/),
render: () => /* @__PURE__ */ React.createElement(Tool_default, null)
});
});