@doubao-apps/template 0.0.31 → 0.0.32
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.
- package/README.md +231 -109
- package/assets/order-card.png +0 -0
- package/assets/product-action-card.png +0 -0
- package/assets/ticket-order-card.png +0 -0
- package/assets/transport-card.png +0 -0
- package/assets/transport-list-card.png +0 -0
- package/dist/components/action-bar/index.d.ts +19 -0
- package/dist/components/action-bar/index.js +15 -0
- package/dist/components/action-bar/styles.css +30 -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 +140 -0
- package/dist/components/product-summary/index.d.ts +24 -0
- package/dist/components/product-summary/index.js +51 -0
- package/dist/components/product-summary/styles.css +125 -0
- package/dist/components/route-section/index.d.ts +23 -0
- package/dist/components/route-section/index.js +38 -0
- package/dist/components/route-section/styles.css +58 -0
- package/dist/components/title-bar/index.d.ts +11 -0
- package/dist/components/title-bar/index.js +32 -0
- package/dist/components/title-bar/styles.css +69 -0
- package/dist/components/transport-summary/index.d.ts +31 -0
- package/dist/components/transport-summary/index.js +104 -0
- package/dist/components/transport-summary/styles.css +182 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +4 -0
- package/dist/invalid-card/index.js +2 -20
- package/dist/invalid-card/styles.css +1 -65
- package/dist/list-card/index.d.ts +3 -2
- package/dist/list-card/index.js +2 -20
- package/dist/list-card/styles.css +0 -72
- package/dist/order-card/index.d.ts +7 -6
- package/dist/order-card/index.js +9 -106
- package/dist/order-card/styles.css +6 -368
- package/dist/product-action-card/index.d.ts +40 -0
- package/dist/product-action-card/index.js +17 -0
- package/dist/product-action-card/styles.css +20 -0
- package/dist/ticket-order-card/index.d.ts +78 -0
- package/dist/ticket-order-card/index.js +27 -0
- package/dist/ticket-order-card/styles.css +18 -0
- package/dist/transport-card/index.d.ts +36 -0
- package/dist/transport-card/index.js +15 -0
- package/dist/transport-card/styles.css +21 -0
- package/dist/transport-list-card/index.d.ts +56 -0
- package/dist/transport-list-card/index.js +32 -0
- package/dist/transport-list-card/styles.css +60 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +0 -0
- package/dist/utils/app-info.js +1 -2
- package/package.json +2 -6
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useThemeClassName } from "@byted-doubao-apps/components";
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { TemplateActionBar } from "../components/action-bar/index.js";
|
|
4
|
+
import { TemplateInfoSection } from "../components/info-section/index.js";
|
|
5
|
+
import { TemplateRouteSection, hasTemplateRouteSectionItems } from "../components/route-section/index.js";
|
|
6
|
+
import { TemplateTitleBar } from "../components/title-bar/index.js";
|
|
7
|
+
import "./styles.css";
|
|
8
|
+
function isTicketOrderTextEmpty(content) {
|
|
9
|
+
return null == content || '' === content;
|
|
10
|
+
}
|
|
11
|
+
function TicketOrderCard(props) {
|
|
12
|
+
const { moreText, showMore = true, routeItems = [], infoItems = [], feeItems = [], totalLabel, totalPrice, totalContent, primaryActionText, secondaryActionText, className, style, onClick, onMoreClick, onPrimaryActionClick, onSecondaryActionClick } = props;
|
|
13
|
+
const hasRouteItems = hasTemplateRouteSectionItems(routeItems);
|
|
14
|
+
const hasInfoSection = infoItems.length > 0 || feeItems.length > 0 || void 0 !== totalContent || !isTicketOrderTextEmpty(totalLabel) || !isTicketOrderTextEmpty(totalPrice);
|
|
15
|
+
const hasDefaultBody = hasRouteItems || hasInfoSection;
|
|
16
|
+
return <view className={useThemeClassName(clsx('doubao-ticket-order-card', className))} style={style} bindtap={onClick}>
|
|
17
|
+
<TemplateTitleBar moreText={moreText} showMore={showMore} onMoreClick={onMoreClick}/>
|
|
18
|
+
|
|
19
|
+
{hasDefaultBody ? <view className="doubao-ticket-order-card__body">
|
|
20
|
+
{hasRouteItems ? <TemplateRouteSection items={routeItems}/> : null}
|
|
21
|
+
{hasInfoSection ? <TemplateInfoSection infoItems={infoItems} feeItems={feeItems} totalLabel={totalLabel} totalPrice={totalPrice} totalContent={totalContent}/> : null}
|
|
22
|
+
</view> : null}
|
|
23
|
+
|
|
24
|
+
<TemplateActionBar secondaryActionText={secondaryActionText} primaryActionText={primaryActionText} onSecondaryActionClick={onSecondaryActionClick} onPrimaryActionClick={onPrimaryActionClick}/>
|
|
25
|
+
</view>;
|
|
26
|
+
}
|
|
27
|
+
export { TicketOrderCard };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
.doubao-ticket-order-card {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
background-color: var(--doubao-ticket-order-card-bg);
|
|
4
|
+
border: 1px solid var(--doubao-ticket-order-card-border);
|
|
5
|
+
border-radius: 8px;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
align-items: stretch;
|
|
8
|
+
width: 100%;
|
|
9
|
+
display: flex;
|
|
10
|
+
overflow: hidden;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.doubao-ticket-order-card__body {
|
|
14
|
+
box-sizing: border-box;
|
|
15
|
+
background-color: var(--doubao-ticket-order-card-bg);
|
|
16
|
+
width: 100%;
|
|
17
|
+
}
|
|
18
|
+
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { CSSProperties, TouchEvent } from '@lynx-js/types';
|
|
2
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import type { TemplateText } from '../types.js';
|
|
4
|
+
import './styles.scss';
|
|
5
|
+
export interface TransportCardProps {
|
|
6
|
+
/** 行程标题块内容。 */
|
|
7
|
+
title?: ReactNode;
|
|
8
|
+
/** 出发点主信息文案。 */
|
|
9
|
+
departureMain?: TemplateText;
|
|
10
|
+
/** 出发点补充信息文案。 */
|
|
11
|
+
departureSub?: TemplateText;
|
|
12
|
+
/** 中转区域整体块内容;优先级高于 transferTop、showTransferDot 和 transferBottom。 */
|
|
13
|
+
transfer?: ReactNode;
|
|
14
|
+
/** 中转区域上方文案。 */
|
|
15
|
+
transferTop?: TemplateText;
|
|
16
|
+
/** 是否展示中转箭头中间圆点。 */
|
|
17
|
+
showTransferDot?: boolean;
|
|
18
|
+
/** 中转区域下方文案。 */
|
|
19
|
+
transferBottom?: TemplateText;
|
|
20
|
+
/** 到达点主信息文案。 */
|
|
21
|
+
arrivalMain?: TemplateText;
|
|
22
|
+
/** 到达点日期偏移文案,例如 '+1'。 */
|
|
23
|
+
arrivalDayOffset?: TemplateText;
|
|
24
|
+
/** 到达点补充信息文案。 */
|
|
25
|
+
arrivalSub?: TemplateText;
|
|
26
|
+
/** 价格块内容。 */
|
|
27
|
+
price?: ReactNode;
|
|
28
|
+
/** 卡片根节点自定义类名。 */
|
|
29
|
+
className?: string;
|
|
30
|
+
/** 卡片根节点自定义样式。 */
|
|
31
|
+
style?: CSSProperties;
|
|
32
|
+
/** 点击卡片根节点时触发。 */
|
|
33
|
+
onClick?: (event: TouchEvent) => void;
|
|
34
|
+
}
|
|
35
|
+
export declare function TransportCard(props: TransportCardProps): ReactElement;
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useThemeClassName } from "@byted-doubao-apps/components";
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { TemplateTitleBar } from "../components/title-bar/index.js";
|
|
4
|
+
import { TemplateTransportSummary } from "../components/transport-summary/index.js";
|
|
5
|
+
import "./styles.css";
|
|
6
|
+
function TransportCard(props) {
|
|
7
|
+
const { title, departureMain, departureSub, transfer, transferTop, showTransferDot, transferBottom, arrivalMain, arrivalDayOffset, arrivalSub, price, className, style, onClick } = props;
|
|
8
|
+
return <view className={useThemeClassName(clsx('doubao-transport-card', className))} style={style} bindtap={onClick}>
|
|
9
|
+
<TemplateTitleBar/>
|
|
10
|
+
<view className="doubao-transport-card__body">
|
|
11
|
+
<TemplateTransportSummary className="doubao-transport-card__content" title={title} departureMain={departureMain} departureSub={departureSub} transfer={transfer} transferTop={transferTop} showTransferDot={showTransferDot} transferBottom={transferBottom} arrivalMain={arrivalMain} arrivalDayOffset={arrivalDayOffset} arrivalSub={arrivalSub} price={price}/>
|
|
12
|
+
</view>
|
|
13
|
+
</view>;
|
|
14
|
+
}
|
|
15
|
+
export { TransportCard };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.doubao-transport-card {
|
|
2
|
+
--doubao-transport-card-bg: var(--bg-base-1);
|
|
3
|
+
--doubao-transport-card-border: var(--bg-base-2-overlay);
|
|
4
|
+
box-sizing: border-box;
|
|
5
|
+
background-color: var(--doubao-transport-card-bg);
|
|
6
|
+
border: 1px solid var(--doubao-transport-card-border);
|
|
7
|
+
border-radius: 8px;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
align-items: stretch;
|
|
10
|
+
width: 100%;
|
|
11
|
+
display: flex;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.doubao-transport-card__body {
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
border-radius: 8px;
|
|
18
|
+
width: 100%;
|
|
19
|
+
height: 94px;
|
|
20
|
+
}
|
|
21
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { CSSProperties, TouchEvent } from '@lynx-js/types';
|
|
2
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
3
|
+
import type { TemplateKey, TemplateText } from '../types.js';
|
|
4
|
+
import './styles.scss';
|
|
5
|
+
export interface TransportListCardProps {
|
|
6
|
+
/** 标题栏右侧「更多」入口的文案。 */
|
|
7
|
+
moreText?: string;
|
|
8
|
+
/** 是否展示标题栏右侧「更多」入口。 */
|
|
9
|
+
showMore?: boolean;
|
|
10
|
+
/** 交通列表项。超过 4 条时只展示前 4 条,并展示「查看更多」按钮。 */
|
|
11
|
+
items?: TransportListCardItem[];
|
|
12
|
+
/** 列表超过 4 条时,底部「查看更多」按钮的文案。 */
|
|
13
|
+
viewMoreText?: string;
|
|
14
|
+
/** 卡片根节点自定义类名。 */
|
|
15
|
+
className?: string;
|
|
16
|
+
/** 卡片根节点自定义样式。 */
|
|
17
|
+
style?: CSSProperties;
|
|
18
|
+
/** 点击卡片根节点时触发。 */
|
|
19
|
+
onClick?: (event: TouchEvent) => void;
|
|
20
|
+
/** 点击标题栏右侧「更多」入口时触发。 */
|
|
21
|
+
onMoreClick?: (event: TouchEvent) => void;
|
|
22
|
+
/** 点击底部「查看更多」按钮时触发。 */
|
|
23
|
+
onViewMoreClick?: (event?: TouchEvent) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface TransportListCardItem {
|
|
26
|
+
/** 列表项唯一标识;不传时使用数组下标。 */
|
|
27
|
+
key?: TemplateKey;
|
|
28
|
+
/** 行程标题块内容。 */
|
|
29
|
+
title?: ReactNode;
|
|
30
|
+
/** 出发点主信息文案。 */
|
|
31
|
+
departureMain?: TemplateText;
|
|
32
|
+
/** 出发点补充信息文案。 */
|
|
33
|
+
departureSub?: TemplateText;
|
|
34
|
+
/** 中转区域整体块内容;优先级高于 transferTop 和 transferBottom。 */
|
|
35
|
+
transfer?: ReactNode;
|
|
36
|
+
/** 中转区域上方文案。 */
|
|
37
|
+
transferTop?: TemplateText;
|
|
38
|
+
/** 中转区域下方文案。 */
|
|
39
|
+
transferBottom?: TemplateText;
|
|
40
|
+
/** 到达点主信息文案。 */
|
|
41
|
+
arrivalMain?: TemplateText;
|
|
42
|
+
/** 到达点日期偏移文案,例如 '+1'。 */
|
|
43
|
+
arrivalDayOffset?: TemplateText;
|
|
44
|
+
/** 到达点补充信息文案。 */
|
|
45
|
+
arrivalSub?: TemplateText;
|
|
46
|
+
/** 价格块内容。 */
|
|
47
|
+
price?: ReactNode;
|
|
48
|
+
/** 列表项根节点自定义类名。 */
|
|
49
|
+
className?: string;
|
|
50
|
+
/** 列表项根节点自定义样式。 */
|
|
51
|
+
style?: CSSProperties;
|
|
52
|
+
/** 点击列表项时触发。 */
|
|
53
|
+
onClick?: (event: TouchEvent) => void;
|
|
54
|
+
}
|
|
55
|
+
export declare function TransportListCard(props: TransportListCardProps): ReactElement;
|
|
56
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Button, useThemeClassName } from "@byted-doubao-apps/components";
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { TemplateTitleBar } from "../components/title-bar/index.js";
|
|
4
|
+
import { TemplateTransportSummary } from "../components/transport-summary/index.js";
|
|
5
|
+
import "./styles.css";
|
|
6
|
+
function renderTransportListItem({ item, index, isLast }) {
|
|
7
|
+
return <view className={clsx('doubao-transport-list-card__item', isLast && 'doubao-transport-list-card__item--last', item.className)} style={item.style} key={item.key ?? index} {...null != item.onClick ? {
|
|
8
|
+
catchtap: item.onClick
|
|
9
|
+
} : {}}>
|
|
10
|
+
<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}/>
|
|
11
|
+
{!isLast ? <view className="doubao-transport-list-card__item--spread"/> : null}
|
|
12
|
+
</view>;
|
|
13
|
+
}
|
|
14
|
+
function TransportListCard(props) {
|
|
15
|
+
const { moreText, showMore = true, items = [], viewMoreText = '查看更多', className, style, onClick, onMoreClick, onViewMoreClick } = props;
|
|
16
|
+
const shouldShowViewMore = items.length > 4;
|
|
17
|
+
const visibleItems = shouldShowViewMore ? items.slice(0, 4) : items;
|
|
18
|
+
return <view className={useThemeClassName(clsx('doubao-transport-list-card', className))} style={style} bindtap={onClick}>
|
|
19
|
+
<TemplateTitleBar moreText={moreText} showMore={showMore} onMoreClick={onMoreClick}/>
|
|
20
|
+
<view className="doubao-transport-list-card__body">
|
|
21
|
+
{visibleItems.map((item, index)=>renderTransportListItem({
|
|
22
|
+
item,
|
|
23
|
+
index,
|
|
24
|
+
isLast: index === visibleItems.length - 1
|
|
25
|
+
}))}
|
|
26
|
+
{shouldShowViewMore ? <view className="doubao-transport-list-card__view-more">
|
|
27
|
+
<Button className="doubao-transport-list-card__view-more-button" type="default" text={viewMoreText} onClick={onViewMoreClick}/>
|
|
28
|
+
</view> : null}
|
|
29
|
+
</view>
|
|
30
|
+
</view>;
|
|
31
|
+
}
|
|
32
|
+
export { TransportListCard };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
.doubao-transport-list-card {
|
|
2
|
+
--doubao-transport-list-card-bg: var(--bg-base-1);
|
|
3
|
+
--doubao-transport-list-card-border: var(--bg-base-2-overlay);
|
|
4
|
+
--doubao-transport-list-card-divider: var(--neutral-transparent-1);
|
|
5
|
+
--doubao-transport-list-card-main-text: var(--neutral-100);
|
|
6
|
+
--doubao-transport-list-card-secondary-text: var(--neutral-50);
|
|
7
|
+
--doubao-transport-list-card-placeholder-bg: var(--bg-base-1-overlay);
|
|
8
|
+
--doubao-btn-border-radius: var(--doubao-transport-list-card-view-more-radius, 8px);
|
|
9
|
+
--doubao-btn-default-height: var(--doubao-transport-list-card-view-more-height, 44px);
|
|
10
|
+
--doubao-btn-default-padding-x: 12px;
|
|
11
|
+
--doubao-btn-default-padding-y: 0;
|
|
12
|
+
--doubao-btn-default-font-size: var(--doubao-transport-list-card-view-more-font-size, 16px);
|
|
13
|
+
--doubao-btn-default-line-height: var(--doubao-transport-list-card-view-more-line-height, 22px);
|
|
14
|
+
--doubao-btn-default-bg: var(--doubao-transport-list-card-view-more-bg, var(--bg-base-2-overlay));
|
|
15
|
+
--doubao-btn-default-text: var(--doubao-transport-list-card-view-more-text, var(--neutral-100));
|
|
16
|
+
box-sizing: border-box;
|
|
17
|
+
background-color: var(--doubao-transport-list-card-bg);
|
|
18
|
+
border: 1px solid var(--doubao-transport-list-card-border);
|
|
19
|
+
border-radius: 8px;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
align-items: stretch;
|
|
22
|
+
width: 100%;
|
|
23
|
+
display: flex;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.doubao-transport-list-card__body {
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
background-color: var(--doubao-transport-list-card-bg);
|
|
30
|
+
width: 100%;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.doubao-transport-list-card__item {
|
|
34
|
+
box-sizing: border-box;
|
|
35
|
+
width: 100%;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.doubao-transport-list-card__item--spread {
|
|
39
|
+
background: var(--doubao-transport-list-card-divider);
|
|
40
|
+
width: calc(100% - 12px);
|
|
41
|
+
height: .5px;
|
|
42
|
+
margin-left: 12px;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.doubao-transport-list-card__item--last {
|
|
46
|
+
border-bottom: none;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.doubao-transport-list-card__view-more {
|
|
50
|
+
box-sizing: border-box;
|
|
51
|
+
width: 100%;
|
|
52
|
+
padding: 8px 12px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.doubao-transport-list-card__view-more-button {
|
|
56
|
+
border-radius: 8px;
|
|
57
|
+
width: 100%;
|
|
58
|
+
height: 44px;
|
|
59
|
+
}
|
|
60
|
+
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
File without changes
|
package/dist/utils/app-info.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { getRuntimeManifest } from "@byted-doubao-apps/runtime-helpers";
|
|
2
1
|
function resolveIconSrc(icons) {
|
|
3
2
|
if ('string' == typeof icons) return icons.length > 0 ? icons : void 0;
|
|
4
3
|
return icons?.['3x'] || icons?.['2x'] || icons?.['1x'];
|
|
5
4
|
}
|
|
6
5
|
function getAppInfo() {
|
|
7
6
|
try {
|
|
8
|
-
const manifest =
|
|
7
|
+
const manifest = globalThis.__AI_MANIFEST__;
|
|
9
8
|
return {
|
|
10
9
|
appName: manifest.name || manifest.appId || manifest.package || '',
|
|
11
10
|
appIconSrc: resolveIconSrc(manifest.icons)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@doubao-apps/template",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.32",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -13,17 +13,13 @@
|
|
|
13
13
|
"types": "./dist/index.d.ts",
|
|
14
14
|
"files": [
|
|
15
15
|
"dist",
|
|
16
|
+
"assets",
|
|
16
17
|
"README.md",
|
|
17
18
|
"!dist/**/*.map"
|
|
18
19
|
],
|
|
19
20
|
"dependencies": {
|
|
20
21
|
"clsx": "2.1.1"
|
|
21
22
|
},
|
|
22
|
-
"peerDependencies": {
|
|
23
|
-
"@lynx-js/react": "^0.115.1",
|
|
24
|
-
"@lynx-js/types": "^3.6.0",
|
|
25
|
-
"@types/react": "^18"
|
|
26
|
-
},
|
|
27
23
|
"publishConfig": {
|
|
28
24
|
"access": "public",
|
|
29
25
|
"registry": "https://registry.npmjs.org/"
|