@doubao-dev/template 0.0.38-canary-22dd4cbf-20260720020201
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.
Potentially problematic release.
This version of @doubao-dev/template might be problematic. Click here for more details.
- package/README.md +282 -0
- package/assets/ask-human-card.png +0 -0
- package/assets/checkout-card.png +0 -0
- package/assets/content-card.png +0 -0
- package/assets/price-action-card.png +0 -0
- package/assets/ticket-order-card.png +0 -0
- package/assets/transit-card.png +0 -0
- package/dist/ask-human-card/index.d.ts +44 -0
- package/dist/ask-human-card/index.js +79 -0
- package/dist/ask-human-card/styles.css +66 -0
- package/dist/checkout-card/index.d.ts +55 -0
- package/dist/checkout-card/index.js +40 -0
- package/dist/checkout-card/styles.css +34 -0
- package/dist/components/chevron-right-icon/index.d.ts +6 -0
- package/dist/components/chevron-right-icon/index.js +13 -0
- package/dist/components/extra-action/index.d.ts +50 -0
- package/dist/components/extra-action/index.js +31 -0
- package/dist/components/extra-action/styles.css +10 -0
- package/dist/components/footer/index.d.ts +27 -0
- package/dist/components/footer/index.js +15 -0
- package/dist/components/footer/styles.css +27 -0
- package/dist/components/header/index.d.ts +13 -0
- package/dist/components/header/index.js +27 -0
- package/dist/components/header/styles.css +62 -0
- package/dist/components/info-section/index.d.ts +47 -0
- package/dist/components/info-section/index.js +93 -0
- package/dist/components/info-section/styles.css +151 -0
- package/dist/components/product-summary/index.d.ts +26 -0
- package/dist/components/product-summary/index.js +55 -0
- package/dist/components/product-summary/styles.css +121 -0
- package/dist/components/route-section/index.d.ts +23 -0
- package/dist/components/route-section/index.js +39 -0
- package/dist/components/route-section/styles.css +54 -0
- package/dist/components/transport-summary/index.d.ts +31 -0
- package/dist/components/transport-summary/index.js +109 -0
- package/dist/components/transport-summary/styles.css +214 -0
- package/dist/content-card/index.d.ts +45 -0
- package/dist/content-card/index.js +72 -0
- package/dist/content-card/styles.css +160 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +6 -0
- package/dist/price-action-card/index.d.ts +52 -0
- package/dist/price-action-card/index.js +64 -0
- package/dist/price-action-card/styles.css +161 -0
- package/dist/ticket-order-card/index.d.ts +70 -0
- package/dist/ticket-order-card/index.js +27 -0
- package/dist/ticket-order-card/styles.css +18 -0
- package/dist/transit-card/index.d.ts +52 -0
- package/dist/transit-card/index.js +29 -0
- package/dist/transit-card/styles.css +53 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +0 -0
- package/dist/utils/app-info.d.ts +6 -0
- package/dist/utils/app-info.js +20 -0
- package/dist/utils/icons.d.ts +2 -0
- package/dist/utils/icons.js +28 -0
- package/package.json +40 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { CSSProperties, TouchEvent } from '@lynx-js/types';
|
|
2
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import { type TemplateCardFooterProps } from '../components/footer/index.js';
|
|
4
|
+
import { type TemplateCardHeaderProps } from '../components/header/index.js';
|
|
5
|
+
import type { TemplateKey, TemplateText } from '../types.js';
|
|
6
|
+
import './styles.scss';
|
|
7
|
+
export interface TransitCardProps {
|
|
8
|
+
/** 标题栏配置。 */
|
|
9
|
+
header?: TemplateCardHeaderProps;
|
|
10
|
+
/** 交通列表项。 */
|
|
11
|
+
items?: TransitCardItem[];
|
|
12
|
+
/** 底部操作区配置。 */
|
|
13
|
+
footer?: TemplateCardFooterProps;
|
|
14
|
+
/** 卡片根节点自定义类名。 */
|
|
15
|
+
className?: string;
|
|
16
|
+
/** 卡片根节点自定义样式。 */
|
|
17
|
+
style?: CSSProperties;
|
|
18
|
+
/** 点击卡片根节点时触发。 */
|
|
19
|
+
onClick?: (event: TouchEvent) => void;
|
|
20
|
+
}
|
|
21
|
+
export interface TransitCardItem {
|
|
22
|
+
/** 列表项唯一标识;不传时使用数组下标。 */
|
|
23
|
+
key?: TemplateKey;
|
|
24
|
+
/** 行程标题块内容。 */
|
|
25
|
+
title?: ReactNode;
|
|
26
|
+
/** 出发点主信息文案。 */
|
|
27
|
+
departureMain?: TemplateText;
|
|
28
|
+
/** 出发点补充信息文案。 */
|
|
29
|
+
departureSub?: TemplateText;
|
|
30
|
+
/** 中转区域整体块内容;优先级高于 transferTop 和 transferBottom。 */
|
|
31
|
+
transfer?: ReactNode;
|
|
32
|
+
/** 中转区域上方文案。 */
|
|
33
|
+
transferTop?: TemplateText;
|
|
34
|
+
/** 中转区域下方文案。 */
|
|
35
|
+
transferBottom?: TemplateText;
|
|
36
|
+
/** 到达点主信息文案。 */
|
|
37
|
+
arrivalMain?: TemplateText;
|
|
38
|
+
/** 到达点日期偏移文案,例如 '+1'。 */
|
|
39
|
+
arrivalDayOffset?: TemplateText;
|
|
40
|
+
/** 到达点补充信息文案。 */
|
|
41
|
+
arrivalSub?: TemplateText;
|
|
42
|
+
/** 价格块内容。 */
|
|
43
|
+
price?: ReactNode;
|
|
44
|
+
/** 列表项根节点自定义类名。 */
|
|
45
|
+
className?: string;
|
|
46
|
+
/** 列表项根节点自定义样式。 */
|
|
47
|
+
style?: CSSProperties;
|
|
48
|
+
/** 点击列表项时触发。 */
|
|
49
|
+
onClick?: (event: TouchEvent) => void;
|
|
50
|
+
}
|
|
51
|
+
export declare function TransitCard(props: TransitCardProps): ReactElement;
|
|
52
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useThemeClassName } from "@byted-doubao-apps/components";
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { TemplateCardFooter } from "../components/footer/index.js";
|
|
4
|
+
import { TemplateCardHeader } from "../components/header/index.js";
|
|
5
|
+
import { TemplateTransportSummary } from "../components/transport-summary/index.js";
|
|
6
|
+
import "./styles.css";
|
|
7
|
+
function renderTransitCardItem({ item, index, isLast }) {
|
|
8
|
+
return <view className={clsx('doubao-transit-card__item', isLast && 'doubao-transit-card__item--last', item.className)} style={item.style} key={item.key ?? index} {...null != item.onClick ? {
|
|
9
|
+
catchtap: item.onClick
|
|
10
|
+
} : {}}>
|
|
11
|
+
<TemplateTransportSummary className="doubao-template-transport-summary--list" title={item.title} departureMain={item.departureMain} departureSub={item.departureSub} transfer={item.transfer} transferTop={item.transferTop} transferBottom={item.transferBottom} arrivalMain={item.arrivalMain} arrivalDayOffset={item.arrivalDayOffset} arrivalSub={item.arrivalSub} price={item.price}/>
|
|
12
|
+
{!isLast && <view className="doubao-transit-card__item--spread"/>}
|
|
13
|
+
</view>;
|
|
14
|
+
}
|
|
15
|
+
function TransitCard(props) {
|
|
16
|
+
const { header, items = [], footer, className, style, onClick } = props;
|
|
17
|
+
return <view className={useThemeClassName(clsx('doubao-transit-card', className))} style={style} bindtap={onClick}>
|
|
18
|
+
<TemplateCardHeader actionText={header?.actionText} showAction={header?.showAction} onActionClick={header?.onActionClick}/>
|
|
19
|
+
<view className="doubao-transit-card__body">
|
|
20
|
+
{items.map((item, index)=>renderTransitCardItem({
|
|
21
|
+
item,
|
|
22
|
+
index,
|
|
23
|
+
isLast: index === items.length - 1
|
|
24
|
+
}))}
|
|
25
|
+
</view>
|
|
26
|
+
<TemplateCardFooter primaryActionButton={footer?.primaryActionButton} secondaryActionButton={footer?.secondaryActionButton}/>
|
|
27
|
+
</view>;
|
|
28
|
+
}
|
|
29
|
+
export { TransitCard };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
.doubao-transit-card {
|
|
2
|
+
--doubao-button-border-radius: 8px;
|
|
3
|
+
--doubao-button-default-border-radius: 8px;
|
|
4
|
+
--doubao-button-default-height: 44px;
|
|
5
|
+
--doubao-button-default-padding-x: 12px;
|
|
6
|
+
--doubao-button-default-padding-y: 0;
|
|
7
|
+
--doubao-button-default-font-size: 16px;
|
|
8
|
+
--doubao-button-default-line-height: 22px;
|
|
9
|
+
box-sizing: border-box;
|
|
10
|
+
background-color: var(--bg-base-1);
|
|
11
|
+
border: 1px solid var(--bg-base-2-overlay);
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
align-items: stretch;
|
|
15
|
+
width: 100%;
|
|
16
|
+
display: flex;
|
|
17
|
+
overflow: hidden;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.doubao-transit-card__body {
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
background-color: var(--bg-base-1);
|
|
23
|
+
width: 100%;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.doubao-transit-card__item {
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
width: 100%;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.doubao-transit-card__item--spread {
|
|
32
|
+
background: var(--neutral-transparent-1);
|
|
33
|
+
width: calc(100% - 12px);
|
|
34
|
+
height: .5px;
|
|
35
|
+
margin-left: 12px;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.doubao-transit-card__item--last {
|
|
39
|
+
border-bottom: none;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.doubao-transit-card__view-more {
|
|
43
|
+
box-sizing: border-box;
|
|
44
|
+
width: 100%;
|
|
45
|
+
padding: 8px 12px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.doubao-transit-card__view-more-button {
|
|
49
|
+
border-radius: 8px;
|
|
50
|
+
width: 100%;
|
|
51
|
+
height: 44px;
|
|
52
|
+
}
|
|
53
|
+
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { getPackageInfoSync } from "@byted-doubao-apps/framework/api";
|
|
2
|
+
function resolveIconSrc(icons) {
|
|
3
|
+
if ('string' == typeof icons) return icons.length > 0 ? icons : void 0;
|
|
4
|
+
return icons?.['3x'] || icons?.['2x'] || icons?.['1x'];
|
|
5
|
+
}
|
|
6
|
+
function getAppInfo() {
|
|
7
|
+
try {
|
|
8
|
+
const manifest = globalThis.__AI_MANIFEST__;
|
|
9
|
+
const packageInfo = getPackageInfoSync?.();
|
|
10
|
+
return {
|
|
11
|
+
appName: manifest ? manifest.name || manifest.appId || manifest.package : packageInfo?.name,
|
|
12
|
+
appIconSrc: manifest ? resolveIconSrc(manifest.icons) : packageInfo?.iconSrc
|
|
13
|
+
};
|
|
14
|
+
} catch {
|
|
15
|
+
return {
|
|
16
|
+
appName: ''
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export { getAppInfo };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
function getTemplatePausedIconContent(color) {
|
|
2
|
+
return `<svg width="32" height="32" overflow="visible" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
3
|
+
<path d="M16 0C24.8366 0 32 7.16344 32 16C32 24.8366 24.8366 32 16 32C7.16344 32 0 24.8366 0 16C0 7.16344 7.16344 0 16 0ZM13.8828 10.4648C12.9165 10.3173 12.0129 10.981 11.8652 11.9473L11.835 12.1592C11.6968 13.1674 11.6279 14.4494 11.6279 16.0039C11.6279 17.6646 11.7066 19.0136 11.8643 20.0508C11.8818 20.1661 11.9104 20.28 11.9502 20.3896C12.284 21.3084 13.3 21.7829 14.2188 21.4492L14.4287 21.3701C15.4197 20.99 16.5599 20.4143 17.8496 19.6436C19.0853 18.9052 20.0807 18.2138 20.835 17.5684C20.9152 17.4997 20.9898 17.4248 21.0586 17.3447C21.8017 16.4796 21.7031 15.1758 20.8379 14.4326L20.6592 14.2822C19.9287 13.6777 18.9918 13.0341 17.8496 12.3516C16.4659 11.5247 15.2547 10.9241 14.2158 10.5498C14.108 10.5109 13.9961 10.4822 13.8828 10.4648Z" fill="${color}"/>
|
|
4
|
+
</svg>`;
|
|
5
|
+
}
|
|
6
|
+
function getTemplatePauseIconPath(color) {
|
|
7
|
+
return `<path d="M12.7917 10.1667C13.3353 10.1667 13.6075 10.1667 13.8219 10.2555C14.1075 10.3739 14.3344 10.6009 14.4528 10.8864C14.5416 11.1008 14.5417 11.3731 14.5417 11.9167V20.0837C14.5417 20.6269 14.5415 20.8986 14.4528 21.113C14.3344 21.3987 14.1077 21.6263 13.8219 21.7448C13.6075 21.8336 13.3353 21.8337 12.7917 21.8337C12.2481 21.8337 11.9758 21.8336 11.7614 21.7448C11.4757 21.6263 11.2489 21.3987 11.1305 21.113C11.0418 20.8986 11.0417 20.6269 11.0417 20.0837V11.9167C11.0417 11.3731 11.0417 11.1008 11.1305 10.8864C11.2489 10.6009 11.4759 10.3739 11.7614 10.2555C11.9758 10.1667 12.2481 10.1667 12.7917 10.1667ZM19.2087 10.1667C19.7519 10.1667 20.0236 10.1668 20.238 10.2555C20.5237 10.3739 20.7513 10.6007 20.8698 10.8864C20.9586 11.1008 20.9587 11.3731 20.9587 11.9167V20.0837C20.9587 20.6269 20.9585 20.8986 20.8698 21.113C20.7514 21.3988 20.5238 21.6264 20.238 21.7448C20.0236 21.8334 19.7518 21.8337 19.2087 21.8337C18.6651 21.8337 18.3928 21.8336 18.1784 21.7448C17.8926 21.6264 17.6659 21.3988 17.5475 21.113C17.4587 20.8986 17.4587 20.627 17.4587 20.0837V11.9167C17.4587 11.3731 17.4587 11.1008 17.5475 10.8864C17.6659 10.6008 17.8928 10.3739 18.1784 10.2555C18.3928 10.1667 18.6651 10.1667 19.2087 10.1667Z" fill="${color}"/>`;
|
|
8
|
+
}
|
|
9
|
+
function normalizeTemplateProgress(progress) {
|
|
10
|
+
if (null == progress || Number.isNaN(progress)) return null;
|
|
11
|
+
return Math.min(Math.max(progress, 0), 1);
|
|
12
|
+
}
|
|
13
|
+
function renderTemplatePlaybackProgress(progress, color) {
|
|
14
|
+
const normalizedProgress = normalizeTemplateProgress(progress);
|
|
15
|
+
if (null == normalizedProgress) return '';
|
|
16
|
+
const circumference = 94.248;
|
|
17
|
+
const dash = Number((normalizedProgress * circumference).toFixed(3));
|
|
18
|
+
return `<circle cx="16" cy="16" r="15" stroke="${color}" stroke-width="2" stroke-linecap="round" stroke-dasharray="${dash} ${circumference}" transform="rotate(-90 16 16)"/>`;
|
|
19
|
+
}
|
|
20
|
+
function getTemplatePlaybackIconContent(playing, progress, color) {
|
|
21
|
+
if (!playing) return getTemplatePausedIconContent(color);
|
|
22
|
+
return `<svg width="32" height="32" overflow="visible" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
23
|
+
<path d="M16 1C24.2843 1 31 7.71573 31 16C31 24.2843 24.2843 31 16 31C7.71573 31 1 24.2843 1 16C1 7.71573 7.71573 1 16 1Z" stroke="var(--stroke-0, black)" stroke-opacity="0.1" stroke-width="2"/>
|
|
24
|
+
${renderTemplatePlaybackProgress(progress, color)}
|
|
25
|
+
${getTemplatePauseIconPath(color)}
|
|
26
|
+
</svg>`;
|
|
27
|
+
}
|
|
28
|
+
export { getTemplatePlaybackIconContent };
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@doubao-dev/template",
|
|
3
|
+
"version": "0.0.38-canary-22dd4cbf-20260720020201",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"exports": {
|
|
6
|
+
".": {
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"import": "./dist/index.js",
|
|
9
|
+
"require": "./dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./package.json": "./package.json"
|
|
12
|
+
},
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"sideEffects": [
|
|
15
|
+
"**/*.css",
|
|
16
|
+
"**/*.scss"
|
|
17
|
+
],
|
|
18
|
+
"files": [
|
|
19
|
+
"dist",
|
|
20
|
+
"assets",
|
|
21
|
+
"README.md",
|
|
22
|
+
"!dist/**/*.map",
|
|
23
|
+
"!**/*.tsbuildinfo"
|
|
24
|
+
],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"clsx": "2.1.1"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@lynx-js/types": "^4.0.0",
|
|
30
|
+
"@types/react": "^18.0.0"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"registry": "https://registry.npmjs.org/"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "rslib build",
|
|
38
|
+
"dev": "rslib build --watch"
|
|
39
|
+
}
|
|
40
|
+
}
|