@weapp-vite/web 1.3.36 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +144 -5
- package/dist/_virtual/_rolldown/runtime.mjs +19 -1
- package/dist/compiler/wxml/attributes.mjs +1 -1
- package/dist/compiler/wxml/attributes.mjs.map +1 -1
- package/dist/compiler/wxml/compile.mjs +6 -3
- package/dist/compiler/wxml/compile.mjs.map +1 -1
- package/dist/compiler/wxml/interpolation.mjs +1 -2
- package/dist/compiler/wxml/interpolation.mjs.map +1 -1
- package/dist/compiler/wxml/navigation.mjs +5 -7
- package/dist/compiler/wxml/navigation.mjs.map +1 -1
- package/dist/compiler/wxml/parser.mjs +5 -5
- package/dist/compiler/wxml/parser.mjs.map +1 -1
- package/dist/compiler/wxml/renderer.mjs +13 -12
- package/dist/compiler/wxml/renderer.mjs.map +1 -1
- package/dist/compiler/wxml/specialNodes.mjs +6 -1
- package/dist/compiler/wxml/specialNodes.mjs.map +1 -1
- package/dist/compiler/wxml/types.d.mts +12 -0
- package/dist/compiler/wxs.mjs +5 -5
- package/dist/compiler/wxs.mjs.map +1 -1
- package/dist/css/wxss.d.mts +1 -0
- package/dist/css/wxss.mjs +110 -9
- package/dist/css/wxss.mjs.map +1 -1
- package/dist/index.d.mts +29 -6
- package/dist/index.mjs +197 -4
- package/dist/index.mjs.map +1 -0
- package/dist/plugin/assets.d.mts +7 -0
- package/dist/plugin/assets.mjs +122 -0
- package/dist/plugin/assets.mjs.map +1 -0
- package/dist/plugin/constants.mjs +10 -1
- package/dist/plugin/constants.mjs.map +1 -1
- package/dist/plugin/dependencyScan.mjs +41 -0
- package/dist/plugin/dependencyScan.mjs.map +1 -0
- package/dist/plugin/entry.mjs +56 -7
- package/dist/plugin/entry.mjs.map +1 -1
- package/dist/plugin/files.mjs +1 -1
- package/dist/plugin/files.mjs.map +1 -1
- package/dist/plugin/index.d.mts +37 -3
- package/dist/plugin/index.mjs +245 -74
- package/dist/plugin/index.mjs.map +1 -1
- package/dist/plugin/layout.mjs +24 -0
- package/dist/plugin/layout.mjs.map +1 -0
- package/dist/plugin/path.mjs +4 -1
- package/dist/plugin/path.mjs.map +1 -1
- package/dist/plugin/register.mjs +48 -36
- package/dist/plugin/register.mjs.map +1 -1
- package/dist/plugin/scan.mjs +206 -94
- package/dist/plugin/scan.mjs.map +1 -1
- package/dist/plugin/scanSfc.mjs +65 -0
- package/dist/plugin/scanSfc.mjs.map +1 -0
- package/dist/plugin/state.mjs +3 -2
- package/dist/plugin/state.mjs.map +1 -1
- package/dist/plugin/styleModule.mjs +52 -0
- package/dist/plugin/styleModule.mjs.map +1 -0
- package/dist/plugin/types.d.mts +46 -1
- package/dist/plugin/vueSfc.mjs +149 -0
- package/dist/plugin/vueSfc.mjs.map +1 -0
- package/dist/runtime/appShell/container.mjs +25 -0
- package/dist/runtime/appShell/container.mjs.map +1 -0
- package/dist/runtime/appShell/tabBar/index.mjs +192 -0
- package/dist/runtime/appShell/tabBar/index.mjs.map +1 -0
- package/dist/runtime/appShell/tabBar/style.mjs +127 -0
- package/dist/runtime/appShell/tabBar/style.mjs.map +1 -0
- package/dist/runtime/button/helpers.mjs +1 -58
- package/dist/runtime/button/helpers.mjs.map +1 -1
- package/dist/runtime/button/index.d.mts +4 -5
- package/dist/runtime/button/index.mjs +6 -28
- package/dist/runtime/button/index.mjs.map +1 -1
- package/dist/runtime/button/style.mjs +53 -28
- package/dist/runtime/button/style.mjs.map +1 -1
- package/dist/runtime/component/behavior.mjs +26 -2
- package/dist/runtime/component/behavior.mjs.map +1 -1
- package/dist/runtime/component/element.mjs +107 -31
- package/dist/runtime/component/element.mjs.map +1 -1
- package/dist/runtime/component/observers.mjs +36 -0
- package/dist/runtime/component/observers.mjs.map +1 -0
- package/dist/runtime/component/publicInstance.mjs +48 -0
- package/dist/runtime/component/publicInstance.mjs.map +1 -0
- package/dist/runtime/component/relations.mjs +35 -0
- package/dist/runtime/component/relations.mjs.map +1 -0
- package/dist/runtime/component/slots.mjs +24 -0
- package/dist/runtime/component/slots.mjs.map +1 -0
- package/dist/runtime/component/state.mjs +13 -3
- package/dist/runtime/component/state.mjs.map +1 -1
- package/dist/runtime/component/types.d.mts +29 -4
- package/dist/runtime/component/virtualHost.mjs +83 -0
- package/dist/runtime/component/virtualHost.mjs.map +1 -0
- package/dist/runtime/host/index.d.mts +13 -0
- package/dist/runtime/host/index.mjs +47 -0
- package/dist/runtime/host/index.mjs.map +1 -0
- package/dist/runtime/host/types.d.mts +28 -0
- package/dist/runtime/hostGlobals.d.mts +9 -0
- package/dist/runtime/hostGlobals.mjs +39 -0
- package/dist/runtime/hostGlobals.mjs.map +1 -0
- package/dist/runtime/index.d.mts +21 -3
- package/dist/runtime/index.mjs +26 -4
- package/dist/runtime/index.mjs.map +1 -0
- package/dist/runtime/legacyTemplate/dom.mjs +3 -3
- package/dist/runtime/legacyTemplate/dom.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/expression.mjs +9 -9
- package/dist/runtime/legacyTemplate/expression.mjs.map +1 -1
- package/dist/runtime/legacyTemplate/index.mjs +6 -6
- package/dist/runtime/legacyTemplate/index.mjs.map +1 -1
- package/dist/runtime/nativeComponents/canvas/index.mjs +53 -0
- package/dist/runtime/nativeComponents/canvas/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/checkbox.mjs +137 -0
- package/dist/runtime/nativeComponents/checkbox.mjs.map +1 -0
- package/dist/runtime/nativeComponents/cover/index.mjs +23 -0
- package/dist/runtime/nativeComponents/cover/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/form.d.mts +7 -0
- package/dist/runtime/nativeComponents/form.mjs +50 -0
- package/dist/runtime/nativeComponents/form.mjs.map +1 -0
- package/dist/runtime/nativeComponents/formControl.mjs +61 -0
- package/dist/runtime/nativeComponents/formControl.mjs.map +1 -0
- package/dist/runtime/nativeComponents/helpers.mjs +25 -0
- package/dist/runtime/nativeComponents/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/icon/helpers.mjs +42 -0
- package/dist/runtime/nativeComponents/icon/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/icon/index.mjs +45 -0
- package/dist/runtime/nativeComponents/icon/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/icon/style.mjs +176 -0
- package/dist/runtime/nativeComponents/icon/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/image.d.mts +8 -0
- package/dist/runtime/nativeComponents/image.mjs +121 -0
- package/dist/runtime/nativeComponents/image.mjs.map +1 -0
- package/dist/runtime/nativeComponents/index.d.mts +11 -0
- package/dist/runtime/nativeComponents/index.mjs +83 -0
- package/dist/runtime/nativeComponents/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/input.d.mts +8 -0
- package/dist/runtime/nativeComponents/input.mjs +131 -0
- package/dist/runtime/nativeComponents/input.mjs.map +1 -0
- package/dist/runtime/nativeComponents/label.mjs +36 -0
- package/dist/runtime/nativeComponents/label.mjs.map +1 -0
- package/dist/runtime/nativeComponents/mediaRegistry.mjs +47 -0
- package/dist/runtime/nativeComponents/mediaRegistry.mjs.map +1 -0
- package/dist/runtime/nativeComponents/movable/helpers.mjs +23 -0
- package/dist/runtime/nativeComponents/movable/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/movable/index.mjs +117 -0
- package/dist/runtime/nativeComponents/movable/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/navigator.mjs +200 -0
- package/dist/runtime/nativeComponents/navigator.mjs.map +1 -0
- package/dist/runtime/nativeComponents/picker/editors.mjs +74 -0
- package/dist/runtime/nativeComponents/picker/editors.mjs.map +1 -0
- package/dist/runtime/nativeComponents/picker/helpers.mjs +57 -0
- package/dist/runtime/nativeComponents/picker/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/picker/index.mjs +210 -0
- package/dist/runtime/nativeComponents/picker/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/picker/style.mjs +71 -0
- package/dist/runtime/nativeComponents/picker/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/pickerView/column.mjs +134 -0
- package/dist/runtime/nativeComponents/pickerView/column.mjs.map +1 -0
- package/dist/runtime/nativeComponents/pickerView/helpers.mjs +17 -0
- package/dist/runtime/nativeComponents/pickerView/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/pickerView/index.mjs +128 -0
- package/dist/runtime/nativeComponents/pickerView/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/pickerView/style.mjs +58 -0
- package/dist/runtime/nativeComponents/pickerView/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/primitives.mjs +16 -0
- package/dist/runtime/nativeComponents/primitives.mjs.map +1 -0
- package/dist/runtime/nativeComponents/progress/helpers.mjs +29 -0
- package/dist/runtime/nativeComponents/progress/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/progress/index.mjs +130 -0
- package/dist/runtime/nativeComponents/progress/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/progress/style.mjs +40 -0
- package/dist/runtime/nativeComponents/progress/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/radio.mjs +147 -0
- package/dist/runtime/nativeComponents/radio.mjs.map +1 -0
- package/dist/runtime/nativeComponents/richText/helpers.mjs +230 -0
- package/dist/runtime/nativeComponents/richText/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/richText/index.mjs +74 -0
- package/dist/runtime/nativeComponents/richText/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/scrollView.d.mts +15 -0
- package/dist/runtime/nativeComponents/scrollView.mjs +79 -0
- package/dist/runtime/nativeComponents/scrollView.mjs.map +1 -0
- package/dist/runtime/nativeComponents/slider/helpers.mjs +28 -0
- package/dist/runtime/nativeComponents/slider/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/slider/index.mjs +120 -0
- package/dist/runtime/nativeComponents/slider/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/slider/style.mjs +60 -0
- package/dist/runtime/nativeComponents/slider/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/style.mjs +41 -0
- package/dist/runtime/nativeComponents/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/swiper/helpers.mjs +52 -0
- package/dist/runtime/nativeComponents/swiper/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/swiper/index.mjs +235 -0
- package/dist/runtime/nativeComponents/swiper/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/swiper/item.mjs +14 -0
- package/dist/runtime/nativeComponents/swiper/item.mjs.map +1 -0
- package/dist/runtime/nativeComponents/swiper/style.mjs +20 -0
- package/dist/runtime/nativeComponents/swiper/style.mjs.map +1 -0
- package/dist/runtime/nativeComponents/switch.d.mts +7 -0
- package/dist/runtime/nativeComponents/switch.mjs +132 -0
- package/dist/runtime/nativeComponents/switch.mjs.map +1 -0
- package/dist/runtime/nativeComponents/textarea.d.mts +9 -0
- package/dist/runtime/nativeComponents/textarea.mjs +144 -0
- package/dist/runtime/nativeComponents/textarea.mjs.map +1 -0
- package/dist/runtime/nativeComponents/video/helpers.d.mts +12 -0
- package/dist/runtime/nativeComponents/video/helpers.mjs +21 -0
- package/dist/runtime/nativeComponents/video/helpers.mjs.map +1 -0
- package/dist/runtime/nativeComponents/video/index.mjs +124 -0
- package/dist/runtime/nativeComponents/video/index.mjs.map +1 -0
- package/dist/runtime/nativeComponents/video/style.mjs +14 -0
- package/dist/runtime/nativeComponents/video/style.mjs.map +1 -0
- package/dist/runtime/navigationBar/index.mjs +1 -3
- package/dist/runtime/navigationBar/index.mjs.map +1 -1
- package/dist/runtime/pageLayout.d.mts +9 -0
- package/dist/runtime/pageLayout.mjs +16 -0
- package/dist/runtime/pageLayout.mjs.map +1 -0
- package/dist/runtime/polyfill/animation.mjs +120 -0
- package/dist/runtime/polyfill/animation.mjs.map +1 -0
- package/dist/runtime/polyfill/appState.mjs +1 -1
- package/dist/runtime/polyfill/appState.mjs.map +1 -1
- package/dist/runtime/polyfill/async.d.mts +7 -0
- package/dist/runtime/polyfill/async.mjs.map +1 -1
- package/dist/runtime/polyfill/canvasContext.mjs +41 -0
- package/dist/runtime/polyfill/canvasContext.mjs.map +1 -1
- package/dist/runtime/polyfill/device.mjs +1 -1
- package/dist/runtime/polyfill/device.mjs.map +1 -1
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs +8 -2
- package/dist/runtime/polyfill/deviceAuthSystemApi.mjs.map +1 -1
- package/dist/runtime/polyfill/eventBus.mjs +56 -0
- package/dist/runtime/polyfill/eventBus.mjs.map +1 -0
- package/dist/runtime/polyfill/fileSystemManager.mjs +5 -2
- package/dist/runtime/polyfill/fileSystemManager.mjs.map +1 -1
- package/dist/runtime/polyfill/files.mjs +10 -10
- package/dist/runtime/polyfill/files.mjs.map +1 -1
- package/dist/runtime/polyfill/font.mjs +32 -0
- package/dist/runtime/polyfill/font.mjs.map +1 -0
- package/dist/runtime/polyfill/index.d.mts +2 -2
- package/dist/runtime/polyfill/index.mjs +49 -45
- package/dist/runtime/polyfill/index.mjs.map +1 -1
- package/dist/runtime/polyfill/interaction.mjs +7 -6
- package/dist/runtime/polyfill/interaction.mjs.map +1 -1
- package/dist/runtime/polyfill/interactionApi.mjs +3 -2
- package/dist/runtime/polyfill/interactionApi.mjs.map +1 -1
- package/dist/runtime/polyfill/intersectionObserver.mjs +106 -0
- package/dist/runtime/polyfill/intersectionObserver.mjs.map +1 -0
- package/dist/runtime/polyfill/locale.mjs +14 -0
- package/dist/runtime/polyfill/locale.mjs.map +1 -0
- package/dist/runtime/polyfill/locationApi.mjs +7 -4
- package/dist/runtime/polyfill/locationApi.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaActions.mjs +2 -2
- package/dist/runtime/polyfill/mediaActions.mjs.map +1 -1
- package/dist/runtime/polyfill/mediaApi/file.mjs +1 -1
- package/dist/runtime/polyfill/mediaApi/info.mjs +6 -4
- package/dist/runtime/polyfill/mediaApi/info.mjs.map +1 -1
- package/dist/runtime/polyfill/menuApi.mjs +38 -4
- package/dist/runtime/polyfill/menuApi.mjs.map +1 -1
- package/dist/runtime/polyfill/navigationBarRuntime.mjs +6 -1
- package/dist/runtime/polyfill/navigationBarRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/network/request.mjs +2 -2
- package/dist/runtime/polyfill/network/request.mjs.map +1 -1
- package/dist/runtime/polyfill/platformApi.mjs +1 -1
- package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs +88 -0
- package/dist/runtime/polyfill/routeRuntime/appLifecycle.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/dom.mjs +44 -15
- package/dist/runtime/polyfill/routeRuntime/dom.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/history.d.mts +30 -0
- package/dist/runtime/polyfill/routeRuntime/history.mjs +148 -0
- package/dist/runtime/polyfill/routeRuntime/history.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs +39 -8
- package/dist/runtime/polyfill/routeRuntime/lifecycle.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/options.d.mts +11 -1
- package/dist/runtime/polyfill/routeRuntime/options.mjs +0 -1
- package/dist/runtime/polyfill/routeRuntime/options.mjs.map +1 -1
- package/dist/runtime/polyfill/routeRuntime/result.mjs +12 -0
- package/dist/runtime/polyfill/routeRuntime/result.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/scroll.mjs +39 -0
- package/dist/runtime/polyfill/routeRuntime/scroll.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime/stack.mjs +122 -0
- package/dist/runtime/polyfill/routeRuntime/stack.mjs.map +1 -0
- package/dist/runtime/polyfill/routeRuntime.d.mts +26 -17
- package/dist/runtime/polyfill/routeRuntime.mjs +121 -96
- package/dist/runtime/polyfill/routeRuntime.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeDataApi.mjs +8 -3
- package/dist/runtime/polyfill/runtimeDataApi.mjs.map +1 -1
- package/dist/runtime/polyfill/runtimeOps.mjs +10 -6
- package/dist/runtime/polyfill/runtimeOps.mjs.map +1 -1
- package/dist/runtime/polyfill/selectorQuery.mjs +70 -14
- package/dist/runtime/polyfill/selectorQuery.mjs.map +1 -1
- package/dist/runtime/polyfill/storage.mjs +5 -2
- package/dist/runtime/polyfill/storage.mjs.map +1 -1
- package/dist/runtime/polyfill/system.mjs +30 -3
- package/dist/runtime/polyfill/system.mjs.map +1 -1
- package/dist/runtime/polyfill/types/locationRuntime.d.mts +1 -4
- package/dist/runtime/polyfill/types/platformRuntime.d.mts +9 -0
- package/dist/runtime/polyfill/types/systemAuth.d.mts +20 -9
- package/dist/runtime/polyfill/types/tabBarRuntime.d.mts +25 -0
- package/dist/runtime/polyfill/ui.mjs +2 -6
- package/dist/runtime/polyfill/ui.mjs.map +1 -1
- package/dist/runtime/polyfill/uiMediaApi.d.mts +11 -10
- package/dist/runtime/polyfill/uiMediaApi.mjs +26 -2
- package/dist/runtime/polyfill/uiMediaApi.mjs.map +1 -1
- package/dist/runtime/polyfill/videoContext.mjs +4 -0
- package/dist/runtime/polyfill/videoContext.mjs.map +1 -1
- package/dist/runtime/polyfill/vkSession.mjs +4 -14
- package/dist/runtime/polyfill/vkSession.mjs.map +1 -1
- package/dist/runtime/polyfill.d.mts +2 -2
- package/dist/runtime/renderContext.mjs +1 -1
- package/dist/runtime/renderContext.mjs.map +1 -1
- package/dist/runtime/rpx.mjs +17 -8
- package/dist/runtime/rpx.mjs.map +1 -1
- package/dist/runtime/seo/index.d.mts +31 -0
- package/dist/runtime/seo/index.mjs +94 -0
- package/dist/runtime/seo/index.mjs.map +1 -0
- package/dist/runtime/viewport/index.d.mts +12 -0
- package/dist/runtime/viewport/index.mjs +44 -0
- package/dist/runtime/viewport/index.mjs.map +1 -0
- package/dist/runtime/viewport/style.mjs +62 -0
- package/dist/runtime/viewport/style.mjs.map +1 -0
- package/dist/runtime/viewport/types.d.mts +14 -0
- package/dist/runtime/wevu.d.mts +20 -0
- package/dist/runtime/wevu.mjs +73 -0
- package/dist/runtime/wevu.mjs.map +1 -0
- package/dist/shared/nativeComponents.mjs +401 -0
- package/dist/shared/nativeComponents.mjs.map +1 -0
- package/dist/shared/tabBar.d.mts +19 -0
- package/dist/shared/tabBar.mjs +37 -0
- package/dist/shared/tabBar.mjs.map +1 -0
- package/dist/shared/wxml.mjs +3 -20
- package/dist/shared/wxml.mjs.map +1 -1
- package/package.json +13 -5
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { ensureAppContainer, getAppContainer, onDocumentReady } from "../container.mjs";
|
|
2
|
+
import { TAB_BAR_STYLE } from "./style.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/appShell/tabBar/index.ts
|
|
5
|
+
const TAB_BAR_TAG = "weapp-tab-bar";
|
|
6
|
+
const TAB_BAR_HEIGHT = "50px";
|
|
7
|
+
const BaseElement = globalThis.HTMLElement ?? class {};
|
|
8
|
+
let tabBarConfig;
|
|
9
|
+
let activeRoute = "";
|
|
10
|
+
let requestedVisible = true;
|
|
11
|
+
let animationEnabled = false;
|
|
12
|
+
let switchTabHandler;
|
|
13
|
+
let itemStates = [];
|
|
14
|
+
const instances = /* @__PURE__ */ new Set();
|
|
15
|
+
function resolveAssetUrl(value) {
|
|
16
|
+
if (!value || /^(?:data:|blob:|https?:\/\/|\/)/.test(value)) return value;
|
|
17
|
+
return `/${value.replace(/^\.\//, "")}`;
|
|
18
|
+
}
|
|
19
|
+
function isNativeTabBarVisible() {
|
|
20
|
+
return Boolean(tabBarConfig && !tabBarConfig.custom && requestedVisible && tabBarConfig.list.some((item) => item.pagePath === activeRoute));
|
|
21
|
+
}
|
|
22
|
+
function syncContainerInsets() {
|
|
23
|
+
const container = getAppContainer();
|
|
24
|
+
if (!container) return;
|
|
25
|
+
const bottomVisible = isNativeTabBarVisible() && tabBarConfig?.position !== "top";
|
|
26
|
+
const topVisible = isNativeTabBarVisible() && tabBarConfig?.position === "top";
|
|
27
|
+
container.style?.setProperty("--weapp-tab-bar-inset", bottomVisible ? `calc(${TAB_BAR_HEIGHT} + var(--weapp-safe-area-inset-bottom, 0px))` : "0px");
|
|
28
|
+
container.style?.setProperty("--weapp-tab-bar-top-inset", topVisible ? TAB_BAR_HEIGHT : "0px");
|
|
29
|
+
}
|
|
30
|
+
function updateInstances() {
|
|
31
|
+
syncContainerInsets();
|
|
32
|
+
for (const instance of instances) instance.renderTabBar();
|
|
33
|
+
}
|
|
34
|
+
function ensureTabBarMounted() {
|
|
35
|
+
onDocumentReady(() => {
|
|
36
|
+
const container = ensureAppContainer();
|
|
37
|
+
if (!container || tabBarConfig?.custom || !tabBarConfig) {
|
|
38
|
+
container?.querySelector(TAB_BAR_TAG)?.remove();
|
|
39
|
+
syncContainerInsets();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
let element = container.querySelector(TAB_BAR_TAG);
|
|
43
|
+
if (!element) {
|
|
44
|
+
element = document.createElement(TAB_BAR_TAG);
|
|
45
|
+
container.append(element);
|
|
46
|
+
}
|
|
47
|
+
element.renderTabBar();
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function resolveItem(index) {
|
|
51
|
+
if (!Number.isInteger(index) || index < 0 || !tabBarConfig?.list[index]) return;
|
|
52
|
+
return tabBarConfig.list[index];
|
|
53
|
+
}
|
|
54
|
+
var WeappTabBar = class extends BaseElement {
|
|
55
|
+
connectedCallback() {
|
|
56
|
+
if (!this.shadowRoot) this.attachShadow({ mode: "open" });
|
|
57
|
+
instances.add(this);
|
|
58
|
+
this.renderTabBar();
|
|
59
|
+
}
|
|
60
|
+
disconnectedCallback() {
|
|
61
|
+
instances.delete(this);
|
|
62
|
+
}
|
|
63
|
+
renderTabBar() {
|
|
64
|
+
const root = this.shadowRoot;
|
|
65
|
+
const config = tabBarConfig;
|
|
66
|
+
if (!root || !config || config.custom) return;
|
|
67
|
+
this.toggleAttribute("hidden", !isNativeTabBarVisible());
|
|
68
|
+
this.setAttribute("position", config.position);
|
|
69
|
+
this.toggleAttribute("data-animation", animationEnabled);
|
|
70
|
+
this.style.setProperty("--weapp-tab-bar-color", config.color);
|
|
71
|
+
this.style.setProperty("--weapp-tab-bar-selected-color", config.selectedColor);
|
|
72
|
+
this.style.setProperty("--weapp-tab-bar-background", config.backgroundColor);
|
|
73
|
+
this.style.setProperty("--weapp-tab-bar-border-color", config.borderStyle === "white" ? "rgba(255, 255, 255, 0.33)" : "rgba(0, 0, 0, 0.33)");
|
|
74
|
+
root.replaceChildren(this.#createStyle(), this.#createBar(config));
|
|
75
|
+
}
|
|
76
|
+
#createStyle() {
|
|
77
|
+
const style = document.createElement("style");
|
|
78
|
+
style.textContent = TAB_BAR_STYLE;
|
|
79
|
+
return style;
|
|
80
|
+
}
|
|
81
|
+
#createBar(config) {
|
|
82
|
+
const bar = document.createElement("nav");
|
|
83
|
+
bar.className = "weapp-tab-bar";
|
|
84
|
+
bar.setAttribute("aria-label", "Tab bar");
|
|
85
|
+
for (const [index, item] of config.list.entries()) bar.append(this.#createItem(item, index));
|
|
86
|
+
return bar;
|
|
87
|
+
}
|
|
88
|
+
#createItem(item, index) {
|
|
89
|
+
const selected = item.pagePath === activeRoute;
|
|
90
|
+
const button = document.createElement("button");
|
|
91
|
+
button.type = "button";
|
|
92
|
+
button.className = "weapp-tab-bar__item";
|
|
93
|
+
button.dataset.index = String(index);
|
|
94
|
+
button.dataset.pagePath = item.pagePath;
|
|
95
|
+
if (selected) button.setAttribute("aria-current", "page");
|
|
96
|
+
const iconPath = resolveAssetUrl(selected ? item.selectedIconPath ?? item.iconPath : item.iconPath);
|
|
97
|
+
const state = itemStates[index];
|
|
98
|
+
if (iconPath || state?.badge || state?.redDot) {
|
|
99
|
+
const iconWrap = document.createElement("span");
|
|
100
|
+
iconWrap.className = "weapp-tab-bar__icon-wrap";
|
|
101
|
+
if (iconPath) {
|
|
102
|
+
const icon = document.createElement("img");
|
|
103
|
+
icon.className = "weapp-tab-bar__icon";
|
|
104
|
+
icon.src = iconPath;
|
|
105
|
+
icon.alt = "";
|
|
106
|
+
iconWrap.append(icon);
|
|
107
|
+
}
|
|
108
|
+
if (state?.badge || state?.redDot) {
|
|
109
|
+
const badge = document.createElement("span");
|
|
110
|
+
badge.className = state.redDot ? "weapp-tab-bar__badge weapp-tab-bar__badge--dot" : "weapp-tab-bar__badge";
|
|
111
|
+
badge.textContent = state.redDot ? "" : state.badge;
|
|
112
|
+
iconWrap.append(badge);
|
|
113
|
+
}
|
|
114
|
+
button.append(iconWrap);
|
|
115
|
+
}
|
|
116
|
+
const label = document.createElement("span");
|
|
117
|
+
label.className = "weapp-tab-bar__label";
|
|
118
|
+
label.textContent = item.text;
|
|
119
|
+
button.append(label);
|
|
120
|
+
button.addEventListener("click", () => {
|
|
121
|
+
if (selected || !switchTabHandler) return;
|
|
122
|
+
switchTabHandler(`/${item.pagePath}`).catch(() => {});
|
|
123
|
+
});
|
|
124
|
+
return button;
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
function ensureTabBarDefined() {
|
|
128
|
+
if (typeof customElements === "undefined" || customElements.get(TAB_BAR_TAG)) return;
|
|
129
|
+
customElements.define(TAB_BAR_TAG, WeappTabBar);
|
|
130
|
+
}
|
|
131
|
+
function configureTabBar(config, onSwitchTab) {
|
|
132
|
+
ensureTabBarDefined();
|
|
133
|
+
tabBarConfig = config ? {
|
|
134
|
+
...config,
|
|
135
|
+
list: config.list.map((item) => ({ ...item }))
|
|
136
|
+
} : void 0;
|
|
137
|
+
switchTabHandler = onSwitchTab;
|
|
138
|
+
itemStates = config?.list.map(() => ({})) ?? [];
|
|
139
|
+
requestedVisible = true;
|
|
140
|
+
animationEnabled = false;
|
|
141
|
+
ensureTabBarMounted();
|
|
142
|
+
updateInstances();
|
|
143
|
+
}
|
|
144
|
+
function getTabBarPagePaths() {
|
|
145
|
+
return new Set(tabBarConfig?.list.map((item) => item.pagePath) ?? []);
|
|
146
|
+
}
|
|
147
|
+
function syncTabBarRoute(route) {
|
|
148
|
+
activeRoute = route;
|
|
149
|
+
ensureTabBarMounted();
|
|
150
|
+
updateInstances();
|
|
151
|
+
}
|
|
152
|
+
function setTabBarVisible(visible, animation = false) {
|
|
153
|
+
requestedVisible = visible;
|
|
154
|
+
animationEnabled = animation;
|
|
155
|
+
updateInstances();
|
|
156
|
+
return true;
|
|
157
|
+
}
|
|
158
|
+
function updateTabBarItem(index, patch) {
|
|
159
|
+
const item = resolveItem(index);
|
|
160
|
+
if (!item) return false;
|
|
161
|
+
Object.assign(item, patch);
|
|
162
|
+
updateInstances();
|
|
163
|
+
return true;
|
|
164
|
+
}
|
|
165
|
+
function updateTabBarStyle(patch) {
|
|
166
|
+
if (!tabBarConfig) return false;
|
|
167
|
+
Object.assign(tabBarConfig, patch);
|
|
168
|
+
updateInstances();
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
function setTabBarBadgeState(index, badge) {
|
|
172
|
+
if (!resolveItem(index)) return false;
|
|
173
|
+
itemStates[index] = {
|
|
174
|
+
badge,
|
|
175
|
+
redDot: false
|
|
176
|
+
};
|
|
177
|
+
updateInstances();
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
function setTabBarRedDotState(index, redDot) {
|
|
181
|
+
if (!resolveItem(index)) return false;
|
|
182
|
+
itemStates[index] = {
|
|
183
|
+
redDot,
|
|
184
|
+
badge: void 0
|
|
185
|
+
};
|
|
186
|
+
updateInstances();
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
//#endregion
|
|
191
|
+
export { configureTabBar, ensureTabBarDefined, getTabBarPagePaths, setTabBarBadgeState, setTabBarRedDotState, setTabBarVisible, syncTabBarRoute, updateTabBarItem, updateTabBarStyle };
|
|
192
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#createStyle","#createBar","#createItem"],"sources":["../../../../src/runtime/appShell/tabBar/index.ts"],"sourcesContent":["import type { WebTabBarConfig, WebTabBarItem } from '../../../shared/tabBar'\nimport { ensureAppContainer, getAppContainer, onDocumentReady } from '../container'\nimport { TAB_BAR_STYLE } from './style'\n\ninterface TabBarItemState {\n badge?: string\n redDot?: boolean\n}\n\ntype SwitchTabHandler = (url: string) => Promise<unknown>\n\nconst TAB_BAR_TAG = 'weapp-tab-bar'\nconst TAB_BAR_HEIGHT = '50px'\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nlet tabBarConfig: WebTabBarConfig | undefined\nlet activeRoute = ''\nlet requestedVisible = true\nlet animationEnabled = false\nlet switchTabHandler: SwitchTabHandler | undefined\nlet itemStates: TabBarItemState[] = []\nconst instances = new Set<WeappTabBar>()\n\nfunction resolveAssetUrl(value: string | undefined) {\n if (!value || /^(?:data:|blob:|https?:\\/\\/|\\/)/.test(value)) {\n return value\n }\n return `/${value.replace(/^\\.\\//, '')}`\n}\n\nfunction isNativeTabBarVisible() {\n return Boolean(\n tabBarConfig\n && !tabBarConfig.custom\n && requestedVisible\n && tabBarConfig.list.some(item => item.pagePath === activeRoute),\n )\n}\n\nfunction syncContainerInsets() {\n const container = getAppContainer()\n if (!container) {\n return\n }\n const bottomVisible = isNativeTabBarVisible() && tabBarConfig?.position !== 'top'\n const topVisible = isNativeTabBarVisible() && tabBarConfig?.position === 'top'\n container.style?.setProperty(\n '--weapp-tab-bar-inset',\n bottomVisible ? `calc(${TAB_BAR_HEIGHT} + var(--weapp-safe-area-inset-bottom, 0px))` : '0px',\n )\n container.style?.setProperty('--weapp-tab-bar-top-inset', topVisible ? TAB_BAR_HEIGHT : '0px')\n}\n\nfunction updateInstances() {\n syncContainerInsets()\n for (const instance of instances) {\n instance.renderTabBar()\n }\n}\n\nfunction ensureTabBarMounted() {\n onDocumentReady(() => {\n const container = ensureAppContainer()\n if (!container || tabBarConfig?.custom || !tabBarConfig) {\n container?.querySelector(TAB_BAR_TAG)?.remove()\n syncContainerInsets()\n return\n }\n let element = container.querySelector(TAB_BAR_TAG) as WeappTabBar | null\n if (!element) {\n element = document.createElement(TAB_BAR_TAG) as WeappTabBar\n container.append(element)\n }\n element.renderTabBar()\n })\n}\n\nfunction resolveItem(index: number) {\n if (!Number.isInteger(index) || index < 0 || !tabBarConfig?.list[index]) {\n return undefined\n }\n return tabBarConfig.list[index]\n}\n\nclass WeappTabBar extends BaseElement {\n connectedCallback() {\n if (!this.shadowRoot) {\n this.attachShadow({ mode: 'open' })\n }\n instances.add(this)\n this.renderTabBar()\n }\n\n disconnectedCallback() {\n instances.delete(this)\n }\n\n renderTabBar() {\n const root = this.shadowRoot\n const config = tabBarConfig\n if (!root || !config || config.custom) {\n return\n }\n this.toggleAttribute('hidden', !isNativeTabBarVisible())\n this.setAttribute('position', config.position)\n this.toggleAttribute('data-animation', animationEnabled)\n this.style.setProperty('--weapp-tab-bar-color', config.color)\n this.style.setProperty('--weapp-tab-bar-selected-color', config.selectedColor)\n this.style.setProperty('--weapp-tab-bar-background', config.backgroundColor)\n this.style.setProperty(\n '--weapp-tab-bar-border-color',\n config.borderStyle === 'white' ? 'rgba(255, 255, 255, 0.33)' : 'rgba(0, 0, 0, 0.33)',\n )\n root.replaceChildren(this.#createStyle(), this.#createBar(config))\n }\n\n #createStyle() {\n const style = document.createElement('style')\n style.textContent = TAB_BAR_STYLE\n return style\n }\n\n #createBar(config: WebTabBarConfig) {\n const bar = document.createElement('nav')\n bar.className = 'weapp-tab-bar'\n bar.setAttribute('aria-label', 'Tab bar')\n for (const [index, item] of config.list.entries()) {\n bar.append(this.#createItem(item, index))\n }\n return bar\n }\n\n #createItem(item: WebTabBarItem, index: number) {\n const selected = item.pagePath === activeRoute\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'weapp-tab-bar__item'\n button.dataset.index = String(index)\n button.dataset.pagePath = item.pagePath\n if (selected) {\n button.setAttribute('aria-current', 'page')\n }\n const iconPath = resolveAssetUrl(selected ? (item.selectedIconPath ?? item.iconPath) : item.iconPath)\n const state = itemStates[index]\n if (iconPath || state?.badge || state?.redDot) {\n const iconWrap = document.createElement('span')\n iconWrap.className = 'weapp-tab-bar__icon-wrap'\n if (iconPath) {\n const icon = document.createElement('img')\n icon.className = 'weapp-tab-bar__icon'\n icon.src = iconPath\n icon.alt = ''\n iconWrap.append(icon)\n }\n if (state?.badge || state?.redDot) {\n const badge = document.createElement('span')\n badge.className = state.redDot\n ? 'weapp-tab-bar__badge weapp-tab-bar__badge--dot'\n : 'weapp-tab-bar__badge'\n badge.textContent = state.redDot ? '' : state.badge!\n iconWrap.append(badge)\n }\n button.append(iconWrap)\n }\n const label = document.createElement('span')\n label.className = 'weapp-tab-bar__label'\n label.textContent = item.text\n button.append(label)\n button.addEventListener('click', () => {\n if (selected || !switchTabHandler) {\n return\n }\n void switchTabHandler(`/${item.pagePath}`).catch(() => {})\n })\n return button\n }\n}\n\nexport function ensureTabBarDefined() {\n if (typeof customElements === 'undefined' || customElements.get(TAB_BAR_TAG)) {\n return\n }\n customElements.define(TAB_BAR_TAG, WeappTabBar)\n}\n\nexport function configureTabBar(config: WebTabBarConfig | undefined, onSwitchTab: SwitchTabHandler) {\n ensureTabBarDefined()\n tabBarConfig = config\n ? {\n ...config,\n list: config.list.map(item => ({ ...item })),\n }\n : undefined\n switchTabHandler = onSwitchTab\n itemStates = config?.list.map(() => ({})) ?? []\n requestedVisible = true\n animationEnabled = false\n ensureTabBarMounted()\n updateInstances()\n}\n\nexport function getTabBarPagePaths() {\n return new Set(tabBarConfig?.list.map(item => item.pagePath) ?? [])\n}\n\nexport function syncTabBarRoute(route: string) {\n activeRoute = route\n ensureTabBarMounted()\n updateInstances()\n}\n\nexport function setTabBarVisible(visible: boolean, animation = false) {\n requestedVisible = visible\n animationEnabled = animation\n updateInstances()\n return true\n}\n\nexport function updateTabBarItem(index: number, patch: Partial<Omit<WebTabBarItem, 'pagePath'>>) {\n const item = resolveItem(index)\n if (!item) {\n return false\n }\n Object.assign(item, patch)\n updateInstances()\n return true\n}\n\nexport function updateTabBarStyle(patch: Partial<Pick<WebTabBarConfig, 'color' | 'selectedColor' | 'backgroundColor' | 'borderStyle'>>) {\n if (!tabBarConfig) {\n return false\n }\n Object.assign(tabBarConfig, patch)\n updateInstances()\n return true\n}\n\nexport function setTabBarBadgeState(index: number, badge: string | undefined) {\n if (!resolveItem(index)) {\n return false\n }\n itemStates[index] = { badge, redDot: false }\n updateInstances()\n return true\n}\n\nexport function setTabBarRedDotState(index: number, redDot: boolean) {\n if (!resolveItem(index)) {\n return false\n }\n itemStates[index] = { redDot, badge: undefined }\n updateInstances()\n return true\n}\n\nexport type { WebTabBarConfig, WebTabBarItem } from '../../../shared/tabBar'\n"],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
//#region src/runtime/appShell/tabBar/style.ts
|
|
2
|
+
const TAB_BAR_STYLE = `
|
|
3
|
+
:host {
|
|
4
|
+
--weapp-tab-bar-color: #7a7e83;
|
|
5
|
+
--weapp-tab-bar-selected-color: #3cc51f;
|
|
6
|
+
--weapp-tab-bar-background: #ffffff;
|
|
7
|
+
--weapp-tab-bar-border-color: rgba(0, 0, 0, 0.33);
|
|
8
|
+
display: block;
|
|
9
|
+
position: fixed;
|
|
10
|
+
left: 0;
|
|
11
|
+
right: 0;
|
|
12
|
+
bottom: 0;
|
|
13
|
+
z-index: 1000;
|
|
14
|
+
box-sizing: border-box;
|
|
15
|
+
color: var(--weapp-tab-bar-color);
|
|
16
|
+
font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Arial, sans-serif;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:host([position="top"]) {
|
|
20
|
+
top: 0;
|
|
21
|
+
bottom: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
:host([hidden]) {
|
|
25
|
+
display: none;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.weapp-tab-bar {
|
|
29
|
+
display: flex;
|
|
30
|
+
height: calc(50px + var(--weapp-safe-area-inset-bottom, 0px));
|
|
31
|
+
padding-bottom: var(--weapp-safe-area-inset-bottom, 0px);
|
|
32
|
+
box-sizing: border-box;
|
|
33
|
+
background: var(--weapp-tab-bar-background);
|
|
34
|
+
border-top: 0.5px solid var(--weapp-tab-bar-border-color);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
:host([position="top"]) .weapp-tab-bar {
|
|
38
|
+
height: 50px;
|
|
39
|
+
padding-bottom: 0;
|
|
40
|
+
border-top: 0;
|
|
41
|
+
border-bottom: 0.5px solid var(--weapp-tab-bar-border-color);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.weapp-tab-bar__item {
|
|
45
|
+
position: relative;
|
|
46
|
+
display: flex;
|
|
47
|
+
flex: 1 1 0;
|
|
48
|
+
min-width: 0;
|
|
49
|
+
height: 50px;
|
|
50
|
+
padding: 5px 4px 3px;
|
|
51
|
+
align-items: center;
|
|
52
|
+
justify-content: center;
|
|
53
|
+
flex-direction: column;
|
|
54
|
+
gap: 1px;
|
|
55
|
+
border: 0;
|
|
56
|
+
border-radius: 0;
|
|
57
|
+
outline: 0;
|
|
58
|
+
background: transparent;
|
|
59
|
+
color: inherit;
|
|
60
|
+
font: inherit;
|
|
61
|
+
-webkit-tap-highlight-color: transparent;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.weapp-tab-bar__item[aria-current="page"] {
|
|
65
|
+
color: var(--weapp-tab-bar-selected-color);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.weapp-tab-bar__icon-wrap {
|
|
69
|
+
position: relative;
|
|
70
|
+
width: 27px;
|
|
71
|
+
height: 27px;
|
|
72
|
+
flex: 0 0 27px;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.weapp-tab-bar__icon {
|
|
76
|
+
display: block;
|
|
77
|
+
width: 27px;
|
|
78
|
+
height: 27px;
|
|
79
|
+
object-fit: contain;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.weapp-tab-bar__label {
|
|
83
|
+
display: block;
|
|
84
|
+
width: 100%;
|
|
85
|
+
overflow: hidden;
|
|
86
|
+
font-size: 10px;
|
|
87
|
+
line-height: 14px;
|
|
88
|
+
text-align: center;
|
|
89
|
+
text-overflow: ellipsis;
|
|
90
|
+
white-space: nowrap;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.weapp-tab-bar__badge {
|
|
94
|
+
position: absolute;
|
|
95
|
+
top: -3px;
|
|
96
|
+
left: 20px;
|
|
97
|
+
min-width: 16px;
|
|
98
|
+
max-width: 48px;
|
|
99
|
+
height: 16px;
|
|
100
|
+
padding: 0 4px;
|
|
101
|
+
overflow: hidden;
|
|
102
|
+
box-sizing: border-box;
|
|
103
|
+
border: 1px solid #ffffff;
|
|
104
|
+
border-radius: 8px;
|
|
105
|
+
background: #fa5151;
|
|
106
|
+
color: #ffffff;
|
|
107
|
+
font-size: 10px;
|
|
108
|
+
line-height: 14px;
|
|
109
|
+
text-align: center;
|
|
110
|
+
text-overflow: ellipsis;
|
|
111
|
+
white-space: nowrap;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.weapp-tab-bar__badge--dot {
|
|
115
|
+
top: 0;
|
|
116
|
+
left: 23px;
|
|
117
|
+
width: 8px;
|
|
118
|
+
min-width: 8px;
|
|
119
|
+
height: 8px;
|
|
120
|
+
padding: 0;
|
|
121
|
+
border-radius: 50%;
|
|
122
|
+
}
|
|
123
|
+
`;
|
|
124
|
+
|
|
125
|
+
//#endregion
|
|
126
|
+
export { TAB_BAR_STYLE };
|
|
127
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../../src/runtime/appShell/tabBar/style.ts"],"sourcesContent":["export const TAB_BAR_STYLE = `\n:host {\n --weapp-tab-bar-color: #7a7e83;\n --weapp-tab-bar-selected-color: #3cc51f;\n --weapp-tab-bar-background: #ffffff;\n --weapp-tab-bar-border-color: rgba(0, 0, 0, 0.33);\n display: block;\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n z-index: 1000;\n box-sizing: border-box;\n color: var(--weapp-tab-bar-color);\n font-family: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Arial, sans-serif;\n}\n\n:host([position=\"top\"]) {\n top: 0;\n bottom: auto;\n}\n\n:host([hidden]) {\n display: none;\n}\n\n.weapp-tab-bar {\n display: flex;\n height: calc(50px + var(--weapp-safe-area-inset-bottom, 0px));\n padding-bottom: var(--weapp-safe-area-inset-bottom, 0px);\n box-sizing: border-box;\n background: var(--weapp-tab-bar-background);\n border-top: 0.5px solid var(--weapp-tab-bar-border-color);\n}\n\n:host([position=\"top\"]) .weapp-tab-bar {\n height: 50px;\n padding-bottom: 0;\n border-top: 0;\n border-bottom: 0.5px solid var(--weapp-tab-bar-border-color);\n}\n\n.weapp-tab-bar__item {\n position: relative;\n display: flex;\n flex: 1 1 0;\n min-width: 0;\n height: 50px;\n padding: 5px 4px 3px;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n gap: 1px;\n border: 0;\n border-radius: 0;\n outline: 0;\n background: transparent;\n color: inherit;\n font: inherit;\n -webkit-tap-highlight-color: transparent;\n}\n\n.weapp-tab-bar__item[aria-current=\"page\"] {\n color: var(--weapp-tab-bar-selected-color);\n}\n\n.weapp-tab-bar__icon-wrap {\n position: relative;\n width: 27px;\n height: 27px;\n flex: 0 0 27px;\n}\n\n.weapp-tab-bar__icon {\n display: block;\n width: 27px;\n height: 27px;\n object-fit: contain;\n}\n\n.weapp-tab-bar__label {\n display: block;\n width: 100%;\n overflow: hidden;\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.weapp-tab-bar__badge {\n position: absolute;\n top: -3px;\n left: 20px;\n min-width: 16px;\n max-width: 48px;\n height: 16px;\n padding: 0 4px;\n overflow: hidden;\n box-sizing: border-box;\n border: 1px solid #ffffff;\n border-radius: 8px;\n background: #fa5151;\n color: #ffffff;\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.weapp-tab-bar__badge--dot {\n top: 0;\n left: 23px;\n width: 8px;\n min-width: 8px;\n height: 8px;\n padding: 0;\n border-radius: 50%;\n}\n`\n"],"mappings":";AAAA,MAAa,gBAAgB"}
|
|
@@ -29,64 +29,7 @@ function getHoverClass(element) {
|
|
|
29
29
|
function isInternalNode(node) {
|
|
30
30
|
return node instanceof HTMLElement && node.dataset?.weappInternal === "true";
|
|
31
31
|
}
|
|
32
|
-
function collectFormValues(form) {
|
|
33
|
-
const values = {};
|
|
34
|
-
const appendValue = (name, value, multiple = false) => {
|
|
35
|
-
if (multiple) {
|
|
36
|
-
if (!Array.isArray(values[name])) values[name] = values[name] === void 0 ? [] : [values[name]];
|
|
37
|
-
values[name].push(value);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
values[name] = value;
|
|
41
|
-
};
|
|
42
|
-
const formElements = Array.from(form.elements ?? []);
|
|
43
|
-
for (const element of formElements) {
|
|
44
|
-
if (!(element instanceof HTMLElement)) continue;
|
|
45
|
-
const name = element.getAttribute("name")?.trim();
|
|
46
|
-
if (!name) continue;
|
|
47
|
-
if ("disabled" in element ? element.disabled : toBoolean(element.getAttribute("disabled"))) continue;
|
|
48
|
-
if (element instanceof HTMLInputElement) {
|
|
49
|
-
const type = element.type?.toLowerCase();
|
|
50
|
-
if (type === "checkbox") {
|
|
51
|
-
if (element.checked) appendValue(name, element.value, true);
|
|
52
|
-
continue;
|
|
53
|
-
}
|
|
54
|
-
if (type === "radio") {
|
|
55
|
-
if (element.checked) appendValue(name, element.value);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
appendValue(name, element.value);
|
|
59
|
-
continue;
|
|
60
|
-
}
|
|
61
|
-
if (element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
|
|
62
|
-
appendValue(name, element.value);
|
|
63
|
-
continue;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
const customControls = form.querySelectorAll("switch, checkbox, radio, picker, slider, weapp-switch, weapp-checkbox, weapp-radio, weapp-picker, weapp-slider");
|
|
67
|
-
for (const element of Array.from(customControls)) {
|
|
68
|
-
const name = element.getAttribute("name")?.trim();
|
|
69
|
-
if (!name) continue;
|
|
70
|
-
if (toBoolean(element.getAttribute("disabled"))) continue;
|
|
71
|
-
const tag = element.tagName.toLowerCase();
|
|
72
|
-
const rawValue = element.value ?? element.getAttribute("value");
|
|
73
|
-
if (tag.includes("checkbox")) {
|
|
74
|
-
if (element.checked ?? toBoolean(element.getAttribute("checked"))) appendValue(name, rawValue ?? true, true);
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
if (tag.includes("radio")) {
|
|
78
|
-
if (element.checked ?? toBoolean(element.getAttribute("checked"))) appendValue(name, rawValue ?? true);
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
if (tag.includes("switch")) {
|
|
82
|
-
appendValue(name, element.checked ?? toBoolean(element.getAttribute("checked")));
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
appendValue(name, rawValue ?? "");
|
|
86
|
-
}
|
|
87
|
-
return values;
|
|
88
|
-
}
|
|
89
32
|
|
|
90
33
|
//#endregion
|
|
91
|
-
export {
|
|
34
|
+
export { getHoverClass, isDisabled, isInternalNode, normalizeType, parseNumber, toBoolean };
|
|
92
35
|
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../../src/runtime/button/helpers.ts"],"sourcesContent":["const DEFAULT_HOVER_CLASS = 'button-hover'\n\nexport const DEFAULT_HOVER_START = 20\nexport const DEFAULT_HOVER_STAY = 70\n\nexport function toBoolean(value: string | null) {\n if (value === null) {\n return false\n }\n const normalized = value.trim().toLowerCase()\n if (normalized === '' || normalized === 'true') {\n return true\n }\n return normalized !== 'false' && normalized !== '0'\n}\n\nexport function parseNumber(value: string | null, fallback: number) {\n if (value === null || value === '') {\n return fallback\n }\n const numeric = Number(value)\n return Number.isFinite(numeric) ? numeric : fallback\n}\n\nexport function isDisabled(element: HTMLElement) {\n return toBoolean(element.getAttribute('disabled')) || toBoolean(element.getAttribute('loading'))\n}\n\nexport function normalizeType(value: string | null) {\n if (!value) {\n return 'default'\n }\n const normalized = value.toLowerCase()\n if (normalized === 'primary' || normalized === 'warn') {\n return normalized\n }\n return 'default'\n}\n\nexport function getHoverClass(element: HTMLElement) {\n const hoverClass = element.getAttribute('hover-class')\n if (!hoverClass) {\n return DEFAULT_HOVER_CLASS\n }\n if (hoverClass === 'none') {\n return ''\n }\n return hoverClass\n}\n\nexport function isInternalNode(node: Node) {\n return node instanceof HTMLElement && node.dataset?.weappInternal === 'true'\n}\n
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../../src/runtime/button/helpers.ts"],"sourcesContent":["const DEFAULT_HOVER_CLASS = 'button-hover'\n\nexport const DEFAULT_HOVER_START = 20\nexport const DEFAULT_HOVER_STAY = 70\n\nexport function toBoolean(value: string | null) {\n if (value === null) {\n return false\n }\n const normalized = value.trim().toLowerCase()\n if (normalized === '' || normalized === 'true') {\n return true\n }\n return normalized !== 'false' && normalized !== '0'\n}\n\nexport function parseNumber(value: string | null, fallback: number) {\n if (value === null || value === '') {\n return fallback\n }\n const numeric = Number(value)\n return Number.isFinite(numeric) ? numeric : fallback\n}\n\nexport function isDisabled(element: HTMLElement) {\n return toBoolean(element.getAttribute('disabled')) || toBoolean(element.getAttribute('loading'))\n}\n\nexport function normalizeType(value: string | null) {\n if (!value) {\n return 'default'\n }\n const normalized = value.toLowerCase()\n if (normalized === 'primary' || normalized === 'warn') {\n return normalized\n }\n return 'default'\n}\n\nexport function getHoverClass(element: HTMLElement) {\n const hoverClass = element.getAttribute('hover-class')\n if (!hoverClass) {\n return DEFAULT_HOVER_CLASS\n }\n if (hoverClass === 'none') {\n return ''\n }\n return hoverClass\n}\n\nexport function isInternalNode(node: Node) {\n return node instanceof HTMLElement && node.dataset?.weappInternal === 'true'\n}\n"],"mappings":";AAAA,MAAM,sBAAsB;AAK5B,SAAgB,UAAU,OAAsB;CAC9C,IAAI,UAAU,MACZ,OAAO;CAET,MAAM,aAAa,MAAM,KAAK,CAAC,CAAC,YAAY;CAC5C,IAAI,eAAe,MAAM,eAAe,QACtC,OAAO;CAET,OAAO,eAAe,WAAW,eAAe;AAClD;AAEA,SAAgB,YAAY,OAAsB,UAAkB;CAClE,IAAI,UAAU,QAAQ,UAAU,IAC9B,OAAO;CAET,MAAM,UAAU,OAAO,KAAK;CAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU;AAC9C;AAEA,SAAgB,WAAW,SAAsB;CAC/C,OAAO,UAAU,QAAQ,aAAa,UAAU,CAAC,KAAK,UAAU,QAAQ,aAAa,SAAS,CAAC;AACjG;AAEA,SAAgB,cAAc,OAAsB;CAClD,IAAI,CAAC,OACH,OAAO;CAET,MAAM,aAAa,MAAM,YAAY;CACrC,IAAI,eAAe,aAAa,eAAe,QAC7C,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,cAAc,SAAsB;CAClD,MAAM,aAAa,QAAQ,aAAa,aAAa;CACrD,IAAI,CAAC,YACH,OAAO;CAET,IAAI,eAAe,QACjB,OAAO;CAET,OAAO;AACT;AAEA,SAAgB,eAAe,MAAY;CACzC,OAAO,gBAAgB,eAAe,KAAK,SAAS,kBAAkB;AACxE"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
+
import { FormConfig } from "../nativeComponents/form.mjs";
|
|
1
2
|
//#region src/runtime/button/index.d.ts
|
|
2
|
-
interface ButtonFormConfig {
|
|
3
|
-
preventDefault?: boolean;
|
|
4
|
-
}
|
|
5
3
|
declare function ensureButtonDefined(): void;
|
|
6
|
-
declare function setButtonFormConfig(next:
|
|
4
|
+
declare function setButtonFormConfig(next: FormConfig): void;
|
|
5
|
+
type ButtonFormConfig = FormConfig;
|
|
7
6
|
//#endregion
|
|
8
|
-
export {
|
|
7
|
+
export { ButtonFormConfig, ensureButtonDefined, setButtonFormConfig };
|
|
9
8
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { requestContainingFormAction } from "../nativeComponents/formControl.mjs";
|
|
2
|
+
import { setFormConfig } from "../nativeComponents/form.mjs";
|
|
3
|
+
import { getHoverClass, isDisabled, isInternalNode, normalizeType, parseNumber, toBoolean } from "./helpers.mjs";
|
|
2
4
|
import { ensureButtonStyle } from "./style.mjs";
|
|
3
5
|
|
|
4
6
|
//#region src/runtime/button/index.ts
|
|
5
|
-
const DEFAULT_FORM_CONFIG = { preventDefault: true };
|
|
6
7
|
const NAV_BUTTON_TAG = "weapp-button";
|
|
7
8
|
const BaseElement = globalThis.HTMLElement ?? class {};
|
|
8
|
-
let formConfig = { ...DEFAULT_FORM_CONFIG };
|
|
9
9
|
var WeappButton = class extends BaseElement {
|
|
10
10
|
static observedAttributes = [
|
|
11
11
|
"type",
|
|
@@ -70,10 +70,8 @@ var WeappButton = class extends BaseElement {
|
|
|
70
70
|
this.#loading = loading;
|
|
71
71
|
if (typeof MutationObserver !== "undefined") {
|
|
72
72
|
this.#observer = new MutationObserver((records) => {
|
|
73
|
-
if (!this.#text) return;
|
|
74
73
|
for (const record of records) for (const node of [...record.addedNodes]) {
|
|
75
74
|
if (isInternalNode(node)) continue;
|
|
76
|
-
if (node === this.#button) continue;
|
|
77
75
|
this.#text.appendChild(node);
|
|
78
76
|
}
|
|
79
77
|
});
|
|
@@ -125,26 +123,9 @@ var WeappButton = class extends BaseElement {
|
|
|
125
123
|
}
|
|
126
124
|
};
|
|
127
125
|
#handleClick = (event) => {
|
|
128
|
-
if (isDisabled(this)) return;
|
|
129
126
|
const formType = this.getAttribute("form-type");
|
|
130
127
|
if (!formType) return;
|
|
131
|
-
|
|
132
|
-
if (!form) return;
|
|
133
|
-
if (formType === "submit") {
|
|
134
|
-
const detail = { value: collectFormValues(form) };
|
|
135
|
-
const submitEvent = new CustomEvent("submit", {
|
|
136
|
-
detail,
|
|
137
|
-
bubbles: true,
|
|
138
|
-
cancelable: true
|
|
139
|
-
});
|
|
140
|
-
if (form.dispatchEvent(submitEvent) && !formConfig.preventDefault) form.submit();
|
|
141
|
-
event.preventDefault();
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
if (formType === "reset") {
|
|
145
|
-
form.reset();
|
|
146
|
-
event.preventDefault();
|
|
147
|
-
}
|
|
128
|
+
if ((formType === "submit" || formType === "reset") && requestContainingFormAction(this, formType)) event.preventDefault();
|
|
148
129
|
};
|
|
149
130
|
#handlePressStart = (event) => {
|
|
150
131
|
if (isDisabled(this)) return;
|
|
@@ -187,12 +168,9 @@ function ensureButtonDefined() {
|
|
|
187
168
|
if (!customElements.get(NAV_BUTTON_TAG)) customElements.define(NAV_BUTTON_TAG, WeappButton);
|
|
188
169
|
}
|
|
189
170
|
function setButtonFormConfig(next) {
|
|
190
|
-
|
|
191
|
-
...formConfig,
|
|
192
|
-
...next
|
|
193
|
-
};
|
|
171
|
+
setFormConfig(next);
|
|
194
172
|
}
|
|
195
173
|
|
|
196
174
|
//#endregion
|
|
197
|
-
export { ensureButtonDefined, setButtonFormConfig };
|
|
175
|
+
export { WeappButton, ensureButtonDefined, setButtonFormConfig };
|
|
198
176
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#ensureStructure","#applyState","#bindEvents","#clearHoverTimers","#observer","#button","#content","#text","#loading","#handleClickCapture","#handleClick","#handlePressStart","#handlePressEnd","#lastTouchTime","#hoverTimer","#hoverRemoveTimer"],"sources":["../../../src/runtime/button/index.ts"],"sourcesContent":["import {\n collectFormValues,\n DEFAULT_HOVER_START,\n DEFAULT_HOVER_STAY,\n getHoverClass,\n isDisabled,\n isInternalNode,\n normalizeType,\n parseNumber,\n toBoolean,\n} from './helpers'\nimport { ensureButtonStyle } from './style'\n\ninterface ButtonFormConfig {\n preventDefault?: boolean\n}\n\nconst DEFAULT_FORM_CONFIG: Required<ButtonFormConfig> = {\n preventDefault: true,\n}\n\nconst NAV_BUTTON_TAG = 'weapp-button'\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nlet formConfig: Required<ButtonFormConfig> = { ...DEFAULT_FORM_CONFIG }\n\nclass WeappButton extends BaseElement {\n static observedAttributes = [\n 'type',\n 'plain',\n 'size',\n 'loading',\n 'disabled',\n 'hover-class',\n 'hover-start-time',\n 'hover-stay-time',\n 'form-type',\n 'open-type',\n ]\n\n #button?: HTMLButtonElement\n #content?: HTMLSpanElement\n #text?: HTMLSpanElement\n #loading?: HTMLSpanElement\n #hoverTimer?: ReturnType<typeof globalThis.setTimeout>\n #hoverRemoveTimer?: ReturnType<typeof globalThis.setTimeout>\n #lastTouchTime = 0\n #observer?: MutationObserver\n\n connectedCallback() {\n const root = this.getRootNode()\n if (root instanceof ShadowRoot) {\n ensureButtonStyle(root)\n }\n else {\n ensureButtonStyle()\n }\n this.#ensureStructure()\n this.#applyState()\n this.#bindEvents()\n }\n\n disconnectedCallback() {\n this.#clearHoverTimers()\n this.#observer?.disconnect()\n this.#observer = undefined\n }\n\n attributeChangedCallback() {\n this.#applyState()\n }\n\n #ensureStructure() {\n if (this.#button) {\n return\n }\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'weapp-btn'\n button.dataset.weappInternal = 'true'\n const content = document.createElement('span')\n content.className = 'weapp-btn__content'\n content.dataset.weappInternal = 'true'\n const loading = document.createElement('span')\n loading.className = 'weapp-btn__loading'\n loading.dataset.weappInternal = 'true'\n loading.setAttribute('hidden', '')\n const text = document.createElement('span')\n text.className = 'weapp-btn__text'\n text.dataset.weappInternal = 'true'\n content.append(loading, text)\n button.append(content)\n\n const existing = [...this.childNodes].filter(node => !isInternalNode(node))\n for (const node of existing) {\n text.appendChild(node)\n }\n this.appendChild(button)\n\n this.#button = button\n this.#content = content\n this.#text = text\n this.#loading = loading\n\n if (typeof MutationObserver !== 'undefined') {\n this.#observer = new MutationObserver((records) => {\n if (!this.#text) {\n return\n }\n for (const record of records) {\n for (const node of [...record.addedNodes]) {\n if (isInternalNode(node)) {\n continue\n }\n if (node === this.#button) {\n continue\n }\n this.#text.appendChild(node)\n }\n }\n })\n this.#observer.observe(this, { childList: true })\n }\n }\n\n #applyState() {\n if (!this.#button || !this.#loading) {\n return\n }\n const type = normalizeType(this.getAttribute('type'))\n const plain = toBoolean(this.getAttribute('plain'))\n const size = (this.getAttribute('size') ?? 'default').toLowerCase()\n const loading = toBoolean(this.getAttribute('loading'))\n const disabled = toBoolean(this.getAttribute('disabled'))\n const openType = this.getAttribute('open-type')\n\n this.classList.toggle('weapp-btn--primary', type === 'primary')\n this.classList.toggle('weapp-btn--warn', type === 'warn')\n this.classList.toggle('weapp-btn--default', type === 'default')\n this.classList.toggle('weapp-btn--plain', plain)\n this.classList.toggle('weapp-btn--mini', size === 'mini')\n this.classList.toggle('weapp-btn--loading', loading)\n this.classList.toggle('weapp-btn--disabled', disabled)\n\n if (openType) {\n const openTypeClass = `weapp-btn--open-type-${openType}`\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-') && className !== openTypeClass) {\n this.classList.remove(className)\n }\n }\n this.classList.add(openTypeClass)\n }\n else {\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-')) {\n this.classList.remove(className)\n }\n }\n }\n\n const locked = disabled || loading\n this.#button.disabled = locked\n if (locked) {\n this.#button.setAttribute('aria-disabled', 'true')\n }\n else {\n this.#button.removeAttribute('aria-disabled')\n }\n this.#loading.toggleAttribute('hidden', !loading)\n }\n\n #bindEvents() {\n if ((this as any).__weappButtonBound) {\n return\n }\n ;(this as any).__weappButtonBound = true\n this.addEventListener('click', this.#handleClickCapture, true)\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('touchstart', this.#handlePressStart, { passive: true })\n this.addEventListener('mousedown', this.#handlePressStart)\n this.addEventListener('touchend', this.#handlePressEnd)\n this.addEventListener('touchcancel', this.#handlePressEnd)\n this.addEventListener('mouseup', this.#handlePressEnd)\n this.addEventListener('mouseleave', this.#handlePressEnd)\n }\n\n #handleClickCapture = (event: Event) => {\n if (isDisabled(this)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n #handleClick = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const formType = this.getAttribute('form-type')\n if (!formType) {\n return\n }\n const form = this.closest('form') as HTMLFormElement | null\n if (!form) {\n return\n }\n if (formType === 'submit') {\n const detail = { value: collectFormValues(form) }\n const submitEvent = new CustomEvent('submit', {\n detail,\n bubbles: true,\n cancelable: true,\n })\n const shouldSubmit = form.dispatchEvent(submitEvent)\n if (shouldSubmit && !formConfig.preventDefault) {\n form.submit()\n }\n event.preventDefault()\n return\n }\n if (formType === 'reset') {\n form.reset()\n event.preventDefault()\n }\n }\n\n #handlePressStart = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'touchstart') {\n this.#lastTouchTime = Date.now()\n }\n if (event.type === 'mousedown' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const startTime = parseNumber(this.getAttribute('hover-start-time'), DEFAULT_HOVER_START)\n this.#clearHoverTimers()\n this.#hoverTimer = globalThis.setTimeout(() => {\n this.classList.add(hoverClass)\n }, startTime)\n }\n\n #handlePressEnd = (event: Event) => {\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'mouseup' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const stayTime = parseNumber(this.getAttribute('hover-stay-time'), DEFAULT_HOVER_STAY)\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.classList.contains(hoverClass)) {\n this.#hoverRemoveTimer = globalThis.setTimeout(() => {\n this.classList.remove(hoverClass)\n }, stayTime)\n }\n }\n\n #clearHoverTimers() {\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.#hoverRemoveTimer) {\n clearTimeout(this.#hoverRemoveTimer)\n this.#hoverRemoveTimer = undefined\n }\n }\n}\n\nexport function ensureButtonDefined(): void {\n if (typeof customElements === 'undefined') {\n return\n }\n if (!customElements.get(NAV_BUTTON_TAG)) {\n customElements.define(NAV_BUTTON_TAG, WeappButton)\n }\n}\n\nexport function setButtonFormConfig(next: ButtonFormConfig): void {\n formConfig = {\n ...formConfig,\n ...next,\n }\n}\n\nexport type { ButtonFormConfig }\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#ensureStructure","#applyState","#bindEvents","#clearHoverTimers","#observer","#button","#content","#text","#loading","#handleClickCapture","#handleClick","#handlePressStart","#handlePressEnd","#lastTouchTime","#hoverTimer","#hoverRemoveTimer"],"sources":["../../../src/runtime/button/index.ts"],"sourcesContent":["import type { FormConfig } from '../nativeComponents/form'\nimport { setFormConfig } from '../nativeComponents/form'\nimport { requestContainingFormAction } from '../nativeComponents/formControl'\nimport {\n DEFAULT_HOVER_START,\n DEFAULT_HOVER_STAY,\n getHoverClass,\n isDisabled,\n isInternalNode,\n normalizeType,\n parseNumber,\n toBoolean,\n} from './helpers'\nimport { ensureButtonStyle } from './style'\n\nconst NAV_BUTTON_TAG = 'weapp-button'\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappButton extends BaseElement {\n static observedAttributes = [\n 'type',\n 'plain',\n 'size',\n 'loading',\n 'disabled',\n 'hover-class',\n 'hover-start-time',\n 'hover-stay-time',\n 'form-type',\n 'open-type',\n ]\n\n #button?: HTMLButtonElement\n #content?: HTMLSpanElement\n #text?: HTMLSpanElement\n #loading?: HTMLSpanElement\n #hoverTimer?: ReturnType<typeof globalThis.setTimeout>\n #hoverRemoveTimer?: ReturnType<typeof globalThis.setTimeout>\n #lastTouchTime = 0\n #observer?: MutationObserver\n\n connectedCallback() {\n const root = this.getRootNode()\n if (root instanceof ShadowRoot) {\n ensureButtonStyle(root)\n }\n else {\n ensureButtonStyle()\n }\n this.#ensureStructure()\n this.#applyState()\n this.#bindEvents()\n }\n\n disconnectedCallback() {\n this.#clearHoverTimers()\n this.#observer?.disconnect()\n this.#observer = undefined\n }\n\n attributeChangedCallback() {\n this.#applyState()\n }\n\n #ensureStructure() {\n if (this.#button) {\n return\n }\n const button = document.createElement('button')\n button.type = 'button'\n button.className = 'weapp-btn'\n button.dataset.weappInternal = 'true'\n const content = document.createElement('span')\n content.className = 'weapp-btn__content'\n content.dataset.weappInternal = 'true'\n const loading = document.createElement('span')\n loading.className = 'weapp-btn__loading'\n loading.dataset.weappInternal = 'true'\n loading.setAttribute('hidden', '')\n const text = document.createElement('span')\n text.className = 'weapp-btn__text'\n text.dataset.weappInternal = 'true'\n content.append(loading, text)\n button.append(content)\n\n const existing = [...this.childNodes].filter(node => !isInternalNode(node))\n for (const node of existing) {\n text.appendChild(node)\n }\n this.appendChild(button)\n\n this.#button = button\n this.#content = content\n this.#text = text\n this.#loading = loading\n\n if (typeof MutationObserver !== 'undefined') {\n this.#observer = new MutationObserver((records) => {\n for (const record of records) {\n for (const node of [...record.addedNodes]) {\n if (isInternalNode(node)) {\n continue\n }\n this.#text!.appendChild(node)\n }\n }\n })\n this.#observer.observe(this, { childList: true })\n }\n }\n\n #applyState() {\n if (!this.#button || !this.#loading) {\n return\n }\n const type = normalizeType(this.getAttribute('type'))\n const plain = toBoolean(this.getAttribute('plain'))\n const size = (this.getAttribute('size') ?? 'default').toLowerCase()\n const loading = toBoolean(this.getAttribute('loading'))\n const disabled = toBoolean(this.getAttribute('disabled'))\n const openType = this.getAttribute('open-type')\n\n this.classList.toggle('weapp-btn--primary', type === 'primary')\n this.classList.toggle('weapp-btn--warn', type === 'warn')\n this.classList.toggle('weapp-btn--default', type === 'default')\n this.classList.toggle('weapp-btn--plain', plain)\n this.classList.toggle('weapp-btn--mini', size === 'mini')\n this.classList.toggle('weapp-btn--loading', loading)\n this.classList.toggle('weapp-btn--disabled', disabled)\n\n if (openType) {\n const openTypeClass = `weapp-btn--open-type-${openType}`\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-') && className !== openTypeClass) {\n this.classList.remove(className)\n }\n }\n this.classList.add(openTypeClass)\n }\n else {\n for (const className of [...this.classList]) {\n if (className.startsWith('weapp-btn--open-type-')) {\n this.classList.remove(className)\n }\n }\n }\n\n const locked = disabled || loading\n this.#button.disabled = locked\n if (locked) {\n this.#button.setAttribute('aria-disabled', 'true')\n }\n else {\n this.#button.removeAttribute('aria-disabled')\n }\n this.#loading.toggleAttribute('hidden', !loading)\n }\n\n #bindEvents() {\n if ((this as any).__weappButtonBound) {\n return\n }\n ;(this as any).__weappButtonBound = true\n this.addEventListener('click', this.#handleClickCapture, true)\n this.addEventListener('click', this.#handleClick)\n this.addEventListener('touchstart', this.#handlePressStart, { passive: true })\n this.addEventListener('mousedown', this.#handlePressStart)\n this.addEventListener('touchend', this.#handlePressEnd)\n this.addEventListener('touchcancel', this.#handlePressEnd)\n this.addEventListener('mouseup', this.#handlePressEnd)\n this.addEventListener('mouseleave', this.#handlePressEnd)\n }\n\n #handleClickCapture = (event: Event) => {\n if (isDisabled(this)) {\n event.preventDefault()\n event.stopImmediatePropagation()\n }\n }\n\n #handleClick = (event: Event) => {\n const formType = this.getAttribute('form-type')\n if (!formType) {\n return\n }\n if ((formType === 'submit' || formType === 'reset') && requestContainingFormAction(this, formType)) {\n event.preventDefault()\n }\n }\n\n #handlePressStart = (event: Event) => {\n if (isDisabled(this)) {\n return\n }\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'touchstart') {\n this.#lastTouchTime = Date.now()\n }\n if (event.type === 'mousedown' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const startTime = parseNumber(this.getAttribute('hover-start-time'), DEFAULT_HOVER_START)\n this.#clearHoverTimers()\n this.#hoverTimer = globalThis.setTimeout(() => {\n this.classList.add(hoverClass)\n }, startTime)\n }\n\n #handlePressEnd = (event: Event) => {\n const hoverClass = getHoverClass(this)\n if (!hoverClass) {\n return\n }\n if (event.type === 'mouseup' && Date.now() - this.#lastTouchTime < 400) {\n return\n }\n const stayTime = parseNumber(this.getAttribute('hover-stay-time'), DEFAULT_HOVER_STAY)\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.classList.contains(hoverClass)) {\n this.#hoverRemoveTimer = globalThis.setTimeout(() => {\n this.classList.remove(hoverClass)\n }, stayTime)\n }\n }\n\n #clearHoverTimers() {\n if (this.#hoverTimer) {\n clearTimeout(this.#hoverTimer)\n this.#hoverTimer = undefined\n }\n if (this.#hoverRemoveTimer) {\n clearTimeout(this.#hoverRemoveTimer)\n this.#hoverRemoveTimer = undefined\n }\n }\n}\n\nexport function ensureButtonDefined(): void {\n if (typeof customElements === 'undefined') {\n return\n }\n if (!customElements.get(NAV_BUTTON_TAG)) {\n customElements.define(NAV_BUTTON_TAG, WeappButton)\n }\n}\n\nexport function setButtonFormConfig(next: FormConfig): void {\n setFormConfig(next)\n}\n\nexport type ButtonFormConfig = FormConfig\n"],"mappings":"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"}
|