@lynx-js/web-elements-canary 0.9.1-canary-20251226-f0317a32 → 0.10.0-canary-20251226-ccbf3de1
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/CHANGELOG.md +19 -4
- package/dist/compat/LinearContainer/LinearContainer.d.ts +8 -0
- package/dist/compat/LinearContainer/LinearContainer.js +109 -0
- package/dist/element-reactive/bindSwitchToEventListener.d.ts +1 -0
- package/dist/element-reactive/bindSwitchToEventListener.js +23 -0
- package/dist/element-reactive/bindToAttribute.d.ts +2 -0
- package/dist/element-reactive/bindToAttribute.js +27 -0
- package/dist/element-reactive/bindToStyle.d.ts +2 -0
- package/dist/element-reactive/bindToStyle.js +21 -0
- package/dist/element-reactive/boostedQueueMicrotask.d.ts +1 -0
- package/dist/element-reactive/boostedQueueMicrotask.js +20 -0
- package/dist/element-reactive/component.d.ts +43 -0
- package/dist/element-reactive/component.js +217 -0
- package/dist/element-reactive/genDomGetter.d.ts +9 -0
- package/dist/element-reactive/genDomGetter.js +18 -0
- package/dist/element-reactive/generateRegister.d.ts +6 -0
- package/dist/element-reactive/generateRegister.js +29 -0
- package/dist/element-reactive/html.d.ts +6 -0
- package/dist/element-reactive/html.js +8 -0
- package/dist/element-reactive/index.d.ts +30 -0
- package/dist/element-reactive/index.js +28 -0
- package/dist/element-reactive/registerAttributeHandler.d.ts +12 -0
- package/dist/element-reactive/registerAttributeHandler.js +11 -0
- package/dist/element-reactive/registerEventStatusChangedHandler.d.ts +11 -0
- package/dist/element-reactive/registerEventStatusChangedHandler.js +7 -0
- package/dist/element-reactive/registerStyleChangeHandler.d.ts +2 -0
- package/dist/element-reactive/registerStyleChangeHandler.js +8 -0
- package/dist/{LynxWrapper → elements/LynxWrapper}/LynxWrapper.js +1 -1
- package/dist/elements/LynxWrapper/index.d.ts +14 -0
- package/dist/elements/LynxWrapper/index.js +18 -0
- package/dist/{ScrollView → elements/ScrollView}/FadeEdgeLengthAttribute.d.ts +1 -1
- package/dist/{ScrollView → elements/ScrollView}/FadeEdgeLengthAttribute.js +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollAttributes.d.ts +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollAttributes.js +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollIntoView.d.ts +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollIntoView.js +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollView.js +2 -2
- package/dist/{ScrollView → elements/ScrollView}/ScrollViewEvents.d.ts +1 -1
- package/dist/{ScrollView → elements/ScrollView}/ScrollViewEvents.js +2 -2
- package/dist/elements/ScrollView/index.d.ts +32 -0
- package/dist/elements/ScrollView/index.js +36 -0
- package/dist/{XAudioTT → elements/XAudioTT}/XAudioAttribute.d.ts +1 -1
- package/dist/{XAudioTT → elements/XAudioTT}/XAudioAttribute.js +1 -1
- package/dist/{XAudioTT → elements/XAudioTT}/XAudioEvents.d.ts +1 -1
- package/dist/{XAudioTT → elements/XAudioTT}/XAudioEvents.js +1 -1
- package/dist/{XAudioTT → elements/XAudioTT}/XAudioTT.js +2 -2
- package/dist/elements/XAudioTT/index.d.ts +21 -0
- package/dist/elements/XAudioTT/index.js +25 -0
- package/dist/{XCanvas → elements/XCanvas}/CanvasAttributes.d.ts +1 -1
- package/dist/{XCanvas → elements/XCanvas}/CanvasAttributes.js +1 -1
- package/dist/{XCanvas → elements/XCanvas}/XCanvas.js +1 -1
- package/dist/elements/XCanvas/index.d.ts +14 -0
- package/dist/elements/XCanvas/index.js +18 -0
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewHeaderNg.js +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewNg.js +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewNgEvents.d.ts +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewNgEvents.js +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotDragNg.js +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotNg.js +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotNgTouchEventsHandler.d.ts +1 -1
- package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewToolbarNg.js +1 -1
- package/dist/elements/XFoldViewNg/index.d.ts +23 -0
- package/dist/elements/XFoldViewNg/index.js +27 -0
- package/dist/{XImage → elements/XImage}/DropShadow.d.ts +1 -1
- package/dist/{XImage → elements/XImage}/DropShadow.js +1 -1
- package/dist/{XImage → elements/XImage}/FilterImage.js +2 -2
- package/dist/{XImage → elements/XImage}/ImageEvents.d.ts +1 -1
- package/dist/{XImage → elements/XImage}/ImageEvents.js +2 -2
- package/dist/{XImage → elements/XImage}/ImageSrc.d.ts +1 -1
- package/dist/{XImage → elements/XImage}/ImageSrc.js +1 -1
- package/dist/{XImage → elements/XImage}/XImage.js +2 -2
- package/dist/elements/XImage/index.d.ts +18 -0
- package/dist/elements/XImage/index.js +22 -0
- package/dist/{XInput → elements/XInput}/InputBaseAttributes.d.ts +1 -1
- package/dist/{XInput → elements/XInput}/InputBaseAttributes.js +1 -1
- package/dist/{XInput → elements/XInput}/Placeholder.d.ts +1 -1
- package/dist/{XInput → elements/XInput}/Placeholder.js +1 -1
- package/dist/{XInput → elements/XInput}/XInput.js +2 -2
- package/dist/{XInput → elements/XInput}/XInputAttribute.d.ts +1 -1
- package/dist/{XInput → elements/XInput}/XInputAttribute.js +1 -1
- package/dist/{XInput → elements/XInput}/XInputEvents.d.ts +1 -1
- package/dist/{XInput → elements/XInput}/XInputEvents.js +2 -2
- package/dist/elements/XInput/index.d.ts +34 -0
- package/dist/elements/XInput/index.js +38 -0
- package/dist/{XList → elements/XList}/ListItem.js +1 -1
- package/dist/{XList → elements/XList}/ListItemAttributes.d.ts +1 -1
- package/dist/{XList → elements/XList}/ListItemAttributes.js +1 -1
- package/dist/{XList → elements/XList}/XList.js +2 -2
- package/dist/{XList → elements/XList}/XListAttributes.d.ts +1 -1
- package/dist/{XList → elements/XList}/XListAttributes.js +1 -1
- package/dist/{XList → elements/XList}/XListEvents.d.ts +1 -1
- package/dist/{XList → elements/XList}/XListEvents.js +2 -2
- package/dist/{XList → elements/XList}/XListWaterfall.d.ts +1 -1
- package/dist/{XList → elements/XList}/XListWaterfall.js +1 -1
- package/dist/elements/XList/index.d.ts +32 -0
- package/dist/elements/XList/index.js +36 -0
- package/dist/{XOverlayNg → elements/XOverlayNg}/XOverlayAttributes.d.ts +1 -1
- package/dist/{XOverlayNg → elements/XOverlayNg}/XOverlayAttributes.js +1 -1
- package/dist/{XOverlayNg → elements/XOverlayNg}/XOverlayNg.js +2 -2
- package/dist/elements/XOverlayNg/index.d.ts +14 -0
- package/dist/elements/XOverlayNg/index.js +18 -0
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshFooter.js +1 -1
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshHeader.js +1 -1
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshSubElementIntersectionObserver.d.ts +1 -1
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshView.js +2 -2
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshViewEventsEmitter.d.ts +1 -1
- package/dist/{XRefreshView → elements/XRefreshView}/XRefreshViewEventsEmitter.js +2 -2
- package/dist/elements/XRefreshView/index.d.ts +26 -0
- package/dist/elements/XRefreshView/index.js +30 -0
- package/dist/{XSvg → elements/XSvg}/XSvg.d.ts +1 -1
- package/dist/{XSvg → elements/XSvg}/XSvg.js +2 -2
- package/dist/elements/XSvg/index.d.ts +13 -0
- package/dist/elements/XSvg/index.js +17 -0
- package/dist/{XSwiper → elements/XSwiper}/SwiperItem.js +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiper.js +2 -2
- package/dist/{XSwiper → elements/XSwiper}/XSwiperAutoScroll.d.ts +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperAutoScroll.js +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperCircular.d.ts +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperCircular.js +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperEvents.d.ts +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperEvents.js +2 -2
- package/dist/{XSwiper → elements/XSwiper}/XSwiperIndicator.d.ts +1 -1
- package/dist/{XSwiper → elements/XSwiper}/XSwiperIndicator.js +1 -1
- package/dist/elements/XSwiper/index.d.ts +29 -0
- package/dist/elements/XSwiper/index.js +33 -0
- package/dist/{XText → elements/XText}/InlineImage.d.ts +1 -1
- package/dist/{XText → elements/XText}/InlineImage.js +2 -2
- package/dist/{XText → elements/XText}/InlineText.js +1 -1
- package/dist/{XText → elements/XText}/InlineTruncation.js +1 -1
- package/dist/{XText → elements/XText}/RawText.js +1 -1
- package/dist/{XText → elements/XText}/XText.js +2 -2
- package/dist/{XText → elements/XText}/XTextTruncation.d.ts +1 -1
- package/dist/{XText → elements/XText}/XTextTruncation.js +2 -2
- package/dist/elements/XText/index.d.ts +21 -0
- package/dist/elements/XText/index.js +25 -0
- package/dist/{XTextarea → elements/XTextarea}/Placeholder.d.ts +1 -1
- package/dist/{XTextarea → elements/XTextarea}/Placeholder.js +1 -1
- package/dist/{XTextarea → elements/XTextarea}/TextareaBaseAttributes.d.ts +1 -1
- package/dist/{XTextarea → elements/XTextarea}/TextareaBaseAttributes.js +1 -1
- package/dist/{XTextarea → elements/XTextarea}/XTextarea.js +2 -2
- package/dist/{XTextarea → elements/XTextarea}/XTextareaAttributes.d.ts +1 -1
- package/dist/{XTextarea → elements/XTextarea}/XTextareaAttributes.js +1 -1
- package/dist/{XTextarea → elements/XTextarea}/XTextareaEvents.d.ts +1 -1
- package/dist/{XTextarea → elements/XTextarea}/XTextareaEvents.js +2 -2
- package/dist/elements/XTextarea/index.d.ts +35 -0
- package/dist/elements/XTextarea/index.js +39 -0
- package/dist/{XView → elements/XView}/BlurRadius.d.ts +1 -1
- package/dist/{XView → elements/XView}/BlurRadius.js +1 -1
- package/dist/{XView → elements/XView}/XBlurView.js +1 -1
- package/dist/{XView → elements/XView}/XView.js +1 -1
- package/dist/elements/XView/index.d.ts +8 -0
- package/dist/elements/XView/index.js +12 -0
- package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerItemNg.js +1 -1
- package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerNg.js +2 -2
- package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerNgEvents.d.ts +1 -1
- package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerNgEvents.js +2 -2
- package/dist/elements/XViewpagerNg/index.d.ts +20 -0
- package/dist/elements/XViewpagerNg/index.js +24 -0
- package/dist/{common → elements/common}/CommonEventsAndMethods.js +1 -1
- package/dist/elements/htmlTemplates.d.ts +20 -0
- package/dist/elements/htmlTemplates.js +332 -0
- package/dist/elements/index.d.ts +12 -0
- package/dist/elements/index.js +16 -0
- package/elements.css +14 -14
- package/index.css +1 -1
- package/package.json +81 -58
- package/src/compat/LinearContainer/linear-compat.css +124 -0
- package/src/{common-css → elements/common-css}/linear.css +1 -1
- package/dist/LynxWrapper/index.d.ts +0 -1
- package/dist/LynxWrapper/index.js +0 -2
- package/dist/ScrollView/index.d.ts +0 -1
- package/dist/ScrollView/index.js +0 -2
- package/dist/XAudioTT/index.d.ts +0 -1
- package/dist/XAudioTT/index.js +0 -2
- package/dist/XCanvas/index.d.ts +0 -1
- package/dist/XCanvas/index.js +0 -2
- package/dist/XFoldViewNg/index.d.ts +0 -5
- package/dist/XFoldViewNg/index.js +0 -6
- package/dist/XImage/index.d.ts +0 -2
- package/dist/XImage/index.js +0 -3
- package/dist/XInput/index.d.ts +0 -1
- package/dist/XInput/index.js +0 -2
- package/dist/XList/index.d.ts +0 -2
- package/dist/XList/index.js +0 -3
- package/dist/XOverlayNg/index.d.ts +0 -1
- package/dist/XOverlayNg/index.js +0 -2
- package/dist/XRefreshView/index.d.ts +0 -3
- package/dist/XRefreshView/index.js +0 -4
- package/dist/XSvg/index.d.ts +0 -1
- package/dist/XSvg/index.js +0 -2
- package/dist/XSwiper/index.d.ts +0 -2
- package/dist/XSwiper/index.js +0 -3
- package/dist/XText/index.d.ts +0 -5
- package/dist/XText/index.js +0 -6
- package/dist/XTextarea/index.d.ts +0 -1
- package/dist/XTextarea/index.js +0 -2
- package/dist/XView/index.d.ts +0 -2
- package/dist/XView/index.js +0 -3
- package/dist/XViewpagerNg/index.d.ts +0 -2
- package/dist/XViewpagerNg/index.js +0 -3
- package/dist/index.d.ts +0 -4
- package/dist/index.js +0 -8
- /package/dist/{LynxWrapper → elements/LynxWrapper}/LynxWrapper.d.ts +0 -0
- /package/dist/{ScrollView → elements/ScrollView}/ScrollView.d.ts +0 -0
- /package/dist/{XAudioTT → elements/XAudioTT}/XAudioTT.d.ts +0 -0
- /package/dist/{XAudioTT → elements/XAudioTT}/utils.d.ts +0 -0
- /package/dist/{XAudioTT → elements/XAudioTT}/utils.js +0 -0
- /package/dist/{XCanvas → elements/XCanvas}/XCanvas.d.ts +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewHeaderNg.d.ts +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewNg.d.ts +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotDragNg.d.ts +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotNg.d.ts +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewSlotNgTouchEventsHandler.js +0 -0
- /package/dist/{XFoldViewNg → elements/XFoldViewNg}/XFoldviewToolbarNg.d.ts +0 -0
- /package/dist/{XImage → elements/XImage}/FilterImage.d.ts +0 -0
- /package/dist/{XImage → elements/XImage}/XImage.d.ts +0 -0
- /package/dist/{XInput → elements/XInput}/XInput.d.ts +0 -0
- /package/dist/{XList → elements/XList}/ListItem.d.ts +0 -0
- /package/dist/{XList → elements/XList}/XList.d.ts +0 -0
- /package/dist/{XOverlayNg → elements/XOverlayNg}/XOverlayNg.d.ts +0 -0
- /package/dist/{XRefreshView → elements/XRefreshView}/XRefreshFooter.d.ts +0 -0
- /package/dist/{XRefreshView → elements/XRefreshView}/XRefreshHeader.d.ts +0 -0
- /package/dist/{XRefreshView → elements/XRefreshView}/XRefreshSubElementIntersectionObserver.js +0 -0
- /package/dist/{XRefreshView → elements/XRefreshView}/XRefreshView.d.ts +0 -0
- /package/dist/{XSwiper → elements/XSwiper}/SwiperItem.d.ts +0 -0
- /package/dist/{XSwiper → elements/XSwiper}/XSwiper.d.ts +0 -0
- /package/dist/{XText → elements/XText}/InlineText.d.ts +0 -0
- /package/dist/{XText → elements/XText}/InlineTruncation.d.ts +0 -0
- /package/dist/{XText → elements/XText}/RawText.d.ts +0 -0
- /package/dist/{XText → elements/XText}/XText.d.ts +0 -0
- /package/dist/{XTextarea → elements/XTextarea}/XTextarea.d.ts +0 -0
- /package/dist/{XView → elements/XView}/XBlurView.d.ts +0 -0
- /package/dist/{XView → elements/XView}/XView.d.ts +0 -0
- /package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerItemNg.d.ts +0 -0
- /package/dist/{XViewpagerNg → elements/XViewpagerNg}/XViewpagerNg.d.ts +0 -0
- /package/dist/{all.d.ts → elements/all.d.ts} +0 -0
- /package/dist/{all.js → elements/all.js} +0 -0
- /package/dist/{common → elements/common}/CommonEventsAndMethods.d.ts +0 -0
- /package/dist/{common → elements/common}/bindToIntersectionObserver.d.ts +0 -0
- /package/dist/{common → elements/common}/bindToIntersectionObserver.js +0 -0
- /package/dist/{common → elements/common}/commonEventInitConfiguration.d.ts +0 -0
- /package/dist/{common → elements/common}/commonEventInitConfiguration.js +0 -0
- /package/dist/{common → elements/common}/constants.d.ts +0 -0
- /package/dist/{common → elements/common}/constants.js +0 -0
- /package/dist/{common → elements/common}/getCombinedParentElement.d.ts +0 -0
- /package/dist/{common → elements/common}/getCombinedParentElement.js +0 -0
- /package/dist/{common → elements/common}/renameEvent.d.ts +0 -0
- /package/dist/{common → elements/common}/renameEvent.js +0 -0
- /package/dist/{common → elements/common}/throttle.d.ts +0 -0
- /package/dist/{common → elements/common}/throttle.js +0 -0
- /package/src/{LynxWrapper → elements/LynxWrapper}/lynx-wrapper.css +0 -0
- /package/src/{ScrollView → elements/ScrollView}/scroll-view.css +0 -0
- /package/src/{XAudioTT → elements/XAudioTT}/x-audio-tt.css +0 -0
- /package/src/{XCanvas → elements/XCanvas}/x-canvas.css +0 -0
- /package/src/{XFoldViewNg → elements/XFoldViewNg}/x-foldview-ng.css +0 -0
- /package/src/{XImage → elements/XImage}/x-image.css +0 -0
- /package/src/{XInput → elements/XInput}/x-input.css +0 -0
- /package/src/{XList → elements/XList}/x-list.css +0 -0
- /package/src/{XOverlayNg → elements/XOverlayNg}/x-overlay-ng.css +0 -0
- /package/src/{XRefreshView → elements/XRefreshView}/x-refresh-view.css +0 -0
- /package/src/{XSvg → elements/XSvg}/x-svg.css +0 -0
- /package/src/{XSwiper → elements/XSwiper}/x-swiper.css +0 -0
- /package/src/{XText → elements/XText}/x-text.css +0 -0
- /package/src/{XTextarea → elements/XTextarea}/x-textarea.css +0 -0
- /package/src/{XViewpagerNg → elements/XViewpagerNg}/x-viewpager-ng.css +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
# @lynx-js/web-elements
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 0.10.0-canary-20251226074923-ccbf3de1040573d60a3f8068585e36d5230b5e4a
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- chore: migrate all @lynx-js/web-elements-\* packages into one ([#2057](https://github.com/lynx-family/lynx-stack/pull/2057))
|
|
8
|
+
|
|
9
|
+
### Before
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
import "@lynx-js/web-elements-template";
|
|
13
|
+
import "@lynx-js/web-elements-compat/LinearContainer";
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
### After
|
|
17
|
+
|
|
18
|
+
```js
|
|
19
|
+
import "@lynx-js/web-elements/html-templates";
|
|
20
|
+
import "@lynx-js/web-elements/compat/LinearContainer";
|
|
21
|
+
```
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
|
6
24
|
|
|
@@ -11,9 +29,6 @@
|
|
|
11
29
|
|
|
12
30
|
This is a part of #1937
|
|
13
31
|
|
|
14
|
-
- Updated dependencies []:
|
|
15
|
-
- @lynx-js/web-elements-template@0.9.1-canary-20251226071107-f0317a32d26e90c1da0ee63f29e5fb711899f075
|
|
16
|
-
|
|
17
32
|
## 0.9.0
|
|
18
33
|
|
|
19
34
|
### Minor Changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type AttributeReactiveClass } from '../../element-reactive/index.js';
|
|
2
|
+
import '../../../src/compat/LinearContainer/linear-compat.css';
|
|
3
|
+
export declare class LinearContainer implements InstanceType<AttributeReactiveClass<typeof HTMLElement>> {
|
|
4
|
+
#private;
|
|
5
|
+
static readonly observedAttributes: never[];
|
|
6
|
+
static readonly observedCSSProperties: string[];
|
|
7
|
+
constructor(currentElement: HTMLElement);
|
|
8
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// Copyright 2024 The Lynx Authors. All rights reserved.
|
|
2
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
3
|
+
// LICENSE file in the root directory of this source tree.
|
|
4
|
+
import { bindToAttribute, } from '../../element-reactive/index.js';
|
|
5
|
+
import '../../../src/compat/LinearContainer/linear-compat.css';
|
|
6
|
+
/** For @container
|
|
7
|
+
* chrome 111, safari 18, firefox no
|
|
8
|
+
*
|
|
9
|
+
* However, when the chromuim version is less than 116.0.5806.0, the following code will crash:
|
|
10
|
+
* ```
|
|
11
|
+
* <style>
|
|
12
|
+
#container {
|
|
13
|
+
--lynx-display: flex;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#target {
|
|
17
|
+
background-color: red;
|
|
18
|
+
width: 400px;
|
|
19
|
+
height: 400px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@container style(--lynx-display: flex) {
|
|
23
|
+
#target {
|
|
24
|
+
background-color: green;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
</style>
|
|
28
|
+
<div id="container">
|
|
29
|
+
<div id="target"></div>
|
|
30
|
+
</div>
|
|
31
|
+
<script>
|
|
32
|
+
const target = document.getElementById('container');
|
|
33
|
+
container.style.setProperty('display', 'none');
|
|
34
|
+
setTimeout(() => {
|
|
35
|
+
target.style.removeProperty('display');
|
|
36
|
+
}, 10);
|
|
37
|
+
</script>
|
|
38
|
+
* ```
|
|
39
|
+
* it fixed in 116.0.5806.0, detail: https://issues.chromium.org/issues/40270007
|
|
40
|
+
*
|
|
41
|
+
* so we limit this feature to chrome 117, safari 18, firefox no:
|
|
42
|
+
* rex unit: chrome 111, safari 17.2, firefox no
|
|
43
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/length
|
|
44
|
+
* transition-behavior:allow-discrete: chrome 117, safari 18, firefox 125
|
|
45
|
+
* https://developer.mozilla.org/en-US/docs/Web/CSS/transition-behavior
|
|
46
|
+
* https://caniuse.com/mdn-css_properties_display_is_transitionable
|
|
47
|
+
*
|
|
48
|
+
* update this once firefox supports this.
|
|
49
|
+
*/
|
|
50
|
+
const supportContainerStyleQuery = CSS.supports('width:1rex')
|
|
51
|
+
&& CSS.supports('transition-behavior:allow-discrete')
|
|
52
|
+
&& CSS.supports('content-visibility: auto');
|
|
53
|
+
export class LinearContainer {
|
|
54
|
+
static observedAttributes = [];
|
|
55
|
+
static observedCSSProperties = [
|
|
56
|
+
'--lynx-display',
|
|
57
|
+
'--lynx-linear-orientation',
|
|
58
|
+
];
|
|
59
|
+
#dom;
|
|
60
|
+
constructor(currentElement) {
|
|
61
|
+
this.#dom = currentElement;
|
|
62
|
+
// @ts-expect-error
|
|
63
|
+
this.cssPropertyChangedHandler = {
|
|
64
|
+
'--lynx-display': this.#setComputedDisplay,
|
|
65
|
+
'--lynx-linear-orientation': this.#setLinearOrientation,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
#setComputedDisplay = bindToAttribute(() => this.#dom, 'lynx-computed-display');
|
|
69
|
+
#setLinearOrientation = bindToAttribute(() => this.#dom, 'lynx-linear-orientation');
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* remove this once firefox supports @container style()
|
|
73
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/CSS/@container
|
|
74
|
+
* @see https://bugzilla.mozilla.org/show_bug.cgi?id=1795622
|
|
75
|
+
*/
|
|
76
|
+
if (!supportContainerStyleQuery) {
|
|
77
|
+
const targetElements = new Set([
|
|
78
|
+
'x-view',
|
|
79
|
+
'scroll-view',
|
|
80
|
+
'x-foldview-header-ng',
|
|
81
|
+
'x-foldview-ng',
|
|
82
|
+
'x-foldview-slot-drag-ng',
|
|
83
|
+
'x-foldview-slot-ng',
|
|
84
|
+
'x-foldview-toolbar-ng',
|
|
85
|
+
'x-refresh-footer',
|
|
86
|
+
'x-refresh-header',
|
|
87
|
+
'x-refresh-view',
|
|
88
|
+
'x-swiper-item',
|
|
89
|
+
'x-viewpager-item-ng',
|
|
90
|
+
'x-viewpager-ng',
|
|
91
|
+
]);
|
|
92
|
+
const realDefine = customElements.define.bind(customElements);
|
|
93
|
+
const fakeDefine = (name, cls, options) => {
|
|
94
|
+
if (targetElements.has(name)) {
|
|
95
|
+
cls.registerPlugin?.(LinearContainer);
|
|
96
|
+
targetElements.delete(name);
|
|
97
|
+
}
|
|
98
|
+
realDefine(name, cls, options);
|
|
99
|
+
};
|
|
100
|
+
customElements.define = fakeDefine;
|
|
101
|
+
for (const tag of targetElements) {
|
|
102
|
+
(customElements.whenDefined(tag)).then((cls) => {
|
|
103
|
+
if (targetElements.has(tag)) {
|
|
104
|
+
cls.registerPlugin?.(LinearContainer);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=LinearContainer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function bindSwitchToEventListener<T>(this: T, elementGetter: (this: T) => HTMLElement, eventName: keyof HTMLElementEventMap | string, eventListener: EventListener, options?: AddEventListenerOptions): (this: T, enable: boolean) => void;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
import { boostedQueueMicrotask } from './boostedQueueMicrotask.js';
|
|
7
|
+
export function bindSwitchToEventListener(elementGetter, eventName, eventListener, options) {
|
|
8
|
+
let listening = false;
|
|
9
|
+
return function (enable) {
|
|
10
|
+
if (enable !== listening) {
|
|
11
|
+
const target = elementGetter.call(this);
|
|
12
|
+
if (enable) {
|
|
13
|
+
boostedQueueMicrotask(() => target.addEventListener(eventName, eventListener, options));
|
|
14
|
+
listening = true;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
boostedQueueMicrotask(() => target.removeEventListener(eventName, eventListener));
|
|
18
|
+
listening = false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=bindSwitchToEventListener.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export type BindToAttributeProxy<T> = ReturnType<typeof bindToAttribute<T>>;
|
|
2
|
+
export declare function bindToAttribute<T>(this: T, elementGetter: (this: T) => HTMLElement, attributeName: string, valProcessor?: (value: string | null) => string | null): (this: T, newVal: string | null) => void;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
import { boostedQueueMicrotask } from './boostedQueueMicrotask.js';
|
|
7
|
+
export function bindToAttribute(elementGetter, attributeName, valProcessor) {
|
|
8
|
+
return function (newVal) {
|
|
9
|
+
if (valProcessor)
|
|
10
|
+
newVal = valProcessor(newVal);
|
|
11
|
+
const target = elementGetter.call(this);
|
|
12
|
+
const currentAttribute = target.getAttribute(attributeName);
|
|
13
|
+
if (currentAttribute !== newVal) {
|
|
14
|
+
if (newVal !== null) {
|
|
15
|
+
boostedQueueMicrotask(() => {
|
|
16
|
+
target.setAttribute(attributeName, newVal);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
boostedQueueMicrotask(() => {
|
|
21
|
+
target.removeAttribute(attributeName);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=bindToAttribute.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export type BindToStyleProxy<T> = ReturnType<typeof bindToStyle<T>>;
|
|
2
|
+
export declare function bindToStyle<T>(this: T, elementGetter: (this: T) => HTMLElement, styleName: string, valProcessor?: (value: string) => string, important?: boolean): (this: T, newVal: string | null) => void;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
import { boostedQueueMicrotask } from './boostedQueueMicrotask.js';
|
|
7
|
+
export function bindToStyle(elementGetter, styleName, valProcessor, important) {
|
|
8
|
+
return function (newVal) {
|
|
9
|
+
if (newVal) {
|
|
10
|
+
if (valProcessor)
|
|
11
|
+
newVal = valProcessor(newVal);
|
|
12
|
+
boostedQueueMicrotask(() => elementGetter
|
|
13
|
+
.call(this)
|
|
14
|
+
.style.setProperty(styleName, newVal, important ? 'important' : undefined));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
boostedQueueMicrotask(() => elementGetter.call(this).style.removeProperty(styleName));
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=bindToStyle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function boostedQueueMicrotask(foo: CallableFunction, that?: any): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
let queuedFunctions = [];
|
|
7
|
+
function __executeNextMicrotask() {
|
|
8
|
+
const currentQueuedFunction = queuedFunctions;
|
|
9
|
+
queuedFunctions = [];
|
|
10
|
+
for (const [foo, that] of currentQueuedFunction) {
|
|
11
|
+
that ? foo.call(that) : foo();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function boostedQueueMicrotask(foo, that) {
|
|
15
|
+
if (queuedFunctions.length === 0) {
|
|
16
|
+
queueMicrotask(__executeNextMicrotask);
|
|
17
|
+
}
|
|
18
|
+
queuedFunctions.push([foo, that]);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=boostedQueueMicrotask.js.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
import type { AttributeChangeHandler } from './registerAttributeHandler.js';
|
|
7
|
+
import type { StyleChangeHandler } from './registerStyleChangeHandler.js';
|
|
8
|
+
import type { EventStatusChangeHandler } from './registerEventStatusChangedHandler.js';
|
|
9
|
+
export interface WebComponentClass {
|
|
10
|
+
new (): HTMLElement & {
|
|
11
|
+
cssPropertyChangedHandler?: never;
|
|
12
|
+
connectedCallback?(): void;
|
|
13
|
+
disconnectedCallback?(): void;
|
|
14
|
+
adoptedCallback?(): void;
|
|
15
|
+
attributeChangedCallback?(name: string, oldValue: null | string, newValue: null | string): void;
|
|
16
|
+
};
|
|
17
|
+
observedCSSProperties?: never;
|
|
18
|
+
observedAttributes?: string[];
|
|
19
|
+
/**
|
|
20
|
+
* for attribute="false",
|
|
21
|
+
* we will do removeAttribute by default;
|
|
22
|
+
* set here for dont do this;
|
|
23
|
+
*/
|
|
24
|
+
notToFilterFalseAttributes?: Set<string>;
|
|
25
|
+
registerPlugin?: (reactiveClass: AttributeReactiveClass<WebComponentClass>) => void;
|
|
26
|
+
}
|
|
27
|
+
export type UseCSSCustomPropertyHandler = (newValue: string, propertyName: string) => void;
|
|
28
|
+
export interface AttributeReactiveClass<T extends typeof HTMLElement> {
|
|
29
|
+
observedAttributes: readonly string[];
|
|
30
|
+
observedCSSProperties?: readonly string[];
|
|
31
|
+
new (dom: InstanceType<T>): any;
|
|
32
|
+
}
|
|
33
|
+
export type AttributeReactiveObject = {
|
|
34
|
+
attributeChangedHandler?: Record<string, {
|
|
35
|
+
handler: AttributeChangeHandler;
|
|
36
|
+
noDomMeasure: boolean;
|
|
37
|
+
}>;
|
|
38
|
+
cssPropertyChangedHandler?: Record<string, StyleChangeHandler>;
|
|
39
|
+
eventStatusChangedHandler?: Record<string, EventStatusChangeHandler>;
|
|
40
|
+
dispose?(): void;
|
|
41
|
+
connectedCallback?(): void;
|
|
42
|
+
};
|
|
43
|
+
export declare function Component<T extends WebComponentClass>(tag: string, attributeReactiveClasses: AttributeReactiveClass<T>[], template?: string): (target: T, context: ClassDecoratorContext<T>) => T;
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { boostedQueueMicrotask } from './boostedQueueMicrotask.js';
|
|
2
|
+
function convertStyleWithPriority(value, priority) {
|
|
3
|
+
if (priority) {
|
|
4
|
+
return value + ' !important';
|
|
5
|
+
}
|
|
6
|
+
else {
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function Component(tag, attributeReactiveClasses, template) {
|
|
11
|
+
let templateElement;
|
|
12
|
+
return (target, { addInitializer }) => {
|
|
13
|
+
const observedStyleProperties = new Set([
|
|
14
|
+
...attributeReactiveClasses
|
|
15
|
+
.filter((e) => e.observedCSSProperties)
|
|
16
|
+
.map((e) => e.observedCSSProperties)
|
|
17
|
+
.reduce((p, r) => p.concat(r), []),
|
|
18
|
+
]);
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
class CustomElement extends target {
|
|
21
|
+
static registerPlugin(reactiveClass) {
|
|
22
|
+
CustomElement.observedAttributes.push(...reactiveClass.observedAttributes);
|
|
23
|
+
if (reactiveClass.observedCSSProperties) {
|
|
24
|
+
for (const property of reactiveClass.observedCSSProperties) {
|
|
25
|
+
observedStyleProperties.add(property);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
attributeReactiveClasses.push(reactiveClass);
|
|
29
|
+
}
|
|
30
|
+
static observedAttributes = [
|
|
31
|
+
...(target.observedAttributes ?? []),
|
|
32
|
+
...attributeReactiveClasses
|
|
33
|
+
.map((e) => e.observedAttributes)
|
|
34
|
+
.reduce((p, r) => p.concat(r), []),
|
|
35
|
+
'class',
|
|
36
|
+
];
|
|
37
|
+
#attributeReactives = [];
|
|
38
|
+
constructor() {
|
|
39
|
+
super();
|
|
40
|
+
if (template && !templateElement) {
|
|
41
|
+
templateElement = document.createElement('template');
|
|
42
|
+
templateElement.innerHTML = template;
|
|
43
|
+
document.body.appendChild(templateElement);
|
|
44
|
+
}
|
|
45
|
+
if (templateElement && !this.shadowRoot) {
|
|
46
|
+
const shadowRoot = this.attachShadow({
|
|
47
|
+
mode: 'open',
|
|
48
|
+
delegatesFocus: true,
|
|
49
|
+
});
|
|
50
|
+
const template = templateElement.content.cloneNode(true);
|
|
51
|
+
shadowRoot.append(template);
|
|
52
|
+
}
|
|
53
|
+
this.#attributeReactives = attributeReactiveClasses.map((oneClass) => {
|
|
54
|
+
const oneAttributeReactive = new oneClass(this);
|
|
55
|
+
return oneAttributeReactive;
|
|
56
|
+
});
|
|
57
|
+
this.#cleanFalseAttributes();
|
|
58
|
+
}
|
|
59
|
+
/** handle observing styles */
|
|
60
|
+
#checking = false;
|
|
61
|
+
#previousStyle = new Map();
|
|
62
|
+
#responseStyleChange() {
|
|
63
|
+
if (!this.#checking && observedStyleProperties.size) {
|
|
64
|
+
this.#checking = true;
|
|
65
|
+
boostedQueueMicrotask(this.#invokeStyleHandler, this);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
#invokeStyleHandler() {
|
|
69
|
+
const computedStyle = getComputedStyle(this);
|
|
70
|
+
for (const propertyName of observedStyleProperties) {
|
|
71
|
+
const value = computedStyle.getPropertyValue(propertyName);
|
|
72
|
+
const priority = computedStyle.getPropertyPriority(propertyName);
|
|
73
|
+
const propertyValue = convertStyleWithPriority(value.trim(), priority);
|
|
74
|
+
if (this.#previousStyle.get(propertyName) !== propertyValue) {
|
|
75
|
+
for (const oneReactive of this.#attributeReactives) {
|
|
76
|
+
oneReactive.cssPropertyChangedHandler?.[propertyName]?.call(oneReactive, propertyValue, propertyName);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
this.#checking = false;
|
|
81
|
+
}
|
|
82
|
+
/** handle attribute='false' */
|
|
83
|
+
setAttribute(qualifiedName, value) {
|
|
84
|
+
if (value.toString() === 'false'
|
|
85
|
+
&& !target.notToFilterFalseAttributes?.has(qualifiedName)
|
|
86
|
+
&& !qualifiedName.startsWith('data-')) {
|
|
87
|
+
this.removeAttribute(qualifiedName);
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
super.setAttribute(qualifiedName, value);
|
|
91
|
+
}
|
|
92
|
+
#cleanFalseAttributes() {
|
|
93
|
+
const attributes = this.attributes;
|
|
94
|
+
for (let index = 0, attr; (attr = attributes.item(index)); index++) {
|
|
95
|
+
if (attr.value === 'false'
|
|
96
|
+
&& !target.notToFilterFalseAttributes?.has(attr.name)
|
|
97
|
+
&& !attr.name.startsWith('data-')) {
|
|
98
|
+
this.removeAttributeNode(attr);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
#connected = false;
|
|
103
|
+
/** handle custom element life-cycles */
|
|
104
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
105
|
+
super.attributeChangedCallback
|
|
106
|
+
&& super.attributeChangedCallback(name, oldValue, newValue);
|
|
107
|
+
if (!target.notToFilterFalseAttributes?.has(name)
|
|
108
|
+
&& !name.startsWith('data-')) {
|
|
109
|
+
if (oldValue === 'false')
|
|
110
|
+
oldValue = null;
|
|
111
|
+
if (newValue === 'false') {
|
|
112
|
+
newValue = null;
|
|
113
|
+
this.removeAttribute(name);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (oldValue !== newValue) {
|
|
117
|
+
if (this.#connected && (name === 'class' || name === 'style')) {
|
|
118
|
+
this.#responseStyleChange();
|
|
119
|
+
}
|
|
120
|
+
for (const oneReactive of this.#attributeReactives) {
|
|
121
|
+
if (oneReactive.attributeChangedHandler?.[name]) {
|
|
122
|
+
const { handler, noDomMeasure } = oneReactive.attributeChangedHandler[name];
|
|
123
|
+
if (noDomMeasure) {
|
|
124
|
+
handler.call(oneReactive, newValue, oldValue, name);
|
|
125
|
+
}
|
|
126
|
+
else if (this.#connected) {
|
|
127
|
+
boostedQueueMicrotask(() => handler.call(oneReactive, newValue, oldValue, name));
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
#invokeAfterConnectedAttributeChangedHandler() {
|
|
134
|
+
this.getAttributeNames().forEach((attributeName) => {
|
|
135
|
+
for (const oneReactive of this.#attributeReactives) {
|
|
136
|
+
if (oneReactive.attributeChangedHandler?.[attributeName]) {
|
|
137
|
+
const { handler, noDomMeasure } = oneReactive.attributeChangedHandler[attributeName];
|
|
138
|
+
if (!noDomMeasure) {
|
|
139
|
+
boostedQueueMicrotask(() => handler.call(oneReactive, this.getAttribute(attributeName), null, attributeName));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
connectedCallback() {
|
|
146
|
+
super.connectedCallback?.();
|
|
147
|
+
this.#attributeReactives.forEach((oneAttributeReactive) => {
|
|
148
|
+
oneAttributeReactive.connectedCallback?.();
|
|
149
|
+
});
|
|
150
|
+
this.#responseStyleChange();
|
|
151
|
+
boostedQueueMicrotask(this.#invokeAfterConnectedAttributeChangedHandler, this);
|
|
152
|
+
this.#connected = true;
|
|
153
|
+
}
|
|
154
|
+
disconnectedCallback() {
|
|
155
|
+
super.disconnectedCallback?.();
|
|
156
|
+
this.#attributeReactives.forEach((oneAttributeReactive) => {
|
|
157
|
+
oneAttributeReactive.dispose?.();
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
#eventListenerMap = {};
|
|
161
|
+
addEventListener(type, listener, options) {
|
|
162
|
+
super.addEventListener(type, listener, options);
|
|
163
|
+
this.#eventListenerMap[type] ??= {
|
|
164
|
+
count: 0,
|
|
165
|
+
listenerCount: new WeakMap(),
|
|
166
|
+
captureListenerCount: new WeakMap(),
|
|
167
|
+
};
|
|
168
|
+
const targetEventInfo = this.#eventListenerMap[type];
|
|
169
|
+
const capture = typeof options === 'object' ? options.capture : options;
|
|
170
|
+
const targetMap = capture
|
|
171
|
+
? targetEventInfo.captureListenerCount
|
|
172
|
+
: targetEventInfo.listenerCount;
|
|
173
|
+
const currentListenerCount = targetMap.get(listener) ?? 0;
|
|
174
|
+
targetMap.set(listener, currentListenerCount + 1);
|
|
175
|
+
if (targetEventInfo.count === 0) {
|
|
176
|
+
// trigger eventStatusChangeHandler
|
|
177
|
+
for (const oneReactive of this.#attributeReactives) {
|
|
178
|
+
const handler = oneReactive.eventStatusChangedHandler?.[type];
|
|
179
|
+
if (handler) {
|
|
180
|
+
handler.call(oneReactive, true, type);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
targetEventInfo.count++;
|
|
185
|
+
}
|
|
186
|
+
removeEventListener(type, listener, options) {
|
|
187
|
+
super.removeEventListener(type, listener, options);
|
|
188
|
+
const capture = typeof options === 'object' ? options.capture : options;
|
|
189
|
+
const targetEventInfo = this.#eventListenerMap[type];
|
|
190
|
+
if (targetEventInfo && targetEventInfo.count > 0) {
|
|
191
|
+
const targetMap = capture
|
|
192
|
+
? targetEventInfo?.captureListenerCount
|
|
193
|
+
: targetEventInfo?.listenerCount;
|
|
194
|
+
const currentListenerCount = targetMap.get(listener);
|
|
195
|
+
if (currentListenerCount === 1) {
|
|
196
|
+
targetEventInfo.listenerCount.delete(listener);
|
|
197
|
+
targetEventInfo.count--;
|
|
198
|
+
if (targetEventInfo.count === 0) {
|
|
199
|
+
// trigger eventStatusChangeHandler
|
|
200
|
+
for (const oneReactive of this.#attributeReactives) {
|
|
201
|
+
const handler = oneReactive.eventStatusChangedHandler?.[type];
|
|
202
|
+
if (handler) {
|
|
203
|
+
handler.call(oneReactive, false, type);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
addInitializer(() => {
|
|
212
|
+
customElements.define(tag, CustomElement);
|
|
213
|
+
});
|
|
214
|
+
return CustomElement;
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=component.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
export type InternalDomGetter<T extends HTMLElement> = () => T;
|
|
7
|
+
export type PlainDomGetter<T extends HTMLElement> = () => T | null;
|
|
8
|
+
export declare function genDomGetter<T extends HTMLElement>(queryableElementGetter: () => ShadowRoot, selector: string): InternalDomGetter<T>;
|
|
9
|
+
export declare function genDomGetter<T extends HTMLElement>(queryableElementGetter: () => HTMLElement, selector: string): PlainDomGetter<T>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function genDomGetter(queryableElementGetter, selector) {
|
|
2
|
+
let dom;
|
|
3
|
+
let queryTarget;
|
|
4
|
+
return () => {
|
|
5
|
+
if (!queryTarget)
|
|
6
|
+
queryTarget = queryableElementGetter();
|
|
7
|
+
if (queryTarget.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
|
|
8
|
+
if (!dom) {
|
|
9
|
+
dom = queryTarget.querySelector(selector);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
dom = queryTarget.querySelector(selector);
|
|
14
|
+
}
|
|
15
|
+
return dom;
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=genDomGetter.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateRegister<DecoratorArgs extends any[], RegistryItem, HandlerType, RegisterStorageMapName extends string>(registerName: RegisterStorageMapName, convertHandlerToRegistryItem: (handler: HandlerType, decoratorArgs: DecoratorArgs) => RegistryItem): (key: string, ...args: DecoratorArgs) => <T>(this: T, target: HandlerType | undefined, context: ClassMemberDecoratorContext | ClassFieldDecoratorContext<T>) => any;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
export function generateRegister(registerName, convertHandlerToRegistryItem) {
|
|
7
|
+
return function registerHandler(key, ...args) {
|
|
8
|
+
return function (target, context) {
|
|
9
|
+
if (context.kind === 'method') {
|
|
10
|
+
context.addInitializer(function () {
|
|
11
|
+
this[registerName] ??= {};
|
|
12
|
+
this[registerName][key] =
|
|
13
|
+
convertHandlerToRegistryItem(target, args);
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
else if (context.kind === 'field') {
|
|
17
|
+
return function (value) {
|
|
18
|
+
this[registerName] ??= {};
|
|
19
|
+
this[registerName][key] = convertHandlerToRegistryItem(value, args);
|
|
20
|
+
return value;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
throw new Error(`[lynx-web-components] decorator type ${context.kind} is not supported`);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=generateRegister.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
export declare const html: (strings: TemplateStringsArray, ...values: any[]) => string;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
// Copyright 2023 The Lynx Authors. All rights reserved.
|
|
3
|
+
// Licensed under the Apache License Version 2.0 that can be found in the
|
|
4
|
+
// LICENSE file in the root directory of this source tree.
|
|
5
|
+
*/
|
|
6
|
+
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#raw_strings
|
|
7
|
+
export const html = (strings, ...values) => String.raw({ raw: strings }, ...values);
|
|
8
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module element-reactive
|
|
3
|
+
*
|
|
4
|
+
* This module provides the core reactive framework for building Web Components in Lynx.
|
|
5
|
+
*
|
|
6
|
+
* Core features:
|
|
7
|
+
* - `Component` decorator: Defines a custom element with reactive capabilities.
|
|
8
|
+
* - Attribute & Style Binding: Automatically updates component state when attributes or styles change.
|
|
9
|
+
* - Event Handling: Provides mechanisms to bind and handle events efficiently.
|
|
10
|
+
* - Lifecycle Management: Extensions to standard Web Component lifecycle callbacks.
|
|
11
|
+
* - Plugin System: Allows extending component behavior.
|
|
12
|
+
*
|
|
13
|
+
* Use this module to create highly performant and reactive custom elements that integrate seamlessly with the Lynx platform.
|
|
14
|
+
*/
|
|
15
|
+
export { bindSwitchToEventListener } from './bindSwitchToEventListener.js';
|
|
16
|
+
export { bindToAttribute } from './bindToAttribute.js';
|
|
17
|
+
export type { BindToAttributeProxy } from './bindToAttribute.js';
|
|
18
|
+
export { bindToStyle } from './bindToStyle.js';
|
|
19
|
+
export type { BindToStyleProxy } from './bindToStyle.js';
|
|
20
|
+
export { boostedQueueMicrotask } from './boostedQueueMicrotask.js';
|
|
21
|
+
export { genDomGetter } from './genDomGetter.js';
|
|
22
|
+
export { Component } from './component.js';
|
|
23
|
+
export type { WebComponentClass, UseCSSCustomPropertyHandler, AttributeReactiveClass, AttributeReactiveObject, } from './component.js';
|
|
24
|
+
export { html } from './html.js';
|
|
25
|
+
export { registerAttributeHandler } from './registerAttributeHandler.js';
|
|
26
|
+
export type { AttributeChangeHandler } from './registerAttributeHandler.js';
|
|
27
|
+
export { registerStyleChangeHandler } from './registerStyleChangeHandler.js';
|
|
28
|
+
export type { StyleChangeHandler } from './registerStyleChangeHandler.js';
|
|
29
|
+
export { registerEventEnableStatusChangeHandler } from './registerEventStatusChangedHandler.js';
|
|
30
|
+
export type { EventStatusChangeHandler } from './registerEventStatusChangedHandler.js';
|