From 28c46c0ef429202e49485ba3668871315bd1e6dd Mon Sep 17 00:00:00 2001 From: mantou132 <709922234@qq.com> Date: Fri, 19 Jan 2024 01:27:06 +0800 Subject: [PATCH] [duoyun-ui] Add `` `` --- .../duoyun-ui/docs/zh/01-guide/55-pattern.md | 2 +- .../duoyun-ui/docs/zh/30-blog/200-crud.md | 2 +- packages/duoyun-ui/src/lib/icons.ts | 6 + packages/duoyun-ui/src/lib/styles.ts | 8 +- packages/duoyun-ui/src/lib/utils.ts | 5 + packages/duoyun-ui/src/patterns/console.ts | 19 +- packages/duoyun-ui/src/patterns/footer.ts | 278 ++++++++++++++++ packages/duoyun-ui/src/patterns/nav.ts | 313 ++++++++++++++++++ packages/gem-book/src/plugins/example.ts | 36 +- packages/gem-examples/src/console/index.ts | 2 +- packages/gem-examples/src/homepage/index.ts | 151 +++++++++ 11 files changed, 790 insertions(+), 32 deletions(-) create mode 100644 packages/duoyun-ui/src/patterns/footer.ts create mode 100644 packages/duoyun-ui/src/patterns/nav.ts create mode 100644 packages/gem-examples/src/homepage/index.ts diff --git a/packages/duoyun-ui/docs/zh/01-guide/55-pattern.md b/packages/duoyun-ui/docs/zh/01-guide/55-pattern.md index 6cdc7f86..e9aeb949 100644 --- a/packages/duoyun-ui/docs/zh/01-guide/55-pattern.md +++ b/packages/duoyun-ui/docs/zh/01-guide/55-pattern.md @@ -17,7 +17,7 @@ render( html` + `, + ), menu: genIcon(`M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z`), filter: genIcon(`M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z`), more: genIcon( diff --git a/packages/duoyun-ui/src/lib/styles.ts b/packages/duoyun-ui/src/lib/styles.ts index 1b9e2809..66c33519 100644 --- a/packages/duoyun-ui/src/lib/styles.ts +++ b/packages/duoyun-ui/src/lib/styles.ts @@ -6,12 +6,12 @@ import { theme } from '../lib/theme'; // global style: `::selection`, `::target-text`, `::highlight` // https://bugzilla.mozilla.org/show_bug.cgi?id=1868009 export const focusStyle = createCSSSheet(css` - :host(:focus), - :focus { + :host(:where(:focus)), + :where(:focus) { outline: none; } - :host(:focus-visible), - :focus-visible { + :host(:where(:focus-visible)), + :where(:focus-visible) { outline: 2px solid ${theme.focusColor}; outline-offset: -2px; } diff --git a/packages/duoyun-ui/src/lib/utils.ts b/packages/duoyun-ui/src/lib/utils.ts index a4a4aefa..8a3493b0 100644 --- a/packages/duoyun-ui/src/lib/utils.ts +++ b/packages/duoyun-ui/src/lib/utils.ts @@ -389,3 +389,8 @@ export function createCacheStore>( const [store, , save] = useCacheStore(storageKey, initStore, options); return [store, save] as const; } + +// 是链接需要使用 img 渲染 +export function isRemoteIcon(icon: string | Element | DocumentFragment): icon is string { + return typeof icon === 'string' && !!icon.trim().match(/^(http|[./])/); +} diff --git a/packages/duoyun-ui/src/patterns/console.ts b/packages/duoyun-ui/src/patterns/console.ts index 90fb9250..e0d4bd63 100644 --- a/packages/duoyun-ui/src/patterns/console.ts +++ b/packages/duoyun-ui/src/patterns/console.ts @@ -12,6 +12,7 @@ import type { NavItems } from '../elements/side-navigation'; import type { DuoyunUseElement } from '../elements/use'; import { DuoyunRouteElement, RouteItem, RoutesObject } from '../elements/route'; import { ContextMenu, ContextMenuItem } from '../elements/contextmenu'; +import { isRemoteIcon } from '../lib/utils'; import '../elements/title'; import '../elements/use'; @@ -142,7 +143,8 @@ const style = createCSSSheet( : rules, ); -const globalStyle = createCSSSheet(css` +// 禁止向皮条 +const consoleStyle = createCSSSheet(css` ::selection, ::target-text { color: white; @@ -152,22 +154,19 @@ const globalStyle = createCSSSheet(css` color: white; background: ${theme.informativeColor}; } - :root { + :where(:root) { font-family: -apple-system, system-ui, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', 'PingFang SC', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; - } - html { height: 100%; overflow: hidden; } - body { + :where(body) { height: 100%; overflow: auto; - scrollbar-width: thin; + overscroll-behavior: none; margin: 0; - padding: 0; } `); @@ -176,14 +175,14 @@ const globalStyle = createCSSSheet(css` */ @customElement('dy-pat-console') @adoptedStyle(style) -@adoptedStyle(globalStyle) +@adoptedStyle(consoleStyle) export class DyPatConsoleElement extends GemElement { @boolattribute keyboardAccess: boolean; @boolattribute screencastMode: boolean; @boolattribute responsive: boolean; - @attribute logo: string; @attribute name: string; + @property logo: string | Element | DocumentFragment; @property routes?: Routes; @property navItems?: NavItems; @property contextMenus?: ContextMenus; @@ -224,7 +223,7 @@ export class DyPatConsoleElement extends GemElement { return html`