@tarojs/components 3.6.14-alpha.1 → 3.6.15
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.
|
@@ -52,6 +52,25 @@ const syncEvent = (node, eventName, newEventHandler) => {
|
|
|
52
52
|
const attachProps = (node, newProps, oldProps = {}) => {
|
|
53
53
|
// some test frameworks don't render DOM elements, so we test here to make sure we are dealing with DOM first
|
|
54
54
|
if (node instanceof Element) {
|
|
55
|
+
Object.keys(oldProps).forEach((name) => {
|
|
56
|
+
if (['style', 'children', 'ref', 'class', 'className', 'forwardedRef'].includes(name)) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
// Note: 移除节点上冗余事件、属性
|
|
60
|
+
if (!newProps.hasOwnProperty(name)) {
|
|
61
|
+
if (/^on([A-Z].*)/.test(name)) {
|
|
62
|
+
const eventName = name.substring(2);
|
|
63
|
+
const eventNameLc = eventName.toLowerCase();
|
|
64
|
+
if (!isCoveredByReact(eventNameLc)) {
|
|
65
|
+
syncEvent(node, eventNameLc, undefined);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
node[name] = null;
|
|
70
|
+
node.removeAttribute(camelToDashCase(name));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
55
74
|
// add any classes in className to the class list
|
|
56
75
|
node.className = getClassName(node.classList, newProps, oldProps);
|
|
57
76
|
Object.keys(newProps).forEach((name) => {
|
|
@@ -62,7 +81,7 @@ const attachProps = (node, newProps, oldProps = {}) => {
|
|
|
62
81
|
if ((name === 'style' && typeof newProps[name] !== 'string') || ['children', 'ref', 'class', 'className', 'forwardedRef'].includes(name)) {
|
|
63
82
|
return;
|
|
64
83
|
}
|
|
65
|
-
if (
|
|
84
|
+
if (/^on([A-Z].*)/.test(name)) {
|
|
66
85
|
const eventName = name.substring(2);
|
|
67
86
|
const eventNameLc = eventName.toLowerCase();
|
|
68
87
|
if (!isCoveredByReact(eventNameLc)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachProps.js","sources":["../../../../../taro-components-library-react/src/react-component-lib/utils/attachProps.ts"],"sourcesContent":["/**\n * Modify from https://github.com/ionic-team/stencil-ds-output-targets/blob/main/packages/react-output-target/react-component-lib/utils/attachProps.ts\n * MIT License https://github.com/ionic-team/stencil-ds-output-targets/blob/main/LICENSE\n */\nimport { camelToDashCase } from './case'\n\nconst arrayToMap = (arr: string[] | DOMTokenList) => {\n const map = new Map<string, string>();\n (arr as string[]).forEach((s: string) => map.set(s, s))\n return map\n}\n\nexport const getClassName = (classList: DOMTokenList, newProps: any, oldProps: any) => {\n const newClassProp: string = newProps.className || newProps.class\n const oldClassProp: string = oldProps.className || oldProps.class\n // map the classes to Maps for performance\n const currentClasses = arrayToMap(classList)\n const incomingPropClasses = arrayToMap(newClassProp ? newClassProp.split(' ') : [])\n const oldPropClasses = arrayToMap(oldClassProp ? oldClassProp.split(' ') : [])\n const finalClassNames: string[] = []\n // loop through each of the current classes on the component\n // to see if it should be a part of the classNames added\n currentClasses.forEach((currentClass) => {\n if (incomingPropClasses.has(currentClass)) {\n // add it as its already included in classnames coming in from newProps\n finalClassNames.push(currentClass)\n incomingPropClasses.delete(currentClass)\n } else if (!oldPropClasses.has(currentClass)) {\n // add it as it has NOT been removed by user\n finalClassNames.push(currentClass)\n }\n })\n incomingPropClasses.forEach((s) => finalClassNames.push(s))\n return finalClassNames.join(' ')\n}\n\n// Note(taro): 禁用 react 合成事件抛出 (避免自定义事件属性调用问题, 例如: event.detail.value 等)\nexport const isCoveredByReact = (__eventNameSuffix: string) => false\n\nexport const syncEvent = (\n node: Element & { __events?: { [key: string]: ((e: Event) => any) | undefined } },\n eventName: string,\n newEventHandler?: (e: Event) => any\n) => {\n const eventStore = node.__events || (node.__events = {})\n const oldEventHandler = eventStore[eventName]\n\n // Remove old listener so they don't double up.\n if (oldEventHandler) {\n node.removeEventListener(eventName, oldEventHandler)\n }\n\n // Bind new listener.\n node.addEventListener(\n eventName,\n (eventStore[eventName] = function handler (e: Event) {\n if (newEventHandler) {\n newEventHandler.call(this, e)\n }\n })\n )\n}\n\nexport const attachProps = (node: HTMLElement, newProps: any, oldProps: any = {}) => {\n // some test frameworks don't render DOM elements, so we test here to make sure we are dealing with DOM first\n if (node instanceof Element) {\n // add any classes in className to the class list\n node.className = getClassName(node.classList, newProps, oldProps)\n\n Object.keys(newProps).forEach((name) => {\n /** Note(taro): 优化 style 属性的处理\n * 1. 考虑到兼容旧版本项目,支持使用字符串配置 style 属性,但这并非推荐写法,且不考虑优化在 style 移除时同步删除属性\n * 2. style 属性应当交与前端 UI 框架自行处理,不考虑实现类似于 reactify-wc 的更新策略\n */\n if ((name === 'style' && typeof newProps[name] !== 'string') || ['children', 'ref', 'class', 'className', 'forwardedRef'].includes(name)) {\n return\n }\n if (
|
|
1
|
+
{"version":3,"file":"attachProps.js","sources":["../../../../../taro-components-library-react/src/react-component-lib/utils/attachProps.ts"],"sourcesContent":["/**\n * Modify from https://github.com/ionic-team/stencil-ds-output-targets/blob/main/packages/react-output-target/react-component-lib/utils/attachProps.ts\n * MIT License https://github.com/ionic-team/stencil-ds-output-targets/blob/main/LICENSE\n */\nimport { camelToDashCase } from './case'\n\nconst arrayToMap = (arr: string[] | DOMTokenList) => {\n const map = new Map<string, string>();\n (arr as string[]).forEach((s: string) => map.set(s, s))\n return map\n}\n\nexport const getClassName = (classList: DOMTokenList, newProps: any, oldProps: any) => {\n const newClassProp: string = newProps.className || newProps.class\n const oldClassProp: string = oldProps.className || oldProps.class\n // map the classes to Maps for performance\n const currentClasses = arrayToMap(classList)\n const incomingPropClasses = arrayToMap(newClassProp ? newClassProp.split(' ') : [])\n const oldPropClasses = arrayToMap(oldClassProp ? oldClassProp.split(' ') : [])\n const finalClassNames: string[] = []\n // loop through each of the current classes on the component\n // to see if it should be a part of the classNames added\n currentClasses.forEach((currentClass) => {\n if (incomingPropClasses.has(currentClass)) {\n // add it as its already included in classnames coming in from newProps\n finalClassNames.push(currentClass)\n incomingPropClasses.delete(currentClass)\n } else if (!oldPropClasses.has(currentClass)) {\n // add it as it has NOT been removed by user\n finalClassNames.push(currentClass)\n }\n })\n incomingPropClasses.forEach((s) => finalClassNames.push(s))\n return finalClassNames.join(' ')\n}\n\n// Note(taro): 禁用 react 合成事件抛出 (避免自定义事件属性调用问题, 例如: event.detail.value 等)\nexport const isCoveredByReact = (__eventNameSuffix: string) => false\n\nexport const syncEvent = (\n node: Element & { __events?: { [key: string]: ((e: Event) => any) | undefined } },\n eventName: string,\n newEventHandler?: (e: Event) => any\n) => {\n const eventStore = node.__events || (node.__events = {})\n const oldEventHandler = eventStore[eventName]\n\n // Remove old listener so they don't double up.\n if (oldEventHandler) {\n node.removeEventListener(eventName, oldEventHandler)\n }\n\n // Bind new listener.\n node.addEventListener(\n eventName,\n (eventStore[eventName] = function handler (e: Event) {\n if (newEventHandler) {\n newEventHandler.call(this, e)\n }\n })\n )\n}\n\nexport const attachProps = (node: HTMLElement, newProps: any, oldProps: any = {}) => {\n // some test frameworks don't render DOM elements, so we test here to make sure we are dealing with DOM first\n if (node instanceof Element) {\n Object.keys(oldProps).forEach((name) => {\n if (['style', 'children', 'ref', 'class', 'className', 'forwardedRef'].includes(name)) {\n return\n }\n // Note: 移除节点上冗余事件、属性\n if (!newProps.hasOwnProperty(name)) {\n if (/^on([A-Z].*)/.test(name)) {\n const eventName = name.substring(2)\n const eventNameLc = eventName.toLowerCase()\n\n if (!isCoveredByReact(eventNameLc)) {\n syncEvent(node, eventNameLc, undefined)\n }\n } else {\n (node as any)[name] = null\n node.removeAttribute(camelToDashCase(name))\n }\n }\n })\n // add any classes in className to the class list\n node.className = getClassName(node.classList, newProps, oldProps)\n\n Object.keys(newProps).forEach((name) => {\n /** Note(taro): 优化 style 属性的处理\n * 1. 考虑到兼容旧版本项目,支持使用字符串配置 style 属性,但这并非推荐写法,且不考虑优化在 style 移除时同步删除属性\n * 2. style 属性应当交与前端 UI 框架自行处理,不考虑实现类似于 reactify-wc 的更新策略\n */\n if ((name === 'style' && typeof newProps[name] !== 'string') || ['children', 'ref', 'class', 'className', 'forwardedRef'].includes(name)) {\n return\n }\n if (/^on([A-Z].*)/.test(name)) {\n const eventName = name.substring(2)\n const eventNameLc = eventName.toLowerCase()\n\n if (!isCoveredByReact(eventNameLc)) {\n syncEvent(node, eventNameLc, newProps[name])\n }\n } else {\n (node as any)[name] = newProps[name]\n const propType = typeof newProps[name]\n if (propType === 'string') {\n node.setAttribute(camelToDashCase(name), newProps[name])\n }\n }\n })\n }\n}\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tarojs/components",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.15",
|
|
4
4
|
"description": "Taro 组件库",
|
|
5
5
|
"browser": "dist/index.js",
|
|
6
6
|
"main:h5": "dist/index.js",
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
"resolve-pathname": "^3.0.0",
|
|
38
38
|
"swiper": "6.8.0",
|
|
39
39
|
"weui": "^1.1.2",
|
|
40
|
-
"@tarojs/components-advanced": "3.6.
|
|
41
|
-
"@tarojs/router": "3.6.
|
|
42
|
-
"@tarojs/taro": "3.6.
|
|
40
|
+
"@tarojs/components-advanced": "3.6.15",
|
|
41
|
+
"@tarojs/router": "3.6.15",
|
|
42
|
+
"@tarojs/taro": "3.6.15"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
45
|
"@babel/generator": "^7.20.0",
|
package/types/Button.d.ts
CHANGED
|
@@ -165,6 +165,10 @@ interface ButtonProps extends StandardProps {
|
|
|
165
165
|
* @supported qq
|
|
166
166
|
*/
|
|
167
167
|
shareMessageImg?: string
|
|
168
|
+
/** 跳转抖音号个人页,只支持小程序绑定的品牌号、员工号、合作号
|
|
169
|
+
* @supported tt
|
|
170
|
+
*/
|
|
171
|
+
dataAwemeId?: string
|
|
168
172
|
/** 用户点击该按钮时,会返回获取到的用户信息,回调的detail数据与 Taro.getUserInfo 返回的一致
|
|
169
173
|
*
|
|
170
174
|
* 生效时机: `open-type="getUserInfo"`
|
|
@@ -261,6 +265,12 @@ interface ButtonProps extends StandardProps {
|
|
|
261
265
|
* @supported qq
|
|
262
266
|
*/
|
|
263
267
|
onAddGroupApp?: CommonEventFunction
|
|
268
|
+
/** 监听跳转抖音号个人页的回调
|
|
269
|
+
*
|
|
270
|
+
* 生效时机:`open-type="openAwemeUserProfile"`
|
|
271
|
+
* @supported tt
|
|
272
|
+
*/
|
|
273
|
+
onOpenAwemeUserProfile?: CommonEventFunction
|
|
264
274
|
}
|
|
265
275
|
declare namespace ButtonProps {
|
|
266
276
|
/** size 的合法值 */
|
|
@@ -287,7 +297,7 @@ declare namespace ButtonProps {
|
|
|
287
297
|
reset
|
|
288
298
|
}
|
|
289
299
|
/** open-type 的合法值 */
|
|
290
|
-
type OpenType = keyof openTypeKeys['weapp'] | keyof openTypeKeys['alipay'] | keyof openTypeKeys['qq']
|
|
300
|
+
type OpenType = keyof openTypeKeys['weapp'] | keyof openTypeKeys['alipay'] | keyof openTypeKeys['qq'] | keyof openTypeKeys['tt']
|
|
291
301
|
/** open-type 的合法值 */
|
|
292
302
|
interface openTypeKeys {
|
|
293
303
|
weapp: {
|
|
@@ -369,6 +379,35 @@ declare namespace ButtonProps {
|
|
|
369
379
|
/** 在自定义开放数据域组件中,向指定好友发起分享据 */
|
|
370
380
|
shareMessageToFriend
|
|
371
381
|
}
|
|
382
|
+
/** TT 小程序专属的 open-type 合法值
|
|
383
|
+
* @see https://developer.open-douyin.com/docs/resource/zh-CN/mini-app/develop/component/list/button/#open-type-%E7%9A%84%E5%90%88%E6%B3%95%E5%80%BC
|
|
384
|
+
*/
|
|
385
|
+
tt: {
|
|
386
|
+
/** 触发用户转发, 可以配合 data-channel 属性来设置分享的 channel,具体请参考 ShareParam */
|
|
387
|
+
share
|
|
388
|
+
/** 获取用户手机号,可以从 bindgetphonenumber 回调中获取到用户信息,详情请参见获取手机号 */
|
|
389
|
+
getPhoneNumber
|
|
390
|
+
/** 跳转到抖音IM客服,详情请参见抖音IM客服能力 */
|
|
391
|
+
im
|
|
392
|
+
/** 跳转到抖音平台客服,详情请参见平台客服能力 */
|
|
393
|
+
platformIm
|
|
394
|
+
/** 跳转视频播放页,详情请参见跳转视频播放页 */
|
|
395
|
+
navigateToVideoView
|
|
396
|
+
/** 跳转抖音号个人页,详情请参见跳转抖音号个人页 */
|
|
397
|
+
openAwemeUserProfile
|
|
398
|
+
/** 跳转抖音直播间,详情请参见跳转抖音直播间 */
|
|
399
|
+
openWebcastRoom
|
|
400
|
+
/** 写入系统日历,详情请参见写入系统日历 */
|
|
401
|
+
addCalendarEvent
|
|
402
|
+
/** 添加到桌面,详情请参见添加到桌面 */
|
|
403
|
+
addShortcut
|
|
404
|
+
/** 加群,详情请参见加群 */
|
|
405
|
+
joinGroup
|
|
406
|
+
/** 私信,详情请参见私信 */
|
|
407
|
+
privateMessage
|
|
408
|
+
/** 主动授权私信,详情请参见主动授权私信 */
|
|
409
|
+
authorizePrivateMessage
|
|
410
|
+
}
|
|
372
411
|
}
|
|
373
412
|
/** lang 的合法值 */
|
|
374
413
|
interface Lang {
|
package/types/Textarea.d.ts
CHANGED