@tarojs/plugin-platform-harmony-ets 4.0.0-canary.9 → 4.0.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 (135) 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 +23 -8
  4. package/dist/apis/framework/index.ts +1 -5
  5. package/dist/apis/index.ts +27 -17
  6. package/dist/apis/media/image/index.ts +169 -17
  7. package/dist/apis/network/request.ts +5 -5
  8. package/dist/apis/route/index.ts +15 -0
  9. package/dist/apis/storage/index.ts +146 -78
  10. package/dist/apis/ui/animation/animation.ts +71 -29
  11. package/dist/apis/ui/background.ts +2 -1
  12. package/dist/apis/ui/interaction/index.ts +58 -59
  13. package/dist/apis/ui/navigation-bar/index.ts +1 -1
  14. package/dist/apis/ui/pull-down-refresh.ts +9 -3
  15. package/dist/apis/ui/scroll/index.ts +5 -5
  16. package/dist/apis/ui/tab-bar.ts +3 -3
  17. package/dist/apis/utils/index.ts +21 -2
  18. package/dist/apis/utils/permissions.ts +6 -0
  19. package/dist/apis/wxml/IntersectionObserver.ts +18 -10
  20. package/dist/apis/wxml/index.ts +2 -0
  21. package/dist/apis/wxml/selectorQuery.ts +26 -13
  22. package/dist/components-harmony-ets/button.ets +64 -34
  23. package/dist/components-harmony-ets/canvas.ets +51 -0
  24. package/dist/components-harmony-ets/checkbox.ets +73 -62
  25. package/dist/components-harmony-ets/form.ets +51 -29
  26. package/dist/components-harmony-ets/icon.ets +31 -19
  27. package/dist/components-harmony-ets/image.ets +34 -14
  28. package/dist/components-harmony-ets/index.ets +92 -0
  29. package/dist/components-harmony-ets/innerHtml.ets +11 -6
  30. package/dist/components-harmony-ets/input.ets +63 -41
  31. package/dist/components-harmony-ets/label.ets +71 -44
  32. package/dist/components-harmony-ets/listView.ets +31 -0
  33. package/dist/components-harmony-ets/movableArea.ets +126 -0
  34. package/dist/components-harmony-ets/movableView.ets +93 -0
  35. package/dist/components-harmony-ets/navigationBar.ets +65 -0
  36. package/dist/components-harmony-ets/pageMeta.ets +94 -0
  37. package/dist/components-harmony-ets/picker.ets +43 -39
  38. package/dist/components-harmony-ets/progress.ets +52 -0
  39. package/dist/components-harmony-ets/pseudo.ets +80 -0
  40. package/dist/components-harmony-ets/radio.ets +78 -68
  41. package/dist/components-harmony-ets/richText.ets +14 -30
  42. package/dist/components-harmony-ets/scrollList.ets +108 -0
  43. package/dist/components-harmony-ets/scrollView.ets +69 -30
  44. package/dist/components-harmony-ets/slider.ets +19 -15
  45. package/dist/components-harmony-ets/stickySection.ets +42 -0
  46. package/dist/components-harmony-ets/style.ets +386 -130
  47. package/dist/components-harmony-ets/swiper.ets +61 -20
  48. package/dist/components-harmony-ets/switch.ets +36 -32
  49. package/dist/components-harmony-ets/{index.ts → tag.ts} +6 -0
  50. package/dist/components-harmony-ets/text.ets +112 -50
  51. package/dist/components-harmony-ets/textArea.ets +50 -35
  52. package/dist/components-harmony-ets/utils/AttributeManager.ets +2 -2
  53. package/dist/components-harmony-ets/utils/DynamicCenter.ts +2 -2
  54. package/dist/components-harmony-ets/utils/flexManager.ets +50 -19
  55. package/dist/components-harmony-ets/utils/helper.ets +20 -8
  56. package/dist/components-harmony-ets/utils/htmlParser/HarmonyHTMLParser.ts +1 -2
  57. package/dist/components-harmony-ets/utils/htmlParser/index.ts +1 -1
  58. package/dist/components-harmony-ets/utils/index.ts +54 -50
  59. package/dist/components-harmony-ets/utils/styles.ets +172 -92
  60. package/dist/components-harmony-ets/video.ets +34 -21
  61. package/dist/components-harmony-ets/view.ets +62 -29
  62. package/dist/components-harmony-ets/webView.ets +40 -34
  63. package/dist/index.d.ts +152 -0
  64. package/dist/index.js +102 -56
  65. package/dist/index.js.map +1 -1
  66. package/dist/runtime-ets/bom/document.ts +6 -4
  67. package/dist/runtime-ets/bom/getComputedStyle.ts +2 -2
  68. package/dist/runtime-ets/bom/window.ts +7 -0
  69. package/dist/runtime-ets/current.ts +5 -1
  70. package/dist/runtime-ets/dom/bind.ts +28 -12
  71. package/dist/runtime-ets/dom/class-list.ts +2 -2
  72. package/dist/runtime-ets/dom/cssNesting.ts +419 -0
  73. package/dist/runtime-ets/dom/cssStyleDeclaration.ts +28 -42
  74. package/dist/runtime-ets/dom/document.ts +22 -8
  75. package/dist/runtime-ets/dom/element/canvas.ts +136 -0
  76. package/dist/runtime-ets/dom/element/element.ts +376 -57
  77. package/dist/runtime-ets/dom/element/form.ts +31 -26
  78. package/dist/runtime-ets/dom/element/index.ts +30 -2
  79. package/dist/runtime-ets/dom/element/movableArea.ts +11 -0
  80. package/dist/runtime-ets/dom/element/movableView.ts +248 -0
  81. package/dist/runtime-ets/dom/element/normal.ts +35 -8
  82. package/dist/runtime-ets/dom/element/progress.ts +11 -0
  83. package/dist/runtime-ets/dom/element/scrollView.ts +1 -0
  84. package/dist/runtime-ets/dom/element/text.ts +1 -8
  85. package/dist/runtime-ets/dom/element/video.ts +5 -4
  86. package/dist/runtime-ets/dom/element/webView.ts +12 -5
  87. package/dist/runtime-ets/dom/event.ts +3 -5
  88. package/dist/runtime-ets/dom/eventTarget.ts +2 -3
  89. package/dist/runtime-ets/dom/node.ts +65 -32
  90. package/dist/runtime-ets/dom/stylesheet/covertWeb2Hm.ts +418 -237
  91. package/dist/runtime-ets/dom/stylesheet/index.ts +29 -311
  92. package/dist/runtime-ets/dom/stylesheet/type.ts +53 -11
  93. package/dist/runtime-ets/dom/stylesheet/util.ts +33 -27
  94. package/dist/runtime-ets/index.ts +2 -2
  95. package/dist/runtime-ets/interface/event.ts +1 -1
  96. package/dist/runtime-ets/utils/index.ts +74 -13
  97. package/dist/runtime-ets/utils/info.ts +2 -2
  98. package/dist/runtime-framework/react/app.ts +15 -10
  99. package/dist/runtime-framework/react/hooks.ts +0 -1
  100. package/dist/runtime-framework/react/index.ts +0 -2
  101. package/dist/runtime-framework/react/native-page.ts +217 -80
  102. package/dist/runtime-framework/react/page.ts +4 -9
  103. package/dist/runtime-framework/react/utils/index.ts +3 -3
  104. package/dist/runtime-framework/solid/app.ts +30 -46
  105. package/dist/runtime-framework/solid/connect.ts +21 -3
  106. package/dist/runtime-framework/solid/hooks.ts +16 -11
  107. package/dist/runtime-framework/solid/index.ts +6 -2
  108. package/dist/runtime-framework/solid/page.ts +85 -31
  109. package/dist/runtime-framework/solid/reconciler/props.ts +70 -25
  110. package/dist/runtime-framework/solid/reconciler/render.ts +16 -6
  111. package/dist/runtime-framework/solid/reconciler/use.ts +0 -1
  112. package/dist/runtime-framework/solid/utils/index.ts +3 -5
  113. package/dist/runtime-utils.d.ts +827 -0
  114. package/dist/runtime-utils.js +618 -245
  115. package/dist/runtime-utils.js.map +1 -1
  116. package/dist/runtime.d.ts +1 -0
  117. package/dist/runtime.js +618 -245
  118. package/dist/runtime.js.map +1 -1
  119. package/index.js +3 -1
  120. package/package.json +14 -15
  121. package/static/media/cancel.svg +1 -1
  122. package/static/media/circle.svg +1 -1
  123. package/static/media/clear.svg +1 -1
  124. package/static/media/download.svg +1 -1
  125. package/static/media/info.svg +1 -1
  126. package/static/media/info_circle.svg +1 -1
  127. package/static/media/search.svg +1 -1
  128. package/static/media/success.svg +1 -1
  129. package/static/media/success_no_circle.svg +1 -1
  130. package/static/media/warn.svg +1 -1
  131. package/types/harmony.d.ts +5 -0
  132. package/types/index.d.ts +4 -0
  133. package/types/runtime.d.ts +1 -1
  134. package/dist/runtime-ets/utils/bind.ts +0 -24
  135. /package/dist/runtime-framework/solid/{contant.ts → constant.ts} +0 -0
