@tarojs/plugin-platform-harmony-ets 4.0.0-beta.7 → 4.0.0-beta.70

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 (128) hide show
  1. package/dist/apis/base/system.ts +73 -20
  2. package/dist/apis/canvas/index.ts +10 -1
  3. package/dist/apis/device/clipboard.ts +9 -1
  4. package/dist/apis/framework/index.ts +1 -5
  5. package/dist/apis/index.ts +27 -17
  6. package/dist/apis/network/request.ts +5 -5
  7. package/dist/apis/route/index.ts +15 -0
  8. package/dist/apis/storage/index.ts +146 -78
  9. package/dist/apis/ui/animation/animation.ts +71 -29
  10. package/dist/apis/ui/background.ts +2 -1
  11. package/dist/apis/ui/interaction/index.ts +42 -59
  12. package/dist/apis/ui/navigation-bar/index.ts +1 -1
  13. package/dist/apis/ui/scroll/index.ts +1 -1
  14. package/dist/apis/utils/index.ts +1 -1
  15. package/dist/apis/wxml/IntersectionObserver.ts +18 -10
  16. package/dist/apis/wxml/index.ts +2 -0
  17. package/dist/apis/wxml/selectorQuery.ts +24 -11
  18. package/dist/components-harmony-ets/button.ets +48 -34
  19. package/dist/components-harmony-ets/canvas.ets +51 -0
  20. package/dist/components-harmony-ets/checkbox.ets +69 -61
  21. package/dist/components-harmony-ets/form.ets +51 -29
  22. package/dist/components-harmony-ets/icon.ets +31 -19
  23. package/dist/components-harmony-ets/image.ets +34 -14
  24. package/dist/components-harmony-ets/index.ets +92 -0
  25. package/dist/components-harmony-ets/innerHtml.ets +11 -6
  26. package/dist/components-harmony-ets/input.ets +45 -41
  27. package/dist/components-harmony-ets/label.ets +69 -42
  28. package/dist/components-harmony-ets/listView.ets +26 -0
  29. package/dist/components-harmony-ets/movableArea.ets +126 -0
  30. package/dist/components-harmony-ets/movableView.ets +77 -0
  31. package/dist/components-harmony-ets/navigationBar.ets +65 -0
  32. package/dist/components-harmony-ets/pageMeta.ets +94 -0
  33. package/dist/components-harmony-ets/picker.ets +42 -38
  34. package/dist/components-harmony-ets/progress.ets +52 -0
  35. package/dist/components-harmony-ets/pseudo.ets +80 -0
  36. package/dist/components-harmony-ets/radio.ets +71 -64
  37. package/dist/components-harmony-ets/richText.ets +14 -30
  38. package/dist/components-harmony-ets/scrollList.ets +94 -0
  39. package/dist/components-harmony-ets/scrollView.ets +61 -57
  40. package/dist/components-harmony-ets/slider.ets +15 -14
  41. package/dist/components-harmony-ets/stickySection.ets +42 -0
  42. package/dist/components-harmony-ets/style.ets +372 -130
  43. package/dist/components-harmony-ets/swiper.ets +61 -20
  44. package/dist/components-harmony-ets/switch.ets +30 -28
  45. package/dist/components-harmony-ets/{index.ts → tag.ts} +6 -0
  46. package/dist/components-harmony-ets/text.ets +135 -49
  47. package/dist/components-harmony-ets/textArea.ets +47 -35
  48. package/dist/components-harmony-ets/utils/AttributeManager.ets +1 -1
  49. package/dist/components-harmony-ets/utils/DynamicCenter.ts +1 -1
  50. package/dist/components-harmony-ets/utils/flexManager.ets +47 -19
  51. package/dist/components-harmony-ets/utils/helper.ets +18 -5
  52. package/dist/components-harmony-ets/utils/htmlParser/HarmonyHTMLParser.ts +1 -2
  53. package/dist/components-harmony-ets/utils/htmlParser/index.ts +1 -1
  54. package/dist/components-harmony-ets/utils/index.ts +54 -50
  55. package/dist/components-harmony-ets/utils/styles.ets +170 -93
  56. package/dist/components-harmony-ets/video.ets +34 -21
  57. package/dist/components-harmony-ets/view.ets +63 -52
  58. package/dist/components-harmony-ets/webView.ets +40 -34
  59. package/dist/index.d.ts +152 -0
  60. package/dist/index.js +85 -42
  61. package/dist/index.js.map +1 -1
  62. package/dist/runtime-ets/bom/document.ts +6 -4
  63. package/dist/runtime-ets/bom/getComputedStyle.ts +2 -2
  64. package/dist/runtime-ets/bom/window.ts +7 -0
  65. package/dist/runtime-ets/current.ts +3 -0
  66. package/dist/runtime-ets/dom/bind.ts +28 -12
  67. package/dist/runtime-ets/dom/class-list.ts +2 -2
  68. package/dist/runtime-ets/dom/cssNesting.ts +409 -0
  69. package/dist/runtime-ets/dom/cssStyleDeclaration.ts +28 -42
  70. package/dist/runtime-ets/dom/document.ts +22 -8
  71. package/dist/runtime-ets/dom/element/canvas.ts +136 -0
  72. package/dist/runtime-ets/dom/element/element.ts +334 -58
  73. package/dist/runtime-ets/dom/element/form.ts +23 -26
  74. package/dist/runtime-ets/dom/element/index.ts +25 -2
  75. package/dist/runtime-ets/dom/element/movableArea.ts +11 -0
  76. package/dist/runtime-ets/dom/element/movableView.ts +209 -0
  77. package/dist/runtime-ets/dom/element/normal.ts +35 -8
  78. package/dist/runtime-ets/dom/element/progress.ts +11 -0
  79. package/dist/runtime-ets/dom/element/scrollView.ts +1 -0
  80. package/dist/runtime-ets/dom/element/text.ts +1 -8
  81. package/dist/runtime-ets/dom/element/video.ts +5 -4
  82. package/dist/runtime-ets/dom/element/webView.ts +12 -5
  83. package/dist/runtime-ets/dom/event.ts +2 -4
  84. package/dist/runtime-ets/dom/eventTarget.ts +2 -3
  85. package/dist/runtime-ets/dom/node.ts +49 -28
  86. package/dist/runtime-ets/dom/stylesheet/covertWeb2Hm.ts +416 -235
  87. package/dist/runtime-ets/dom/stylesheet/index.ts +29 -311
  88. package/dist/runtime-ets/dom/stylesheet/type.ts +49 -9
  89. package/dist/runtime-ets/dom/stylesheet/util.ts +33 -27
  90. package/dist/runtime-ets/index.ts +2 -1
  91. package/dist/runtime-ets/interface/event.ts +1 -1
  92. package/dist/runtime-ets/utils/index.ts +69 -13
  93. package/dist/runtime-ets/utils/info.ts +2 -2
  94. package/dist/runtime-framework/react/app.ts +7 -2
  95. package/dist/runtime-framework/react/hooks.ts +0 -1
  96. package/dist/runtime-framework/react/index.ts +0 -2
  97. package/dist/runtime-framework/react/native-page.ts +32 -14
  98. package/dist/runtime-framework/react/page.ts +3 -8
  99. package/dist/runtime-framework/solid/app.ts +25 -45
  100. package/dist/runtime-framework/solid/connect.ts +21 -3
  101. package/dist/runtime-framework/solid/hooks.ts +16 -11
  102. package/dist/runtime-framework/solid/index.ts +6 -2
  103. package/dist/runtime-framework/solid/page.ts +84 -30
  104. package/dist/runtime-framework/solid/reconciler/props.ts +70 -25
  105. package/dist/runtime-framework/solid/reconciler/render.ts +16 -6
  106. package/dist/runtime-framework/solid/reconciler/use.ts +0 -1
  107. package/dist/runtime-framework/solid/utils/index.ts +0 -2
  108. package/dist/runtime-utils.d.ts +827 -0
  109. package/dist/runtime-utils.js +425 -200
  110. package/dist/runtime-utils.js.map +1 -1
  111. package/dist/runtime.d.ts +1 -0
  112. package/dist/runtime.js +425 -200
  113. package/dist/runtime.js.map +1 -1
  114. package/index.js +3 -1
  115. package/package.json +13 -13
  116. package/static/media/cancel.svg +1 -1
  117. package/static/media/circle.svg +1 -1
  118. package/static/media/clear.svg +1 -1
  119. package/static/media/download.svg +1 -1
  120. package/static/media/info.svg +1 -1
  121. package/static/media/info_circle.svg +1 -1
  122. package/static/media/search.svg +1 -1
  123. package/static/media/success.svg +1 -1
  124. package/static/media/success_no_circle.svg +1 -1
  125. package/static/media/warn.svg +1 -1
  126. package/types/harmony.d.ts +4 -0
  127. package/types/index.d.ts +4 -0
  128. /package/dist/runtime-framework/solid/{contant.ts → constant.ts} +0 -0
