@twentyfirstmedia/ui-core 0.6.0 → 0.8.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.
- package/ICONS-LICENSE +24 -2
- package/dist/components/connected-data.d.ts +25 -0
- package/dist/components/connected-data.d.ts.map +1 -0
- package/dist/components/connected-data.js +264 -0
- package/dist/components/connected-data.js.map +1 -0
- package/dist/components/connectors.d.ts +22 -0
- package/dist/components/connectors.d.ts.map +1 -0
- package/dist/components/connectors.js +135 -0
- package/dist/components/connectors.js.map +1 -0
- package/dist/components/household.d.ts +19 -0
- package/dist/components/household.d.ts.map +1 -0
- package/dist/components/household.js +137 -0
- package/dist/components/household.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/life.d.ts +26 -0
- package/dist/components/life.d.ts.map +1 -0
- package/dist/components/life.js +187 -0
- package/dist/components/life.js.map +1 -0
- package/dist/components/types.d.ts +622 -0
- package/dist/components/types.d.ts.map +1 -1
- package/dist/context.d.ts +1 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2 -1
- package/dist/context.js.map +1 -1
- package/dist/format.d.ts +5 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +31 -0
- package/dist/format.js.map +1 -1
- package/dist/icon-library.d.ts +235 -4
- package/dist/icon-library.d.ts.map +1 -1
- package/dist/icon-library.js +467 -15
- package/dist/icon-library.js.map +1 -1
- package/dist/icons.d.ts +2 -0
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/strings.d.ts +184 -0
- package/dist/strings.d.ts.map +1 -1
- package/dist/strings.js +182 -1
- package/dist/strings.js.map +1 -1
- package/dist/themes.css +16438 -11238
- package/package.json +1 -1
- package/src/components/connected-data.tsx +783 -0
- package/src/components/connectors.tsx +426 -0
- package/src/components/household.tsx +489 -0
- package/src/components/index.ts +39 -0
- package/src/components/life.tsx +679 -0
- package/src/components/types.ts +602 -0
- package/src/context.ts +10 -1
- package/src/format.ts +33 -0
- package/src/icon-library.ts +476 -19
- package/src/icons.ts +2 -0
- package/src/index.ts +5 -0
- package/src/strings.ts +518 -0
package/ICONS-LICENSE
CHANGED
|
@@ -54,8 +54,8 @@ owners; use them according to each brand's guidelines.
|
|
|
54
54
|
|
|
55
55
|
---
|
|
56
56
|
|
|
57
|
-
The brand logos brandLinkedin, brandMicrosoft, brandWindows, brandSlack, brandSkype, brandAmazon
|
|
58
|
-
brandOpenai are from Font Awesome Free (https://fontawesome.com), whose icons are licensed under
|
|
57
|
+
The brand logos brandLinkedin, brandMicrosoft, brandWindows, brandSlack, brandSkype, brandAmazon,
|
|
58
|
+
brandOpenai, brandXbox and brandWaze are from Font Awesome Free (https://fontawesome.com), whose icons are licensed under
|
|
59
59
|
CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); attribution: "Font Awesome Free by
|
|
60
60
|
Fonticons, Inc.". They were rescaled to the kit's 24px grid. The logos are trademarks of their owners.
|
|
61
61
|
|
|
@@ -226,3 +226,25 @@ All brand icons are trademarks of their respective owners. The use of these
|
|
|
226
226
|
trademarks does not indicate endorsement of the trademark holder by Font
|
|
227
227
|
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
|
228
228
|
to represent the company, product, or service to which they refer.**
|
|
229
|
+
|
|
230
|
+
================================================================================
|
|
231
|
+
|
|
232
|
+
brandGooglefit, brandOutlook and brandTeams are from Material Design Icons
|
|
233
|
+
(https://pictogrammers.com/library/mdi/), Copyright (c) Pictogrammers, licensed under the
|
|
234
|
+
Apache License, Version 2.0 (https://www.apache.org/licenses/LICENSE-2.0). They are used as
|
|
235
|
+
published. The logos are trademarks of their owners.
|
|
236
|
+
|
|
237
|
+
================================================================================
|
|
238
|
+
|
|
239
|
+
brandApplehealth, brandApplefitness, brandApplehome, brandCareem, brandDoctolib, brandDreame,
|
|
240
|
+
brandDyson, brandEufy, brandGetsafe, brandHansemerkur, brandHole19, brandOttonova, brandOura,
|
|
241
|
+
brandPccaddie, brandScalable, brandTrackman, brandTraderepublic, brandWhoop, brandWithings and
|
|
242
|
+
brandWolt are drawn from the companies' own artwork (their websites and, for Apple, Apple's
|
|
243
|
+
marketing pages; Doctolib and WHOOP via Wikimedia Commons), reduced to one colour on the kit's
|
|
244
|
+
24px grid. Each source is listed in scripts/brands/index.json in the repository.
|
|
245
|
+
|
|
246
|
+
These logos are trademarks and copyrighted artwork of their owners. They are NOT covered by the
|
|
247
|
+
MIT License of this package. Use them only to refer to the company, product or service they
|
|
248
|
+
represent (for example to show that an app connects to it), do not alter them to suggest
|
|
249
|
+
endorsement, and follow each owner's brand guidelines. Owners who want a logo removed can open an
|
|
250
|
+
issue at https://github.com/twentyfirstmedia/ui and it will be taken out.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { CallLogProps, DeviceTileProps, HoldingsListProps, NowPlayingProps, ReservationCardProps, ScorecardProps, VehicleCardProps, WorkoutCardProps } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A smart-home device: its reading, state and the controls its kind needs (a switch, a
|
|
5
|
+
* thermostat stepper, quick actions), with battery and an offline state.
|
|
6
|
+
*/
|
|
7
|
+
export declare function DeviceTile(p: DeviceTileProps): React.JSX.Element;
|
|
8
|
+
/** An electric car: charge with its limit, range, charging, lock, climate and where it is. */
|
|
9
|
+
export declare function VehicleCard(p: VehicleCardProps): React.JSX.Element;
|
|
10
|
+
/** What is playing: cover, title, artist, where it plays, progress and the transport buttons. */
|
|
11
|
+
export declare function NowPlaying(p: NowPlayingProps): React.JSX.Element;
|
|
12
|
+
/** One workout: type, when, duration, distance, calories, heart rate and time in each zone. */
|
|
13
|
+
export declare function WorkoutCard(p: WorkoutCardProps): React.JSX.Element;
|
|
14
|
+
/** Your calls, newest first by day: who, which direction, how long, what it was about. */
|
|
15
|
+
export declare function CallLog(p: CallLogProps): React.JSX.Element;
|
|
16
|
+
/** A booking or order (stay, flight, train, ride, delivery, ticket) with its time, place, code and status. */
|
|
17
|
+
export declare function ReservationCard(p: ReservationCardProps): React.JSX.Element;
|
|
18
|
+
/**
|
|
19
|
+
* A round of golf as a scorecard: par and strokes per hole with the usual marks (circle for a
|
|
20
|
+
* birdie, square for a bogey), putts, Out, In and the total against par.
|
|
21
|
+
*/
|
|
22
|
+
export declare function Scorecard(p: ScorecardProps): React.JSX.Element;
|
|
23
|
+
/** Positions in a portfolio: value, change over a period in words and colour, and their share. */
|
|
24
|
+
export declare function HoldingsList(p: HoldingsListProps): React.JSX.Element;
|
|
25
|
+
//# sourceMappingURL=connected-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connected-data.d.ts","sourceRoot":"","sources":["../../src/components/connected-data.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkC/B,OAAO,KAAK,EACV,YAAY,EAEZ,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,cAAc,EAEd,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA6CpB;;;GAGG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,qBA+E5C;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,qBAkG9C;AAOD,iGAAiG;AACjG,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,qBAyE5C;AAID,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,qBA+D9C;AAaD,0FAA0F;AAC1F,wBAAgB,OAAO,CAAC,CAAC,EAAE,YAAY,qBA2EtC;AA2BD,8GAA8G;AAC9G,wBAAgB,eAAe,CAAC,CAAC,EAAE,oBAAoB,qBAoDtD;AAcD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,cAAc,qBAqH1C;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,CAAC,EAAE,iBAAiB,qBAmDhD"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cx } from "../cx.js";
|
|
5
|
+
import { useFormat, useStrings } from "../context.js";
|
|
6
|
+
import { CONNECTED_DATA_STRINGS } from "../strings.js";
|
|
7
|
+
import { Icon } from "../Icon.js";
|
|
8
|
+
import { registerIcons } from "../icons.js";
|
|
9
|
+
import { activity, battery, batteryCharging, bedDouble, carFront, cctv, circleDot, fan, lampCeiling, lockOpen, mapPin, phoneCall, phoneIncoming, phoneMissed, phoneOutgoing, plane, plug2, radar, skipBack, skipForward, thermometer, ticket, trainFront, } from "../icon-library.js";
|
|
10
|
+
import { Badge, Button, IconButton, TintIcon } from "./foundation.js";
|
|
11
|
+
import { Switch } from "./inputs.js";
|
|
12
|
+
import { ServiceMark } from "./connectors.js";
|
|
13
|
+
// default icons of these components come from the icon library
|
|
14
|
+
registerIcons({
|
|
15
|
+
activity,
|
|
16
|
+
battery,
|
|
17
|
+
batteryCharging,
|
|
18
|
+
bedDouble,
|
|
19
|
+
carFront,
|
|
20
|
+
cctv,
|
|
21
|
+
circleDot,
|
|
22
|
+
fan,
|
|
23
|
+
lampCeiling,
|
|
24
|
+
lockOpen,
|
|
25
|
+
mapPin,
|
|
26
|
+
phoneCall,
|
|
27
|
+
phoneIncoming,
|
|
28
|
+
phoneMissed,
|
|
29
|
+
phoneOutgoing,
|
|
30
|
+
plane,
|
|
31
|
+
plug2,
|
|
32
|
+
radar,
|
|
33
|
+
skipBack,
|
|
34
|
+
skipForward,
|
|
35
|
+
thermometer,
|
|
36
|
+
ticket,
|
|
37
|
+
trainFront,
|
|
38
|
+
});
|
|
39
|
+
function Source({ s }) {
|
|
40
|
+
if (!s)
|
|
41
|
+
return null;
|
|
42
|
+
return _jsx(ServiceMark, { name: s.name, icon: s.icon, logo: s.logo, size: "sm" });
|
|
43
|
+
}
|
|
44
|
+
const DEVICE_ICON = {
|
|
45
|
+
switch: "plug2",
|
|
46
|
+
light: "lampCeiling",
|
|
47
|
+
thermostat: "thermometer",
|
|
48
|
+
vacuum: "circleDot",
|
|
49
|
+
purifier: "fan",
|
|
50
|
+
camera: "cctv",
|
|
51
|
+
lock: "lock",
|
|
52
|
+
sensor: "radar",
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* A smart-home device: its reading, state and the controls its kind needs (a switch, a
|
|
56
|
+
* thermostat stepper, quick actions), with battery and an offline state.
|
|
57
|
+
*/
|
|
58
|
+
export function DeviceTile(p) {
|
|
59
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
60
|
+
const { formatNumber, formatPercent } = useFormat();
|
|
61
|
+
const kind = p.kind || "switch";
|
|
62
|
+
const step = p.step ?? 0.5;
|
|
63
|
+
const temp = (v) => formatNumber(v, { maximumFractionDigits: 1 }) + " °C";
|
|
64
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-device", "kind-" + kind, p.offline ? "is-offline" : p.on ? "is-on" : p.on === false && "is-off", p.className), children: [_jsxs("div", { className: "tf-device-head", children: [_jsx("span", { className: cx("tf-device-ico", p.on && !p.offline && "is-on"), "aria-hidden": true, children: _jsx(Icon, { name: p.icon || DEVICE_ICON[kind], size: 18 }) }), _jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.name }), p.room && _jsx("small", { children: p.room })] }), _jsx(Source, { s: p.service }), p.onToggle && !p.offline && (_jsx(Switch, { checked: !!p.on, label: p.name, onChange: (e) => p.onToggle?.(e.currentTarget.checked) }))] }), _jsxs("div", { className: "tf-device-body", children: [_jsx("span", { className: "tf-device-value", children: p.offline ? t.deviceOffline : (p.value ?? (p.on ? t.deviceOn : t.deviceOff)) }), p.status && !p.offline && _jsx("span", { className: "tf-device-status", children: p.status })] }), p.target != null && !p.offline && (_jsxs("div", { className: "tf-device-stepper", children: [p.onTarget && (_jsx(IconButton, { icon: "minus", label: t.lowerTarget, size: "sm", variant: "soft", onClick: () => p.onTarget?.(p.target - step) })), _jsx("span", { "aria-live": "polite", children: t.targetTemp(temp(p.target)) }), p.onTarget && (_jsx(IconButton, { icon: "plus", label: t.raiseTarget, size: "sm", variant: "soft", onClick: () => p.onTarget?.(p.target + step) }))] })), (p.battery != null || (p.actions && p.actions.length > 0)) && !p.offline && (_jsxs("div", { className: "tf-device-foot", children: [p.battery != null && (_jsxs("span", { className: cx("tf-device-battery", p.battery <= 15 && "is-low"), children: [_jsx(Icon, { name: "battery", size: 14 }), t.batteryLevel(formatPercent(p.battery))] })), p.actions?.map((a) => (_jsx(Button, { variant: "secondary", size: "sm", icon: a.icon, onClick: a.onClick, children: a.label }, a.label)))] }))] }));
|
|
65
|
+
}
|
|
66
|
+
/** An electric car: charge with its limit, range, charging, lock, climate and where it is. */
|
|
67
|
+
export function VehicleCard(p) {
|
|
68
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
69
|
+
const { formatNumber, formatPercent, formatDate } = useFormat();
|
|
70
|
+
const pct = Math.max(0, Math.min(100, p.battery));
|
|
71
|
+
const state = p.charging;
|
|
72
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-vehicle", p.className), children: [_jsxs("div", { className: "tf-vehicle-head", children: [_jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.name }), p.model && _jsx("small", { children: p.model })] }), _jsx(Source, { s: p.service })] }), _jsxs("div", { className: "tf-vehicle-charge", children: [_jsx("span", { className: "tf-vehicle-pct", children: formatPercent(pct) }), p.range != null && (_jsx("span", { className: "tf-vehicle-range", children: t.rangeLeft(formatNumber(p.range, { style: "unit", unit: "kilometer" })) }))] }), _jsxs("div", { className: "tf-vehicle-bar", children: [_jsx("div", { className: cx("tf-vehicle-fill", state === "charging" && "is-charging"), role: "progressbar", "aria-label": t.batteryLevel(formatPercent(pct)), "aria-valuemin": 0, "aria-valuemax": 100, "aria-valuenow": Math.round(pct), style: { width: pct + "%" } }), p.limit != null && (_jsx("span", { className: "tf-vehicle-limit", style: { left: p.limit + "%" }, "aria-hidden": true }))] }), _jsxs("p", { className: "tf-vehicle-line", children: [state && (_jsxs("span", { className: cx("tf-vehicle-state", "is-" + state), children: [_jsx(Icon, { name: state === "charging" ? "batteryCharging" : "battery", size: 14 }), t.chargingStates[state], state === "charging" && p.power != null && (_jsxs(_Fragment, { children: [" \u00B7 ", formatNumber(p.power, { maximumFractionDigits: 1 }) + " kW"] }))] })), state === "charging" && p.until != null && (_jsx("span", { children: t.chargedBy(formatDate(p.until, { hour: "numeric", minute: "2-digit" })) })), p.limit != null && _jsx("span", { children: t.chargeLimit(formatPercent(p.limit)) })] }), p.location && (_jsx("p", { className: "tf-vehicle-line", children: _jsxs("span", { children: [_jsx(Icon, { name: "mapPin", size: 14 }), p.location] }) })), _jsxs("div", { className: "tf-vehicle-controls", children: [p.locked != null && (_jsx(Button, { variant: "secondary", size: "sm", icon: p.locked ? "lock" : "lockOpen", "aria-pressed": p.locked, onClick: p.onLock ? () => p.onLock?.(!p.locked) : undefined, disabled: !p.onLock, children: t.lockAction })), p.climateOn != null && (_jsx(Button, { variant: "secondary", size: "sm", icon: "fan", "aria-pressed": p.climateOn, onClick: p.onClimate ? () => p.onClimate?.(!p.climateOn) : undefined, disabled: !p.onClimate, children: t.climateLabel })), _jsx("span", { className: "tf-vehicle-inside", children: [
|
|
73
|
+
p.locked != null ? (p.locked ? t.lockedState : t.unlockedState) : null,
|
|
74
|
+
p.climateOn != null ? (p.climateOn ? t.climateOnLabel : t.climateOffLabel) : null,
|
|
75
|
+
p.inside != null
|
|
76
|
+
? t.insideTemp(formatNumber(p.inside, { maximumFractionDigits: 0 }) + " °C")
|
|
77
|
+
: null,
|
|
78
|
+
]
|
|
79
|
+
.filter(Boolean)
|
|
80
|
+
.join(" · ") })] })] }));
|
|
81
|
+
}
|
|
82
|
+
function clock(sec) {
|
|
83
|
+
const s = Math.max(0, Math.round(sec));
|
|
84
|
+
return Math.floor(s / 60) + ":" + String(s % 60).padStart(2, "0");
|
|
85
|
+
}
|
|
86
|
+
/** What is playing: cover, title, artist, where it plays, progress and the transport buttons. */
|
|
87
|
+
export function NowPlaying(p) {
|
|
88
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
89
|
+
const pos = p.position ?? 0;
|
|
90
|
+
const dur = p.duration ?? 0;
|
|
91
|
+
const pct = dur ? Math.min(100, (pos / dur) * 100) : 0;
|
|
92
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-nowplaying", p.className), children: [_jsx("div", { className: "tf-nowplaying-art", "aria-hidden": !p.art, children: p.art || _jsx(Icon, { name: "play", size: 22 }) }), _jsxs("div", { className: "tf-nowplaying-main", children: [_jsxs("div", { className: "tf-nowplaying-head", children: [_jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.title }), (p.artist || p.album) && (_jsx("small", { children: [p.artist, p.album].filter(Boolean).join(" · ") }))] }), _jsx(Source, { s: p.service })] }), dur > 0 && (_jsxs("div", { className: "tf-nowplaying-progress", children: [_jsx("div", { className: "tf-nowplaying-bar", role: "progressbar", "aria-label": p.title, "aria-valuemin": 0, "aria-valuemax": Math.round(dur), "aria-valuenow": Math.round(pos), "aria-valuetext": `${clock(pos)} / ${clock(dur)}`, children: _jsx("span", { style: { width: pct + "%" } }) }), _jsxs("span", { className: "tf-nowplaying-times", "aria-hidden": true, children: [_jsx("span", { children: clock(pos) }), _jsx("span", { children: clock(dur) })] })] })), _jsxs("div", { className: "tf-nowplaying-foot", children: [p.device && _jsx("span", { className: "tf-nowplaying-device", children: t.playingOn(p.device) }), _jsxs("span", { className: "tf-nowplaying-controls", children: [p.onPrevious && (_jsx(IconButton, { icon: "skipBack", label: t.previousTrack, size: "sm", variant: "ghost", onClick: p.onPrevious })), p.onPlayPause && (_jsx(IconButton, { icon: p.playing ? "pause" : "play", label: p.playing ? t.pauseAction : t.playAction, variant: "solid", onClick: p.onPlayPause })), p.onNext && (_jsx(IconButton, { icon: "skipForward", label: t.nextTrack, size: "sm", variant: "ghost", onClick: p.onNext }))] })] })] })] }));
|
|
93
|
+
}
|
|
94
|
+
const ZONE_FILL = ["sky", "mint", "butter", "lilac", "blush"];
|
|
95
|
+
/** One workout: type, when, duration, distance, calories, heart rate and time in each zone. */
|
|
96
|
+
export function WorkoutCard(p) {
|
|
97
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
98
|
+
const { formatNumber, formatDate } = useFormat();
|
|
99
|
+
const zones = p.zones || [];
|
|
100
|
+
const zoneTotal = zones.reduce((a, b) => a + b, 0);
|
|
101
|
+
const stats = [
|
|
102
|
+
[t.durationLabel, t.durationHm(Math.floor(p.duration / 60), Math.round(p.duration % 60))],
|
|
103
|
+
];
|
|
104
|
+
if (p.distance != null)
|
|
105
|
+
stats.push([
|
|
106
|
+
t.distanceLabel,
|
|
107
|
+
formatNumber(p.distance, { style: "unit", unit: "kilometer", maximumFractionDigits: 1 }),
|
|
108
|
+
]);
|
|
109
|
+
if (p.calories != null)
|
|
110
|
+
stats.push([t.caloriesLabel, formatNumber(p.calories) + " kcal"]);
|
|
111
|
+
if (p.heartRate != null)
|
|
112
|
+
stats.push([t.avgHeartRate, formatNumber(p.heartRate) + " bpm"]);
|
|
113
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-workout", p.className), children: [_jsxs("div", { className: "tf-workout-head", children: [_jsx(TintIcon, { icon: p.icon || "activity", tint: "mint", size: 36 }), _jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.type }), _jsx("small", { children: formatDate(p.date, {
|
|
114
|
+
weekday: "short",
|
|
115
|
+
day: "numeric",
|
|
116
|
+
month: "short",
|
|
117
|
+
hour: "numeric",
|
|
118
|
+
minute: "2-digit",
|
|
119
|
+
}) })] }), _jsx(Source, { s: p.service })] }), _jsx("dl", { className: "tf-workout-stats", children: stats.map(([k, v]) => (_jsxs("div", { children: [_jsx("dt", { children: k }), _jsx("dd", { children: v })] }, k))) }), zoneTotal > 0 && (_jsxs("div", { className: "tf-workout-zones", children: [_jsx("span", { className: "tf-workout-zones-title", children: t.heartRateZones }), _jsx("div", { className: "tf-workout-zonebar", "aria-hidden": true, children: zones.map((m, i) => m > 0 ? (_jsx("span", { className: "tf-sf-" + ZONE_FILL[i % 5], style: { flexGrow: m } }, i)) : null) }), _jsx("ul", { className: "tf-workout-legend", children: zones.map((m, i) => (_jsxs("li", { children: [_jsx("i", { className: "tf-sf-" + ZONE_FILL[i % 5], "aria-hidden": true }), t.zoneMinutes(i + 1, Math.round(m))] }, i))) })] }))] }));
|
|
120
|
+
}
|
|
121
|
+
const DAY = 86400000;
|
|
122
|
+
function dayStart(v) {
|
|
123
|
+
const d = new Date(v);
|
|
124
|
+
return Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
|
|
125
|
+
}
|
|
126
|
+
const CALL_ICON = {
|
|
127
|
+
incoming: "phoneIncoming",
|
|
128
|
+
outgoing: "phoneOutgoing",
|
|
129
|
+
missed: "phoneMissed",
|
|
130
|
+
};
|
|
131
|
+
/** Your calls, newest first by day: who, which direction, how long, what it was about. */
|
|
132
|
+
export function CallLog(p) {
|
|
133
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
134
|
+
const { formatDate, locale } = useFormat();
|
|
135
|
+
const now = p.now ?? Date.now();
|
|
136
|
+
const sorted = [...p.calls].sort((a, b) => +new Date(b.at) - +new Date(a.at));
|
|
137
|
+
const groups = [];
|
|
138
|
+
for (const c of sorted) {
|
|
139
|
+
const k = dayStart(c.at);
|
|
140
|
+
const last = groups[groups.length - 1];
|
|
141
|
+
if (last && last.key === k)
|
|
142
|
+
last.items.push(c);
|
|
143
|
+
else
|
|
144
|
+
groups.push({ key: k, items: [c] });
|
|
145
|
+
}
|
|
146
|
+
const heading = (k, sample) => {
|
|
147
|
+
const diff = Math.round((k - dayStart(now)) / DAY);
|
|
148
|
+
if (diff === 0 || diff === -1) {
|
|
149
|
+
try {
|
|
150
|
+
const w = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }).format(diff, "day");
|
|
151
|
+
return w.charAt(0).toLocaleUpperCase(locale) + w.slice(1);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
/* fall through to the date */
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return formatDate(sample, { weekday: "long", day: "numeric", month: "long" });
|
|
158
|
+
};
|
|
159
|
+
const length = (s) => t.durationHm(Math.floor(s / 3600), Math.max(1, Math.round((s % 3600) / 60)));
|
|
160
|
+
return (_jsx("div", { style: p.style, className: cx("tf-calls", p.className), children: groups.map((g) => (_jsxs("section", { className: "tf-calls-day", "aria-label": heading(g.key, g.items[0].at), children: [_jsx("h3", { className: "tf-agentlog-title", "aria-hidden": true, children: heading(g.key, g.items[0].at) }), _jsx("ul", { "aria-label": p.label || t.calls, children: g.items.map((c) => (_jsxs("li", { className: cx("tf-call", "is-" + c.direction), children: [_jsx("span", { className: "tf-call-ico", "aria-hidden": true, children: _jsx(Icon, { name: CALL_ICON[c.direction], size: 15 }) }), _jsxs("div", { className: "tf-call-main", children: [p.onOpen ? (_jsx("button", { type: "button", className: "tf-call-name", onClick: () => p.onOpen?.(c.id), children: c.name })) : (_jsx("b", { className: "tf-call-name", children: c.name })), _jsx("span", { className: "tf-call-meta", children: [
|
|
161
|
+
t.callDirections[c.direction],
|
|
162
|
+
formatDate(c.at, { hour: "numeric", minute: "2-digit" }),
|
|
163
|
+
c.direction !== "missed" && c.duration ? length(c.duration) : null,
|
|
164
|
+
c.number,
|
|
165
|
+
]
|
|
166
|
+
.filter(Boolean)
|
|
167
|
+
.join(" · ") }), c.summary && _jsx("p", { className: "tf-call-summary", children: c.summary })] }), p.onCall && (_jsx(IconButton, { icon: "phoneCall", label: t.callPerson(c.name), size: "sm", variant: "soft", onClick: () => p.onCall?.(c.id) }))] }, c.id))) })] }, g.key))) }));
|
|
168
|
+
}
|
|
169
|
+
const RES_ICON = {
|
|
170
|
+
stay: "bedDouble",
|
|
171
|
+
flight: "plane",
|
|
172
|
+
train: "trainFront",
|
|
173
|
+
ride: "carFront",
|
|
174
|
+
order: "package",
|
|
175
|
+
event: "ticket",
|
|
176
|
+
};
|
|
177
|
+
const RES_TINT = {
|
|
178
|
+
stay: "lilac",
|
|
179
|
+
flight: "sky",
|
|
180
|
+
train: "mint",
|
|
181
|
+
ride: "butter",
|
|
182
|
+
order: "butter",
|
|
183
|
+
event: "blush",
|
|
184
|
+
};
|
|
185
|
+
const RES_TONE = {
|
|
186
|
+
confirmed: "success",
|
|
187
|
+
pending: "neutral",
|
|
188
|
+
cancelled: "danger",
|
|
189
|
+
delayed: "warning",
|
|
190
|
+
onTheWay: "info",
|
|
191
|
+
delivered: "success",
|
|
192
|
+
};
|
|
193
|
+
/** A booking or order (stay, flight, train, ride, delivery, ticket) with its time, place, code and status. */
|
|
194
|
+
export function ReservationCard(p) {
|
|
195
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
196
|
+
const { formatDate } = useFormat();
|
|
197
|
+
const day = { weekday: "short", day: "numeric", month: "short" };
|
|
198
|
+
const time = { hour: "numeric", minute: "2-digit" };
|
|
199
|
+
const sameDay = p.end != null && dayStart(p.start) === dayStart(p.end);
|
|
200
|
+
const when = p.kind === "stay" && p.end != null
|
|
201
|
+
? `${formatDate(p.start, day)} – ${formatDate(p.end, day)}`
|
|
202
|
+
: p.end != null
|
|
203
|
+
? sameDay
|
|
204
|
+
? `${formatDate(p.start, day)}, ${formatDate(p.start, time)} – ${formatDate(p.end, time)}`
|
|
205
|
+
: `${formatDate(p.start, { ...day, ...time })} – ${formatDate(p.end, { ...day, ...time })}`
|
|
206
|
+
: formatDate(p.start, { ...day, ...time });
|
|
207
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-booking", "kind-" + p.kind, p.status && "is-" + p.status, p.className), children: [_jsxs("div", { className: "tf-booking-head", children: [_jsx(TintIcon, { icon: RES_ICON[p.kind], tint: RES_TINT[p.kind], size: 36 }), _jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.title }), p.subtitle && _jsx("small", { children: p.subtitle })] }), _jsx(Source, { s: p.service })] }), _jsx("p", { className: "tf-booking-when", children: when }), p.place && (_jsxs("p", { className: "tf-booking-place", children: [_jsx(Icon, { name: "mapPin", size: 14 }), p.place] })), (p.status || p.code) && (_jsxs("div", { className: "tf-booking-foot", children: [p.status && (_jsxs(Badge, { tone: RES_TONE[p.status], dot: true, children: [t.reservationStatus[p.status], p.statusText && " · " + p.statusText] })), p.code && (_jsxs("span", { className: "tf-booking-code", children: [t.bookingCode, " ", _jsx("b", { children: p.code })] }))] })), p.actions && _jsx("div", { className: "tf-booking-actions", children: p.actions })] }));
|
|
208
|
+
}
|
|
209
|
+
function scoreName(diff) {
|
|
210
|
+
return diff <= -2
|
|
211
|
+
? "eagle"
|
|
212
|
+
: diff === -1
|
|
213
|
+
? "birdie"
|
|
214
|
+
: diff === 0
|
|
215
|
+
? "par"
|
|
216
|
+
: diff === 1
|
|
217
|
+
? "bogey"
|
|
218
|
+
: "double";
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* A round of golf as a scorecard: par and strokes per hole with the usual marks (circle for a
|
|
222
|
+
* birdie, square for a bogey), putts, Out, In and the total against par.
|
|
223
|
+
*/
|
|
224
|
+
export function Scorecard(p) {
|
|
225
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
226
|
+
const { formatDate } = useFormat();
|
|
227
|
+
const halves = p.holes.length > 9 ? [p.holes.slice(0, 9), p.holes.slice(9)] : [p.holes];
|
|
228
|
+
const sum = (hs, k) => hs.reduce((a, h) => a + (h[k] ?? 0), 0);
|
|
229
|
+
const played = p.holes.filter((h) => h.strokes != null);
|
|
230
|
+
const strokes = sum(played, "strokes");
|
|
231
|
+
const parPlayed = sum(played, "par");
|
|
232
|
+
const hasPutts = p.holes.some((h) => h.putts != null);
|
|
233
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-scorecard", p.className), children: [_jsxs("div", { className: "tf-scorecard-head", children: [_jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: p.course }), _jsx("small", { children: [
|
|
234
|
+
p.date != null
|
|
235
|
+
? formatDate(p.date, { day: "numeric", month: "short", year: "numeric" })
|
|
236
|
+
: null,
|
|
237
|
+
p.tee,
|
|
238
|
+
]
|
|
239
|
+
.filter(Boolean)
|
|
240
|
+
.join(" · ") })] }), _jsx(Source, { s: p.service }), _jsxs("span", { className: "tf-scorecard-total", children: [_jsx("b", { children: strokes }), _jsx("small", { children: t.toPar(strokes - parPlayed) })] })] }), halves.map((hs, half) => {
|
|
241
|
+
const first = half * 9;
|
|
242
|
+
return (_jsx("div", { className: "tf-scorecard-scroll", children: _jsxs("table", { className: "tf-scorecard-table", children: [_jsxs("caption", { className: "tf-sidebar-sr", children: [p.course, " ", half ? t.scoreLabels.in : t.scoreLabels.out] }), _jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "row", children: t.scoreLabels.hole }), hs.map((_, i) => (_jsx("th", { scope: "col", children: first + i + 1 }, i))), _jsx("th", { scope: "col", children: half
|
|
243
|
+
? t.scoreLabels.in
|
|
244
|
+
: halves.length > 1
|
|
245
|
+
? t.scoreLabels.out
|
|
246
|
+
: t.scoreLabels.total }), half === 1 && _jsx("th", { scope: "col", children: t.scoreLabels.total })] }) }), _jsxs("tbody", { children: [_jsxs("tr", { className: "tf-scorecard-par", children: [_jsx("th", { scope: "row", children: t.scoreLabels.par }), hs.map((h, i) => (_jsx("td", { children: h.par }, i))), _jsx("td", { children: sum(hs, "par") }), half === 1 && _jsx("td", { children: sum(p.holes, "par") })] }), _jsxs("tr", { children: [_jsx("th", { scope: "row", children: t.scoreLabels.score }), hs.map((h, i) => {
|
|
247
|
+
if (h.strokes == null)
|
|
248
|
+
return _jsx("td", {}, i);
|
|
249
|
+
const n = scoreName(h.strokes - h.par);
|
|
250
|
+
return (_jsxs("td", { children: [_jsx("span", { className: cx("tf-score", "is-" + n), "aria-hidden": true, children: h.strokes }), _jsxs("span", { className: "tf-sidebar-sr", children: [h.strokes, ", ", t.scoreNames[n]] })] }, i));
|
|
251
|
+
}), _jsx("td", { children: _jsx("b", { children: sum(hs, "strokes") }) }), half === 1 && (_jsx("td", { children: _jsx("b", { children: strokes }) }))] }), hasPutts && (_jsxs("tr", { className: "tf-scorecard-putts", children: [_jsx("th", { scope: "row", children: t.scoreLabels.putts }), hs.map((h, i) => (_jsx("td", { children: h.putts ?? "" }, i))), _jsx("td", { children: sum(hs, "putts") }), half === 1 && _jsx("td", { children: sum(p.holes, "putts") })] }))] })] }) }, half));
|
|
252
|
+
}), _jsx("ul", { className: "tf-scorecard-legend", "aria-hidden": true, children: ["eagle", "birdie", "bogey", "double"].map((n) => (_jsxs("li", { children: [_jsx("span", { className: cx("tf-score", "is-" + n), children: " " }), t.scoreNames[n]] }, n))) })] }));
|
|
253
|
+
}
|
|
254
|
+
/** Positions in a portfolio: value, change over a period in words and colour, and their share. */
|
|
255
|
+
export function HoldingsList(p) {
|
|
256
|
+
const t = useStrings(CONNECTED_DATA_STRINGS);
|
|
257
|
+
const { formatMoney, formatPercent } = useFormat();
|
|
258
|
+
return (_jsx("ul", { style: p.style, className: cx("tf-holdings", p.className), "aria-label": p.label || t.holdings, children: p.holdings.map((h) => {
|
|
259
|
+
const dir = h.change == null || h.change === 0 ? "flat" : h.change > 0 ? "up" : "down";
|
|
260
|
+
const body = (_jsxs(_Fragment, { children: [_jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: h.name }), h.symbol && _jsx("small", { children: h.symbol })] }), _jsxs("span", { className: "tf-holding-nums", children: [_jsx("b", { children: formatMoney(h.value, p.currency, { maximumFractionDigits: 0 }) }), h.change != null && (_jsxs("small", { className: cx("tf-holding-change", "is-" + dir), children: [dir !== "flat" && _jsx(Icon, { name: "arrowUp", size: 11 }), formatPercent(h.change, { signDisplay: "exceptZero", maximumFractionDigits: 1 }), p.period && " " + p.period] }))] }), h.weight != null && (_jsxs("span", { className: "tf-holding-weight", children: [_jsx("span", { className: "tf-holding-bar", "aria-hidden": true, children: _jsx("span", { style: { width: Math.min(100, h.weight) + "%" } }) }), _jsx("small", { children: t.portfolioShare(formatPercent(h.weight)) })] }))] }));
|
|
261
|
+
return (_jsx("li", { children: p.onSelect ? (_jsx("button", { type: "button", className: "tf-holding", onClick: () => p.onSelect?.(h.id), children: body })) : (_jsx("div", { className: "tf-holding", children: body })) }, h.id));
|
|
262
|
+
}) }));
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=connected-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connected-data.js","sourceRoot":"","sources":["../../src/components/connected-data.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { ConnectionListProps, AgentActivityProps, ConnectorGalleryProps, ServiceMarkProps, SyncStatusProps } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* A service's mark: its brand logo, your own logo, or a monogram when neither exists, with an
|
|
5
|
+
* optional state dot. Use it wherever a connected service appears (lists, chips, activity).
|
|
6
|
+
*/
|
|
7
|
+
export declare function ServiceMark(p: ServiceMarkProps): React.JSX.Element;
|
|
8
|
+
/**
|
|
9
|
+
* Every service an assistant can connect to, grouped by category, with search and category chips.
|
|
10
|
+
* Each tile says whether the service is connected, needs a reconnect or comes later.
|
|
11
|
+
*/
|
|
12
|
+
export declare function ConnectorGallery(p: ConnectorGalleryProps): React.JSX.Element;
|
|
13
|
+
/** When a connected service last synced, what it brought and when it syncs next. */
|
|
14
|
+
export declare function SyncStatus(p: SyncStatusProps): React.JSX.Element;
|
|
15
|
+
/**
|
|
16
|
+
* What agents did with your connected services, newest first and grouped by day: what they read,
|
|
17
|
+
* what they changed and what waits for your approval, with "Undo" where it can be undone.
|
|
18
|
+
*/
|
|
19
|
+
export declare function AgentActivity(p: AgentActivityProps): React.JSX.Element;
|
|
20
|
+
/** The services you are connected to: account, state, how fresh the data is, and Manage. */
|
|
21
|
+
export declare function ConnectionList(p: ConnectionListProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=connectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.d.ts","sourceRoot":"","sources":["../../src/components/connectors.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAElB,qBAAqB,EAErB,gBAAgB,EAChB,eAAe,EAChB,MAAM,YAAY,CAAC;AAYpB;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,gBAAgB,qBA+B9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,qBAAqB,qBA0DxD;AAkFD,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,qBA6D5C;AAQD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,kBAAkB,qBAwFlD;AAED,4FAA4F;AAC5F,wBAAgB,cAAc,CAAC,CAAC,EAAE,mBAAmB,qBAgDpD"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cx, initials } from "../cx.js";
|
|
5
|
+
import { useFormat, useStrings } from "../context.js";
|
|
6
|
+
import { CONNECTOR_STRINGS } from "../strings.js";
|
|
7
|
+
import { Icon } from "../Icon.js";
|
|
8
|
+
import { iconData, registerIcons } from "../icons.js";
|
|
9
|
+
import { refreshCwOff } from "../icon-library.js";
|
|
10
|
+
import { Badge, Button, Chip } from "./foundation.js";
|
|
11
|
+
import { SearchField } from "./inputs.js";
|
|
12
|
+
import { EmptyState } from "./feedback.js";
|
|
13
|
+
// default icons of these components come from the icon library
|
|
14
|
+
registerIcons({ refreshCwOff });
|
|
15
|
+
const MARK_SIZE = { sm: 14, md: 20, lg: 26 };
|
|
16
|
+
function isWide(name) {
|
|
17
|
+
const d = iconData(name);
|
|
18
|
+
return typeof d === "object" && d.wide === true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A service's mark: its brand logo, your own logo, or a monogram when neither exists, with an
|
|
22
|
+
* optional state dot. Use it wherever a connected service appears (lists, chips, activity).
|
|
23
|
+
*/
|
|
24
|
+
export function ServiceMark(p) {
|
|
25
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
26
|
+
const size = p.size || "md";
|
|
27
|
+
const label = p.status ? `${p.name}, ${t.serviceStates[p.status]}` : p.name;
|
|
28
|
+
return (_jsxs("span", { style: p.style, className: cx("tf-svc", "tf-svc-" + size, "tf-t-" + (p.tint || "plain"), !p.icon && !p.logo && "is-monogram", p.className), role: p.decorative ? undefined : "img", "aria-label": p.decorative ? undefined : label, "aria-hidden": p.decorative ? true : undefined, children: [p.logo ||
|
|
29
|
+
(p.icon ? (isWide(p.icon) ? (_jsx(Icon, { name: p.icon, style: { width: "88%", height: "88%" } })) : (_jsx(Icon, { name: p.icon, size: MARK_SIZE[size] }))) : (_jsx("span", { className: "tf-svc-mono", children: (p.monogram || initials(p.name)).slice(0, 2) }))), p.status && _jsx("span", { className: cx("tf-svc-dot", "is-" + p.status) })] }));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Every service an assistant can connect to, grouped by category, with search and category chips.
|
|
33
|
+
* Each tile says whether the service is connected, needs a reconnect or comes later.
|
|
34
|
+
*/
|
|
35
|
+
export function ConnectorGallery(p) {
|
|
36
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
37
|
+
const [query, setQuery] = React.useState("");
|
|
38
|
+
const [category, setCategory] = React.useState(null);
|
|
39
|
+
const order = React.useMemo(() => {
|
|
40
|
+
const seen = [...(p.categories || [])];
|
|
41
|
+
for (const c of p.connectors)
|
|
42
|
+
if (!seen.includes(c.category))
|
|
43
|
+
seen.push(c.category);
|
|
44
|
+
return seen.filter((c) => p.connectors.some((x) => x.category === c));
|
|
45
|
+
}, [p.connectors, p.categories]);
|
|
46
|
+
const q = query.trim().toLowerCase();
|
|
47
|
+
const shown = p.connectors.filter((c) => (!category || c.category === category) &&
|
|
48
|
+
(!q || c.name.toLowerCase().includes(q) || c.category.toLowerCase().includes(q)));
|
|
49
|
+
const filters = p.filters !== false;
|
|
50
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-connectors", p.className), children: [filters && (_jsxs("div", { className: "tf-connectors-filters", children: [_jsx(SearchField, { label: t.searchConnectors, placeholder: t.searchConnectors, value: query, onChange: (e) => setQuery(e.currentTarget.value) }), _jsxs("div", { className: "tf-connectors-chips", role: "group", "aria-label": t.connectors, children: [_jsx(Chip, { selected: !category, onClick: () => setCategory(null), children: t.allCategories }), order.map((c) => (_jsx(Chip, { selected: category === c, onClick: () => setCategory(c), children: c }, c)))] })] })), shown.length === 0 ? (_jsx(EmptyState, { icon: "search", title: t.noConnectorMatch(query.trim()) })) : (order
|
|
51
|
+
.filter((c) => shown.some((x) => x.category === c))
|
|
52
|
+
.map((c) => (_jsxs("section", { className: "tf-connectors-group", "aria-label": c, children: [_jsx("h3", { className: "tf-connectors-title", children: c }), _jsx("ul", { className: "tf-connectors-grid", children: shown
|
|
53
|
+
.filter((x) => x.category === c)
|
|
54
|
+
.map((x) => (_jsx(ConnectorTile, { c: x, onConnect: p.onConnect, onOpen: p.onOpen }, x.id))) })] }, c))))] }));
|
|
55
|
+
}
|
|
56
|
+
function ConnectorTile({ c, onConnect, onOpen, }) {
|
|
57
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
58
|
+
const state = c.state || "available";
|
|
59
|
+
return (_jsxs("li", { className: cx("tf-connector", "is-" + state), children: [_jsxs("div", { className: "tf-connector-head", children: [_jsx(ServiceMark, { name: c.name, icon: c.icon, logo: c.logo, monogram: c.monogram, tint: c.tint, status: state === "connected" ? "connected" : state === "error" ? "error" : undefined, decorative: true }), _jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: c.name }), c.account && _jsx("small", { children: c.account })] })] }), c.description && _jsx("p", { className: "tf-connector-desc", children: c.description }), c.note && _jsx("p", { className: "tf-connector-note", children: c.note }), _jsxs("div", { className: "tf-connector-foot", children: [state === "connected" && (_jsxs(_Fragment, { children: [_jsx(Badge, { tone: "success", dot: true, children: t.serviceStates.connected }), onOpen && (_jsx(Button, { variant: "ghost", size: "sm", "aria-label": t.openService(c.name), onClick: () => onOpen(c.id), children: t.openAction }))] })), state === "error" && (_jsxs(_Fragment, { children: [_jsx(Badge, { tone: "danger", dot: true, children: t.serviceStates.error }), _jsx(Button, { variant: "secondary", size: "sm", "aria-label": t.reconnectService(c.name), onClick: () => (onOpen || onConnect)?.(c.id), children: t.reconnect })] })), state === "soon" && _jsx(Badge, { tone: "neutral", children: t.comingSoon }), state === "available" && (_jsx(Button, { variant: "secondary", size: "sm", icon: "plus", "aria-label": t.connectService(c.name), onClick: () => onConnect?.(c.id), children: t.connect }))] })] }));
|
|
60
|
+
}
|
|
61
|
+
/** When a connected service last synced, what it brought and when it syncs next. */
|
|
62
|
+
export function SyncStatus(p) {
|
|
63
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
64
|
+
const { formatRelative, formatNumber } = useFormat();
|
|
65
|
+
const now = p.now ?? Date.now();
|
|
66
|
+
const text = p.state === "syncing"
|
|
67
|
+
? t.syncingNow
|
|
68
|
+
: p.state === "error"
|
|
69
|
+
? t.syncFailed
|
|
70
|
+
: p.state === "paused"
|
|
71
|
+
? t.syncPaused
|
|
72
|
+
: p.state === "never" || p.last == null
|
|
73
|
+
? t.neverSynced
|
|
74
|
+
: t.syncedAgo(formatRelative(p.last, now));
|
|
75
|
+
const icon = p.state === "error"
|
|
76
|
+
? "x"
|
|
77
|
+
: p.state === "paused"
|
|
78
|
+
? "pause"
|
|
79
|
+
: p.state === "never"
|
|
80
|
+
? "refreshCwOff"
|
|
81
|
+
: p.state === "syncing"
|
|
82
|
+
? "refresh"
|
|
83
|
+
: "check";
|
|
84
|
+
return (_jsxs("div", { style: p.style, className: cx("tf-sync", "is-" + p.state, p.compact && "compact", p.className), role: "status", children: [_jsxs("div", { className: "tf-sync-line", children: [_jsx("span", { className: "tf-sync-icon", "aria-hidden": true, children: _jsx(Icon, { name: icon, size: 14 }) }), _jsxs("span", { className: "tf-sync-text", children: [text, p.state === "error" && p.last != null && !p.compact && (_jsxs("small", { children: [" \u00B7 ", t.syncedAgo(formatRelative(p.last, now))] }))] }), !p.compact && p.next != null && p.state !== "paused" && p.state !== "syncing" && (_jsx("small", { className: "tf-sync-next", children: t.nextSync(formatRelative(p.next, now)) })), p.onSync && p.state !== "syncing" && (_jsx(Button, { variant: "ghost", size: "sm", icon: "refresh", onClick: p.onSync, children: t.syncNow }))] }), !p.compact && p.error && _jsx("p", { className: "tf-sync-error", children: p.error }), !p.compact && p.counts && p.counts.length > 0 && (_jsx("ul", { className: "tf-sync-counts", children: p.counts.map((c) => (_jsxs("li", { children: [_jsx("b", { children: formatNumber(c.value) }), " ", c.label] }, c.label))) }))] }));
|
|
85
|
+
}
|
|
86
|
+
const DAY = 86400000;
|
|
87
|
+
function dayStart(v) {
|
|
88
|
+
const d = new Date(v);
|
|
89
|
+
return Date.UTC(d.getFullYear(), d.getMonth(), d.getDate());
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* What agents did with your connected services, newest first and grouped by day: what they read,
|
|
93
|
+
* what they changed and what waits for your approval, with "Undo" where it can be undone.
|
|
94
|
+
*/
|
|
95
|
+
export function AgentActivity(p) {
|
|
96
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
97
|
+
const { formatDate, locale } = useFormat();
|
|
98
|
+
const now = p.now ?? Date.now();
|
|
99
|
+
const sorted = [...p.items].sort((a, b) => +new Date(b.at) - +new Date(a.at));
|
|
100
|
+
const groups = [];
|
|
101
|
+
for (const it of sorted) {
|
|
102
|
+
const k = dayStart(it.at);
|
|
103
|
+
const last = groups[groups.length - 1];
|
|
104
|
+
if (last && last.key === k)
|
|
105
|
+
last.items.push(it);
|
|
106
|
+
else
|
|
107
|
+
groups.push({ key: k, items: [it] });
|
|
108
|
+
}
|
|
109
|
+
const heading = (k, sample) => {
|
|
110
|
+
const diff = Math.round((k - dayStart(now)) / DAY);
|
|
111
|
+
if (diff === 0 || diff === -1) {
|
|
112
|
+
try {
|
|
113
|
+
const w = new Intl.RelativeTimeFormat(locale, { numeric: "auto" }).format(diff, "day");
|
|
114
|
+
return w.charAt(0).toLocaleUpperCase(locale) + w.slice(1);
|
|
115
|
+
}
|
|
116
|
+
catch {
|
|
117
|
+
/* fall through to the date */
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return formatDate(sample, { weekday: "long", day: "numeric", month: "long" });
|
|
121
|
+
};
|
|
122
|
+
return (_jsx("div", { style: p.style, className: cx("tf-agentlog", p.className), children: groups.map((g) => (_jsxs("section", { className: "tf-agentlog-day", "aria-label": heading(g.key, g.items[0].at), children: [_jsx("h3", { className: "tf-agentlog-title", "aria-hidden": true, children: heading(g.key, g.items[0].at) }), _jsx("ul", { "aria-label": p.label || t.agentActivity, children: g.items.map((a) => {
|
|
123
|
+
const state = a.state || "done";
|
|
124
|
+
const kind = a.kind || "read";
|
|
125
|
+
return (_jsxs("li", { className: cx("tf-agentlog-item", "is-" + state, "kind-" + kind), children: [a.service ? (_jsx(ServiceMark, { name: a.service.name, icon: a.service.icon, logo: a.service.logo, size: "sm" })) : (_jsx("span", { className: "tf-svc tf-svc-sm tf-t-plain", "aria-hidden": true, children: _jsx(Icon, { name: "bot", size: 14 }) })), _jsxs("div", { className: "tf-agentlog-main", children: [_jsx("p", { className: "tf-agentlog-text", children: a.text }), a.detail && _jsx("p", { className: "tf-agentlog-detail", children: a.detail }), _jsxs("p", { className: "tf-agentlog-meta", children: [[a.agent, formatDate(a.at, { hour: "numeric", minute: "2-digit" })]
|
|
126
|
+
.filter(Boolean)
|
|
127
|
+
.join(" · "), _jsx("span", { className: cx("tf-agentlog-kind", "kind-" + kind), children: t.actionKinds[kind] }), state !== "done" && (_jsx("span", { className: cx("tf-agentlog-state", "is-" + state), children: t.actionStates[state] }))] })] }), state === "waiting" && p.onReview && (_jsx(Button, { variant: "primary", size: "sm", onClick: () => p.onReview?.(a.id), children: t.reviewAction })), state === "done" && kind !== "read" && p.onUndo && (_jsx(Button, { variant: "ghost", size: "sm", icon: "undo", onClick: () => p.onUndo?.(a.id), children: t.undo }))] }, a.id));
|
|
128
|
+
}) })] }, g.key))) }));
|
|
129
|
+
}
|
|
130
|
+
/** The services you are connected to: account, state, how fresh the data is, and Manage. */
|
|
131
|
+
export function ConnectionList(p) {
|
|
132
|
+
const t = useStrings(CONNECTOR_STRINGS);
|
|
133
|
+
return (_jsx("ul", { style: p.style, className: cx("tf-connlist", p.className), "aria-label": p.label || t.connectionsLabel, children: p.items.map((c) => (_jsxs("li", { className: cx("tf-connlist-item", "is-" + c.state), children: [_jsx(ServiceMark, { name: c.name, icon: c.icon, logo: c.logo, monogram: c.monogram, tint: c.tint, status: c.state }), _jsxs("span", { className: "tf-option-text", children: [_jsx("b", { children: c.name }), c.account && _jsx("small", { children: c.account })] }), c.sync && _jsx(SyncStatus, { state: c.sync.state, last: c.sync.last, now: p.now, compact: true }), c.state === "error" && p.onReconnect ? (_jsx(Button, { variant: "secondary", size: "sm", "aria-label": t.reconnectService(c.name), onClick: () => p.onReconnect?.(c.id), children: t.reconnect })) : (p.onManage && (_jsx(Button, { variant: "ghost", size: "sm", "aria-label": t.manageService(c.name), onClick: () => p.onManage?.(c.id), children: t.manageAction })))] }, c.id))) }));
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.js","sourceRoot":"","sources":["../../src/components/connectors.tsx"],"names":[],"mappings":"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"}
|