@@ -1,13 +1,15 @@
1
1
  import { eventHandler, getComponentEventCallback, AREA_CHANGE_EVENT_NAME, VISIBLE_CHANGE_EVENT_NAME, createTaroEvent } from '@tarojs/runtime'
2
2
 
3
3
  import commonStyleModify from './style'
4
- import { getNormalAttributes, parseStyles, shouldBindEvent, getNodeThresholds } from './utils/helper'
4
+ import { parseStyles, shouldBindEvent, getNodeThresholds, getStyleAttr } from './utils/helper'
5
5
  import { INPUT_TYPE_MAP, INPUT_CONFIRM_MAP } from './utils/constant/style'
6
6
 
7
7
  import type { TaroStyleType, TaroAny, TaroInputElement, TaroEvent } from '@tarojs/runtime'
8
8
 
9
9
  interface InputAttrs {
10
10
  textAlign?: TextAlign
11
+ autoFocus?: boolean
12
+ disabled?: boolean
11
13
  }
12
14
 
13
15
  @Extend(TextInput)
@@ -22,12 +24,15 @@ function styles (style: TaroStyleType) {
22
24
  @Extend(TextInput)
23
25
  function attrs(attr: InputAttrs) {
24
26
  .textAlign(attr.textAlign)
27
+ .defaultFocus(attr.autoFocus)
28
+ .enabled(!attr.disabled)
25
29
  }
26
30
 
27
-
28
31
  function getAttributes(node: TaroInputElement): InputAttrs {
29
32
  return {
30
33
  textAlign: node.hmStyle.textAlign,
34
+ autoFocus: node._attrs.autoFocus || node._attrs.focus || false,
35
+ disabled: node._attrs.disabled || false,
31
36
  }
32
37
  }
33
38
 
@@ -44,11 +49,26 @@ function getPlaceholderColor (node: TaroInputElement): string {
44
49
  return placeholderTextColor || parseStyles(placeholderStyle)?.color
45
50
  }
46
51
 
52
+ function getPlaceholderFont(node: TaroInputElement): Font {
53
+ const placeholderStyle: string = node._attrs.placeholderStyle || ''
54
+ const styles = parseStyles(placeholderStyle);
55
+ if (styles) {
56
+ return {
57
+ size: styles.fontSize,
58
+ }
59
+ }
60
+
61
+ return {}
62
+ }
63
+
47
64
  @Component
48
65
  export default struct TaroInput {
49
66
  @State value: string = ''
50
67
 
51
- node: TaroInputElement | null = null
68
+ @Builder customBuilder() {}
69
+ @BuilderParam createLazyChildren: (node: TaroInputElement, layer?: number) => void = this.customBuilder
70
+ @ObjectLink node: TaroInputElement
71
+ @State overwriteStyle: Record<string, TaroAny> = {}
52
72
 
53
73
  aboutToAppear () {
54
74
  if (this.node) {
@@ -63,43 +83,45 @@ export default struct TaroInput {
63
83
  }
64
84
 
65
85
  build () {
66
- if (this.node) {
67
- TextInput({ text: this.value, placeholder: this.node._attrs?.placeholder || '', controller: this.node.controller })
68
- .key(this.node._nid)
69
- .type(getInputType(this.node))
70
- .maxLength(Number(this.node._attrs?.maxlength) || null)
71
- .placeholderColor(getPlaceholderColor(this.node))
72
- .enterKeyType(INPUT_CONFIRM_MAP.get(this.node._attrs?.confirmType) || EnterKeyType.Done)
73
- .attributeModifier(commonStyleModify.setNode(this.node))
74
- .styles(getNormalAttributes(this.node))
75
- .attrs(getAttributes(this.node))
76
- .onChange((value: string) => {
77
- const event: TaroEvent = createTaroEvent('input', { detail: { value } }, this.node)
78
-
79
- this.value = value
80
- this.node?.updateFormWidgetValue(value)
81
- eventHandler(event, 'input', this.node)
82
- })
83
- .onSubmit(() => {
84
- const event: TaroEvent = createTaroEvent('confirm', { detail: { value: this.value } }, this.node)
85
- eventHandler(event, 'confirm', this.node)
86
- })
87
- .onClick(shouldBindEvent((e: ClickEvent) => eventHandler(e, 'click', this.node), this.node, ['click']))
88
- .onBlur(() => {
89
- const event: TaroEvent = createTaroEvent('blur', { detail: { value: this.value } }, this.node)
90
- eventHandler(event, 'blur', this.node)
91
- })
92
- .onFocus(() => {
93
- const event: TaroEvent = createTaroEvent('focus', { detail: { value: this.value, height: this.node?._height } }, this.node)
94
-
95
- eventHandler(event, 'focus', this.node)
96
- })
97
- .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
98
- if (this.node) {
99
- this.node._nodeInfo.areaInfo = res[1]
100
- }
101
- }))
102
- .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
103
- }
86
+ TextInput({ text: this.value, placeholder: this.node._attrs?.placeholder || '', controller: this.node.controller })
87
+ .key(this.node._nid.toString())
88
+ .type(getInputType(this.node))
89
+ .maxLength(Number(this.node._attrs?.maxlength) || null)
90
+ .placeholderColor(getPlaceholderColor(this.node))
91
+ .placeholderFont(getPlaceholderFont(this.node))
92
+ .enterKeyType(INPUT_CONFIRM_MAP.get(this.node._attrs?.confirmType) || EnterKeyType.Done)
93
+ .padding(0) // Note: 移出 Input 默认 padding 设置
94
+ .backgroundColor(getStyleAttr(this.node, "backgroundColor"))//
95
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
96
+ .styles(this.node?.hmStyle)
97
+ .attrs(getAttributes(this.node))
98
+ .onChange((value: string) => {
99
+ const event: TaroEvent = createTaroEvent('input', { detail: { value } }, this.node)
100
+
101
+ this.value = value
102
+ this.node?.updateFormWidgetValue(value)
103
+ eventHandler(event, 'input', this.node)
104
+ })
105
+ .onSubmit(() => {
106
+ const event: TaroEvent = createTaroEvent('confirm', { detail: { value: this.value } }, this.node)
107
+ eventHandler(event, 'confirm', this.node)
108
+ })
109
+ .onClick(shouldBindEvent((e: ClickEvent) => { eventHandler(e, 'click', this.node) }, this.node, ['click']))
110
+ .onBlur(() => {
111
+ const event: TaroEvent = createTaroEvent('blur', { detail: { value: this.value } }, this.node)
112
+ eventHandler(event, 'blur', this.node)
113
+ })
114
+ .onFocus(() => {
115
+ const event: TaroEvent = createTaroEvent('focus', { detail: { value: this.value, height: this.node?._height } }, this.node)
116
+
117
+ eventHandler(event, 'focus', this.node)
118
+ })
119
+ .enableKeyboardOnFocus(typeof (this.node._attrs as TaroAny)?.enableKeyboardOnFocus === 'undefined' ? true : (this.node._attrs as TaroAny).enableKeyboardOnFocus)
120
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
121
+ if (this.node) {
122
+ this.node._nodeInfo.areaInfo = res[1]
123
+ }
124
+ }))
125
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
104
126
  }
