@tarojs/plugin-platform-harmony-ets 3.7.0-alpha.27 → 4.0.0-alpha.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.
Files changed (176) hide show
  1. package/dist/apis/apis.ts +6 -2
  2. package/dist/apis/base/crypto.ts +4 -0
  3. package/dist/apis/base/debug.ts +5 -0
  4. package/dist/apis/base/index.ts +9 -1
  5. package/dist/apis/base/performance.ts +8 -0
  6. package/dist/apis/base/system.ts +1 -1
  7. package/dist/apis/base/update.ts +5 -0
  8. package/dist/apis/base/weapp/app-event.ts +75 -0
  9. package/dist/apis/base/weapp/life-cycle.ts +21 -0
  10. package/dist/apis/canvas/index.ts +18 -0
  11. package/dist/apis/data-analysis/index.ts +6 -0
  12. package/dist/apis/device/accelerometer.ts +2 -1
  13. package/dist/apis/device/accessibility.ts +4 -0
  14. package/dist/apis/device/battery.ts +2 -2
  15. package/dist/apis/device/bluetooth-ble.ts +19 -0
  16. package/dist/apis/device/bluetooth-peripheral.ts +6 -0
  17. package/dist/apis/device/bluetooth.ts +16 -0
  18. package/dist/apis/device/calendar.ts +5 -0
  19. package/dist/apis/device/clipboard.ts +1 -1
  20. package/dist/apis/device/compass.ts +21 -0
  21. package/dist/apis/device/contact.ts +5 -0
  22. package/dist/apis/device/crypto.ts +4 -0
  23. package/dist/apis/device/gyroscope.ts +7 -0
  24. package/dist/apis/device/iBeacon.ts +10 -0
  25. package/dist/apis/device/index.ts +15 -0
  26. package/dist/apis/device/keyboard.ts +2 -1
  27. package/dist/apis/device/motion.ts +6 -0
  28. package/dist/apis/device/network.ts +26 -9
  29. package/dist/apis/device/nfc.ts +10 -0
  30. package/dist/apis/device/phone.ts +2 -1
  31. package/dist/apis/device/scan.ts +4 -0
  32. package/dist/apis/device/screen.ts +2 -1
  33. package/dist/apis/device/sms.ts +4 -0
  34. package/dist/apis/device/vibrate.ts +19 -11
  35. package/dist/apis/device/wifi.ts +15 -0
  36. package/dist/apis/ext/index.ts +5 -0
  37. package/dist/apis/files/index.ts +2 -1
  38. package/dist/apis/files/manager.ts +2 -1
  39. package/dist/apis/framework/index.ts +5 -6
  40. package/dist/apis/location/index.ts +61 -68
  41. package/dist/apis/media/EditorContext.ts +32 -0
  42. package/dist/apis/media/audio/index.ts +18 -0
  43. package/dist/apis/media/background-audio/index.ts +16 -0
  44. package/dist/apis/media/camera.ts +16 -0
  45. package/dist/apis/media/common.ts +2 -1
  46. package/dist/apis/media/{image.ts → image/index.ts} +3 -2
  47. package/dist/apis/media/index.ts +10 -0
  48. package/dist/apis/media/live.ts +5 -0
  49. package/dist/apis/media/map.ts +4 -0
  50. package/dist/apis/media/media-recorder.ts +4 -0
  51. package/dist/apis/media/recorder.ts +6 -0
  52. package/dist/apis/media/video/VideoContext.ts +19 -0
  53. package/dist/apis/media/{video.ts → video/index.ts} +12 -2
  54. package/dist/apis/media/video-decoder.ts +4 -0
  55. package/dist/apis/media/video-processing.ts +4 -0
  56. package/dist/apis/media/voip.ts +19 -0
  57. package/dist/apis/network/index.ts +3 -0
  58. package/dist/apis/network/mdns.ts +13 -0
  59. package/dist/apis/network/request.ts +2 -1
  60. package/dist/apis/network/tcp.ts +4 -0
  61. package/dist/apis/network/udp.ts +4 -0
  62. package/dist/apis/network/webSocket.ts +2 -6
  63. package/dist/apis/open-api/account.ts +4 -0
  64. package/dist/apis/open-api/address.ts +4 -0
  65. package/dist/apis/open-api/authorize.ts +5 -0
  66. package/dist/apis/open-api/card.ts +5 -0
  67. package/dist/apis/open-api/channels-live.ts +11 -0
  68. package/dist/apis/open-api/customer-service.ts +4 -0
  69. package/dist/apis/open-api/device-voip.ts +5 -0
  70. package/dist/apis/open-api/facial.ts +7 -0
  71. package/dist/apis/open-api/favorites.ts +5 -0
  72. package/dist/apis/open-api/group.ts +4 -0
  73. package/dist/apis/open-api/index.ts +20 -6
  74. package/dist/apis/open-api/invoice.ts +5 -0
  75. package/dist/apis/open-api/license-plate.ts +4 -0
  76. package/dist/apis/open-api/login.ts +6 -0
  77. package/dist/apis/open-api/my-miniprogram.ts +4 -0
  78. package/dist/apis/open-api/privacy.ts +7 -0
  79. package/dist/apis/open-api/red-package.ts +4 -0
  80. package/dist/apis/open-api/settings.ts +5 -0
  81. package/dist/apis/open-api/soter.ts +6 -0
  82. package/dist/apis/open-api/subscribe-message.ts +6 -0
  83. package/dist/apis/open-api/{user-info/index.ts → user-info.ts} +1 -16
  84. package/dist/apis/open-api/werun.ts +5 -0
  85. package/dist/apis/payment/index.ts +6 -0
  86. package/dist/apis/route/index.ts +4 -28
  87. package/dist/apis/share/index.ts +33 -0
  88. package/dist/apis/storage/background-fetch.ts +7 -0
  89. package/dist/apis/storage/cache-manager.ts +4 -0
  90. package/dist/apis/storage/index.ts +20 -18
  91. package/dist/apis/ui/{animation.ts → animation/animation.ts} +2 -2
  92. package/dist/apis/ui/animation/index.ts +7 -0
  93. package/dist/apis/ui/background.ts +2 -18
  94. package/dist/apis/ui/custom-component.ts +8 -0
  95. package/dist/apis/ui/fonts.ts +4 -0
  96. package/dist/apis/ui/index.ts +8 -10
  97. package/dist/apis/ui/interaction/index.ts +3 -0
  98. package/dist/apis/ui/menu.ts +4 -0
  99. package/dist/apis/ui/navigation-bar/index.ts +60 -21
  100. package/dist/apis/ui/pull-down-refresh.ts +1 -1
  101. package/dist/apis/{page → ui/scroll}/index.ts +27 -22
  102. package/dist/apis/ui/sticky.ts +4 -0
  103. package/dist/apis/{tabbar/index.ts → ui/tab-bar.ts} +3 -5
  104. package/dist/apis/ui/window.ts +20 -0
  105. package/dist/apis/utils/handler.ts +4 -4
  106. package/dist/apis/worker/index.ts +4 -0
  107. package/dist/apis/wxml/IntersectionObserver.ts +12 -21
  108. package/dist/apis/wxml/index.ts +5 -2
  109. package/dist/apis/wxml/nodesRef.ts +2 -2
  110. package/dist/apis/wxml/selectorQuery.ts +3 -4
  111. package/dist/components-harmony-ets/button.ets +90 -64
  112. package/dist/components-harmony-ets/checkbox.ets +53 -98
  113. package/dist/components-harmony-ets/form.ets +16 -112
  114. package/dist/components-harmony-ets/icon.ets +59 -46
  115. package/dist/components-harmony-ets/image.ets +15 -40
  116. package/dist/components-harmony-ets/innerHtml.ets +6 -74
  117. package/dist/components-harmony-ets/input.ets +58 -128
  118. package/dist/components-harmony-ets/label.ets +43 -69
  119. package/dist/components-harmony-ets/picker.ets +114 -137
  120. package/dist/components-harmony-ets/radio.ets +55 -103
  121. package/dist/components-harmony-ets/richText.ets +17 -41
  122. package/dist/components-harmony-ets/scrollView.ets +69 -101
  123. package/dist/components-harmony-ets/slider.ets +35 -58
  124. package/dist/components-harmony-ets/swiper.ets +24 -135
  125. package/dist/components-harmony-ets/switch.ets +25 -55
  126. package/dist/components-harmony-ets/text.ets +42 -46
  127. package/dist/components-harmony-ets/textArea.ets +39 -107
  128. package/dist/components-harmony-ets/utils/constant/style.ets +9 -6
  129. package/dist/components-harmony-ets/utils/flexManager.ets +3 -88
  130. package/dist/components-harmony-ets/utils/helper.ets +2 -62
  131. package/dist/components-harmony-ets/utils/index.ts +1 -1
  132. package/dist/components-harmony-ets/utils/styles.ets +6 -9
  133. package/dist/components-harmony-ets/video.ets +63 -92
  134. package/dist/components-harmony-ets/view.ets +65 -40
  135. package/dist/index.js +33 -4
  136. package/dist/index.js.map +1 -1
  137. package/dist/runtime-ets/bom/getComputedStyle.ts +1 -1
  138. package/dist/runtime-ets/dom/bind.ts +80 -0
  139. package/dist/runtime-ets/dom/class-list.ts +2 -4
  140. package/dist/runtime-ets/dom/comment.ts +1 -2
  141. package/dist/runtime-ets/dom/cssStyleDeclaration.ts +1 -1
  142. package/dist/runtime-ets/dom/dataSource.ts +64 -0
  143. package/dist/runtime-ets/dom/document.ts +14 -43
  144. package/dist/runtime-ets/dom/element/element.ts +162 -0
  145. package/dist/runtime-ets/dom/element/form.ts +397 -0
  146. package/dist/runtime-ets/dom/element/index.ts +89 -0
  147. package/dist/runtime-ets/dom/element/normal.ts +75 -0
  148. package/dist/runtime-ets/dom/element/scrollView.ts +14 -0
  149. package/dist/runtime-ets/dom/element/text.ts +17 -0
  150. package/dist/runtime-ets/dom/element/video.ts +49 -0
  151. package/dist/runtime-ets/dom/event.ts +24 -1
  152. package/dist/runtime-ets/dom/eventTarget.ts +2 -1
  153. package/dist/runtime-ets/dom/node.ts +74 -44
  154. package/dist/runtime-ets/dom/stylesheet/index.ts +136 -23
  155. package/dist/runtime-ets/dom/stylesheet/type.ts +4 -3
  156. package/dist/runtime-ets/dom/stylesheet/util.ts +71 -1
  157. package/dist/runtime-ets/index.ts +0 -1
  158. package/dist/runtime-ets/utils/bind.ts +3 -14
  159. package/dist/runtime-ets/utils/index.ts +12 -7
  160. package/dist/runtime-ets/utils/info.ts +22 -50
  161. package/dist/runtime-framework/react/app.ts +3 -6
  162. package/dist/runtime-framework/react/page.ts +2 -9
  163. package/dist/runtime-framework/solid/page.ts +0 -6
  164. package/dist/runtime-utils.js +1150 -339
  165. package/dist/runtime-utils.js.map +1 -1
  166. package/dist/runtime.js +1150 -339
  167. package/dist/runtime.js.map +1 -1
  168. package/package.json +8 -8
  169. package/types/runtime.d.ts +4 -0
  170. package/LICENSE +0 -160
  171. package/dist/components-harmony-ets/base.ets +0 -63
  172. package/dist/components-harmony-ets/element.ets +0 -223
  173. package/dist/components-harmony-ets/utils/constant/icon.ts +0 -19
  174. package/dist/runtime-ets/dom/element.ts +0 -457
  175. package/dist/runtime-ets/dom/text.ts +0 -19
  176. package/types/api.d.ts +0 -4
