UNPKG

storybook-i18n

Version:

Tool to set the locale in Storybook for i18n

68 lines (65 loc) 1.94 kB
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) }); });