105
127
  }
@@ -1,18 +1,19 @@
1
1
  import { Current, eventHandler, getComponentEventCallback, VISIBLE_CHANGE_EVENT_NAME, getPageScrollerOrNode, AREA_CHANGE_EVENT_NAME } from '@tarojs/runtime'
2
2
 
3
- import commonStyleModify from './style'
4
- import { createLazyChildren } from './render'
3
+ import commonStyleModify, { rowModify, columnModify } from './style'
4
+
5
5
  import { TOUCH_EVENT_MAP } from './utils/constant/event'
6
- import { FlexManager } from './utils/FlexManager'
7
- import { getNormalAttributes, shouldBindEvent, getNodeThresholds } from './utils/helper'
6
+ import { FlexManager } from './utils/flexManager'
7
+ import { shouldBindEvent, getNodeThresholds } from './utils/helper'
8
8
 
9
9
  import type { TaroLabelElement, TaroElement, TaroAny, TaroRadioElement, TaroCheckboxElement } from '@tarojs/runtime'
10
+ import { isUndefined } from '@tarojs/shared'
10
11
 
11
12
  function handleTargetChange (id: string) {
12
13
  const taro: TaroAny = Current.taro
13
14
  const page: TaroAny = taro.getCurrentInstance().page
14
- const currentPageNode: TaroElement = getPageScrollerOrNode(page.node, page)
15
- const node: TaroElement | null = currentPageNode.getElementById(id)
15
+ const currentPageNode: TaroElement = getPageScrollerOrNode(page?.node, page)
16
+ const node: TaroElement | null = currentPageNode?.getElementById(id)
16
17
 
17
18
  if (!node) return
18
19
 
@@ -34,45 +35,71 @@ function handleTargetChange (id: string) {
34
35
  }
35
36
  }