@@ -1,24 +1,12 @@
1
- import { bindInstanceToNode, eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, initComponentNodeInfo,
2
- TaroElement,
3
- TaroAny,
4
- TaroEvent
5
- } from '@tarojs/runtime'
6
-
7
- import { createNode } from './render'
8
- import TaroComponentWrapper from './base'
9
- import { AttributeManager } from './utils/AttributeManager'
1
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
2
+
3
+ import { createLazyChildren } from './render'
10
4
  import { TOUCH_EVENT_MAP } from './utils/constant/event'
11
- import { createTaroEvent } from './utils/events'
12
5
  import { FlexManager } from './utils/FlexManager'
13
- import { shouldBindEvent, getNormalAttributes, getNodeThresholds, bindAnimation } from './utils/helper'
6
+ import { shouldBindEvent, getNormalAttributes, getNodeThresholds } from './utils/helper'
14
7
 
15
- import type { TaroRadioGroupElement, TaroRadioElement } from './element'
16
- import type { TaroStyleType, HarmonyType } from '@tarojs/runtime'
8
+ import type { TaroEvent, TaroAny, TaroStyleType, HarmonyType, TaroRadioGroupElement, TaroRadioElement } from '@tarojs/runtime'
17
9
 
18
- interface RadioOptions {
19
- group: string
20
- value: string
21
- }
22
10
  interface RadioAttrs {
23
11
  radioStyle?: HarmonyType.RadioStyle
24
12
  themeStyles?: boolean
@@ -40,6 +28,7 @@ function style (style: TaroStyleType) {
40
28
  .backgroundColor(style.backgroundColor)
41
29
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
42
30
  .backgroundImageSize(style.backgroundImageSize)
31
+ .backgroundImagePosition(style.backgroundImagePosition)
43
32
  .rotate(style.rotate)
44
33
  .scale(style.scale)
45
34
  .translate(style.translate)
@@ -74,65 +63,43 @@ function themeStyles(isDisabled: boolean) {
74
63
  .opacity(isDisabled ? 0.4 : 1)
75
64
  }
76
65
 
77
- @Component
78
- export struct TaroRadio {
79
- nodeInfoMap: TaroAny = {}
80
-
81
- @ObjectLink node: TaroRadioElement
82
-
83
- @State checked: boolean = false
84
-
85
- aboutToAppear () {
86
- initComponentNodeInfo(this, this.node)
87
- bindInstanceToNode(this.node, this)
88
-
89
- this.checked = !!this.node._attrs.checked
90
- }
91
-
92
- @Styles defaultEvent () {
93
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
94
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, res => {
95
- const eventResult: TaroAny = res.eventResult
96
- this.nodeInfoMap[this.node._nid].areaInfo = eventResult[1]
97
- }))
98
- }
99
-
100
- build() {
101
- TaroComponentWrapper({ node: this.node }) {
102
- Stack() {
103
- Row() {
104
- Radio({
105
- group: this.node.group || this.node.parentNode?._nid || '',
106
- value: this.node._attrs.value || '',
107
- })
108
- .checked(this.checked)
109
- .defaultEvent()
110
- .style(getNormalAttributes(this.node))
111
- .radioAttr(getAttributes(this.node))
112
- .onChange((value: boolean) => {
113
- if (!!this.node._attrs.disabled) {
114
- // FIXME 找下文档是否有强制刷新方法
115
- this.checked = !this.checked
116
- this.checked = !this.checked
117
- } else {
118
- this.checked = value
119
- if (this.checked) {
120
- const event: TaroEvent = createTaroEvent('change', { detail: { value: this.node._attrs.value } }, this.node)
121
- eventHandler(event, 'change', this.node)
122
- }
123
- }
124
- })
125
- Text(this.node.textContent)
126
- .textAlign(TextAlign.Center)
127
- .opacity(!!this.node._attrs.disabled ? 0.4 : 1)
128
- }
129
- .onClick(() => {
130
- if (!this.checked) {
131
- this.checked = !this.checked
66
+ @Builder
67
+ export function TaroRadio (node: TaroRadioElement) {
68
+ Stack() {
69
+ Row() {
70
+ Radio({
71
+ group: node.group || node.parentNode?._nid || '',
72
+ value: node._attrs.value || '',
73
+ })
74
+ .checked(node.checked)
75
+ .style(getNormalAttributes(node))
76
+ .radioAttr(getAttributes(node))
77
+ .onChange((value: boolean) => {
78
+ if (!!node?._attrs.disabled) {
79
+ node.updateComponent()
80
+ } else {
81
+ node.updateCheckedValue(value)
82
+
83
+ if (value) {
84
+ const event: TaroEvent = createTaroEvent('change', { detail: { value: node?._attrs.value } }, node)
85
+ eventHandler(event, 'change', node)
86
+ }
132
87
  }
133
88
  })
134
- }
89
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', node), node, ['click']))
90
+ .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
91
+ node._nodeInfo.areaInfo = res[1]
92
+ }))
93
+ .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
94
+ Text(node.textContent)
95
+ .textAlign(TextAlign.Center)
96
+ .opacity(!!node?._attrs.disabled ? 0.4 : 1)
135
97
  }
98
+ .onClick(() => {
99
+ if (!node._checked && !node?._attrs.disabled) {
100
+ node.checked = !node.checked
101
+ }
102
+ })
136
103
  }
137
104
  }
138
105
 
@@ -152,6 +119,7 @@ function radioGroupAttrs (style: TaroStyleType) {
152
119
  .backgroundColor(style.backgroundColor)
153
120
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
154
121
  .backgroundImageSize(style.backgroundImageSize)
122
+ .backgroundImagePosition(style.backgroundImagePosition)
155
123
  .rotate(style.rotate)
156
124
  .scale(style.scale)
157
125
  .translate(style.translate)
@@ -169,53 +137,37 @@ function radioGroupAttrs (style: TaroStyleType) {
169
137
 
170
138
  @Component
171
139
  export struct TaroRadioGroup {
172
- nodeInfoMap: TaroAny = {}
140
+ node: TaroRadioGroupElement | null = null
173
141
 
174
142
  @Styles visibleChangeEvent () {
175
143
  .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
176
144
  }
177
145
 
178
- @ObjectLink node: TaroRadioGroupElement
179
-
180
146
  aboutToAppear () {
181
- initComponentNodeInfo(this, this.node)
182
- bindInstanceToNode(this.node, this)
183
- // 绑定动画
184
- bindAnimation(this.node)
185
- const childList = this.node.getElementsByTagName<TaroRadioElement>('RADIO')
186
- childList.forEach(element => {
187
- element.group = this.node._attrs.name || this.node._nid
188
- })
189
- // 阻止事件冒泡传递上去
190
- this.node.addEventListener('change', (e: TaroEvent) => e.stopPropagation())
191
- }
192
-
193
- // Element使用的获取器
194
- getValue (): string | undefined {
195
- const childList = this.node.getElementsByTagName<TaroRadioElement>('RADIO')
196
- for (let i = 0; i < childList.length; i++) {
197
- if (childList[i]._instance.checked) {
198
- return childList[i]._attrs.value
199
- }
147
+ if (this.node) {
148
+ const childList = this.node.getElementsByTagName<TaroRadioElement>('RADIO')
149
+ childList.forEach(element => {
150
+ element.group = this.node?._attrs.name || this.node?._nid
151
+ })
152
+ // 阻止事件冒泡传递上去
153
+ this.node.addEventListener('change', (e: TaroEvent) => e.stopPropagation())
200
154
  }
201
- return undefined
202
155
  }
203
156
 
204
157
  @Styles defaultEvent () {
205
158
  .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
206
159
  .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node), this.node, TOUCH_EVENT_MAP.values()))
207
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, res => {
208
- const eventResult: TaroAny = res.eventResult
209
- this.nodeInfoMap[this.node._nid].areaInfo = eventResult[1]
160
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
161
+ if (this.node) {
162
+ this.node._nodeInfo.areaInfo = res[1]
163
+ }
210
164
  }))
211
165
  }
212
166
 
213
167
  build() {
214
- TaroComponentWrapper({ node: this.node }) {
168
+ if (this.node) {
215
169
  Flex(FlexManager.flexOptions(this.node)) {
216
- ForEach(this.node.childNodes, (item: TaroElement) => {
217
- createNode(item)
218
- }, (item: TaroElement) => item._nid)
170
+ createLazyChildren(this.node)
219
171
  }
220
172
  .radioGroupAttrs(getNormalAttributes(this.node))
221
173
  .defaultEvent()
@@ -1,11 +1,10 @@
1
- import { bindInstanceToNode, eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, initComponentNodeInfo, TaroAny } from '@tarojs/runtime'
1
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME } from '@tarojs/runtime'
2
2
 
3
- import TaroComponentWrapper from './base'
4
- import { getNodeThresholds, getNormalAttributes, shouldBindEvent, bindAnimation } from './utils/helper'
3
+
4
+ import { getNodeThresholds, getNormalAttributes, shouldBindEvent } from './utils/helper'
5
5
 
6
6
  import type { RichTextProps } from '@tarojs/components/types/RichText'
7
- import type { TaroRichTextElement } from './element'
8
- import type { TaroStyleType } from '@tarojs/runtime'
7
+ import type { TaroAny, TaroStyleType, TaroRichTextElement } from '@tarojs/runtime'
9
8
 
10
9
  @Extend(RichText)
11
10
  function attrs (style: TaroStyleType) {
@@ -23,6 +22,7 @@ function attrs (style: TaroStyleType) {
23
22
  .backgroundColor(style.backgroundColor)
24
23
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
25
24
  .backgroundImageSize(style.backgroundImageSize)
25
+ .backgroundImagePosition(style.backgroundImagePosition)
26
26
  .rotate(style.rotate)
27
27
  .scale(style.scale)
28
28
  .translate(style.translate)
@@ -31,52 +31,28 @@ function attrs (style: TaroStyleType) {
31
31
  .borderWidth(style.borderWidth)
32
32
  .borderColor(style.borderColor)
33
33
  .borderRadius(style.borderRadius)
34
- .linearGradient(style.linearGradient)
34
+ // .linearGradient(style.linearGradient)
35
35
  .zIndex(style.zIndex)
36
36
  .opacity(style.opacity)
37
37
  .clip(style.clip)
38
38
  }
39
39
 
40
- @Component
41
- export default struct TaroRichText {
42
- nodeInfoMap: TaroAny = {}
43
-
44
- @ObjectLink node: TaroRichTextElement
45
40
 
46
- @Styles visibleChangeEvent () {
47
- .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
48
- }
49
-
50
- aboutToAppear () {
51
- initComponentNodeInfo(this, this.node)
52
- bindInstanceToNode(this.node, this)
53
- // 绑定动画
54
- bindAnimation(this.node)
55
- }
41
+ function generateText (node: TaroRichTextElement): string {
42
+ return parseHtmlNode(node._attrs.nodes || '')
43
+ }
56
44
 
57
- @Styles defaultEvent () {
58
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
59
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, res => {
60
- const eventResult: TaroAny = res.eventResult
61
- this.nodeInfoMap[this.node._nid].areaInfo = eventResult[1]
45
+ @Builder
46
+ export default function TaroRichText (node: TaroRichTextElement) {
47
+ RichText(generateText(node))
48
+ .attrs(getNormalAttributes(node))
49
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', node), node, ['click']))
50
+ .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
51
+ node._nodeInfo.areaInfo = res[1]
62
52
  }))
63
- }
64
-
65
- generateText (): string {
66
- return parseHtmlNode(this.node._attrs.nodes || '')
67
- }
68
-
69
- build() {
70
- TaroComponentWrapper({ node: this.node }) {
71
- RichText(this.generateText())
72
- .attrs(getNormalAttributes(this.node))
73
- .defaultEvent()
74
- .visibleChangeEvent()
75
- }
76
- }
53
+ .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
77
54
  }
78
55
 
79
-
80
56
  // 将nodeTree转换成harmony需要的string结构
81
57
  function nodeToHtml(node: RichTextProps.Text | RichTextProps.HTMLElement): string {
82
58
  if (node.type === 'text') {
@@ -1,14 +1,10 @@
1
- import { bindScrollTo, bindInstanceToNode, eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, initComponentNodeInfo,
2
- TaroEvent, TaroAny } from '@tarojs/runtime'
1
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
3
2
 
4
- import { createNode } from './render'
5
- import TaroComponentWrapper from './base'
3
+ import { createLazyChildren } from './render'
6
4
  import { TOUCH_EVENT_MAP } from './utils/constant/event'
7
- import { createTaroEvent } from './utils/events'
8
- import { getNodeThresholds, getNormalAttributes, shouldBindEvent, bindAnimation } from './utils/helper'
5
+ import { getNodeThresholds, getNormalAttributes, shouldBindEvent } from './utils/helper'
9
6
 
10
- import type { TaroScrollViewElement, TaroElement } from './element'
11
- import type { TaroStyleType } from '@tarojs/runtime'
7
+ import type { TaroAny, TaroStyleType, TaroScrollViewElement, TaroEvent } from '@tarojs/runtime'
12
8
 
13
9
  interface ScrollViewAttrs {
14
10
  scrollBar: BarState
@@ -32,9 +28,13 @@ function rowAttrs (style: TaroStyleType) {
32
28
  .key(style.id)
33
29
  .padding(style.padding)
34
30
  .margin(style.margin)
35
- .width(style.width)
36
31
  .height(style.height)
37
- .constraintSize(style.constraintSize)
32
+ .constraintSize({
33
+ minWidth: style?.constraintSize?.minWidth || style.width,
34
+ minHeight: style?.constraintSize?.minHeight,
35
+ maxWidth: style?.constraintSize?.maxWidth,
36
+ maxHeight: style?.constraintSize?.maxHeight,
37
+ })
38
38
  .flexGrow(style.flexGrow)
39
39
  .flexShrink(style.flexShrink)
40
40
  .flexBasis(style.flexBasis)
@@ -42,6 +42,7 @@ function rowAttrs (style: TaroStyleType) {
42
42
  .backgroundColor(style.backgroundColor)
43
43
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
44
44
  .backgroundImageSize(style.backgroundImageSize)
45
+ .backgroundImagePosition(style.backgroundImagePosition)
45
46
  .rotate(style.rotate)
46
47
  .scale(style.scale)
47
48
  .translate(style.translate)
@@ -63,8 +64,12 @@ function columnAttrs (style: TaroStyleType) {
63
64
  .padding(style.padding)
64
65
  .margin(style.margin)
65
66
  .width(style.width)
66
- .height(style.height)
67
- .constraintSize(style.constraintSize)
67
+ .constraintSize({
68
+ minWidth: style?.constraintSize?.minWidth,
69
+ minHeight: style?.constraintSize?.minHeight || style.height,
70
+ maxWidth: style?.constraintSize?.maxWidth,
71
+ maxHeight: style?.constraintSize?.maxHeight,
72
+ })
68
73
  .flexGrow(style.flexGrow)
69
74
  .flexShrink(style.flexShrink)
70
75
  .flexBasis(style.flexBasis)
@@ -72,6 +77,7 @@ function columnAttrs (style: TaroStyleType) {
72
77
  .backgroundColor(style.backgroundColor)
73
78
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
74
79
  .backgroundImageSize(style.backgroundImageSize)
80
+ .backgroundImagePosition(style.backgroundImagePosition)
75
81
  .rotate(style.rotate)
76
82
  .scale(style.scale)
77
83
  .translate(style.translate)
@@ -97,103 +103,65 @@ function getAttributes (node: TaroScrollViewElement): ScrollViewAttrs {
97
103
  return scrollAttrs
98
104
  }
99
105
 
106
+ function getScrollable (node: TaroScrollViewElement) {
107
+ const _attrs = node._attrs
100
108
 
101
- @Component
102
- export default struct TaroScrollView {
103
- nodeInfoMap: TaroAny = {}
104
-
105
- wrapper?: Area
106
-
107
- @Styles visibleChangeEvent () {
108
- .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
109
- }
110
-
111
- scroller: Scroller = new Scroller()
112
-
113
- @ObjectLink node: TaroScrollViewElement
114
-
115
- aboutToAppear () {
116
- initComponentNodeInfo(this, this.node)
117
- bindInstanceToNode(this.node, this)
118
- // 绑定动画
119
- bindAnimation(this.node)
120
- bindScrollTo(this.node, this)
121
- }
122
-
123
- @Styles defaultEvent () {
124
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
125
- .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node), this.node, TOUCH_EVENT_MAP.values()))
126
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, res => {
127
- const eventResult: TaroAny = res.eventResult
128
- this.nodeInfoMap[this.node._nid].areaInfo = eventResult[1]
129
- }))
130
- }
109
+ return _attrs.scrollX ? ScrollDirection.Horizontal : ScrollDirection.Vertical
110
+ }
131
111
 
132
- @Styles defaultContainerEvent () {
133
- .onAreaChange(shouldBindEvent((areaResult: Area) => {
134
- this.wrapper = areaResult
135
- }, this.node, ['scroll', 'scrollstart', 'scrollend']))
112
+ function handleScrollEvent (node: TaroScrollViewElement, eventName = 'scroll', xOffset?: number, yOffset?: number) {
113
+ const currentOffset: ScrollViewCurrentOffset = node.scroller.currentOffset()
114
+ const currentXOffset = currentOffset.xOffset
115
+ const currentYOffset = currentOffset.yOffset
116
+ const value: ScrollViewEvent = {
117
+ deltaX: vp2px(xOffset),
118
+ deltaY: vp2px(yOffset),
119
+ scrollLeft: vp2px(currentXOffset),
120
+ scrollTop: vp2px(currentYOffset),
121
+ scrollWidth: vp2px(Number(node._scroll?.width)),
122
+ scrollHeight: vp2px(Number(node._scroll?.height)),
136
123
  }
124
+ const event: TaroEvent = createTaroEvent(eventName, { detail: value }, node)
137
125
 
126
+ eventHandler(event, eventName, node)
127
+ }
138
128
 
139
- handleScrollEvent (eventName = 'scroll', xOffset?: number, yOffset?: number) {
140
- const currentOffset: ScrollViewCurrentOffset = this.scroller.currentOffset()
141
- const currentXOffset = currentOffset.xOffset
142
- const currentYOffset = currentOffset.yOffset
143
- const value: ScrollViewEvent = {
144
- deltaX: vp2px(xOffset),
145
- deltaY: vp2px(yOffset),
146
- scrollLeft: vp2px(currentXOffset),
147
- scrollTop: vp2px(currentYOffset),
148
- scrollWidth: vp2px(Number(this.wrapper?.width)),
149
- scrollHeight: vp2px(Number(this.wrapper?.height)),
150
- }
151
- const event: TaroEvent = createTaroEvent(eventName, { detail: value }, this.node)
152
- eventHandler(event, eventName, this.node)
153
- }
154
-
155
- build() {
156
- TaroComponentWrapper({ node: this.node }) {
157
- // Copy 额外增加visibleChangeEvent
158
- if (this.node._attrs.scrollX) {
159
- Scroll(this.scroller) {
160
- Row() {
161
- ForEach(this.node.childNodes, (item: TaroElement) => {
162
- createNode(item)
163
- }, (item: TaroElement) => item._nid)
164
- }
165
- .rowAttrs(getNormalAttributes(this.node))
166
- .width(null)
167
- .defaultContainerEvent()
129
+ @Builder
130
+ export default function TaroScrollView (node: TaroScrollViewElement) {
131
+ Scroll(node.scroller) {
132
+ if (node._attrs.scrollX) {
133
+ Row() {
134
+ createLazyChildren(node)
168
135
  }
169
- .flexGrow(getNormalAttributes(this.node).flexGrow)
170
- .scrollable(ScrollDirection.Horizontal)
171
- .scrollBar(getAttributes(this.node).scrollBar)
172
- .defaultEvent()
173
- .onScroll(shouldBindEvent(() => { this.handleScrollEvent('scroll') }, this.node, ['scroll']))
174
- .onScrollStart(shouldBindEvent(() => { this.handleScrollEvent('scrollstart') }, this.node, ['scrollstart']))
175
- .onScrollStop(shouldBindEvent(() => { this.handleScrollEvent('scrollend') }, this.node, ['scrollend']))
176
- .visibleChangeEvent()
136
+ .width(null)
137
+ .rowAttrs(getNormalAttributes(node))
138
+ .onAreaChange(shouldBindEvent((_: Area, areaResult: Area) => {
139
+ node._scroll = areaResult
140
+ }, node, ['scroll', 'scrollstart', 'scrollend']))
177
141
  } else {
178
- Scroll(this.scroller) {
179
- Column() {
180
- ForEach(this.node.childNodes, (item: TaroElement) => {
181
- createNode(item)
182
- }, (item: TaroElement) => item._nid)
183
- }
184
- .columnAttrs(getNormalAttributes(this.node))
185
- .height(null)
186
- .defaultContainerEvent()
142
+ Column() {
143
+ createLazyChildren(node)
187
144
  }
188
- .flexGrow(getNormalAttributes(this.node).flexGrow)
189
- .scrollable(ScrollDirection.Vertical)
190
- .scrollBar(getAttributes(this.node).scrollBar)
191
- .defaultEvent()
192
- .onScroll(shouldBindEvent(() => { this.handleScrollEvent('scroll') }, this.node, ['scroll']))
193
- .onScrollStart(shouldBindEvent(() => { this.handleScrollEvent('scrollstart') }, this.node, ['scrollstart']))
194
- .onScrollStop(shouldBindEvent(() => { this.handleScrollEvent('scrollend') }, this.node, ['scrollend']))
195
- .visibleChangeEvent()
145
+ .height(null)
146
+ .columnAttrs(getNormalAttributes(node))
147
+ .alignItems(HorizontalAlign.Start)
148
+ .onAreaChange(shouldBindEvent((_: Area, areaResult: Area) => {
149
+ node._scroll = areaResult
150
+ }, node, ['scroll', 'scrollstart', 'scrollend']))
196
151
  }
197
152
  }
198
- }
153
+ .width(getNormalAttributes(node).width)
154
+ .height(getNormalAttributes(node).height)
155
+ .flexGrow(getNormalAttributes(node).flexGrow)
156
+ .scrollable(getScrollable(node))
157
+ .scrollBar(getAttributes(node).scrollBar)
158
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', node), node, ['click']))
159
+ .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), node), node, TOUCH_EVENT_MAP.values()))
160
+ .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
161
+ node._nodeInfo.areaInfo = res[1]
162
+ }))
163
+ .onScroll(shouldBindEvent(() => { handleScrollEvent(node, 'scroll') }, node, ['scroll']))
164
+ .onScrollStart(shouldBindEvent(() => { handleScrollEvent(node, 'scrollstart') }, node, ['scrollstart']))
165
+ .onScrollStop(shouldBindEvent(() => { handleScrollEvent(node, 'scrollend') }, node, ['scrollend']))
166
+ .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
199
167
  }
@@ -1,30 +1,15 @@
1
- import { bindInstanceToNode, eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, initComponentNodeInfo,
2
- TaroEvent, TaroAny } from '@tarojs/runtime'
1
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
3
2
 
4
- import TaroComponentWrapper from './base'
5
- import { createTaroEvent } from './utils/events'
6
3
  import { getNodeThresholds, shouldBindEvent, getNormalAttributes } from './utils/helper'
7
4
 
8
- import type { TaroSliderElement } from './element'
9
- import type { TaroStyleType } from '@tarojs/runtime'
5
+ import type { TaroAny, TaroSliderElement, TaroStyleType, TaroEvent } from '@tarojs/runtime'
10
6
 
11
- interface SliderOptions {
12
- min?: number
13
- max?: number
14
- value?: number
15
- step?: number
16
- style?: SliderStyle
17
- direction?: Axis
18
- }
19
7
  interface SliderAttrs {
20
8
  selectedColor?: ResourceColor
21
9
  trackColor?: ResourceColor
22
10
  trackThickness?: Length
23
11
  blockColor?: ResourceColor
24
12
  }
25
- interface SliderParams {
26
- width: string
27
- }
28
13
 
29
14
  @Extend(Slider)
30
15
  function style (style: TaroStyleType) {
@@ -42,6 +27,7 @@ function style (style: TaroStyleType) {
42
27
  .backgroundColor(style.backgroundColor)
43
28
  .backgroundImage(style.backgroundImage, style.backgroundRepeat)
44
29
  .backgroundImageSize(style.backgroundImageSize)
30
+ .backgroundImagePosition(style.backgroundImagePosition)
45
31
  .rotate(style.rotate)
46
32
  .scale(style.scale)
47
33
  .translate(style.translate)
@@ -81,79 +67,70 @@ function themeStyles(isDisabled: boolean) {
81
67
 
82
68
  @Component
83
69
  export default struct TaroSlider {
84
- nodeInfoMap: TaroAny = {}
85
-
86
- @ObjectLink node: TaroSliderElement
70
+ node: TaroSliderElement | null = null
87
71
 
88
72
  @State value: number = 0
89
73
 
90
- @Styles visibleChangeEvent () {
91
- .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
92
- }
93
-
94
74
  aboutToAppear () {
95
- initComponentNodeInfo(this, this.node)
96
- bindInstanceToNode(this.node, this)
97
-
98
- this.value = Number(this.node._attrs.value || 0)
99
- }
100
-
101
- @Styles defaultEvent () {
102
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
103
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, res => {
104
- const eventResult: TaroAny = res.eventResult
105
- this.nodeInfoMap[this.node._nid].areaInfo = eventResult[1]
106
- }))
75
+ if (this.node) {
76
+ this.value = this.node.value
77
+ this.node._instance = this
78
+ }
107
79
  }
108
80
 
109
- @Builder createSlider () {
81
+ @Builder createSlider (node: TaroSliderElement) {
110
82
  Slider({
111
- min: Number(this.node._attrs.min || 0),
112
- max: Number(this.node._attrs.max || 100),
83
+ min: Number(node._attrs.min || 0),
84
+ max: Number(node._attrs.max || 100),
113
85
  value: this.value,
114
- step: Number(this.node._attrs.step || 1),
86
+ step: Number(node._attrs.step || 1),
115
87
  style: SliderStyle.OutSet,
116
88
  direction: Axis.Horizontal
117
89
  })
118
- .defaultEvent()
119
- .style(getNormalAttributes(this.node))
120
- .attrs(getAttributes(this.node))
121
- .width(!!this.node._attrs.showValue ? '90%' : '100%')
122
- .themeStyles(!!this.node._attrs.disabled)
90
+ .style(getNormalAttributes(node))
91
+ .attrs(getAttributes(node))
92
+ .width(!!node._attrs.showValue ? '90%' : '100%')
93
+ .themeStyles(!!node._attrs.disabled)
123
94
  .onChange((value: number, mode: SliderChangeMode) => {
124
- if (!!this.node._attrs.disabled) {
95
+ if (!!node._attrs.disabled) {
125
96
  if (mode === SliderChangeMode.End) {
126
- // FIXME 找下文档是否有强制刷新方法
127
- this.value = this.value + 0.01
128
- this.value = this.value - 0.01
97
+ this.node?.updateComponent()
129
98
  }
130
99
  } else {
131
100
  this.value = value
101
+ this.node?.updateFormWidgetValue(value)
102
+
132
103
  if (mode === SliderChangeMode.End) {
133
- const event: TaroEvent = createTaroEvent('change', { detail: { value: this.value } }, this.node)
134
- eventHandler(event, 'change', this.node)
104
+ const event: TaroEvent = createTaroEvent('change', { detail: { value: this.value } }, node)
105
+ eventHandler(event, 'change', node)
135
106
  } else if (mode === SliderChangeMode.Moving) {
136
- const event: TaroEvent = createTaroEvent('changing', { detail: { value: this.value } }, this.node)
137
- eventHandler(event, 'changing', this.node)
107
+ const event: TaroEvent = createTaroEvent('changing', { detail: { value: this.value } }, node)
108
+ eventHandler(event, 'changing', node)
138
109
  }
139
110
  }
140
111
  })
141
- .visibleChangeEvent()
112
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
113
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
114
+ if (this.node) {
115
+ this.node._nodeInfo.areaInfo = res[1]
116
+ }
117
+ }))
118
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
142
119
  }
143
120
 
144
121
  build() {
145
- TaroComponentWrapper({ node: this.node }) {
122
+ if (this.node) {
146
123
  if (!!this.node._attrs.showValue) {
147
124
  Row() {
148
- this.createSlider()
125
+ this.createSlider(this.node)
149
126
  Text(Number(this.value).toFixed(0))
150
127
  .width('10%')
151
128
  .textAlign(TextAlign.Center)
152
129
  .opacity(!!this.node._attrs.disabled ? 0.4 : 1)
153
130
  }
154
131
  } else {
155
- this.createSlider()
132
+ this.createSlider(this.node)
156
133
  }
157
134
  }
158
135
  }
159
- }
136
+ }