@@ -1,14 +1,13 @@
1
1
  import { AREA_CHANGE_EVENT_NAME, eventHandler, getComponentEventCallback, VISIBLE_CHANGE_EVENT_NAME, TaroPickerElement, createTaroEvent } from '@tarojs/runtime'
2
- import { createLazyChildren } from './render'
3
2
  import commonStyleModify from './style'
4
3
  import { getSingleSelector, getMultiSelector } from './utils'
5
4
  import { TOUCH_EVENT_MAP } from './utils/constant/event'
6
- import { FlexManager } from './utils/FlexManager'
7
- import { getNormalAttributes, shouldBindEvent, getNodeThresholds } from './utils/helper'
5
+ import { FlexManager } from './utils/flexManager'
6
+ import { shouldBindEvent, getNodeThresholds } from './utils/helper'
8
7
 
9
8
  import type { TaroAny, TaroEvent } from '@tarojs/runtime'
10
9
 
11
- import { PickerDateProps, PickerMultiSelectorProps, PickerSelectorProps, PickerTimeProps } from './types'
10
+ import { PickerDateProps, PickerMultiSelectorProps, PickerSelectorProps, PickerTimeProps } from '@tarojs/components/types'
12
11
 
13
12
  interface TimeRange {
14
13
  startHH: number
@@ -146,9 +145,10 @@ export struct PickerView {
146
145
  color: '#000'
147
146
  })
