@lynx-js/web-elements 0.2.4

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.
Files changed (204) hide show
  1. package/CHANGELOG.md +323 -0
  2. package/LICENSE.txt +202 -0
  3. package/Notice.txt +1 -0
  4. package/README.md +47 -0
  5. package/dist/LynxWrapper/LynxWrapper.d.ts +2 -0
  6. package/dist/LynxWrapper/LynxWrapper.js +27 -0
  7. package/dist/LynxWrapper/index.d.ts +1 -0
  8. package/dist/LynxWrapper/index.js +2 -0
  9. package/dist/ScrollView/FadeEdgeLengthAttribute.d.ts +10 -0
  10. package/dist/ScrollView/FadeEdgeLengthAttribute.js +43 -0
  11. package/dist/ScrollView/ScrollAttributes.d.ts +8 -0
  12. package/dist/ScrollView/ScrollAttributes.js +83 -0
  13. package/dist/ScrollView/ScrollIntoView.d.ts +9 -0
  14. package/dist/ScrollView/ScrollIntoView.js +71 -0
  15. package/dist/ScrollView/ScrollView.d.ts +31 -0
  16. package/dist/ScrollView/ScrollView.js +185 -0
  17. package/dist/ScrollView/ScrollViewEvents.d.ts +9 -0
  18. package/dist/ScrollView/ScrollViewEvents.js +146 -0
  19. package/dist/ScrollView/index.d.ts +1 -0
  20. package/dist/ScrollView/index.js +2 -0
  21. package/dist/XAudioTT/XAudioAttribute.d.ts +7 -0
  22. package/dist/XAudioTT/XAudioAttribute.js +93 -0
  23. package/dist/XAudioTT/XAudioEvents.d.ts +8 -0
  24. package/dist/XAudioTT/XAudioEvents.js +116 -0
  25. package/dist/XAudioTT/XAudioTT.d.ts +46 -0
  26. package/dist/XAudioTT/XAudioTT.js +183 -0
  27. package/dist/XAudioTT/index.d.ts +1 -0
  28. package/dist/XAudioTT/index.js +2 -0
  29. package/dist/XAudioTT/utils.d.ts +19 -0
  30. package/dist/XAudioTT/utils.js +66 -0
  31. package/dist/XCanvas/CanvasAttributes.d.ts +12 -0
  32. package/dist/XCanvas/CanvasAttributes.js +78 -0
  33. package/dist/XCanvas/XCanvas.d.ts +5 -0
  34. package/dist/XCanvas/XCanvas.js +32 -0
  35. package/dist/XCanvas/index.d.ts +1 -0
  36. package/dist/XCanvas/index.js +2 -0
  37. package/dist/XFoldViewNg/XFoldviewHeaderNg.d.ts +2 -0
  38. package/dist/XFoldViewNg/XFoldviewHeaderNg.js +32 -0
  39. package/dist/XFoldViewNg/XFoldviewHeaderNgFeatures.d.ts +9 -0
  40. package/dist/XFoldViewNg/XFoldviewHeaderNgFeatures.js +32 -0
  41. package/dist/XFoldViewNg/XFoldviewNg.d.ts +11 -0
  42. package/dist/XFoldViewNg/XFoldviewNg.js +52 -0
  43. package/dist/XFoldViewNg/XFoldviewNgEvents.d.ts +7 -0
  44. package/dist/XFoldViewNg/XFoldviewNgEvents.js +55 -0
  45. package/dist/XFoldViewNg/XFoldviewSlotDragNg.d.ts +2 -0
  46. package/dist/XFoldViewNg/XFoldviewSlotDragNg.js +30 -0
  47. package/dist/XFoldViewNg/XFoldviewSlotNg.d.ts +2 -0
  48. package/dist/XFoldViewNg/XFoldviewSlotNg.js +32 -0
  49. package/dist/XFoldViewNg/XFoldviewSlotNgTouchEventsHandler.d.ts +7 -0
  50. package/dist/XFoldViewNg/XFoldviewSlotNgTouchEventsHandler.js +105 -0
  51. package/dist/XFoldViewNg/XFoldviewToolbarNg.d.ts +2 -0
  52. package/dist/XFoldViewNg/XFoldviewToolbarNg.js +30 -0
  53. package/dist/XFoldViewNg/index.d.ts +5 -0
  54. package/dist/XFoldViewNg/index.js +6 -0
  55. package/dist/XImage/DropShadow.d.ts +6 -0
  56. package/dist/XImage/DropShadow.js +30 -0
  57. package/dist/XImage/FilterImage.d.ts +2 -0
  58. package/dist/XImage/FilterImage.js +31 -0
  59. package/dist/XImage/ImageEvents.d.ts +6 -0
  60. package/dist/XImage/ImageEvents.js +68 -0
  61. package/dist/XImage/ImageSrc.d.ts +7 -0
  62. package/dist/XImage/ImageSrc.js +61 -0
  63. package/dist/XImage/XImage.d.ts +2 -0
  64. package/dist/XImage/XImage.js +30 -0
  65. package/dist/XImage/index.d.ts +2 -0
  66. package/dist/XImage/index.js +3 -0
  67. package/dist/XInput/InputBaseAttributes.d.ts +9 -0
  68. package/dist/XInput/InputBaseAttributes.js +99 -0
  69. package/dist/XInput/Placeholder.d.ts +6 -0
  70. package/dist/XInput/Placeholder.js +60 -0
  71. package/dist/XInput/XInput.d.ts +28 -0
  72. package/dist/XInput/XInput.js +129 -0
  73. package/dist/XInput/XInputAttribute.d.ts +9 -0
  74. package/dist/XInput/XInputAttribute.js +52 -0
  75. package/dist/XInput/XInputEvents.d.ts +6 -0
  76. package/dist/XInput/XInputEvents.js +111 -0
  77. package/dist/XInput/index.d.ts +1 -0
  78. package/dist/XInput/index.js +2 -0
  79. package/dist/XList/ListItem.d.ts +2 -0
  80. package/dist/XList/ListItem.js +28 -0
  81. package/dist/XList/XList.d.ts +52 -0
  82. package/dist/XList/XList.js +257 -0
  83. package/dist/XList/XListAttributes.d.ts +8 -0
  84. package/dist/XList/XListAttributes.js +50 -0
  85. package/dist/XList/XListEvents.d.ts +7 -0
  86. package/dist/XList/XListEvents.js +356 -0
  87. package/dist/XList/index.d.ts +2 -0
  88. package/dist/XList/index.js +3 -0
  89. package/dist/XOverlayNg/XOverlayAttributes.d.ts +8 -0
  90. package/dist/XOverlayNg/XOverlayAttributes.js +80 -0
  91. package/dist/XOverlayNg/XOverlayNg.d.ts +2 -0
  92. package/dist/XOverlayNg/XOverlayNg.js +45 -0
  93. package/dist/XOverlayNg/index.d.ts +1 -0
  94. package/dist/XOverlayNg/index.js +2 -0
  95. package/dist/XRefreshView/XRefreshFooter.d.ts +3 -0
  96. package/dist/XRefreshView/XRefreshFooter.js +35 -0
  97. package/dist/XRefreshView/XRefreshHeader.d.ts +3 -0
  98. package/dist/XRefreshView/XRefreshHeader.js +35 -0
  99. package/dist/XRefreshView/XRefreshSubElementIntersectionObserver.d.ts +16 -0
  100. package/dist/XRefreshView/XRefreshSubElementIntersectionObserver.js +52 -0
  101. package/dist/XRefreshView/XRefreshView.d.ts +13 -0
  102. package/dist/XRefreshView/XRefreshView.js +125 -0
  103. package/dist/XRefreshView/XRefreshViewEventsEmitter.d.ts +8 -0
  104. package/dist/XRefreshView/XRefreshViewEventsEmitter.js +246 -0
  105. package/dist/XRefreshView/index.d.ts +3 -0
  106. package/dist/XRefreshView/index.js +4 -0
  107. package/dist/XSvg/XSvg.d.ts +8 -0
  108. package/dist/XSvg/XSvg.js +80 -0
  109. package/dist/XSvg/index.d.ts +1 -0
  110. package/dist/XSvg/index.js +2 -0
  111. package/dist/XSwiper/SwiperItem.d.ts +2 -0
  112. package/dist/XSwiper/SwiperItem.js +28 -0
  113. package/dist/XSwiper/XSwiper.d.ts +14 -0
  114. package/dist/XSwiper/XSwiper.js +231 -0
  115. package/dist/XSwiper/XSwiperAutoScroll.d.ts +8 -0
  116. package/dist/XSwiper/XSwiperAutoScroll.js +63 -0
  117. package/dist/XSwiper/XSwiperCircular.d.ts +8 -0
  118. package/dist/XSwiper/XSwiperCircular.js +191 -0
  119. package/dist/XSwiper/XSwiperEvents.d.ts +8 -0
  120. package/dist/XSwiper/XSwiperEvents.js +144 -0
  121. package/dist/XSwiper/XSwiperIndicator.d.ts +9 -0
  122. package/dist/XSwiper/XSwiperIndicator.js +118 -0
  123. package/dist/XSwiper/index.d.ts +2 -0
  124. package/dist/XSwiper/index.js +3 -0
  125. package/dist/XText/InlineImage.d.ts +11 -0
  126. package/dist/XText/InlineImage.js +56 -0
  127. package/dist/XText/InlineText.d.ts +5 -0
  128. package/dist/XText/InlineText.js +30 -0
  129. package/dist/XText/InlineTruncation.d.ts +5 -0
  130. package/dist/XText/InlineTruncation.js +42 -0
  131. package/dist/XText/RawText.d.ts +7 -0
  132. package/dist/XText/RawText.js +54 -0
  133. package/dist/XText/XText.d.ts +5 -0
  134. package/dist/XText/XText.js +49 -0
  135. package/dist/XText/XTextTruncation.d.ts +11 -0
  136. package/dist/XText/XTextTruncation.js +604 -0
  137. package/dist/XText/index.d.ts +5 -0
  138. package/dist/XText/index.js +6 -0
  139. package/dist/XTextarea/Placeholder.d.ts +7 -0
  140. package/dist/XTextarea/Placeholder.js +59 -0
  141. package/dist/XTextarea/TextareaBaseAttributes.d.ts +6 -0
  142. package/dist/XTextarea/TextareaBaseAttributes.js +70 -0
  143. package/dist/XTextarea/XTextarea.d.ts +21 -0
  144. package/dist/XTextarea/XTextarea.js +101 -0
  145. package/dist/XTextarea/XTextareaAttributes.d.ts +6 -0
  146. package/dist/XTextarea/XTextareaAttributes.js +81 -0
  147. package/dist/XTextarea/XTextareaEvents.d.ts +6 -0
  148. package/dist/XTextarea/XTextareaEvents.js +111 -0
  149. package/dist/XTextarea/index.d.ts +1 -0
  150. package/dist/XTextarea/index.js +2 -0
  151. package/dist/XView/BlurRadius.d.ts +7 -0
  152. package/dist/XView/BlurRadius.js +38 -0
  153. package/dist/XView/XBlurView.d.ts +2 -0
  154. package/dist/XView/XBlurView.js +29 -0
  155. package/dist/XView/XView.d.ts +4 -0
  156. package/dist/XView/XView.js +45 -0
  157. package/dist/XView/index.d.ts +2 -0
  158. package/dist/XView/index.js +3 -0
  159. package/dist/XViewpagerNg/XViewpagerItemNg.d.ts +2 -0
  160. package/dist/XViewpagerNg/XViewpagerItemNg.js +30 -0
  161. package/dist/XViewpagerNg/XViewpagerNg.d.ts +10 -0
  162. package/dist/XViewpagerNg/XViewpagerNg.js +98 -0
  163. package/dist/XViewpagerNg/XViewpagerNgEvents.d.ts +9 -0
  164. package/dist/XViewpagerNg/XViewpagerNgEvents.js +118 -0
  165. package/dist/XViewpagerNg/index.d.ts +2 -0
  166. package/dist/XViewpagerNg/index.js +3 -0
  167. package/dist/all.d.ts +16 -0
  168. package/dist/all.js +17 -0
  169. package/dist/common/Exposure.d.ts +28 -0
  170. package/dist/common/Exposure.js +193 -0
  171. package/dist/common/bindToIntersectionObserver.d.ts +1 -0
  172. package/dist/common/bindToIntersectionObserver.js +23 -0
  173. package/dist/common/commonEventInitConfiguration.d.ts +5 -0
  174. package/dist/common/commonEventInitConfiguration.js +9 -0
  175. package/dist/common/constants.d.ts +4 -0
  176. package/dist/common/constants.js +14 -0
  177. package/dist/common/convertLengthToPx.d.ts +1 -0
  178. package/dist/common/convertLengthToPx.js +25 -0
  179. package/dist/common/renameEvent.d.ts +1 -0
  180. package/dist/common/renameEvent.js +6 -0
  181. package/dist/common/throttle.d.ts +4 -0
  182. package/dist/common/throttle.js +40 -0
  183. package/dist/index.d.ts +4 -0
  184. package/dist/index.js +8 -0
  185. package/dist/lazy.d.ts +1 -0
  186. package/dist/lazy.js +106 -0
  187. package/index.css +19 -0
  188. package/package.json +110 -0
  189. package/src/LynxWrapper/lynx-wrapper.css +12 -0
  190. package/src/ScrollView/scroll-view.css +121 -0
  191. package/src/XAudioTT/x-audio-tt.css +3 -0
  192. package/src/XCanvas/x-canvas.css +16 -0
  193. package/src/XFoldViewNg/x-foldview-ng.css +80 -0
  194. package/src/XImage/x-image.css +82 -0
  195. package/src/XInput/x-input.css +48 -0
  196. package/src/XList/x-list.css +147 -0
  197. package/src/XOverlayNg/x-overlay-ng.css +56 -0
  198. package/src/XRefreshView/x-refresh-view.css +61 -0
  199. package/src/XSvg/x-svg.css +10 -0
  200. package/src/XSwiper/x-swiper.css +319 -0
  201. package/src/XText/x-text.css +272 -0
  202. package/src/XTextarea/x-textarea.css +49 -0
  203. package/src/XViewpagerNg/x-viewpager-ng.css +68 -0
  204. package/src/common-css/linear.css +386 -0