36
37
 
37
- @Builder
38
- export default function TaroLabel (node: TaroLabelElement) {
39
- if (FlexManager.isFlexNode(node) && FlexManager.flexOptions(node).direction !== FlexDirection.Column) {
40
- Row() {
41
- createLazyChildren(node)
38
+ @Component
39
+ export default struct TaroLabel {
40
+ @Builder customBuilder() {}
41
+ @BuilderParam createLazyChildren: (node: TaroLabelElement, layer?: number) => void = this.customBuilder
42
+ @ObjectLink node: TaroLabelElement
43
+ @State overwriteStyle: Record<string, TaroAny> = {}
44
+
45
+ aboutToAppear(): void {
46
+ if (this.node) {
47
+ this.node._instance = this
42
48
  }
43
- .attributeModifier(commonStyleModify.setNode(node))
44
- .onClick((e: ClickEvent) => {
45
- const firstChild: TaroElement | null = node.childNodes[0] as TaroElement | null
46
- const id: string = node._attrs.for || firstChild?._attrs.id || firstChild?._nid || ''
47
-
48
- handleTargetChange(id)
49
- eventHandler(e, 'click', node)
50
- })
51
- .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), node), node, TOUCH_EVENT_MAP.values()))
52
- .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
53
- node._nodeInfo.areaInfo = res[1]
54
- }))
55
- .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
56
- .alignItems(FlexManager.flexOptions(node).alignItems as VerticalAlign)
57
- .justifyContent(FlexManager.flexOptions(node).justifyContent)
58
- } else {
59
- Column() {
60
- createLazyChildren(node)
49
+ }
50
+
51
+ build() {
52
+ if (FlexManager.useFlexLayout(this.node)) {
53
+ Flex(FlexManager.flexOptions(this.node)) {
54
+ this.createLazyChildren(this.node, 0)
55
+ }
56
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
57
+ .onClick((e: ClickEvent) => {
58
+ const firstChild: TaroElement | null = this.node.childNodes[0] as TaroElement | null
59
+ const id: string = this.node._attrs.for || firstChild?._attrs.id || firstChild?._nid.toString() || ''
60
+
61
+ handleTargetChange(id)
62
+ eventHandler(e, 'click', this.node)
63
+ })
64
+ .onTouch(shouldBindEvent((e: TouchEvent) => { eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node) }, this.node, TOUCH_EVENT_MAP.values()))
65
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
66
+ this.node._nodeInfo.areaInfo = res[1]
67
+ }))
68
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
69
+ } else if (FlexManager.isFlexNode(this.node) && FlexManager.direction(this.node) !== FlexDirection.Column) {
70
+ Row() {
71
+ this.createLazyChildren(this.node, 0)
72
+ }
73
+ .attributeModifier(rowModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
74
+ .onClick((e: ClickEvent) => {
75
+ const firstChild: TaroElement | null = this.node.childNodes[0] as TaroElement | null
76
+ const id: string = this.node._attrs.for || firstChild?._attrs.id || firstChild?._nid.toString() || ''
77
+
78
+ handleTargetChange(id)
79
+ eventHandler(e, 'click', this.node)
80
+ })
81
+ .onTouch(shouldBindEvent((e: TouchEvent) => { eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node) }, this.node, TOUCH_EVENT_MAP.values()))
82
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
83
+ this.node._nodeInfo.areaInfo = res[1]
84
+ }))
85
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
86
+ } else {
87
+ Column() {
88
+ this.createLazyChildren(this.node, 0)
89
+ }
90
+ .attributeModifier(columnModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
91
+ .onClick((e: ClickEvent) => {
92
+ const firstChild: TaroElement | null = this.node.childNodes[0] as TaroElement | null
93
+ const id: string = this.node._attrs.for || firstChild?._attrs.id || firstChild?._nid.toString() || ''
94
+
95
+ handleTargetChange(id)
96
+ eventHandler(e, 'click', this.node)
97
+ })
98
+ .onTouch(shouldBindEvent((e: TouchEvent) => { eventHandler(e, TOUCH_EVENT_MAP.get(e.type), this.node) }, this.node, TOUCH_EVENT_MAP.values()))
99
+ .onAreaChange(getComponentEventCallback(this.node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
100
+ this.node._nodeInfo.areaInfo = res[1]
101
+ }))
102
+ .onVisibleAreaChange(getNodeThresholds(this.node) || [0.0, 1.0], getComponentEventCallback(this.node, VISIBLE_CHANGE_EVENT_NAME))
61
103
  }
