自定义 DuoyunUI

DuoyunUI 自带主题、图标、文本,在应用中可以这样使用它们:

import { css, adoptedStyle, customElement, GemElement, html } from '@mantou/gem';
import { theme } from 'duoyun-ui/lib/theme';
import { icons } from 'duoyun-ui/lib/icons';
import { locale } from 'duoyun-ui/lib/locale';

import '@mantou/gem';

const style = css`
  gem-use {
    color: ${theme.positiveColor};
  }
`;

@customElement('my-ele')
@adoptedStyle(style)
export class MyEleElement extends GemElement {
  render = () => {
    return html`<gem-use .element=${icons.more}>${locale.more}</gem-use>`;
  };
}

可以轻松修改或扩展它们。

自定义主题

使用自带暗黑主题:

import { theme, darkTheme } from 'duoyun-ui/lib/theme';

theme(darkTheme);

使用自定义主题色:

import { theme } from 'duoyun-ui/lib/theme';

theme({ primaryColor: 'blue' });

扩展主题:

import { extendTheme } from 'duoyun-ui/lib/theme';

export const theme = extendTheme({ myColor: '#f00' });

自定义图标

目前 DuoyunUI 使用 Material Icon, 修改和扩展 Icon:

import { extendIcons } from 'duoyun-ui/lib/icons';

const icons = extendIcons({
  more: `
    <svg part="icon" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
      <path d="M0 0h24v24H0z" fill="none" stroke="none"></path>
      <path d="M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"></path>
    </svg>
  `,
  myIcon: ``,
});

自定义文本

DuoyunUI 默认使用英语,指定成中文并修改某个文本:

import { local } from 'duoyun-ui/lib/locale';
import zh from 'duoyun-ui/locales/zh';

local({ ...zh, more: '其他' });

loadLocale 支持加载 Promise,所以你可以很方便的按需加载,下面是 Gem I18n 方案的例子:

import { I18n } from '@mantou/gem/helper/i18n';
import { loadLocale } from 'duoyun-ui/lib/locale';

import zhCN from 'src/locales/templates/messages.json';

export const i18n = new I18n<typeof zhCN>({
  fallbackLanguage: 'zh-CN',
  resources: {
    'zh-CN': zhCN,
    en: () => import('src/locales/en/messages.json'),
  },
  onChange: (code: keyof typeof langNames) => {
    switch (code) {
      case 'en':
        return loadLocale(import('duoyun-ui/locales/en'));
      case 'zh-CN':
        return loadLocale(import('duoyun-ui/locales/zh'));
    }
  },
});

查看当前支持的语言。