@@ -0,0 +1,257 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ /*
3
+ // Copyright 2024 The Lynx Authors. All rights reserved.
4
+ // Licensed under the Apache License Version 2.0 that can be found in the
5
+ // LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { Component, genDomGetter, html, } from '@lynx-js/web-elements-reactive';
8
+ import { XListAttributes } from './XListAttributes.js';
9
+ import { XListEvents } from './XListEvents.js';
10
+ import { LynxExposure } from '../common/Exposure.js';
11
+ import { commonComponentEventSetting } from '../common/commonEventInitConfiguration.js';
12
+ let XList = (() => {
13
+ let _classDecorators = [Component('x-list', [LynxExposure, XListAttributes, XListEvents], html `<style>
14
+ .placeholder-dom {
15
+ display: none;
16
+ flex: 0 0 0;
17
+ align-self: stretch;
18
+ min-height: 0;
19
+ min-width: 0;
20
+ }
21
+ .observer-container {
22
+ flex-direction: inherit;
23
+ overflow: visible;
24
+ }
25
+ .observer {
26
+ display: flex;
27
+ }
28
+ </style>
29
+ <div id="content" part="content">
30
+ <div
31
+ class="observer-container placeholder-dom"
32
+ part="upper-threshold-observer"
33
+ >
34
+ <div
35
+ class="observer placeholder-dom"
36
+ id="upper-threshold-observer"
37
+ ></div>
38
+ </div>
39
+ <slot part="slot"></slot>
40
+ <div
41
+ class="observer-container placeholder-dom"
42
+ part="lower-threshold-observer"
43
+ >
44
+ <div
45
+ class="observer placeholder-dom"
46
+ id="lower-threshold-observer"
47
+ ></div>
48
+ </div>
49
+ </div>`)];
50
+ let _classDescriptor;
51
+ let _classExtraInitializers = [];
52
+ let _classThis;
53
+ let _classSuper = HTMLElement;
54
+ var XList = class extends _classSuper {
55
+ static { _classThis = this; }
56
+ static {
57
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
58
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
59
+ XList = _classThis = _classDescriptor.value;
60
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
61
+ }
62
+ static notToFilterFalseAttributes = new Set(['enable-scroll']);
63
+ #getListContainer = genDomGetter(() => this.shadowRoot, '#content');
64
+ #autoScrollOptions = {
65
+ rate: 0,
66
+ lastTimestamp: 0,
67
+ autoStop: true,
68
+ isScrolling: false,
69
+ };
70
+ #cellsMap = {};
71
+ get scrollTop() {
72
+ return this.#getListContainer().scrollTop;
73
+ }
74
+ set scrollTop(val) {
75
+ this.#getListContainer().scrollTop = val;
76
+ }
77
+ get scrollLeft() {
78
+ return this.#getListContainer().scrollTop;
79
+ }
80
+ set scrollLeft(val) {
81
+ this.#getListContainer().scrollLeft = val;
82
+ }
83
+ get __scrollTop() {
84
+ return super.scrollTop;
85
+ }
86
+ get __scrollLeft() {
87
+ return super.scrollTop;
88
+ }
89
+ scrollToPosition(params) {
90
+ let offset;
91
+ if (typeof params.offset === 'string') {
92
+ const offsetValue = parseFloat(params.offset);
93
+ offset = { left: offsetValue, top: offsetValue };
94
+ }
95
+ else if (typeof params.offset === 'number') {
96
+ offset = { left: params.offset, top: params.offset };
97
+ }
98
+ if (typeof params.index === 'number') {
99
+ if (params.index === 0) {
100
+ this.#getListContainer().scrollTop = 0;
101
+ this.#getListContainer().scrollLeft = 0;
102
+ }
103
+ else if (params.index > 0 && params.index < this.childElementCount) {
104
+ const targetKid = this.children.item(params.index);
105
+ if (targetKid instanceof HTMLElement) {
106
+ if (offset) {
107
+ offset = {
108
+ left: targetKid.offsetLeft + offset.left,
109
+ top: targetKid.offsetTop + offset.top,
110
+ };
111
+ }
112
+ else {
113
+ offset = { left: targetKid.offsetLeft, top: targetKid.offsetTop };
114
+ }
115
+ }
116
+ }
117
+ }
118
+ if (offset) {
119
+ this.#getListContainer().scrollTo({
120
+ ...offset,
121
+ behavior: params.smooth ? 'smooth' : 'auto',
122
+ });
123
+ }
124
+ }
125
+ #autoScroll = (timestamp) => {
126
+ if (!this.#autoScrollOptions.isScrolling) {
127
+ return;
128
+ }
129
+ if (!this.#autoScrollOptions.lastTimestamp) {
130
+ this.#autoScrollOptions.lastTimestamp = timestamp;
131
+ }
132
+ const scrollContainer = this.#getListContainer();
133
+ const deltaTime = timestamp - this.#autoScrollOptions.lastTimestamp;
134
+ const tickDistance = (deltaTime / 1000) * this.#autoScrollOptions.rate;
135
+ scrollContainer.scrollBy({
136
+ left: tickDistance,
137
+ top: tickDistance,
138
+ behavior: 'smooth',
139
+ });
140
+ this.#autoScrollOptions.lastTimestamp = timestamp;
141
+ if (scrollContainer.scrollTop + scrollContainer.clientHeight
142
+ >= scrollContainer.scrollHeight && this.#autoScrollOptions.autoStop) {
143
+ scrollContainer.scrollTop = scrollContainer.scrollHeight
144
+ - scrollContainer.clientHeight;
145
+ this.#autoScrollOptions.isScrolling = false;
146
+ }
147
+ else {
148
+ requestAnimationFrame(this.#autoScroll);
149
+ }
150
+ };
151
+ autoScroll(params) {
152
+ if (params.start) {
153
+ const rate = typeof params.rate === 'number'
154
+ ? params.rate
155
+ : parseFloat(params.rate);
156
+ this.#autoScrollOptions = {
157
+ rate,
158
+ lastTimestamp: 0,
159
+ isScrolling: true,
160
+ autoStop: params.autoStop !== false ? true : false,
161
+ };
162
+ requestAnimationFrame(this.#autoScroll);
163
+ }
164
+ else {
165
+ this.#autoScrollOptions.isScrolling = false;
166
+ }
167
+ }
168
+ getScrollContainerInfo() {
169
+ return {
170
+ scrollTop: this.scrollTop,
171
+ scrollLeft: this.scrollLeft,
172
+ scrollHeight: this.scrollHeight,
173
+ scrollWidth: this.scrollWidth,
174
+ };
175
+ }
176
+ getVisibleCells = () => {
177
+ const cells = Object.values(this.#cellsMap);
178
+ const children = Array.from(this.children).filter(node => {
179
+ return node.tagName === 'LIST-ITEM';
180
+ });
181
+ return cells.map(cell => {
182
+ const rect = cell.getBoundingClientRect();
183
+ return {
184
+ id: cell.getAttribute('id'),
185
+ itemKey: cell.getAttribute('item-key'),
186
+ bottom: rect.bottom,
187
+ top: rect.top,
188
+ left: rect.left,
189
+ right: rect.right,
190
+ index: children.indexOf(cell),
191
+ };
192
+ });
193
+ };
194
+ #getListItemInfo = () => {
195
+ const cells = Object.values(this.#cellsMap);
196
+ return cells.map(cell => {
197
+ const rect = cell.getBoundingClientRect();
198
+ return {
199
+ height: rect.height,
200
+ width: rect.width,
201
+ itemKey: cell.getAttribute('item-key'),
202
+ originX: rect.x,
203
+ originY: rect.y,
204
+ };
205
+ });
206
+ };
207
+ #contentVisibilityChange = (event) => {
208
+ if (!event.target || !(event.target instanceof HTMLElement)) {
209
+ return;
210
+ }
211
+ const skipped = event.skipped;
212
+ const isContent = event.target?.getAttribute('id') === 'content'
213
+ && event.target?.getAttribute('part') === 'content';
214
+ const isListItem = event.target.tagName === 'LIST-ITEM';
215
+ if (isContent && !skipped) {
216
+ const visibleItemBeforeUpdate = this.#getListItemInfo();
217
+ setTimeout(() => {
218
+ this.dispatchEvent(new CustomEvent('layoutcomplete', {
219
+ ...commonComponentEventSetting,
220
+ detail: {
221
+ visibleItemBeforeUpdate,
222
+ visibleItemAfterUpdate: this.#getListItemInfo(),
223
+ },
224
+ }));
225
+ // Set 100 is because #content is the parent container of list-item, and content is always visible before list-item.
226
+ // We cannot obtain the timing of all the successfully visible list-items on the screen, so 100ms is used to delay this behavior.
227
+ }, 100);
228
+ return;
229
+ }
230
+ if (isListItem) {
231
+ const itemKey = event.target?.getAttribute('item-key');
232
+ if (!itemKey) {
233
+ return;
234
+ }
235
+ if (skipped) {
236
+ this.#cellsMap[itemKey] && delete this.#cellsMap[itemKey];
237
+ }
238
+ else {
239
+ this.#cellsMap[itemKey] = event.target;
240
+ }
241
+ return;
242
+ }
243
+ };
244
+ connectedCallback() {
245
+ const listContainer = this.#getListContainer();
246
+ listContainer.addEventListener('contentvisibilityautostatechange', this.#contentVisibilityChange, {
247
+ passive: true,
248
+ });
249
+ }
250
+ static {
251
+ __runInitializers(_classThis, _classExtraInitializers);
252
+ }
253
+ };
254
+ return XList = _classThis;
255
+ })();
256
+ export { XList };
257
+ //# sourceMappingURL=XList.js.map
@@ -0,0 +1,8 @@
1
+ import { AttributeReactiveClass } from '@lynx-js/web-elements-reactive';
2
+ import type { XList } from './XList.js';
3
+ export declare class XListAttributes implements InstanceType<AttributeReactiveClass<typeof HTMLElement>> {
4
+ #private;
5
+ static observedAttributes: string[];
6
+ constructor(dom: XList);
7
+ connectedCallback(): void;
8
+ }
@@ -0,0 +1,50 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ /*
3
+ // Copyright 2024 The Lynx Authors. All rights reserved.
4
+ // Licensed under the Apache License Version 2.0 that can be found in the
5
+ // LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { bindToStyle, boostedQueueMicrotask, registerAttributeHandler, } from '@lynx-js/web-elements-reactive';
8
+ let XListAttributes = (() => {
9
+ let _private_handlerStickyOffset_decorators;
10
+ let _private_handlerStickyOffset_initializers = [];
11
+ let _private_handlerStickyOffset_extraInitializers = [];
12
+ return class XListAttributes {
13
+ static {
14
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
15
+ _private_handlerStickyOffset_decorators = [registerAttributeHandler('sticky-offset', true)];
16
+ __esDecorate(null, null, _private_handlerStickyOffset_decorators, { kind: "field", name: "#handlerStickyOffset", static: false, private: true, access: { has: obj => #handlerStickyOffset in obj, get: obj => obj.#handlerStickyOffset, set: (obj, value) => { obj.#handlerStickyOffset = value; } }, metadata: _metadata }, _private_handlerStickyOffset_initializers, _private_handlerStickyOffset_extraInitializers);
17
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
18
+ }
19
+ static observedAttributes = [
20
+ 'sticky-offset',
21
+ 'initial-scroll-index',
22
+ ];
23
+ #dom;
24
+ #handlerStickyOffset = __runInitializers(this, _private_handlerStickyOffset_initializers, bindToStyle(() => this.#dom, '--list-item-sticky-offset', (v) => `${parseFloat(v)}px`));
25
+ constructor(dom) {
26
+ __runInitializers(this, _private_handlerStickyOffset_extraInitializers);
27
+ this.#dom = dom;
28
+ }
29
+ connectedCallback() {
30
+ const initialScrollIndex = this.#dom.getAttribute('initial-scroll-index');
31
+ if (initialScrollIndex !== null) {
32
+ const index = parseFloat(initialScrollIndex);
33
+ const scrollToInitialIndex = () => {
34
+ if (this.#dom.clientHeight === 0) {
35
+ // In Safari, there is the potential race condition between the browser's layout and clientWidth calculate.
36
+ // So, we have to use requestAnimationFrame to ensure that the code runs after the browser's layout.
37
+ requestAnimationFrame(scrollToInitialIndex);
38
+ }
39
+ else {
40
+ this.#dom.scrollToPosition({ index });
41
+ }
42
+ };
43
+ // The reason for using microtasks is that the width and height of the child element may not be rendered at this time, so it will not be able to scroll.
44
+ boostedQueueMicrotask(scrollToInitialIndex);
45
+ }
46
+ }
47
+ };
48
+ })();
49
+ export { XListAttributes };
50
+ //# sourceMappingURL=XListAttributes.js.map
@@ -0,0 +1,7 @@
1
+ import { AttributeReactiveClass } from '@lynx-js/web-elements-reactive';
2
+ import type { XList } from './XList.js';
3
+ export declare class XListEvents implements InstanceType<AttributeReactiveClass<typeof HTMLElement>> {
4
+ #private;
5
+ static observedAttributes: string[];
6
+ constructor(dom: XList);
7
+ }