62
- .attributeModifier(commonStyleModify.setNode(node))
63
- .onClick((e: ClickEvent) => {
64
- const firstChild: TaroElement | null = node.childNodes[0] as TaroElement | null
65
- const id: string = node._attrs.for || firstChild?._attrs.id || firstChild?._nid || ''
66
-
67
- handleTargetChange(id)
68
- eventHandler(e, 'click', node)
69
- })
70
- .onTouch(shouldBindEvent((e: TouchEvent) => eventHandler(e, TOUCH_EVENT_MAP.get(e.type), node), node, TOUCH_EVENT_MAP.values()))
71
- .onAreaChange(getComponentEventCallback(node, AREA_CHANGE_EVENT_NAME, (res: TaroAny) => {
72
- node._nodeInfo.areaInfo = res[1]
73
- }))
74
- .onVisibleAreaChange(getNodeThresholds(node) || [0.0, 1.0], getComponentEventCallback(node, VISIBLE_CHANGE_EVENT_NAME))
75
- .alignItems(FlexManager.flexOptions(node).alignItems as HorizontalAlign)
76
- .justifyContent(FlexManager.flexOptions(node).justifyContent)
77
104
  }
78
105
  }
@@ -0,0 +1,31 @@
1
+ import commonStyleModify from './style'
2
+
3
+ import type { TaroViewElement, TaroAny } from '@tarojs/runtime'
4
+
5
+ @Reusable
6
+ @Component
7
+ export default struct TaroListView {
8
+ @Builder customBuilder() {}
9
+ @BuilderParam createLazyChildren: (node: TaroViewElement, layer?: number) => void = this.customBuilder
10
+ @ObjectLink node: TaroViewElement
11
+ @State overwriteStyle: Record<string, TaroAny> = {}
12
+
13
+ aboutToAppear(): void {
14
+ if (this.node) {
15
+ this.node._instance = this
16
+ }
17
+ }
18
+
19
+ aboutToReuse(params: TaroAny): void {
20
+ // this.node = params.node;
21
+ }
22
+
23
+ build() {
24
+ ListItem() {
25
+ Stack() {
26
+ this.createLazyChildren(this.node, 0)
27
+ }
28
+ }
29
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
30
+ }
31
+ }
@@ -0,0 +1,126 @@
1
+ import type { TaroAny, TaroMovableAreaElement, TaroMovableViewElement } from '@tarojs/runtime'
2
+ import { isTaroMovableViewElement } from '@tarojs/runtime'
3
+ import commonStyleModify, { rowModify, columnModify } from './style'
4
+
5
+ import { FlexManager } from './utils/flexManager'
6
+ import { isUndefined } from '@tarojs/shared'
7
+
8
+ @Component
9
+ export default struct TaroMovableArea {
10
+ @Builder
11
+ customBuilder() {
12
+ }
13
+
14
+ @BuilderParam createLazyChildren: (node: TaroMovableAreaElement, layer?: number) => void = this.customBuilder
15
+ @ObjectLink node: TaroMovableAreaElement
16
+ @State overwriteStyle: Record<string, TaroAny> = {}
17
+
18
+ aboutToAppear(): void {
19
+ if (this.node) {
20
+ this.node._instance = this
21
+ }
22
+ }
23
+
24
+
25
+
26
+
27
+
28
+ build() {
29
+ if (FlexManager.useFlexLayout(this.node)) {
30
+ Flex(FlexManager.flexOptions(this.node)) {
31
+ this.createLazyChildren(this.node, 0)
32
+ }
33
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
34
+ .clip(true)
35
+ .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {
36
+ sizeChangeHandle(this.node, newValue)
37
+ })
38
+ .gesture(
39
+ PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent) => {
40
+ this.node.childNodes.forEach(item => {
41
+ if (isTaroMovableViewElement(item)) {
42
+ item.startScale()
43
+ }
44
+ })
45
+ }).onActionUpdate((event) => {
46
+ const scaleArea = this.node.getAttribute('scaleArea')
47
+ if (scaleArea) {
48
+ this.node.childNodes.forEach(item => {
49
+ if (isTaroMovableViewElement(item)) {
50
+ item.doScale(event.scale)
51
+ }
52
+ })
53
+ }
54
+ })
55
+ )
56
+ } else if (FlexManager.isFlexNode(this.node) && FlexManager.direction(this.node) !== FlexDirection.Column) {
57
+ Row() {
58
+ this.createLazyChildren(this.node, 0)
59
+ }
60
+ .attributeModifier(rowModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
61
+ .clip(true)
62
+ .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {
63
+ sizeChangeHandle(this.node, newValue)
64
+ })
65
+ .gesture(
66
+ PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent) => {
67
+ this.node.childNodes.forEach(item => {
68
+ if (isTaroMovableViewElement(item)) {
69
+ item.startScale()
70
+ }
71
+ })
72
+ }).onActionUpdate((event) => {
73
+ const scaleArea = this.node.getAttribute('scaleArea')
74
+ if (scaleArea) {
75
+ this.node.childNodes.forEach(item => {
76
+ if (isTaroMovableViewElement(item)) {
77
+ item.doScale(event.scale)
78
+ }
79
+ })
80
+ }
81
+ })
82
+ )
83
+ } else {
84
+ Column() {
85
+ this.createLazyChildren(this.node, 0)
86
+ }
87
+ .attributeModifier(columnModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
88
+ .clip(true)
89
+ .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {
90
+ sizeChangeHandle(this.node, newValue)
91
+ })
92
+ .gesture(
93
+ PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent) => {
94
+ this.node.childNodes.forEach(item => {
95
+ if (isTaroMovableViewElement(item)) {
96
+ item.startScale()
97
+ }
98
+ })
99
+ }).onActionUpdate((event) => {
100
+ const scaleArea = this.node.getAttribute('scaleArea')
101
+ if (scaleArea) {
102
+ this.node.childNodes.forEach(item => {
103
+ if (isTaroMovableViewElement(item)) {
104
+ item.doScale(event.scale)
105
+ }
106
+ })
107
+ }
108
+ })
109
+ )
110
+ }
111
+ }
112
+ }
113
+
114
+
115
+ function sizeChangeHandle(node: TaroMovableAreaElement, newValue: Area | SizeOptions) {
116
+ node.childNodes.forEach(item => {
117
+ if (isTaroMovableViewElement(item)) {
118
+ if (item.area?.w !== Number(newValue.width) || item.area?.h !== Number(newValue.height)) {
119
+ item.area = {
120
+ w: Number(newValue.width),
121
+ h: Number(newValue.height)
122
+ }
123
+ }
124
+ }
125
+ })
126
+ }
@@ -0,0 +1,93 @@
1
+ import type { TaroAny, TaroMovableViewElement, TaroElement } from '@tarojs/runtime'
2
+
3
+ import commonStyleModify, { rowModify, columnModify } from './style'
4
+
5
+ import { FlexManager } from './utils/flexManager'
6
+
7
+
8
+
9
+ @Component
10
+ export default struct TaroMovableView {
11
+ @Builder customBuilder() {}
12
+ @BuilderParam createLazyChildren: (node: TaroMovableViewElement, layer?: number) => void = this.customBuilder
13
+ @ObjectLink node: TaroMovableViewElement
14
+ @State overwriteStyle: Record<string, TaroAny> = {}
15
+
16
+ aboutToAppear(): void {
17
+ if (this.node) {
18
+ this.node._instance = this
19
+
20
+ }
21
+ }
22
+
23
+ build() {
24
+ Stack() {
25
+ if (FlexManager.useFlexLayout(this.node)) {
26
+ Flex(FlexManager.flexOptions(this.node)) {
27
+ this.createLazyChildren(this.node, 0)
28
+ }
29
+ .attributeModifier(commonStyleModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
30
+ } else if (FlexManager.isFlexNode(this.node) && FlexManager.direction(this.node) !== FlexDirection.Column) {
31
+ Row() {
32
+ this.createLazyChildren(this.node, 0)
33
+ }
34
+ .attributeModifier(rowModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
35
+ } else {
36
+ Column() {
37
+ this.createLazyChildren(this.node, 0)
38
+ }
39
+ .attributeModifier(columnModify.setNode(this.node).setAnimationStyle(this.overwriteStyle))
40
+ }
41
+ }
42
+ .translate({ x: this.node.position.x, y: this.node.position.y })
43
+ .scale({ x: this.node.scaleValue, y: this.node.scaleValue })
44
+ .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {
45
+ if (this.node.selfSize?.w !== Number(newValue.width) || this.node.selfSize?.h !== Number(newValue.height)) {
46
+ this.node.selfSize = { w: Number(newValue.width), h: Number(newValue.height) }
47
+ }
48
+ })
49
+ .visibility(this.node.visibility)
50
+ .gesture(
51
+ GestureGroup(GestureMode.Parallel,
52
+ PanGesture(getPanOption(this.node)).onActionStart((e: GestureEvent) => {
53
+
54
+ this.node.startMove()
55
+ this.node.callTouchEventFnFromGesture('touchstart', e)
56
+ }).onActionUpdate((e: GestureEvent) => {
57
+ this.node.callTouchEventFnFromGesture('touchmove', e)
58
+ this.node.doMove({
59
+ x: e.offsetX,
60
+ y: e.offsetY
61
+ })
62
+
63
+ }).onActionEnd((e: GestureEvent) => {
64
+ this.node.callTouchEventFnFromGesture('touchend', e)
65
+ this.node.checkPositionBoundary(this.node.position, this.node.scaleValue)
66
+ }),
67
+ PinchGesture({ fingers: 2 }).onActionStart((event: GestureEvent) => {
68
+ this.node.startScale()
69
+ }).onActionUpdate((event) => {
70
+ this.node.doScale(event.scale)
71
+ })
72
+ )
73
+ )
74
+ }
75
+ }
76
+
77
+
78
+ function getPanOption(node: TaroMovableViewElement) {
79
+ const attrDirection = node.getAttribute('direction')
80
+ let panDirection = PanDirection.All
81
+
82
+ if(node.getAttribute('disabled')) {
83
+ panDirection = PanDirection.None
84
+ } else if(attrDirection === 'horizontal') {
85
+ panDirection = PanDirection.Horizontal
86
+ } else if (attrDirection === 'vertical') {
87
+ panDirection = PanDirection.Vertical
88
+ }
89
+ return new PanGestureOptions({
90
+ direction: panDirection,
91
+ fingers: 1
92
+ })
93
+ }
@@ -0,0 +1,65 @@
1
+ import { eventCenter } from '@tarojs/runtime/dist/runtime.esm'
2
+
3
+ import { isTagFirstChild } from './utils/helper'
4
+
5
+ import type { TaroAny, TaroNavigationBarElement } from '@tarojs/runtime'
6
+ import type { IComponentAttributeUpdateEvents } from './pageMeta'
7
+
8
+ @Component
9
+ export default struct TaroNavigationBar {
10
+ @Builder customBuilder() {}
11
+ @BuilderParam createLazyChildren: (node: TaroNavigationBarElement, layer?: number) => void = this.customBuilder
12
+ @ObjectLink node: TaroNavigationBarElement
13
+
14
+ aboutToAppear(): void {
15
+ if (!isTagFirstChild(this.node, 'page-meta')) {
16
+ console.error('NavigationBar 只能是 PageMeta 内的第一个节点。')
17
+ }
18
+ if (this.node) {
19
+ this.node._instance = this
20
+ }
21
+
22
+ // FIXME 在 Harmony 提供 @Watch 文档后,根据 node 实际使用更细粒度的监听
23
+ eventCenter?.on('__taroComponentAttributeUpdate', this.handleAttributeUpdate)
24
+ this.handleAttributes(this.node._attrs)
25
+ }
26
+
27
+ aboutToDisappear(): void {
28
+ eventCenter?.off('__taroComponentAttributeUpdate', this.handleAttributeUpdate)
29
+ }
30
+
31
+ handleAttributeUpdate = (opt: IComponentAttributeUpdateEvents) => {
32
+ if (opt.id === this.node._nid.toString() && opt.tagName === 'NAVIGATION-BAR') {
33
+ const attrs: Record<string, TaroAny> = {}
34
+ attrs[opt.attribute] = opt.value
35
+ this.handleAttributes(attrs)
36
+ }
37
+ }
38
+
39
+ handleAttributes (attrs: Record<string, TaroAny>) {
40
+ const options: Record<string, TaroAny> = {}
41
+
42
+ if (attrs.title) {
43
+ options.title = attrs.title
44
+ }
45
+ if (attrs.loading) {
46
+ options.loading = attrs.loading
47
+ }
48
+ if (attrs.backgroundColor) {
49
+ options.backgroundColor = attrs.backgroundColor
50
+ }
51
+ if (attrs.frontColor) {
52
+ options.frontColor = attrs.frontColor
53
+ }
54
+ eventCenter?.trigger('__taroNavigationStyle', options)
55
+ // FIXME: 以下属性暂时不支持
56
+ // attrs.colorAnimationDuration
57
+ // attrs.colorAnimationTimingFunc
58
+ }
59
+
60
+ build() {
61
+ if (true) {
62
+ this.createLazyChildren(this.node, 0)
63
+ }
64
+ }
65
+ }