148
147
  .canLoop(false)
149
- .attributeModifier(commonStyleModify.setNode(this.node))
150
- .width(getNormalAttributes(this.node).width || '100%')
151
- .backgroundColor(getNormalAttributes(this.node).backgroundColor || '#fff')
148
+ .attributeModifier(commonStyleModify.setNode(this.node, {
149
+ width: '100%',
150
+ backgroundColor: '#fff'
151
+ }))
152
152
  .onChange((_, index) => {
153
153
  this.node?.updateFormWidgetValue(index)
154
154
  })
@@ -158,9 +158,10 @@ export struct PickerView {
158
158
  color: '#000'
159
159
  })
160
160
  .canLoop(false)
161
- .attributeModifier(commonStyleModify.setNode(this.node))
162
- .width(getNormalAttributes(this.node).width || '100%')
163
- .backgroundColor(getNormalAttributes(this.node).backgroundColor || '#fff')
161
+ .attributeModifier(commonStyleModify.setNode(this.node, {
162
+ width: '100%',
163
+ backgroundColor: '#fff'
164
+ }))
164
165
  .onChange((_, index) => {
165
166
  if (index instanceof Array) {
166
167
  this.node?.updateFormWidgetValue(index)
@@ -187,9 +188,10 @@ export struct PickerView {
187
188
  .selectedTextStyle({
188
189
  color: '#000'
189
190
  })
190
- .attributeModifier(commonStyleModify.setNode(this.node))
191
- .width(getNormalAttributes(this.node).width || '100%')
192
- .backgroundColor(getNormalAttributes(this.node).backgroundColor || '#fff')
191
+ .attributeModifier(commonStyleModify.setNode(this.node, {
192
+ width: '100%',
193
+ backgroundColor: '#fff'
194
+ }))
193
195
  .onDateChange(value => {
194
196
  const data = value.toLocaleDateString().split('/')
195
197
  const day = data[1]
@@ -203,9 +205,10 @@ export struct PickerView {
203
205
  color: '#000'
204
206
  })
205
207
  .canLoop(false)
206
- .attributeModifier(commonStyleModify.setNode(this.node))
207
- .width(getNormalAttributes(this.node).width || '100%')
208
- .backgroundColor(getNormalAttributes(this.node).backgroundColor || '#fff')
208
+ .attributeModifier(commonStyleModify.setNode(this.node, {
209
+ width: '100%',
210
+ backgroundColor: '#fff'
211
+ }))
209
212
  .onChange((value) => {
210
213
  this.node?.updateFormWidgetValue(`${('00'+value[0]).slice(-2)}:${('00'+value[1]).slice(-2)}`)
211
214
  })
@@ -219,9 +222,12 @@ export struct PickerView {
219
222
  }
220
223
  }
221
224
 
225
+
222
226
  @Component
223
227
  export default struct TaroPicker {
224
- node: TaroPickerElement | null = null
228
+ @Builder customBuilder() {}
229
+ @BuilderParam createLazyChildren: (node: TaroPickerElement) => void = this.customBuilder
230
+ @ObjectLink node: TaroPickerElement
225
231
 
226
232
  aboutToAppear () {
227
233
  this.node?.addEventListener('click', this.handleClick)
@@ -237,8 +243,8 @@ export default struct TaroPicker {
237
243
  break
238
244
  case 'time': {
239
245
  const hour = new Date().getHours()
240
- const minute = new Date().getMinutes()
241
-
246
+ const minute = new Date().getMinutes()
247
+
242
248
  defaultResetValue = `${('00'+hour).slice(-2)}:${('00'+minute).slice(-2)}`
243
249
  break
244
250
  }
@@ -247,7 +253,7 @@ export default struct TaroPicker {
247
253
  const day = data[1]
248
254
  const month = data[0]
249
255
  const year = data[2]
250
-
256
+
251
257
  defaultResetValue = `${year}-${month}-${day}`
252
258
  break
253
259
  }
@@ -255,7 +261,7 @@ export default struct TaroPicker {
255
261
  defaultResetValue = ''
256
262
  break
257
263
  }
258
-
264
+
259
265
  this.node._isInit = true
260
266
  this.node._reset = this.node.value || defaultResetValue
261
267
  }
@@ -305,24 +311,22 @@ export default struct TaroPicker {
305
311
  }
306
312
 
307
313
  build() {
308
- if (this.node) {
309
- if (FlexManager.isFlexNode(this.node) && FlexManager.flexOptions(this.node).direction !== FlexDirection.Column) {
310
- Row() {
311
- createLazyChildren(this.node)
312
- }
313
- .defaultEvent()
314
- .visibleChangeEvent()
315
- .alignItems(FlexManager.flexOptions(this.node).alignItems as VerticalAlign)
316
- .justifyContent(FlexManager.flexOptions(this.node).justifyContent)
317
- } else {
318
- Column() {
319
- createLazyChildren(this.node)
320
- }
321
- .defaultEvent()
322
- .visibleChangeEvent()
323
- .alignItems(FlexManager.flexOptions(this.node).alignItems as HorizontalAlign)
324
- .justifyContent(FlexManager.flexOptions(this.node).justifyContent)
314
+ if (FlexManager.isFlexNode(this.node) && FlexManager.direction(this.node) !== FlexDirection.Column) {
315
+ Row() {
316
+ this.createLazyChildren(this.node)
317
+ }
318
+ .defaultEvent()
319
+ .visibleChangeEvent()
320
+ .alignItems(FlexManager.alignItems<VerticalAlign>(this.node))
321
+ .justifyContent(FlexManager.justifyContent(this.node))
322
+ } else {
323
+ Column() {
324
+ this.createLazyChildren(this.node)
325
325
  }
326
+ .defaultEvent()
327
+ .visibleChangeEvent()
328
+ .alignItems(FlexManager.alignItems<HorizontalAlign>(this.node))
329
+ .justifyContent(FlexManager.justifyContent(this.node))
326
330
  }
327
331
  }
328
332
  }
@@ -0,0 +1,52 @@
1
+ import type { TaroProgressElement, TaroAny } from '@tarojs/runtime'
2
+ import commonStyleModify from './style'
3
+ import { shouldBindEvent, getNodeThresholds } from './utils/helper'
4
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME } from '@tarojs/runtime'
5
+
6
+ const PROGRESS_ACTIVECOLOR = '#09BB07'
7
+ const PROGRESS_BACKGROUNDCOLOR = '#EBEBEB'
8
+ const PROGRESS_DEFAULTINFOFONTSIZE = 16
9
+
10
+ @Component
11
+ export default struct TaroProgress {
12
+ @Builder customBuilder() {}
13
+ @BuilderParam createLazyChildren: (node: TaroProgressElement) => void = this.customBuilder
14
+ @ObjectLink node: TaroProgressElement
15
+ @State overwriteStyle: Record<string, TaroAny> = {}
16
+
17
+ aboutToAppear(): void {
18
+ if (this.node) {
19
+ this.node._instance = this
20
+ }
21
+ }
22
+
23
+ build() {
24
+ Row({ space: 5 }) {
25
+ Progress({
26
+ value: parseFloat(this.node.getAttribute('percent')),
27
+ type: ProgressType.Linear
28
+ })
29
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
30
+ .color(this.node.getAttribute('activeColor') ?? PROGRESS_ACTIVECOLOR)
31
+ .backgroundColor(this.node.getAttribute('backgroundColor') ?? PROGRESS_BACKGROUNDCOLOR)
32
+ .style({
33
+ strokeWidth: this.node.getAttribute('strokeWidth'),
34
+ strokeRadius: parseFloat(this.node.getAttribute('borderRadius')),
35
+ enableSmoothEffect: Boolean(this.node.getAttribute('active')),
36
+ })
37
+
38
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
39
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
40
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
41
+ if (this.node) {
42
+ this.node._nodeInfo.areaInfo = res[1]
43
+ }
44
+ }))
45
+
46
+ if (this.node.getAttribute('showInfo')) {
47
+ Text(`${this.node.getAttribute('percent')}%`)
48
+ .fontSize(this.node.getAttribute('fontSize') ?? PROGRESS_DEFAULTINFOFONTSIZE)
49
+ }
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,80 @@
1
+ import { getFontAttributes } from './utils/helper'
2
+ import { pseudoModify } from './style'
3
+
4
+ import type { TaroViewElement, TaroStyleType, TaroTextStyleType, TaroAny } from '@tarojs/runtime'
5
+
6
+ @Extend(Flex)
7
+ function flexAttrs (style: TaroStyleType) {
8
+ .constraintSize({
9
+ minWidth: style.minWidth,
10
+ maxWidth: style.maxWidth,
11
+ minHeight: style.minHeight || style.height,
12
+ maxHeight: style.maxHeight
13
+ })
14
+ }
15
+
16
+
17
+ @Extend(Text)
18
+ function textNormalFontStyle (style: TaroStyleType) {
19
+ .id(style.id)
20
+ .key(style.id)
21
+ .opacity(style.opacity)
22
+ .fontColor(style.color)
23
+ .fontSize(style.fontSize)
24
+ .fontWeight(style.fontWeight)
25
+ .fontStyle(style.fontStyle)
26
+ .fontFamily(style.fontFamily)
27
+ .decoration({
28
+ type: style.textDecoration?.type || TextDecorationType.None,
29
+ color: style.color
30
+ })
31
+ }
32
+
33
+ @Extend(Text)
34
+ function textSpecialFontStyle(attr: TaroTextStyleType) {
35
+ .textAlign(attr.textAlign)
36
+ .align(attr.verticalAlign)
37
+ .textOverflow(attr.textOverflow)
38
+ .maxLines(attr.WebkitLineClamp)
39
+ .letterSpacing(attr.letterSpacing)
40
+ .lineHeight(attr.lineHeight)
41
+ }
42
+
43
+ @Component
44
+ export default struct PseduoChildren {
45
+ @Builder customBuilder() {}
46
+ @BuilderParam createLazyChildren: (node: TaroAny) => void = this.customBuilder
47
+ @ObjectLink node: TaroViewElement
48
+
49
+ build () {
50
+ if (true) {
51
+ // 伪类::Before
52
+ if (this.node._pseudo_before) {
53
+ if (this.node._pseudo_before?.hmStyle.content) {
54
+ Text(this.node._pseudo_before.hmStyle.content)
55
+ .attributeModifier(pseudoModify.setStyle(this.node._pseudo_before.hmStyle))
56
+ .textNormalFontStyle(this.node._pseudo_before.hmStyle || {})
57
+ .textSpecialFontStyle(getFontAttributes(this.node))
58
+ } else {
59
+ Flex() {}
60
+ .attributeModifier(pseudoModify.setStyle(this.node._pseudo_before.hmStyle || {}))
61
+ .flexAttrs(this.node._pseudo_before.hmStyle || {})
62
+ }
63
+ }
64
+ this.createLazyChildren(this.node)
65
+ // 伪类::After
66
+ if (this.node._pseudo_after) {
67
+ if (this.node._pseudo_after?.hmStyle.content) {
68
+ Text(this.node._pseudo_after.hmStyle.content)
69
+ .attributeModifier(pseudoModify.setStyle(this.node._pseudo_after.hmStyle))
70
+ .textNormalFontStyle(this.node._pseudo_after.hmStyle || {})
71
+ .textSpecialFontStyle(getFontAttributes(this.node))
72
+ } else {
73
+ Flex() {}
74
+ .attributeModifier(pseudoModify.setStyle(this.node._pseudo_after.hmStyle || {}))
75
+ .flexAttrs(this.node._pseudo_after.hmStyle || {})
76
+ }
77
+ }
78
+ }
79
+ }
80
+ }
@@ -1,12 +1,12 @@
1
1
  import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
2
2
 
3
- import commonStyleModify from './style'
4
- import { createLazyChildren } from './render'
3
+ import commonStyleModify, { rowModify, columnModify } from './style'
5
4
  import { TOUCH_EVENT_MAP } from './utils/constant/event'
6
- import { FlexManager } from './utils/FlexManager'
5
+ import { FlexManager } from './utils/flexManager'
7
6
  import { shouldBindEvent, getNodeThresholds } from './utils/helper'
8
7
 
9
8
  import { TaroEvent, TaroAny, HarmonyType, TaroRadioGroupElement, TaroRadioElement } from '@tarojs/runtime'
9
+ import { isUndefined } from '@tarojs/shared'
10
10
 
11
11
  interface RadioAttrs {
12
12
  radioStyle?: HarmonyType.RadioStyle
@@ -35,59 +35,61 @@ function themeStyles(isDisabled: boolean) {
35
35
 
36
36
  @Component
37
37
  export struct TaroRadio {
38
- node: TaroRadioElement | null = null
39
-
38
+ @Builder customBuilder() {}
39
+ @BuilderParam createLazyChildren: (node: TaroRadioElement) => void = this.customBuilder
40
+ @ObjectLink node: TaroRadioElement
41
+ @State overwriteStyle: Record<string, TaroAny> = {}
42
+
40
43
  aboutToAppear () {
41
44
  if (this.node && !this.node._isInit) {
42
45
  this.node._isInit = true
46
+ this.node._instance = this
43
47
  this.node._reset = this.node.checked || false
44
48
  }
45
49
  }
46
50
 
47
51
  build () {
48
- if (this.node) {
49
- Stack() {
50
- Row() {
51
- Radio({
52
- group: this.node.group || this.node.parentNode?._nid || '',
53
- value: this.node.value || '',
54
- })
55
- .checked(this.node.checked)
56
- .attributeModifier(commonStyleModify.setNode(this.node))
57
- .radioAttr(getAttributes(this.node))
58
- .onChange((value: boolean) => {
59
- if (this.node) {
60
- if (!!this.node?._attrs.disabled) {
61
- this.node.updateComponent()
62
- } else {
63
- this.node.updateCheckedValue(value)
64
-
65
- if (value) {
66
- const event: TaroEvent = createTaroEvent('change', { detail: { value: this.node?._attrs.value } }, this.node)
67
- eventHandler(event, 'change', this.node)
68
- }
52
+ Stack() {
53
+ Row() {
54
+ Radio({
55
+ group: this.node.group || this.node.parentNode?._nid || '',
56
+ value: this.node.value || '',
57
+ })
58
+ .checked(this.node.checked)
59
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
60
+ .radioAttr(getAttributes(this.node))
61
+ .onChange((value: boolean) => {
62
+ if (this.node) {
63
+ if (!!this.node?._attrs.disabled) {
64
+ this.node.updateComponent()
65
+ } else {
66
+ this.node.updateCheckedValue(value)
67
+
68
+ if (value) {
69
+ const event: TaroEvent = createTaroEvent('change', { detail: { value: this.node?._attrs.value } }, this.node)
70
+ eventHandler(event, 'change', this.node)
69
71
  }
70
72
  }
71
- })
72
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
73
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
74
- if (this.node) {
75
- this.node._nodeInfo.areaInfo = res[1]
76
- }
77
- }))
78
- .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
79
- Text(this.node.textContent)
80
- .textAlign(TextAlign.Center)
81
- .opacity(!!this.node?._attrs.disabled ? 0.4 : 1)
82
- }
83
- .onClick(() => {
84
- if (this.node) {
85
- if (!this.node._checked && !this.node?._attrs.disabled) {
86
- this.node.checked = !this.node.checked
87
73
  }
88
- }
89
- })
74
+ })
75
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
76
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
77
+ if (this.node) {
78
+ this.node._nodeInfo.areaInfo = res[1]
79
+ }
80
+ }))
81
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
82
+ Text(this.node.textContent)
83
+ .textAlign(TextAlign.Center)
84
+ .opacity(!!this.node?._attrs.disabled ? 0.4 : 1)
90
85
  }
86
+ .onClick(() => {
87
+ if (this.node) {
88
+ if (!this.node._checked && !this.node?._attrs.disabled) {
89
+ this.node.checked = !this.node.checked
90
+ }
91
+ }
92
+ })
91
93
  }
92
94
  }
93
95
  }
@@ -95,7 +97,10 @@ export struct TaroRadio {
95
97
 
96
98
  @Component
97
99
  export struct TaroRadioGroup {
98
- node: TaroRadioGroupElement | null = null
100
+ @Builder customBuilder() {}
101
+ @BuilderParam createLazyChildren: (node: TaroRadioGroupElement) => void = this.customBuilder
102
+ @ObjectLink node: TaroRadioGroupElement
103
+ @State overwriteStyle: Record<string, TaroAny> = {}
99
104
 
100
105
  @Styles visibleChangeEvent () {
101
106
  .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
@@ -103,6 +108,7 @@ export struct TaroRadioGroup {
103
108
 
104
109
  aboutToAppear () {
105
110
  if (this.node) {
111
+ this.node._instance = this
106
112
  const childList = this.node.getElementsByTagName<TaroRadioElement>('RADIO')
107
113
  childList.forEach(element => {
108
114
  element.group = this.node?._attrs.name || this.node?._nid
@@ -123,26 +129,27 @@ export struct TaroRadioGroup {
123
129
  }
124
130
 
125
131
  build() {
126
- if (this.node) {
127
- if (FlexManager.isFlexNode(this.node) && FlexManager.flexOptions(this.node).direction !== FlexDirection.Column) {
128
- Row() {
129
- createLazyChildren(this.node)
130
- }
131
- .attributeModifier(commonStyleModify.setNode(this.node))
132
- .defaultEvent()
133
- .visibleChangeEvent()
134
- .alignItems(FlexManager.flexOptions(this.node).alignItems as VerticalAlign)
135
- .justifyContent(FlexManager.flexOptions(this.node).justifyContent)
136
- } else {
137
- Column() {
138
- createLazyChildren(this.node)
139
- }
140
- .attributeModifier(commonStyleModify.setNode(this.node))
141
- .defaultEvent()
142
- .visibleChangeEvent()
143
- .alignItems(FlexManager.flexOptions(this.node).alignItems as HorizontalAlign)
144
- .justifyContent(FlexManager.flexOptions(this.node).justifyContent)
132
+ if (FlexManager.useFlexLayout(this.node)) {
133
+ Flex(FlexManager.flexOptions(this.node)) {
134
+ this.createLazyChildren(this.node)
135
+ }
136
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
137
+ .defaultEvent()
138
+ .visibleChangeEvent()
139
+ } else if (FlexManager.isFlexNode(this.node) && FlexManager.direction(this.node) !== FlexDirection.Column) {
140
+ Row() {
141
+ this.createLazyChildren(this.node)
142
+ }
143
+ .attributeModifier(rowModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
144
+ .defaultEvent()
145
+ .visibleChangeEvent()
146
+ } else {
147
+ Column() {
148
+ this.createLazyChildren(this.node)
145
149
  }
150
+ .attributeModifier(columnModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
151
+ .defaultEvent()
152
+ .visibleChangeEvent()
146
153
  }
147
154
  }
148
155
  }
@@ -1,41 +1,25 @@
1
1
  import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME } from '@tarojs/runtime'
2
2
 
3
3
  import commonStyleModify from './style'
4
+ import { generateText } from './utils'
4
5
  import { getNodeThresholds, shouldBindEvent } from './utils/helper'
5
6
 
6
- import type { RichTextProps } from '@tarojs/components/types/RichText'
7
7
  import type { TaroAny, TaroRichTextElement } from '@tarojs/runtime'
8
8
 
9
- function generateText (node: TaroRichTextElement): string {
10
- return parseHtmlNode(node._attrs.nodes || '')
11
- }
12
-
13
- @Builder
14
- export default function TaroRichText (node: TaroRichTextElement) {
15
- RichText(generateText(node))
16
- .attributeModifier(commonStyleModify.setNode(node))
17
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', node), node, ['click']))
18
- .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
19
- node._nodeInfo.areaInfo = res[1]
20
- }))
21
- .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
22
- }
9
+ @Component
10
+ export default struct TaroRichText {
11
+ @Builder customBuilder() {}
12
+ @BuilderParam createLazyChildren: (node: TaroRichTextElement) => void = this.customBuilder
13
+ @ObjectLink node: TaroRichTextElement
23
14
 
24
- // 将nodeTree转换成harmony需要的string结构
25
- function nodeToHtml(node: RichTextProps.Text | RichTextProps.HTMLElement): string {
26
- if (node.type === 'text') {
27
- return node.text;
15
+ build () {
16
+ RichText(generateText(this.node))
17
+ .attributeModifier(commonStyleModify.setNode(this.node))
18
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
19
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
20
+ this.node._nodeInfo.areaInfo = res[1]
21
+ }))
22
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
28
23
  }
29
- if (node.attrs) {
30
- const attributes = Object.entries(node.attrs)
31
- .map((item: [string, string]) => `${item[0]}="${item[1]}"`)
32
- .join(' ');
33
- const childrenHtml: string = typeof node.children === 'string' ? node.children : (node.children || []).map((child: RichTextProps.Text | RichTextProps.HTMLElement) => nodeToHtml(child)).join('');
34
- return `<${node.name}${attributes ? ' ' + attributes : ''}>${childrenHtml}</${node.name}>`;
35
- }
36
- return ''
37
24
  }
38
25
 
39
- function parseHtmlNode (nodes: Array<RichTextProps.Text | RichTextProps.HTMLElement> | string) {
40
- return typeof nodes === 'string' ? nodes: `<div>${nodes.map(node => nodeToHtml(node)).join('')}</div>`
41
- }
@@ -0,0 +1,94 @@
1
+ import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
2
+
3
+ import commonStyleModify from './style'
4
+ import { TOUCH_EVENT_MAP } from './utils/constant/event'
5
+ import { getNodeThresholds, shouldBindEvent } from './utils/helper'
6
+
7
+ import type { TaroScrollViewElement, TaroAny, TaroEvent } from '@tarojs/runtime'
8
+
9
+ interface ScrollViewAttrs {
10
+ scrollBar: BarState
11
+ }
12
+ interface ScrollViewCurrentOffset {
13
+ xOffset: number
14
+ yOffset: number
15
+ }
16
+ interface ScrollViewEvent {
17
+ deltaX: number
18
+ deltaY: number
19
+ scrollLeft: number
20
+ scrollTop: number
21
+ scrollWidth: number
22
+ scrollHeight: number
23
+ }
24
+
25
+ function getAttributes (node: TaroScrollViewElement): ScrollViewAttrs {
26
+ const _attrs = node._attrs
27
+ const scrollAttrs: ScrollViewAttrs = {
28
+ scrollBar: typeof _attrs.showScrollbar === 'boolean'
29
+ ? _attrs.showScrollbar ? BarState.On : BarState.Off
30
+ : BarState.Auto
31
+ }
32
+ return scrollAttrs
33
+ }
34
+
35
+ function handleScrollEvent (node: TaroScrollViewElement, eventName = 'scroll', scrollOffset?: number) {
36
+ const currentOffset = node.scroller.currentOffset() as ScrollViewCurrentOffset
37
+ const currentXOffset = currentOffset?.xOffset || 0
38
+ const currentYOffset = currentOffset?.yOffset || 0
39
+ const value: ScrollViewEvent = {
40
+ deltaX: vp2px(node._attrs.scrollX ? scrollOffset : 0),
41
+ deltaY: vp2px(node._attrs.scrollX ? 0 : scrollOffset),
42
+ scrollLeft: vp2px(currentXOffset),
43
+ scrollTop: vp2px(currentYOffset),
44
+ scrollWidth: vp2px(Number(node._nodeInfo?._scroll?.width)),
45
+ scrollHeight: vp2px(Number(node._nodeInfo?._scroll?.height)),
46
+ }
47
+ const event: TaroEvent = createTaroEvent(eventName, { detail: value }, node)
48
+
49
+ eventHandler(event, eventName, node)
50
+ }
51
+
52
+ @Component
53
+ export default struct TaroScrollList {
54
+ @Builder customBuilder() {}
55
+ @BuilderParam createLazyChildren: (node: TaroScrollViewElement) => void = this.customBuilder
56
+ @ObjectLink node: TaroScrollViewElement
57
+ @State overwriteStyle: Record<string, TaroAny> = {}
58
+
59
+ aboutToAppear(): void {
60
+ if (this.node) {
61
+ this.node._instance = this
62
+ }
63
+ }
64
+
65
+ handleScroll = (scrollOffset: number) => {
66
+ handleScrollEvent(this.node, 'scroll', scrollOffset)
67
+ }
68
+
69
+ build() {
70
+ List({
71
+ scroller: this.node.scroller
72
+ }) {
73
+ this.createLazyChildren(this.node)
74
+ }
75
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
76
+ .sticky(StickyStyle.Header)
77
+ .listDirection(this.node.getAttribute('scrollX') ? Axis.Horizontal: Axis.Vertical)
78
+ .align(Alignment.TopStart)
79
+ .clip(true)
80
+ .scrollBar(getAttributes(this.node).scrollBar)
81
+ .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
82
+ .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node), this.node, TOUCH_EVENT_MAP.values()))
83
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
84
+ this.node._nodeInfo.areaInfo = res[1]
85
+ }))
86
+ .onDidScroll(shouldBindEvent((scrollOffset: number) => { handleScrollEvent(this.node, 'scroll', scrollOffset) }, this.node, ['scroll']))
87
+ .onScrollStart(shouldBindEvent(() => { handleScrollEvent(this.node, 'scrollstart') }, this.node, ['scrollstart']))
88
+ .onScrollStop(shouldBindEvent(() => { handleScrollEvent(this.node, 'scrollend') }, this.node, ['scrollend']))
89
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
90
+ .onReachEnd(shouldBindEvent(() => { handleScrollEvent(this.node, 'scrolltolower') }, this.node, ['scrolltolower']))
91
+ }
92
+ }
93
+
94
+