Skip to content

nanarino/na-lit

Repository files navigation

nanarinostyl/lit

pnpm v9 nodejs v22

一個 nanarinostyl 主題的 lit 元件合集

開發

pnpm i
pnpm dev

约束

爲了可以源碼引入,不要使用路徑別名如 @

爲了在 html 内能直接引入,lit 模板内不要第三方元件如 <iconify-icon />

爲了在不安全的域下運行,不要使用安全性高的 API 如 CSS.paintWorklet

爲了在 win7 裏能勉强運行,lit css 模板内不要使用 chrome 109 以上的 API 如 nesting style

構建

pnpm build

利用

先決條件是引入 nanarinostyl,以 astro 為例

pnpm i nanarinostyl
---
import nanarinostyl from "nanarinostyl?url"
import ChienChiaF from "@/assets/fonts/ChienChia-F.styl?url"
---
<html lang="zh-TW">
    <head>
        <!-- 先引入樣式套件 並標記 [data-nanarino-lit-provide] -->
        <link rel="stylesheet" href={nanarinostyl} data-nanarino-lit-provide />
        <link
            rel="stylesheet"
            href={ChienChiaF}
            data-nanarino-lit-provide
            onload="document.documentElement.style.setProperty('--font-family-base', 'ChienChia-F')"
        />
        <!-- 初始化客户端 -->
        <script src="@/scripts/client/init"></script>
    </head>
    <body>
        <slot />
    </body>
</html>

元件暫時未計劃發佈到 npm, 或者直接從源程式碼拷貝到自己的專案, 或從 github 安裝:

// package.json
{
    "dependencies": {
+       "@nanarinostyl/lit": "github:nanarino/na-lit#prepare",
    },
    "pnpm": {
        "overrides": {
+           "nanarinostyl": "$nanarinostyl",
        }
    }
}

分支 #prepare 安裝時觸發自動構建, 在 ts 的裝飾器默認開啓之前是必須

pnpm update @nanarinostyl/lit

為了減小包體積,樣式是額外注入的

實際上這裏利用的 LitElement.prototype.styles 就是原生的 shadowRoot.adoptedStyleSheets (不可用時回退)

// @/scripts/client/init
// import 立即註冊元件 作為副作用
import { NanarinoLitComponent } from "@nanarinostyl/lit/dist/all.js"
// 或按需:
import { NanarinoLitComponent } from "@nanarinostyl/lit/dist/base"

const provides = Array.from(
    document.querySelectorAll("link[data-nanarino-lit-provide]")
) as HTMLLinkElement[]

for (const css of provides
    .reduce(
        (rules: CSSRule[], link) => [...rules, ...(link.sheet?.cssRules ?? [])],
        []
    )
    .reverse()) {
    // 點解要用try 見 https://github.com/nanarino/na-lit/issues/1
    try {
        NanarinoLitComponent.adoptedStyle.insertRule(css.cssText)
    } catch (error) {
        console.warn(error)
    }
}

頁面中使用,如

<section>
    <na-pagination total="36"></na-pagination>
</section>

按需須要單獨註冊,如 import "@nanarinostyl/lit/dist/Pagination/index.js" 以使用 <na-pagination />

避免FOUC

不只本套件,這對於所有元件適用

na-svg-icon:not(:defined) {
    opacity: 0;
}

About

一個 nanarinostyl 主題的 lit 元件合集

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published