@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,74 @@
|
|
|
1
|
+
import { getNativeComponentDescriptor } from "../../../shared/nativeComponents.mjs";
|
|
2
|
+
import { readBooleanAttribute, resolveContainingShadowRoot } from "../helpers.mjs";
|
|
3
|
+
import { ensureNativeComponentStyle } from "../style.mjs";
|
|
4
|
+
import { normalizeRichTextNodes, sanitizeRichTextAttributes, sanitizeRichTextStyle } from "./helpers.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/runtime/nativeComponents/richText/index.ts
|
|
7
|
+
const BaseElement = globalThis.HTMLElement ?? class {};
|
|
8
|
+
function createRichTextDomNode(node) {
|
|
9
|
+
if (node.type === "text") return document.createTextNode(node.text);
|
|
10
|
+
const element = document.createElement(node.name);
|
|
11
|
+
for (const [name, value] of Object.entries(node.attrs)) element.setAttribute(name, value);
|
|
12
|
+
element.append(...node.children.map(createRichTextDomNode));
|
|
13
|
+
return element;
|
|
14
|
+
}
|
|
15
|
+
var WeappRichText = class extends BaseElement {
|
|
16
|
+
static observedAttributes = [...getNativeComponentDescriptor("rich-text").attributes];
|
|
17
|
+
#content;
|
|
18
|
+
#nodes = "";
|
|
19
|
+
get nodes() {
|
|
20
|
+
return this.#nodes;
|
|
21
|
+
}
|
|
22
|
+
set nodes(value) {
|
|
23
|
+
if (Object.is(this.#nodes, value)) return;
|
|
24
|
+
this.#nodes = value;
|
|
25
|
+
this.#renderNodes();
|
|
26
|
+
}
|
|
27
|
+
connectedCallback() {
|
|
28
|
+
ensureNativeComponentStyle(resolveContainingShadowRoot(this));
|
|
29
|
+
this.#ensureStructure();
|
|
30
|
+
if (this.#nodes === "") this.#nodes = this.getAttribute("nodes") ?? "";
|
|
31
|
+
this.#syncAttributes();
|
|
32
|
+
this.#renderNodes();
|
|
33
|
+
}
|
|
34
|
+
attributeChangedCallback(name, _oldValue, newValue) {
|
|
35
|
+
if (name === "nodes") {
|
|
36
|
+
this.#nodes = newValue ?? "";
|
|
37
|
+
this.#renderNodes();
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
this.#syncAttributes();
|
|
41
|
+
}
|
|
42
|
+
#ensureStructure() {
|
|
43
|
+
if (this.#content || typeof document === "undefined") return;
|
|
44
|
+
const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
|
|
45
|
+
const style = document.createElement("style");
|
|
46
|
+
style.textContent = `
|
|
47
|
+
:host { overflow-wrap: break-word; }
|
|
48
|
+
.content { display: block; min-width: 0; }
|
|
49
|
+
img { max-width: 100%; }
|
|
50
|
+
`;
|
|
51
|
+
const content = document.createElement("div");
|
|
52
|
+
content.className = "content";
|
|
53
|
+
content.addEventListener("click", (event) => {
|
|
54
|
+
const target = event.target;
|
|
55
|
+
if (target instanceof Element && target.closest("a")) event.preventDefault();
|
|
56
|
+
});
|
|
57
|
+
root.append(style, content);
|
|
58
|
+
this.#content = content;
|
|
59
|
+
}
|
|
60
|
+
#syncAttributes() {
|
|
61
|
+
if (!this.#content) return;
|
|
62
|
+
const space = this.getAttribute("space");
|
|
63
|
+
this.#content.style.whiteSpace = space === "nbsp" || space === "ensp" || space === "emsp" ? "pre-wrap" : "normal";
|
|
64
|
+
this.#content.style.userSelect = readBooleanAttribute(this, "user-select") ? "text" : "";
|
|
65
|
+
}
|
|
66
|
+
#renderNodes() {
|
|
67
|
+
if (!this.#content || typeof document === "undefined") return;
|
|
68
|
+
this.#content.replaceChildren(...normalizeRichTextNodes(this.#nodes).map(createRichTextDomNode));
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
//#endregion
|
|
73
|
+
export { WeappRichText, normalizeRichTextNodes, sanitizeRichTextAttributes, sanitizeRichTextStyle };
|
|
74
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#nodes","#renderNodes","#ensureStructure","#syncAttributes","#content"],"sources":["../../../../src/runtime/nativeComponents/richText/index.ts"],"sourcesContent":["import type { SafeRichTextNode } from './helpers'\nimport { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { normalizeRichTextNodes } from './helpers'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nfunction createRichTextDomNode(node: SafeRichTextNode): globalThis.Node {\n if (node.type === 'text') {\n return document.createTextNode(node.text)\n }\n const element = document.createElement(node.name)\n for (const [name, value] of Object.entries(node.attrs)) {\n element.setAttribute(name, value)\n }\n element.append(...node.children.map(createRichTextDomNode))\n return element\n}\n\nexport class WeappRichText extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('rich-text')!.attributes]\n\n #content?: HTMLDivElement\n #nodes: unknown = ''\n\n get nodes() {\n return this.#nodes\n }\n\n set nodes(value: unknown) {\n if (Object.is(this.#nodes, value)) {\n return\n }\n this.#nodes = value\n this.#renderNodes()\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n if (this.#nodes === '') {\n this.#nodes = this.getAttribute('nodes') ?? ''\n }\n this.#syncAttributes()\n this.#renderNodes()\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null) {\n if (name === 'nodes') {\n this.#nodes = newValue ?? ''\n this.#renderNodes()\n return\n }\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#content || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { overflow-wrap: break-word; }\n .content { display: block; min-width: 0; }\n img { max-width: 100%; }\n `\n const content = document.createElement('div')\n content.className = 'content'\n content.addEventListener('click', (event) => {\n const target = event.target\n if (target instanceof Element && target.closest('a')) {\n event.preventDefault()\n }\n })\n root.append(style, content)\n this.#content = content\n }\n\n #syncAttributes() {\n if (!this.#content) {\n return\n }\n const space = this.getAttribute('space')\n this.#content.style.whiteSpace = space === 'nbsp' || space === 'ensp' || space === 'emsp'\n ? 'pre-wrap'\n : 'normal'\n this.#content.style.userSelect = readBooleanAttribute(this, 'user-select') ? 'text' : ''\n }\n\n #renderNodes() {\n if (!this.#content || typeof document === 'undefined') {\n return\n }\n this.#content.replaceChildren(...normalizeRichTextNodes(this.#nodes).map(createRichTextDomNode))\n }\n}\n\nexport * from './helpers'\n"],"mappings":";;;;;;AAMA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAS,sBAAsB,MAAyC;CACtE,IAAI,KAAK,SAAS,QAChB,OAAO,SAAS,eAAe,KAAK,IAAI;CAE1C,MAAM,UAAU,SAAS,cAAc,KAAK,IAAI;CAChD,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,KAAK,KAAK,GACnD,QAAQ,aAAa,MAAM,KAAK;CAElC,QAAQ,OAAO,GAAG,KAAK,SAAS,IAAI,qBAAqB,CAAC;CAC1D,OAAO;AACT;AAEA,IAAa,gBAAb,cAAmC,YAAY;CAC7C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,WAAW,CAAC,CAAE,UAAU;CAErF;CACA,SAAkB;CAElB,IAAI,QAAQ;EACV,OAAO,KAAKA;CACd;CAEA,IAAI,MAAM,OAAgB;EACxB,IAAI,OAAO,GAAG,KAAKA,QAAQ,KAAK,GAC9B;EAEF,KAAKA,SAAS;EACd,KAAKC,aAAa;CACpB;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAKC,iBAAiB;EACtB,IAAI,KAAKF,WAAW,IAClB,KAAKA,SAAS,KAAK,aAAa,OAAO,KAAK;EAE9C,KAAKG,gBAAgB;EACrB,KAAKF,aAAa;CACpB;CAEA,yBAAyB,MAAc,WAA0B,UAAyB;EACxF,IAAI,SAAS,SAAS;GACpB,KAAKD,SAAS,YAAY;GAC1B,KAAKC,aAAa;GAClB;EACF;EACA,KAAKE,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAKC,YAAY,OAAO,aAAa,aACvC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;;EAKpB,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,YAAY;EACpB,QAAQ,iBAAiB,UAAU,UAAU;GAC3C,MAAM,SAAS,MAAM;GACrB,IAAI,kBAAkB,WAAW,OAAO,QAAQ,GAAG,GACjD,MAAM,eAAe;EAEzB,CAAC;EACD,KAAK,OAAO,OAAO,OAAO;EAC1B,KAAKA,WAAW;CAClB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAKA,UACR;EAEF,MAAM,QAAQ,KAAK,aAAa,OAAO;EACvC,KAAKA,SAAS,MAAM,aAAa,UAAU,UAAU,UAAU,UAAU,UAAU,SAC/E,aACA;EACJ,KAAKA,SAAS,MAAM,aAAa,qBAAqB,MAAM,aAAa,IAAI,SAAS;CACxF;CAEA,eAAe;EACb,IAAI,CAAC,KAAKA,YAAY,OAAO,aAAa,aACxC;EAEF,KAAKA,SAAS,gBAAgB,GAAG,uBAAuB,KAAKJ,MAAM,CAAC,CAAC,IAAI,qBAAqB,CAAC;CACjG;AACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//#region src/runtime/nativeComponents/scrollView.d.ts
|
|
2
|
+
declare function createScrollEventDetail(viewport: Pick<HTMLDivElement, 'scrollHeight' | 'scrollLeft' | 'scrollTop' | 'scrollWidth'>, previous: {
|
|
3
|
+
scrollLeft: number;
|
|
4
|
+
scrollTop: number;
|
|
5
|
+
}): {
|
|
6
|
+
scrollLeft: number;
|
|
7
|
+
scrollTop: number;
|
|
8
|
+
scrollWidth: number;
|
|
9
|
+
scrollHeight: number;
|
|
10
|
+
deltaX: number;
|
|
11
|
+
deltaY: number;
|
|
12
|
+
};
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createScrollEventDetail };
|
|
15
|
+
//# sourceMappingURL=scrollView.d.mts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { getNativeComponentDescriptor } from "../../shared/nativeComponents.mjs";
|
|
2
|
+
import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "./helpers.mjs";
|
|
3
|
+
import { ensureNativeComponentStyle } from "./style.mjs";
|
|
4
|
+
|
|
5
|
+
//#region src/runtime/nativeComponents/scrollView.ts
|
|
6
|
+
const BaseElement = globalThis.HTMLElement ?? class {};
|
|
7
|
+
function createScrollEventDetail(viewport, previous) {
|
|
8
|
+
return {
|
|
9
|
+
scrollLeft: viewport.scrollLeft,
|
|
10
|
+
scrollTop: viewport.scrollTop,
|
|
11
|
+
scrollWidth: viewport.scrollWidth,
|
|
12
|
+
scrollHeight: viewport.scrollHeight,
|
|
13
|
+
deltaX: viewport.scrollLeft - previous.scrollLeft,
|
|
14
|
+
deltaY: viewport.scrollTop - previous.scrollTop
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
var WeappScrollView = class extends BaseElement {
|
|
18
|
+
static observedAttributes = [...getNativeComponentDescriptor("scroll-view").attributes];
|
|
19
|
+
#viewport;
|
|
20
|
+
#lastScrollLeft = 0;
|
|
21
|
+
#lastScrollTop = 0;
|
|
22
|
+
get scrollTop() {
|
|
23
|
+
return this.#viewport?.scrollTop ?? 0;
|
|
24
|
+
}
|
|
25
|
+
set scrollTop(value) {
|
|
26
|
+
if (this.#viewport) this.#viewport.scrollTop = value;
|
|
27
|
+
}
|
|
28
|
+
get scrollLeft() {
|
|
29
|
+
return this.#viewport?.scrollLeft ?? 0;
|
|
30
|
+
}
|
|
31
|
+
set scrollLeft(value) {
|
|
32
|
+
if (this.#viewport) this.#viewport.scrollLeft = value;
|
|
33
|
+
}
|
|
34
|
+
connectedCallback() {
|
|
35
|
+
ensureNativeComponentStyle(resolveContainingShadowRoot(this));
|
|
36
|
+
this.#ensureStructure();
|
|
37
|
+
this.#syncAttributes();
|
|
38
|
+
}
|
|
39
|
+
attributeChangedCallback() {
|
|
40
|
+
this.#syncAttributes();
|
|
41
|
+
}
|
|
42
|
+
#ensureStructure() {
|
|
43
|
+
if (this.#viewport || typeof document === "undefined") return;
|
|
44
|
+
const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
|
|
45
|
+
const style = document.createElement("style");
|
|
46
|
+
style.textContent = `
|
|
47
|
+
:host { min-width: 0; min-height: 0; }
|
|
48
|
+
.viewport { width: 100%; height: 100%; overscroll-behavior: contain; }
|
|
49
|
+
`;
|
|
50
|
+
const viewport = document.createElement("div");
|
|
51
|
+
viewport.className = "viewport";
|
|
52
|
+
const slot = document.createElement("slot");
|
|
53
|
+
viewport.append(slot);
|
|
54
|
+
viewport.addEventListener("scroll", () => {
|
|
55
|
+
const detail = createScrollEventDetail(viewport, {
|
|
56
|
+
scrollLeft: this.#lastScrollLeft,
|
|
57
|
+
scrollTop: this.#lastScrollTop
|
|
58
|
+
});
|
|
59
|
+
this.#lastScrollLeft = viewport.scrollLeft;
|
|
60
|
+
this.#lastScrollTop = viewport.scrollTop;
|
|
61
|
+
dispatchMiniProgramEvent(this, "scroll", detail);
|
|
62
|
+
});
|
|
63
|
+
root.append(style, viewport);
|
|
64
|
+
this.#viewport = viewport;
|
|
65
|
+
}
|
|
66
|
+
#syncAttributes() {
|
|
67
|
+
if (!this.#viewport) return;
|
|
68
|
+
this.#viewport.style.overflowX = readBooleanAttribute(this, "scroll-x") ? "auto" : "hidden";
|
|
69
|
+
this.#viewport.style.overflowY = readBooleanAttribute(this, "scroll-y") ? "auto" : "hidden";
|
|
70
|
+
const scrollTop = Number(this.getAttribute("scroll-top"));
|
|
71
|
+
const scrollLeft = Number(this.getAttribute("scroll-left"));
|
|
72
|
+
if (Number.isFinite(scrollTop)) this.#viewport.scrollTop = scrollTop;
|
|
73
|
+
if (Number.isFinite(scrollLeft)) this.#viewport.scrollLeft = scrollLeft;
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
//#endregion
|
|
78
|
+
export { WeappScrollView, createScrollEventDetail };
|
|
79
|
+
//# sourceMappingURL=scrollView.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollView.mjs","names":["#viewport","#ensureStructure","#syncAttributes","#lastScrollLeft","#lastScrollTop"],"sources":["../../../src/runtime/nativeComponents/scrollView.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../shared/nativeComponents'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from './helpers'\nimport { ensureNativeComponentStyle } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport function createScrollEventDetail(\n viewport: Pick<HTMLDivElement, 'scrollHeight' | 'scrollLeft' | 'scrollTop' | 'scrollWidth'>,\n previous: { scrollLeft: number, scrollTop: number },\n) {\n return {\n scrollLeft: viewport.scrollLeft,\n scrollTop: viewport.scrollTop,\n scrollWidth: viewport.scrollWidth,\n scrollHeight: viewport.scrollHeight,\n deltaX: viewport.scrollLeft - previous.scrollLeft,\n deltaY: viewport.scrollTop - previous.scrollTop,\n }\n}\n\nexport class WeappScrollView extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('scroll-view')!.attributes]\n\n #viewport?: HTMLDivElement\n #lastScrollLeft = 0\n #lastScrollTop = 0\n\n get scrollTop() {\n return this.#viewport?.scrollTop ?? 0\n }\n\n set scrollTop(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollTop = value\n }\n }\n\n get scrollLeft() {\n return this.#viewport?.scrollLeft ?? 0\n }\n\n set scrollLeft(value: number) {\n if (this.#viewport) {\n this.#viewport.scrollLeft = value\n }\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n #ensureStructure() {\n if (this.#viewport || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = `\n :host { min-width: 0; min-height: 0; }\n .viewport { width: 100%; height: 100%; overscroll-behavior: contain; }\n `\n const viewport = document.createElement('div')\n viewport.className = 'viewport'\n const slot = document.createElement('slot')\n viewport.append(slot)\n viewport.addEventListener('scroll', () => {\n const detail = createScrollEventDetail(viewport, {\n scrollLeft: this.#lastScrollLeft,\n scrollTop: this.#lastScrollTop,\n })\n this.#lastScrollLeft = viewport.scrollLeft\n this.#lastScrollTop = viewport.scrollTop\n dispatchMiniProgramEvent(this, 'scroll', detail)\n })\n root.append(style, viewport)\n this.#viewport = viewport\n }\n\n #syncAttributes() {\n if (!this.#viewport) {\n return\n }\n this.#viewport.style.overflowX = readBooleanAttribute(this, 'scroll-x') ? 'auto' : 'hidden'\n this.#viewport.style.overflowY = readBooleanAttribute(this, 'scroll-y') ? 'auto' : 'hidden'\n const scrollTop = Number(this.getAttribute('scroll-top'))\n const scrollLeft = Number(this.getAttribute('scroll-left'))\n if (Number.isFinite(scrollTop)) {\n this.#viewport.scrollTop = scrollTop\n }\n if (Number.isFinite(scrollLeft)) {\n this.#viewport.scrollLeft = scrollLeft\n }\n }\n}\n"],"mappings":";;;;;AAIA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,SAAgB,wBACd,UACA,UACA;CACA,OAAO;EACL,YAAY,SAAS;EACrB,WAAW,SAAS;EACpB,aAAa,SAAS;EACtB,cAAc,SAAS;EACvB,QAAQ,SAAS,aAAa,SAAS;EACvC,QAAQ,SAAS,YAAY,SAAS;CACxC;AACF;AAEA,IAAa,kBAAb,cAAqC,YAAY;CAC/C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,aAAa,CAAC,CAAE,UAAU;CAEvF;CACA,kBAAkB;CAClB,iBAAiB;CAEjB,IAAI,YAAY;EACd,OAAO,KAAKA,WAAW,aAAa;CACtC;CAEA,IAAI,UAAU,OAAe;EAC3B,IAAI,KAAKA,WACP,KAAKA,UAAU,YAAY;CAE/B;CAEA,IAAI,aAAa;EACf,OAAO,KAAKA,WAAW,cAAc;CACvC;CAEA,IAAI,WAAW,OAAe;EAC5B,IAAI,KAAKA,WACP,KAAKA,UAAU,aAAa;CAEhC;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAKC,iBAAiB;EACtB,KAAKC,gBAAgB;CACvB;CAEA,2BAA2B;EACzB,KAAKA,gBAAgB;CACvB;CAEA,mBAAmB;EACjB,IAAI,KAAKF,aAAa,OAAO,aAAa,aACxC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;;;;EAIpB,MAAM,WAAW,SAAS,cAAc,KAAK;EAC7C,SAAS,YAAY;EACrB,MAAM,OAAO,SAAS,cAAc,MAAM;EAC1C,SAAS,OAAO,IAAI;EACpB,SAAS,iBAAiB,gBAAgB;GACxC,MAAM,SAAS,wBAAwB,UAAU;IAC/C,YAAY,KAAKG;IACjB,WAAW,KAAKC;GAClB,CAAC;GACD,KAAKD,kBAAkB,SAAS;GAChC,KAAKC,iBAAiB,SAAS;GAC/B,yBAAyB,MAAM,UAAU,MAAM;EACjD,CAAC;EACD,KAAK,OAAO,OAAO,QAAQ;EAC3B,KAAKJ,YAAY;CACnB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAKA,WACR;EAEF,KAAKA,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,KAAKA,UAAU,MAAM,YAAY,qBAAqB,MAAM,UAAU,IAAI,SAAS;EACnF,MAAM,YAAY,OAAO,KAAK,aAAa,YAAY,CAAC;EACxD,MAAM,aAAa,OAAO,KAAK,aAAa,aAAa,CAAC;EAC1D,IAAI,OAAO,SAAS,SAAS,GAC3B,KAAKA,UAAU,YAAY;EAE7B,IAAI,OAAO,SAAS,UAAU,GAC5B,KAAKA,UAAU,aAAa;CAEhC;AACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/runtime/nativeComponents/slider/helpers.ts
|
|
2
|
+
function finiteNumber(value, fallback) {
|
|
3
|
+
const numeric = Number(value);
|
|
4
|
+
return Number.isFinite(numeric) ? numeric : fallback;
|
|
5
|
+
}
|
|
6
|
+
function resolveSliderConfig(input = {}) {
|
|
7
|
+
const min = finiteNumber(input.min, 0);
|
|
8
|
+
const requestedMax = finiteNumber(input.max, 100);
|
|
9
|
+
const max = requestedMax > min ? requestedMax : min + 100;
|
|
10
|
+
const requestedStep = finiteNumber(input.step, 1);
|
|
11
|
+
const step = requestedStep > 0 ? requestedStep : 1;
|
|
12
|
+
const rawValue = Math.min(Math.max(finiteNumber(input.value, min), min), max);
|
|
13
|
+
const steps = Math.round((rawValue - min) / step);
|
|
14
|
+
return {
|
|
15
|
+
min,
|
|
16
|
+
max,
|
|
17
|
+
step,
|
|
18
|
+
value: Math.min(max, Math.max(min, min + steps * step)),
|
|
19
|
+
blockSize: Math.min(28, Math.max(12, finiteNumber(input.blockSize, 28)))
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function createSliderEventDetail(value) {
|
|
23
|
+
return { value };
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
//#endregion
|
|
27
|
+
export { createSliderEventDetail, resolveSliderConfig };
|
|
28
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/slider/helpers.ts"],"sourcesContent":["export interface SliderConfigInput {\n min?: unknown\n max?: unknown\n step?: unknown\n value?: unknown\n blockSize?: unknown\n}\n\nexport interface SliderConfig {\n min: number\n max: number\n step: number\n value: number\n blockSize: number\n}\n\nfunction finiteNumber(value: unknown, fallback: number) {\n const numeric = Number(value)\n return Number.isFinite(numeric) ? numeric : fallback\n}\n\nexport function resolveSliderConfig(input: SliderConfigInput = {}): SliderConfig {\n const min = finiteNumber(input.min, 0)\n const requestedMax = finiteNumber(input.max, 100)\n const max = requestedMax > min ? requestedMax : min + 100\n const requestedStep = finiteNumber(input.step, 1)\n const step = requestedStep > 0 ? requestedStep : 1\n const rawValue = Math.min(Math.max(finiteNumber(input.value, min), min), max)\n const steps = Math.round((rawValue - min) / step)\n const value = Math.min(max, Math.max(min, min + steps * step))\n const blockSize = Math.min(28, Math.max(12, finiteNumber(input.blockSize, 28)))\n return { min, max, step, value, blockSize }\n}\n\nexport function createSliderEventDetail(value: number) {\n return { value }\n}\n"],"mappings":";AAgBA,SAAS,aAAa,OAAgB,UAAkB;CACtD,MAAM,UAAU,OAAO,KAAK;CAC5B,OAAO,OAAO,SAAS,OAAO,IAAI,UAAU;AAC9C;AAEA,SAAgB,oBAAoB,QAA2B,CAAC,GAAiB;CAC/E,MAAM,MAAM,aAAa,MAAM,KAAK,CAAC;CACrC,MAAM,eAAe,aAAa,MAAM,KAAK,GAAG;CAChD,MAAM,MAAM,eAAe,MAAM,eAAe,MAAM;CACtD,MAAM,gBAAgB,aAAa,MAAM,MAAM,CAAC;CAChD,MAAM,OAAO,gBAAgB,IAAI,gBAAgB;CACjD,MAAM,WAAW,KAAK,IAAI,KAAK,IAAI,aAAa,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG;CAC5E,MAAM,QAAQ,KAAK,OAAO,WAAW,OAAO,IAAI;CAGhD,OAAO;EAAE;EAAK;EAAK;EAAM,OAFX,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,CAE/B;EAAG,WADd,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,aAAa,MAAM,WAAW,EAAE,CAAC,CACrC;CAAE;AAC5C;AAEA,SAAgB,wBAAwB,OAAe;CACrD,OAAO,EAAE,MAAM;AACjB"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { getNativeComponentDescriptor } from "../../../shared/nativeComponents.mjs";
|
|
2
|
+
import { connectFormControl, disconnectFormControl } from "../formControl.mjs";
|
|
3
|
+
import { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from "../helpers.mjs";
|
|
4
|
+
import { ensureNativeComponentStyle } from "../style.mjs";
|
|
5
|
+
import { createSliderEventDetail, resolveSliderConfig } from "./helpers.mjs";
|
|
6
|
+
import { SLIDER_SHADOW_STYLE } from "./style.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/runtime/nativeComponents/slider/index.ts
|
|
9
|
+
const BaseElement = globalThis.HTMLElement ?? class {};
|
|
10
|
+
var WeappSlider = class extends BaseElement {
|
|
11
|
+
static observedAttributes = [...getNativeComponentDescriptor("slider").attributes];
|
|
12
|
+
#input;
|
|
13
|
+
#output;
|
|
14
|
+
#initialValue = 0;
|
|
15
|
+
#initialValueCaptured = false;
|
|
16
|
+
get value() {
|
|
17
|
+
return this.#input?.valueAsNumber ?? this.#config.value;
|
|
18
|
+
}
|
|
19
|
+
set value(value) {
|
|
20
|
+
this.setAttribute("value", String(value));
|
|
21
|
+
}
|
|
22
|
+
get disabled() {
|
|
23
|
+
return readBooleanAttribute(this, "disabled");
|
|
24
|
+
}
|
|
25
|
+
get formControlName() {
|
|
26
|
+
return this.getAttribute("name") ?? "";
|
|
27
|
+
}
|
|
28
|
+
get formControlValue() {
|
|
29
|
+
return this.value;
|
|
30
|
+
}
|
|
31
|
+
get formControlDisabled() {
|
|
32
|
+
return this.disabled;
|
|
33
|
+
}
|
|
34
|
+
get #config() {
|
|
35
|
+
return resolveSliderConfig({
|
|
36
|
+
min: this.getAttribute("min"),
|
|
37
|
+
max: this.getAttribute("max"),
|
|
38
|
+
step: this.getAttribute("step"),
|
|
39
|
+
value: this.getAttribute("value"),
|
|
40
|
+
blockSize: this.getAttribute("block-size")
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
connectedCallback() {
|
|
44
|
+
ensureNativeComponentStyle(resolveContainingShadowRoot(this));
|
|
45
|
+
this.#ensureStructure();
|
|
46
|
+
this.#syncAttributes();
|
|
47
|
+
if (!this.#initialValueCaptured) {
|
|
48
|
+
this.#initialValue = this.#config.value;
|
|
49
|
+
this.#initialValueCaptured = true;
|
|
50
|
+
}
|
|
51
|
+
connectFormControl(this);
|
|
52
|
+
}
|
|
53
|
+
disconnectedCallback() {
|
|
54
|
+
disconnectFormControl(this);
|
|
55
|
+
}
|
|
56
|
+
attributeChangedCallback() {
|
|
57
|
+
this.#syncAttributes();
|
|
58
|
+
}
|
|
59
|
+
formReset() {
|
|
60
|
+
if (!this.#input) return;
|
|
61
|
+
this.#input.valueAsNumber = this.#initialValue;
|
|
62
|
+
this.#syncVisual();
|
|
63
|
+
}
|
|
64
|
+
formActivate() {
|
|
65
|
+
this.#input?.focus();
|
|
66
|
+
}
|
|
67
|
+
#ensureStructure() {
|
|
68
|
+
if (this.#input || typeof document === "undefined") return;
|
|
69
|
+
const root = this.shadowRoot ?? this.attachShadow({ mode: "open" });
|
|
70
|
+
const style = document.createElement("style");
|
|
71
|
+
style.textContent = SLIDER_SHADOW_STYLE;
|
|
72
|
+
const wrapper = document.createElement("div");
|
|
73
|
+
wrapper.className = "slider";
|
|
74
|
+
const input = document.createElement("input");
|
|
75
|
+
input.type = "range";
|
|
76
|
+
const output = document.createElement("output");
|
|
77
|
+
input.addEventListener("input", (event) => {
|
|
78
|
+
event.stopPropagation();
|
|
79
|
+
this.#syncVisual();
|
|
80
|
+
dispatchMiniProgramEvent(this, "changing", createSliderEventDetail(input.valueAsNumber));
|
|
81
|
+
});
|
|
82
|
+
input.addEventListener("change", (event) => {
|
|
83
|
+
event.stopPropagation();
|
|
84
|
+
this.#syncVisual();
|
|
85
|
+
dispatchMiniProgramEvent(this, "change", createSliderEventDetail(input.valueAsNumber));
|
|
86
|
+
});
|
|
87
|
+
wrapper.append(input, output);
|
|
88
|
+
root.append(style, wrapper);
|
|
89
|
+
this.#input = input;
|
|
90
|
+
this.#output = output;
|
|
91
|
+
}
|
|
92
|
+
#syncAttributes() {
|
|
93
|
+
if (!this.#input || !this.#output) return;
|
|
94
|
+
const config = this.#config;
|
|
95
|
+
this.#input.min = String(config.min);
|
|
96
|
+
this.#input.max = String(config.max);
|
|
97
|
+
this.#input.step = String(config.step);
|
|
98
|
+
this.#input.valueAsNumber = config.value;
|
|
99
|
+
this.#input.disabled = this.disabled;
|
|
100
|
+
this.#output.hidden = !readBooleanAttribute(this, "show-value");
|
|
101
|
+
this.style.setProperty("--weapp-slider-active-color", this.getAttribute("active-color") ?? this.getAttribute("selected-color") ?? "#1aad19");
|
|
102
|
+
this.style.setProperty("--weapp-slider-background-color", this.getAttribute("background-color") ?? this.getAttribute("color") ?? "#e9e9e9");
|
|
103
|
+
this.style.setProperty("--weapp-slider-block-color", this.getAttribute("block-color") ?? "#ffffff");
|
|
104
|
+
this.style.setProperty("--weapp-slider-block-size", `${config.blockSize}px`);
|
|
105
|
+
this.#syncVisual();
|
|
106
|
+
}
|
|
107
|
+
#syncVisual() {
|
|
108
|
+
const min = Number(this.#input.min);
|
|
109
|
+
const max = Number(this.#input.max);
|
|
110
|
+
const value = this.#input.valueAsNumber;
|
|
111
|
+
const progress = (value - min) / (max - min) * 100;
|
|
112
|
+
this.style.setProperty("--weapp-slider-progress", `${progress}%`);
|
|
113
|
+
this.#output.value = String(value);
|
|
114
|
+
this.#output.textContent = String(value);
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
//#endregion
|
|
119
|
+
export { WeappSlider, createSliderEventDetail, resolveSliderConfig };
|
|
120
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#input","#config","#ensureStructure","#syncAttributes","#initialValueCaptured","#initialValue","#syncVisual","#output"],"sources":["../../../../src/runtime/nativeComponents/slider/index.ts"],"sourcesContent":["import { getNativeComponentDescriptor } from '../../../shared/nativeComponents'\nimport { connectFormControl, disconnectFormControl } from '../formControl'\nimport { dispatchMiniProgramEvent, readBooleanAttribute, resolveContainingShadowRoot } from '../helpers'\nimport { ensureNativeComponentStyle } from '../style'\nimport { createSliderEventDetail, resolveSliderConfig } from './helpers'\nimport { SLIDER_SHADOW_STYLE } from './style'\n\nconst BaseElement = (globalThis.HTMLElement ?? class {}) as typeof HTMLElement\n\nexport class WeappSlider extends BaseElement {\n static observedAttributes = [...getNativeComponentDescriptor('slider')!.attributes]\n\n #input?: HTMLInputElement\n #output?: HTMLOutputElement\n #initialValue = 0\n #initialValueCaptured = false\n\n get value() {\n return this.#input?.valueAsNumber ?? this.#config.value\n }\n\n set value(value: number) {\n this.setAttribute('value', String(value))\n }\n\n get disabled() {\n return readBooleanAttribute(this, 'disabled')\n }\n\n get formControlName() {\n return this.getAttribute('name') ?? ''\n }\n\n get formControlValue() {\n return this.value\n }\n\n get formControlDisabled() {\n return this.disabled\n }\n\n get #config() {\n return resolveSliderConfig({\n min: this.getAttribute('min'),\n max: this.getAttribute('max'),\n step: this.getAttribute('step'),\n value: this.getAttribute('value'),\n blockSize: this.getAttribute('block-size'),\n })\n }\n\n connectedCallback() {\n ensureNativeComponentStyle(resolveContainingShadowRoot(this))\n this.#ensureStructure()\n this.#syncAttributes()\n if (!this.#initialValueCaptured) {\n this.#initialValue = this.#config.value\n this.#initialValueCaptured = true\n }\n connectFormControl(this)\n }\n\n disconnectedCallback() {\n disconnectFormControl(this)\n }\n\n attributeChangedCallback() {\n this.#syncAttributes()\n }\n\n formReset() {\n if (!this.#input) {\n return\n }\n this.#input.valueAsNumber = this.#initialValue\n this.#syncVisual()\n }\n\n formActivate() {\n this.#input?.focus()\n }\n\n #ensureStructure() {\n if (this.#input || typeof document === 'undefined') {\n return\n }\n const root = this.shadowRoot ?? this.attachShadow({ mode: 'open' })\n const style = document.createElement('style')\n style.textContent = SLIDER_SHADOW_STYLE\n const wrapper = document.createElement('div')\n wrapper.className = 'slider'\n const input = document.createElement('input')\n input.type = 'range'\n const output = document.createElement('output')\n input.addEventListener('input', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'changing', createSliderEventDetail(input.valueAsNumber))\n })\n input.addEventListener('change', (event) => {\n event.stopPropagation()\n this.#syncVisual()\n dispatchMiniProgramEvent(this, 'change', createSliderEventDetail(input.valueAsNumber))\n })\n wrapper.append(input, output)\n root.append(style, wrapper)\n this.#input = input\n this.#output = output\n }\n\n #syncAttributes() {\n if (!this.#input || !this.#output) {\n return\n }\n const config = this.#config\n this.#input.min = String(config.min)\n this.#input.max = String(config.max)\n this.#input.step = String(config.step)\n this.#input.valueAsNumber = config.value\n this.#input.disabled = this.disabled\n this.#output.hidden = !readBooleanAttribute(this, 'show-value')\n this.style.setProperty('--weapp-slider-active-color', this.getAttribute('active-color') ?? this.getAttribute('selected-color') ?? '#1aad19')\n this.style.setProperty('--weapp-slider-background-color', this.getAttribute('background-color') ?? this.getAttribute('color') ?? '#e9e9e9')\n this.style.setProperty('--weapp-slider-block-color', this.getAttribute('block-color') ?? '#ffffff')\n this.style.setProperty('--weapp-slider-block-size', `${config.blockSize}px`)\n this.#syncVisual()\n }\n\n #syncVisual() {\n const min = Number(this.#input!.min)\n const max = Number(this.#input!.max)\n const value = this.#input!.valueAsNumber\n const progress = ((value - min) / (max - min)) * 100\n this.style.setProperty('--weapp-slider-progress', `${progress}%`)\n this.#output!.value = String(value)\n this.#output!.textContent = String(value)\n }\n}\n\nexport * from './helpers'\n"],"mappings":";;;;;;;;AAOA,MAAM,cAAe,WAAW,eAAe,MAAM,CAAC;AAEtD,IAAa,cAAb,cAAiC,YAAY;CAC3C,OAAO,qBAAqB,CAAC,GAAG,6BAA6B,QAAQ,CAAC,CAAE,UAAU;CAElF;CACA;CACA,gBAAgB;CAChB,wBAAwB;CAExB,IAAI,QAAQ;EACV,OAAO,KAAKA,QAAQ,iBAAiB,KAAKC,QAAQ;CACpD;CAEA,IAAI,MAAM,OAAe;EACvB,KAAK,aAAa,SAAS,OAAO,KAAK,CAAC;CAC1C;CAEA,IAAI,WAAW;EACb,OAAO,qBAAqB,MAAM,UAAU;CAC9C;CAEA,IAAI,kBAAkB;EACpB,OAAO,KAAK,aAAa,MAAM,KAAK;CACtC;CAEA,IAAI,mBAAmB;EACrB,OAAO,KAAK;CACd;CAEA,IAAI,sBAAsB;EACxB,OAAO,KAAK;CACd;CAEA,IAAIA,UAAU;EACZ,OAAO,oBAAoB;GACzB,KAAK,KAAK,aAAa,KAAK;GAC5B,KAAK,KAAK,aAAa,KAAK;GAC5B,MAAM,KAAK,aAAa,MAAM;GAC9B,OAAO,KAAK,aAAa,OAAO;GAChC,WAAW,KAAK,aAAa,YAAY;EAC3C,CAAC;CACH;CAEA,oBAAoB;EAClB,2BAA2B,4BAA4B,IAAI,CAAC;EAC5D,KAAKC,iBAAiB;EACtB,KAAKC,gBAAgB;EACrB,IAAI,CAAC,KAAKC,uBAAuB;GAC/B,KAAKC,gBAAgB,KAAKJ,QAAQ;GAClC,KAAKG,wBAAwB;EAC/B;EACA,mBAAmB,IAAI;CACzB;CAEA,uBAAuB;EACrB,sBAAsB,IAAI;CAC5B;CAEA,2BAA2B;EACzB,KAAKD,gBAAgB;CACvB;CAEA,YAAY;EACV,IAAI,CAAC,KAAKH,QACR;EAEF,KAAKA,OAAO,gBAAgB,KAAKK;EACjC,KAAKC,YAAY;CACnB;CAEA,eAAe;EACb,KAAKN,QAAQ,MAAM;CACrB;CAEA,mBAAmB;EACjB,IAAI,KAAKA,UAAU,OAAO,aAAa,aACrC;EAEF,MAAM,OAAO,KAAK,cAAc,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;EAClE,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,cAAc;EACpB,MAAM,UAAU,SAAS,cAAc,KAAK;EAC5C,QAAQ,YAAY;EACpB,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,OAAO;EACb,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,MAAM,iBAAiB,UAAU,UAAU;GACzC,MAAM,gBAAgB;GACtB,KAAKM,YAAY;GACjB,yBAAyB,MAAM,YAAY,wBAAwB,MAAM,aAAa,CAAC;EACzF,CAAC;EACD,MAAM,iBAAiB,WAAW,UAAU;GAC1C,MAAM,gBAAgB;GACtB,KAAKA,YAAY;GACjB,yBAAyB,MAAM,UAAU,wBAAwB,MAAM,aAAa,CAAC;EACvF,CAAC;EACD,QAAQ,OAAO,OAAO,MAAM;EAC5B,KAAK,OAAO,OAAO,OAAO;EAC1B,KAAKN,SAAS;EACd,KAAKO,UAAU;CACjB;CAEA,kBAAkB;EAChB,IAAI,CAAC,KAAKP,UAAU,CAAC,KAAKO,SACxB;EAEF,MAAM,SAAS,KAAKN;EACpB,KAAKD,OAAO,MAAM,OAAO,OAAO,GAAG;EACnC,KAAKA,OAAO,MAAM,OAAO,OAAO,GAAG;EACnC,KAAKA,OAAO,OAAO,OAAO,OAAO,IAAI;EACrC,KAAKA,OAAO,gBAAgB,OAAO;EACnC,KAAKA,OAAO,WAAW,KAAK;EAC5B,KAAKO,QAAQ,SAAS,CAAC,qBAAqB,MAAM,YAAY;EAC9D,KAAK,MAAM,YAAY,+BAA+B,KAAK,aAAa,cAAc,KAAK,KAAK,aAAa,gBAAgB,KAAK,SAAS;EAC3I,KAAK,MAAM,YAAY,mCAAmC,KAAK,aAAa,kBAAkB,KAAK,KAAK,aAAa,OAAO,KAAK,SAAS;EAC1I,KAAK,MAAM,YAAY,8BAA8B,KAAK,aAAa,aAAa,KAAK,SAAS;EAClG,KAAK,MAAM,YAAY,6BAA6B,GAAG,OAAO,UAAU,GAAG;EAC3E,KAAKD,YAAY;CACnB;CAEA,cAAc;EACZ,MAAM,MAAM,OAAO,KAAKN,OAAQ,GAAG;EACnC,MAAM,MAAM,OAAO,KAAKA,OAAQ,GAAG;EACnC,MAAM,QAAQ,KAAKA,OAAQ;EAC3B,MAAM,YAAa,QAAQ,QAAQ,MAAM,OAAQ;EACjD,KAAK,MAAM,YAAY,2BAA2B,GAAG,SAAS,EAAE;EAChE,KAAKO,QAAS,QAAQ,OAAO,KAAK;EAClC,KAAKA,QAAS,cAAc,OAAO,KAAK;CAC1C;AACF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//#region src/runtime/nativeComponents/slider/style.ts
|
|
2
|
+
const SLIDER_SHADOW_STYLE = `
|
|
3
|
+
:host { min-width: 0; }
|
|
4
|
+
.slider {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
width: 100%;
|
|
8
|
+
min-height: 28px;
|
|
9
|
+
}
|
|
10
|
+
input {
|
|
11
|
+
width: 100%;
|
|
12
|
+
min-width: 0;
|
|
13
|
+
height: 2px;
|
|
14
|
+
margin: 0;
|
|
15
|
+
flex: 1;
|
|
16
|
+
padding: 0;
|
|
17
|
+
border: 0;
|
|
18
|
+
border-radius: 1px;
|
|
19
|
+
outline: 0;
|
|
20
|
+
appearance: none;
|
|
21
|
+
background: linear-gradient(
|
|
22
|
+
to right,
|
|
23
|
+
var(--weapp-slider-active-color, #1aad19) 0%,
|
|
24
|
+
var(--weapp-slider-active-color, #1aad19) var(--weapp-slider-progress, 0%),
|
|
25
|
+
var(--weapp-slider-background-color, #e9e9e9) var(--weapp-slider-progress, 0%),
|
|
26
|
+
var(--weapp-slider-background-color, #e9e9e9) 100%
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
input::-webkit-slider-thumb {
|
|
30
|
+
width: var(--weapp-slider-block-size, 28px);
|
|
31
|
+
height: var(--weapp-slider-block-size, 28px);
|
|
32
|
+
border: 0;
|
|
33
|
+
border-radius: 50%;
|
|
34
|
+
appearance: none;
|
|
35
|
+
background: var(--weapp-slider-block-color, #ffffff);
|
|
36
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);
|
|
37
|
+
}
|
|
38
|
+
input::-moz-range-thumb {
|
|
39
|
+
width: var(--weapp-slider-block-size, 28px);
|
|
40
|
+
height: var(--weapp-slider-block-size, 28px);
|
|
41
|
+
border: 0;
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
background: var(--weapp-slider-block-color, #ffffff);
|
|
44
|
+
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);
|
|
45
|
+
}
|
|
46
|
+
input:disabled { opacity: 0.5; cursor: not-allowed; }
|
|
47
|
+
output {
|
|
48
|
+
width: 3em;
|
|
49
|
+
margin-left: 12px;
|
|
50
|
+
color: #888888;
|
|
51
|
+
font-size: 14px;
|
|
52
|
+
line-height: 28px;
|
|
53
|
+
text-align: right;
|
|
54
|
+
}
|
|
55
|
+
output[hidden] { display: none; }
|
|
56
|
+
`;
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { SLIDER_SHADOW_STYLE };
|
|
60
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/slider/style.ts"],"sourcesContent":["export const SLIDER_SHADOW_STYLE = `\n :host { min-width: 0; }\n .slider {\n display: flex;\n align-items: center;\n width: 100%;\n min-height: 28px;\n }\n input {\n width: 100%;\n min-width: 0;\n height: 2px;\n margin: 0;\n flex: 1;\n padding: 0;\n border: 0;\n border-radius: 1px;\n outline: 0;\n appearance: none;\n background: linear-gradient(\n to right,\n var(--weapp-slider-active-color, #1aad19) 0%,\n var(--weapp-slider-active-color, #1aad19) var(--weapp-slider-progress, 0%),\n var(--weapp-slider-background-color, #e9e9e9) var(--weapp-slider-progress, 0%),\n var(--weapp-slider-background-color, #e9e9e9) 100%\n );\n }\n input::-webkit-slider-thumb {\n width: var(--weapp-slider-block-size, 28px);\n height: var(--weapp-slider-block-size, 28px);\n border: 0;\n border-radius: 50%;\n appearance: none;\n background: var(--weapp-slider-block-color, #ffffff);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n }\n input::-moz-range-thumb {\n width: var(--weapp-slider-block-size, 28px);\n height: var(--weapp-slider-block-size, 28px);\n border: 0;\n border-radius: 50%;\n background: var(--weapp-slider-block-color, #ffffff);\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.28);\n }\n input:disabled { opacity: 0.5; cursor: not-allowed; }\n output {\n width: 3em;\n margin-left: 12px;\n color: #888888;\n font-size: 14px;\n line-height: 28px;\n text-align: right;\n }\n output[hidden] { display: none; }\n`\n"],"mappings":";AAAA,MAAa,sBAAsB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { NATIVE_COMPONENT_DESCRIPTORS } from "../../shared/nativeComponents.mjs";
|
|
2
|
+
import { injectStyle } from "../style.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/runtime/nativeComponents/style.ts
|
|
5
|
+
const NATIVE_COMPONENT_STYLE_ID = "weapp-web-native-component-style";
|
|
6
|
+
const styleTargets = /* @__PURE__ */ new WeakSet();
|
|
7
|
+
let sharedSheet;
|
|
8
|
+
const NATIVE_COMPONENT_STYLE = NATIVE_COMPONENT_DESCRIPTORS.map((descriptor) => `${descriptor.webTag} { ${descriptor.defaultStyle} }`).join("\n");
|
|
9
|
+
function resolveSharedStyleSheet(root) {
|
|
10
|
+
if (!("adoptedStyleSheets" in (root.ownerDocument ?? document)) || !("replaceSync" in CSSStyleSheet.prototype)) return;
|
|
11
|
+
if (!sharedSheet) {
|
|
12
|
+
sharedSheet = new CSSStyleSheet();
|
|
13
|
+
sharedSheet.replaceSync(NATIVE_COMPONENT_STYLE);
|
|
14
|
+
}
|
|
15
|
+
return sharedSheet;
|
|
16
|
+
}
|
|
17
|
+
function ensureNativeComponentStyle(root) {
|
|
18
|
+
if (typeof document === "undefined") return;
|
|
19
|
+
const target = root ?? document.head;
|
|
20
|
+
if (!target || styleTargets.has(target)) return;
|
|
21
|
+
if (!root) {
|
|
22
|
+
injectStyle(NATIVE_COMPONENT_STYLE, NATIVE_COMPONENT_STYLE_ID);
|
|
23
|
+
styleTargets.add(target);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const sheet = resolveSharedStyleSheet(root);
|
|
27
|
+
if (sheet) {
|
|
28
|
+
const existing = root.adoptedStyleSheets ?? [];
|
|
29
|
+
if (!existing.includes(sheet)) root.adoptedStyleSheets = [...existing, sheet];
|
|
30
|
+
} else {
|
|
31
|
+
const style = document.createElement("style");
|
|
32
|
+
style.id = NATIVE_COMPONENT_STYLE_ID;
|
|
33
|
+
style.textContent = NATIVE_COMPONENT_STYLE;
|
|
34
|
+
root.append(style);
|
|
35
|
+
}
|
|
36
|
+
styleTargets.add(target);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//#endregion
|
|
40
|
+
export { NATIVE_COMPONENT_STYLE, ensureNativeComponentStyle };
|
|
41
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/runtime/nativeComponents/style.ts"],"sourcesContent":["import { NATIVE_COMPONENT_DESCRIPTORS } from '../../shared/nativeComponents'\nimport { injectStyle } from '../style'\n\nconst NATIVE_COMPONENT_STYLE_ID = 'weapp-web-native-component-style'\nconst styleTargets = new WeakSet<ParentNode>()\nlet sharedSheet: CSSStyleSheet | undefined\n\nexport const NATIVE_COMPONENT_STYLE = NATIVE_COMPONENT_DESCRIPTORS\n .map(descriptor => `${descriptor.webTag} { ${descriptor.defaultStyle} }`)\n .join('\\n')\n\nfunction resolveSharedStyleSheet(root: ShadowRoot) {\n const ownerDocument = root.ownerDocument ?? document\n if (!('adoptedStyleSheets' in ownerDocument) || !('replaceSync' in CSSStyleSheet.prototype)) {\n return undefined\n }\n if (!sharedSheet) {\n sharedSheet = new CSSStyleSheet()\n sharedSheet.replaceSync(NATIVE_COMPONENT_STYLE)\n }\n return sharedSheet\n}\n\nexport function ensureNativeComponentStyle(root?: ShadowRoot) {\n if (typeof document === 'undefined') {\n return\n }\n const target = root ?? document.head\n if (!target || styleTargets.has(target)) {\n return\n }\n if (!root) {\n injectStyle(NATIVE_COMPONENT_STYLE, NATIVE_COMPONENT_STYLE_ID)\n styleTargets.add(target)\n return\n }\n const sheet = resolveSharedStyleSheet(root)\n if (sheet) {\n const existing = root.adoptedStyleSheets ?? []\n if (!existing.includes(sheet)) {\n root.adoptedStyleSheets = [...existing, sheet]\n }\n }\n else {\n const style = document.createElement('style')\n style.id = NATIVE_COMPONENT_STYLE_ID\n style.textContent = NATIVE_COMPONENT_STYLE\n root.append(style)\n }\n styleTargets.add(target)\n}\n"],"mappings":";;;;AAGA,MAAM,4BAA4B;AAClC,MAAM,+BAAe,IAAI,QAAoB;AAC7C,IAAI;AAEJ,MAAa,yBAAyB,6BACnC,KAAI,eAAc,GAAG,WAAW,OAAO,KAAK,WAAW,aAAa,GAAG,CAAC,CACxE,KAAK,IAAI;AAEZ,SAAS,wBAAwB,MAAkB;CAEjD,IAAI,EAAE,yBADgB,KAAK,iBAAiB,cACI,EAAE,iBAAiB,cAAc,YAC/E;CAEF,IAAI,CAAC,aAAa;EAChB,cAAc,IAAI,cAAc;EAChC,YAAY,YAAY,sBAAsB;CAChD;CACA,OAAO;AACT;AAEA,SAAgB,2BAA2B,MAAmB;CAC5D,IAAI,OAAO,aAAa,aACtB;CAEF,MAAM,SAAS,QAAQ,SAAS;CAChC,IAAI,CAAC,UAAU,aAAa,IAAI,MAAM,GACpC;CAEF,IAAI,CAAC,MAAM;EACT,YAAY,wBAAwB,yBAAyB;EAC7D,aAAa,IAAI,MAAM;EACvB;CACF;CACA,MAAM,QAAQ,wBAAwB,IAAI;CAC1C,IAAI,OAAO;EACT,MAAM,WAAW,KAAK,sBAAsB,CAAC;EAC7C,IAAI,CAAC,SAAS,SAAS,KAAK,GAC1B,KAAK,qBAAqB,CAAC,GAAG,UAAU,KAAK;CAEjD,OACK;EACH,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,KAAK;EACX,MAAM,cAAc;EACpB,KAAK,OAAO,KAAK;CACnB;CACA,aAAa,IAAI,MAAM;AACzB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
//#region src/runtime/nativeComponents/swiper/helpers.ts
|
|
2
|
+
function clampSwiperIndex(index, itemCount) {
|
|
3
|
+
if (itemCount <= 0) return 0;
|
|
4
|
+
return Math.min(itemCount - 1, Math.max(0, Math.trunc(index)));
|
|
5
|
+
}
|
|
6
|
+
function resolveSwiperIndex(options) {
|
|
7
|
+
if (options.currentItemId) {
|
|
8
|
+
const itemIndex = options.itemIds.indexOf(options.currentItemId);
|
|
9
|
+
if (itemIndex >= 0) return itemIndex;
|
|
10
|
+
}
|
|
11
|
+
return clampSwiperIndex(options.current, options.itemIds.length);
|
|
12
|
+
}
|
|
13
|
+
function resolveSwiperStep(current, direction, itemCount, circular) {
|
|
14
|
+
if (itemCount <= 0) return 0;
|
|
15
|
+
const next = current + direction;
|
|
16
|
+
if (circular) return (next + itemCount) % itemCount;
|
|
17
|
+
return clampSwiperIndex(next, itemCount);
|
|
18
|
+
}
|
|
19
|
+
function resolveSwipeTarget(options) {
|
|
20
|
+
const threshold = Math.max(24, options.itemSize * .2);
|
|
21
|
+
if (Math.abs(options.delta) < threshold) return options.current;
|
|
22
|
+
return resolveSwiperStep(options.current, options.delta < 0 ? 1 : -1, options.itemCount, options.circular);
|
|
23
|
+
}
|
|
24
|
+
function createSwiperChangeDetail(current, currentItemId, source) {
|
|
25
|
+
return {
|
|
26
|
+
current,
|
|
27
|
+
source,
|
|
28
|
+
currentItemId
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function resolveSwiperNumber(value, fallback, minimum = 0) {
|
|
32
|
+
if (value === null || value.trim() === "") return fallback;
|
|
33
|
+
const number = Number(value);
|
|
34
|
+
return Number.isFinite(number) ? Math.max(minimum, number) : fallback;
|
|
35
|
+
}
|
|
36
|
+
function resolveSwiperEasing(value) {
|
|
37
|
+
switch (value?.trim()) {
|
|
38
|
+
case "linear": return "linear";
|
|
39
|
+
case "easeInCubic": return "cubic-bezier(0.55, 0.055, 0.675, 0.19)";
|
|
40
|
+
case "easeOutCubic": return "cubic-bezier(0.215, 0.61, 0.355, 1)";
|
|
41
|
+
case "easeInOutCubic": return "cubic-bezier(0.645, 0.045, 0.355, 1)";
|
|
42
|
+
default: return "ease";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function resolveSwiperLength(value) {
|
|
46
|
+
const normalized = value?.trim() || "0px";
|
|
47
|
+
return /^-?\d+(?:\.\d+)?rpx$/i.test(normalized) || /^-?\.\d+rpx$/i.test(normalized) ? `calc(var(--rpx) * ${normalized.slice(0, -3)})` : normalized;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { clampSwiperIndex, createSwiperChangeDetail, resolveSwipeTarget, resolveSwiperEasing, resolveSwiperIndex, resolveSwiperLength, resolveSwiperNumber, resolveSwiperStep };
|
|
52
|
+
//# sourceMappingURL=helpers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.mjs","names":[],"sources":["../../../../src/runtime/nativeComponents/swiper/helpers.ts"],"sourcesContent":["export type SwiperChangeSource = '' | 'autoplay' | 'touch'\n\nexport function clampSwiperIndex(index: number, itemCount: number) {\n if (itemCount <= 0) {\n return 0\n }\n return Math.min(itemCount - 1, Math.max(0, Math.trunc(index)))\n}\n\nexport function resolveSwiperIndex(options: {\n current: number\n currentItemId?: string\n itemIds: string[]\n}) {\n if (options.currentItemId) {\n const itemIndex = options.itemIds.indexOf(options.currentItemId)\n if (itemIndex >= 0) {\n return itemIndex\n }\n }\n return clampSwiperIndex(options.current, options.itemIds.length)\n}\n\nexport function resolveSwiperStep(\n current: number,\n direction: -1 | 1,\n itemCount: number,\n circular: boolean,\n) {\n if (itemCount <= 0) {\n return 0\n }\n const next = current + direction\n if (circular) {\n return (next + itemCount) % itemCount\n }\n return clampSwiperIndex(next, itemCount)\n}\n\nexport function resolveSwipeTarget(options: {\n current: number\n delta: number\n itemSize: number\n itemCount: number\n circular: boolean\n}) {\n const threshold = Math.max(24, options.itemSize * 0.2)\n if (Math.abs(options.delta) < threshold) {\n return options.current\n }\n return resolveSwiperStep(\n options.current,\n options.delta < 0 ? 1 : -1,\n options.itemCount,\n options.circular,\n )\n}\n\nexport function createSwiperChangeDetail(\n current: number,\n currentItemId: string,\n source: SwiperChangeSource,\n) {\n return {\n current,\n source,\n currentItemId,\n }\n}\n\nexport function resolveSwiperNumber(\n value: string | null,\n fallback: number,\n minimum = 0,\n) {\n if (value === null || value.trim() === '') {\n return fallback\n }\n const number = Number(value)\n return Number.isFinite(number) ? Math.max(minimum, number) : fallback\n}\n\nexport function resolveSwiperEasing(value: string | null) {\n switch (value?.trim()) {\n case 'linear':\n return 'linear'\n case 'easeInCubic':\n return 'cubic-bezier(0.55, 0.055, 0.675, 0.19)'\n case 'easeOutCubic':\n return 'cubic-bezier(0.215, 0.61, 0.355, 1)'\n case 'easeInOutCubic':\n return 'cubic-bezier(0.645, 0.045, 0.355, 1)'\n default:\n return 'ease'\n }\n}\n\nexport function resolveSwiperLength(value: string | null) {\n const normalized = value?.trim() || '0px'\n const isRpx = /^-?\\d+(?:\\.\\d+)?rpx$/i.test(normalized)\n || /^-?\\.\\d+rpx$/i.test(normalized)\n return isRpx ? `calc(var(--rpx) * ${normalized.slice(0, -3)})` : normalized\n}\n"],"mappings":";AAEA,SAAgB,iBAAiB,OAAe,WAAmB;CACjE,IAAI,aAAa,GACf,OAAO;CAET,OAAO,KAAK,IAAI,YAAY,GAAG,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC/D;AAEA,SAAgB,mBAAmB,SAIhC;CACD,IAAI,QAAQ,eAAe;EACzB,MAAM,YAAY,QAAQ,QAAQ,QAAQ,QAAQ,aAAa;EAC/D,IAAI,aAAa,GACf,OAAO;CAEX;CACA,OAAO,iBAAiB,QAAQ,SAAS,QAAQ,QAAQ,MAAM;AACjE;AAEA,SAAgB,kBACd,SACA,WACA,WACA,UACA;CACA,IAAI,aAAa,GACf,OAAO;CAET,MAAM,OAAO,UAAU;CACvB,IAAI,UACF,QAAQ,OAAO,aAAa;CAE9B,OAAO,iBAAiB,MAAM,SAAS;AACzC;AAEA,SAAgB,mBAAmB,SAMhC;CACD,MAAM,YAAY,KAAK,IAAI,IAAI,QAAQ,WAAW,EAAG;CACrD,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,WAC5B,OAAO,QAAQ;CAEjB,OAAO,kBACL,QAAQ,SACR,QAAQ,QAAQ,IAAI,IAAI,IACxB,QAAQ,WACR,QAAQ,QACV;AACF;AAEA,SAAgB,yBACd,SACA,eACA,QACA;CACA,OAAO;EACL;EACA;EACA;CACF;AACF;AAEA,SAAgB,oBACd,OACA,UACA,UAAU,GACV;CACA,IAAI,UAAU,QAAQ,MAAM,KAAK,MAAM,IACrC,OAAO;CAET,MAAM,SAAS,OAAO,KAAK;CAC3B,OAAO,OAAO,SAAS,MAAM,IAAI,KAAK,IAAI,SAAS,MAAM,IAAI;AAC/D;AAEA,SAAgB,oBAAoB,OAAsB;CACxD,QAAQ,OAAO,KAAK,GAApB;EACE,KAAK,UACH,OAAO;EACT,KAAK,eACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,kBACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,SAAgB,oBAAoB,OAAsB;CACxD,MAAM,aAAa,OAAO,KAAK,KAAK;CAGpC,OAFc,wBAAwB,KAAK,UAAU,KAChD,gBAAgB,KAAK,UAAU,IACrB,qBAAqB,WAAW,MAAM,GAAG,EAAE,EAAE,KAAK;AACnE"}
|