@ai-matrx/design-system 0.86.366 → 0.86.367
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/CHANGELOG.md +13 -2
- package/dist/content-transfer.css +3 -1
- package/dist/controls.css +7 -2
- package/dist/data-table/index.cjs +6 -1
- package/dist/data-table/index.cjs.map +1 -1
- package/dist/data-table/index.d.cts +7 -0
- package/dist/data-table/index.d.ts +7 -0
- package/dist/data-table/index.js +6 -1
- package/dist/data-table/index.js.map +1 -1
- package/dist/data-table/types.cjs.map +1 -1
- package/dist/data-table/types.d.cts +7 -0
- package/dist/data-table/types.d.ts +7 -0
- package/dist/index.cjs +53 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +19 -4
- package/dist/index.d.ts +19 -4
- package/dist/index.js +53 -29
- package/dist/index.js.map +1 -1
- package/dist/swipe-deck.cjs +1 -1
- package/dist/swipe-deck.cjs.map +1 -1
- package/dist/swipe-deck.css +9 -0
- package/dist/swipe-deck.js +1 -1
- package/dist/swipe-deck.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -14531,15 +14531,49 @@ function compactCount(n) {
|
|
|
14531
14531
|
var import_jsx_runtime92 = require("react/jsx-runtime");
|
|
14532
14532
|
var HostContext2 = React61.createContext({});
|
|
14533
14533
|
function ContactValuesHostProvider({ children, ...host }) {
|
|
14534
|
-
const value = React61.useMemo(() => host, [host.validateAddress, host.searchWeb]);
|
|
14534
|
+
const value = React61.useMemo(() => host, [host.validateAddress, host.searchWeb, host.prefetchWebSearch]);
|
|
14535
14535
|
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(HostContext2.Provider, { value, children });
|
|
14536
14536
|
}
|
|
14537
14537
|
function useContactValuesHost() {
|
|
14538
14538
|
return React61.useContext(HostContext2);
|
|
14539
14539
|
}
|
|
14540
|
-
|
|
14541
|
-
|
|
14542
|
-
|
|
14540
|
+
var NO_STATUS = { phase: "error", count: null };
|
|
14541
|
+
var NO_PREFETCH = {
|
|
14542
|
+
get: () => NO_STATUS,
|
|
14543
|
+
subscribe: () => () => {
|
|
14544
|
+
}
|
|
14545
|
+
};
|
|
14546
|
+
function useSearchRow(query, open) {
|
|
14547
|
+
const { searchWeb, prefetchWebSearch } = useContactValuesHost();
|
|
14548
|
+
const [prefetch, setPrefetch] = React61.useState(null);
|
|
14549
|
+
React61.useEffect(() => {
|
|
14550
|
+
if (open && query && prefetchWebSearch) setPrefetch(prefetchWebSearch(query));
|
|
14551
|
+
}, [open, query, prefetchWebSearch]);
|
|
14552
|
+
const handle = prefetch ?? NO_PREFETCH;
|
|
14553
|
+
const status = React61.useSyncExternalStore(handle.subscribe, handle.get, handle.get);
|
|
14554
|
+
if (!query) return { row: null, answer: null };
|
|
14555
|
+
if (!searchWeb) return { row: { text: "Search the web", glyph: SearchIcon, href: webSearchHref(query) }, answer: null };
|
|
14556
|
+
const tag = !prefetch ? null : status.phase === "searching" ? { text: "Searching\u2026" } : status.answering ? { text: "Writing answer\u2026" } : status.phase === "ready" && status.count != null ? { text: `${status.count} results`, tone: "success" } : status.phase === "empty" ? { text: "No results" } : null;
|
|
14557
|
+
const answerText = prefetch && status.answer ? status.answer : null;
|
|
14558
|
+
return {
|
|
14559
|
+
// With the answer on the card, the press is for everything else the web has.
|
|
14560
|
+
row: { text: answerText ? "Full search results" : "Search the web", glyph: SearchIcon, onSelect: () => searchWeb(query), ...tag ? { status: tag } : {} },
|
|
14561
|
+
answer: answerText ? { section: "From the web", glyph: SearchIcon, text: answerText, markdown: true, clamp: 6 } : null
|
|
14562
|
+
};
|
|
14563
|
+
}
|
|
14564
|
+
function withSearchRow(record, { row, answer }) {
|
|
14565
|
+
if (!row) return record;
|
|
14566
|
+
const body = [...record.body ?? []];
|
|
14567
|
+
let at = body.findIndex((b) => typeof b === "object" && b !== null && "section" in b && b.section === "Actions");
|
|
14568
|
+
if (at < 0) {
|
|
14569
|
+
body.push({ section: "Actions", rows: [row] });
|
|
14570
|
+
at = body.length - 1;
|
|
14571
|
+
} else {
|
|
14572
|
+
const block = body[at];
|
|
14573
|
+
body[at] = { ...block, rows: [...block.rows ?? [], row] };
|
|
14574
|
+
}
|
|
14575
|
+
if (answer) body.splice(at, 0, answer);
|
|
14576
|
+
return { ...record, body };
|
|
14543
14577
|
}
|
|
14544
14578
|
var markCache = /* @__PURE__ */ new Map();
|
|
14545
14579
|
function markFor(platform) {
|
|
@@ -14618,9 +14652,10 @@ function closingOnSelect(record, close) {
|
|
|
14618
14652
|
);
|
|
14619
14653
|
return { ...record, body };
|
|
14620
14654
|
}
|
|
14621
|
-
function ValueShell({ kind, glyph: Glyph, text, copy, state, record: own, peek, wrap, about }) {
|
|
14655
|
+
function ValueShell({ kind, glyph: Glyph, text, copy, state, record: own, peek, wrap, about, webSearch }) {
|
|
14622
14656
|
const { open, setHovered, setHeld, setPinned, trigger } = usePinnedHover();
|
|
14623
|
-
const
|
|
14657
|
+
const searchRow = useSearchRow(webSearch, open);
|
|
14658
|
+
const record = closingOnSelect(withSearchRow(withAbout(own, about), searchRow), () => {
|
|
14624
14659
|
setPinned(false);
|
|
14625
14660
|
setHeld(false);
|
|
14626
14661
|
setHovered(false);
|
|
@@ -14687,7 +14722,6 @@ var actions = (rows) => ({
|
|
|
14687
14722
|
});
|
|
14688
14723
|
function EmailValue({ email, owner, state = "ok", peek = true, about }) {
|
|
14689
14724
|
const parsed = parseEmail(email);
|
|
14690
|
-
const searchRow = useSearchRow();
|
|
14691
14725
|
const ok = state === "ok" && parsed.valid;
|
|
14692
14726
|
const site = parsed.domain ? parseUrl(parsed.domain) : null;
|
|
14693
14727
|
const record = {
|
|
@@ -14700,14 +14734,12 @@ function EmailValue({ email, owner, state = "ok", peek = true, about }) {
|
|
|
14700
14734
|
body: [
|
|
14701
14735
|
...!parsed.valid && state === "ok" ? [{ fact: "Not a complete email address", glyph: LinkOffGlyph, muted: true }] : [],
|
|
14702
14736
|
...parsed.domain ? [{ property: "Domain", value: parsed.domain, ...ok && site?.href ? { href: site.href } : {} }] : [],
|
|
14703
|
-
actions([
|
|
14704
|
-
searchRow(`"${parsed.address}"`)
|
|
14705
|
-
])
|
|
14737
|
+
actions([])
|
|
14706
14738
|
],
|
|
14707
14739
|
...ok ? { primary: { label: "Send email", onSelect: () => window.location.assign(mailtoHref(parsed.address)) } } : {},
|
|
14708
14740
|
copyData: { email: parsed.address, ...owner ? { owner } : {} }
|
|
14709
14741
|
};
|
|
14710
|
-
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "email", glyph: MailGlyph, text: parsed.address, copy: parsed.address, state, record, peek, ...about !== void 0 ? { about } : {} });
|
|
14742
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "email", glyph: MailGlyph, text: parsed.address, copy: parsed.address, state, record, peek, webSearch: `"${parsed.address}"`, ...about !== void 0 ? { about } : {} });
|
|
14711
14743
|
}
|
|
14712
14744
|
function phoneSearchText(parsed) {
|
|
14713
14745
|
const na = parsed.e164?.match(/^\+1(\d{3})(\d{3})(\d{4})$/);
|
|
@@ -14715,7 +14747,6 @@ function phoneSearchText(parsed) {
|
|
|
14715
14747
|
}
|
|
14716
14748
|
function PhoneValue({ phone, owner, state = "ok", peek = true, defaultCallingCode = "1", about }) {
|
|
14717
14749
|
const parsed = parsePhone(phone, defaultCallingCode);
|
|
14718
|
-
const searchRow = useSearchRow();
|
|
14719
14750
|
const ok = state === "ok" && parsed.valid;
|
|
14720
14751
|
const record = {
|
|
14721
14752
|
kind: "Phone number",
|
|
@@ -14730,14 +14761,13 @@ function PhoneValue({ phone, owner, state = "ok", peek = true, defaultCallingCod
|
|
|
14730
14761
|
...parsed.region ? [{ property: "Region", value: parsed.region }] : [],
|
|
14731
14762
|
...parsed.extension ? [{ property: "Extension", value: parsed.extension }] : [],
|
|
14732
14763
|
actions([
|
|
14733
|
-
ok && { text: "Send a text", glyph: MessageSquareGlyph, href: smsHref(parsed) }
|
|
14734
|
-
searchRow(phoneSearchText(parsed))
|
|
14764
|
+
ok && { text: "Send a text", glyph: MessageSquareGlyph, href: smsHref(parsed) }
|
|
14735
14765
|
])
|
|
14736
14766
|
],
|
|
14737
14767
|
...ok ? { primary: { label: "Call", onSelect: () => window.location.assign(telHref(parsed)) } } : {},
|
|
14738
14768
|
copyData: { phone: parsed.e164 ?? parsed.raw, display: parsed.display, ...parsed.region ? { region: parsed.region } : {}, ...owner ? { owner } : {} }
|
|
14739
14769
|
};
|
|
14740
|
-
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "phone number", glyph: PhoneGlyph, text: parsed.display, copy: parsed.e164 ?? parsed.raw, state, record, peek, ...about !== void 0 ? { about } : {} });
|
|
14770
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "phone number", glyph: PhoneGlyph, text: parsed.display, copy: parsed.e164 ?? parsed.raw, state, record, peek, webSearch: phoneSearchText(parsed), ...about !== void 0 ? { about } : {} });
|
|
14741
14771
|
}
|
|
14742
14772
|
var VALIDATION_TONE = { verified: "success", partial: "warning", unknown: "danger" };
|
|
14743
14773
|
var VALIDATION_TEXT = { verified: "Verified address", partial: "Partly matched", unknown: "No match found" };
|
|
@@ -14745,7 +14775,6 @@ function AddressValue({ address, owner, state = "ok", peek = true, multiline = f
|
|
|
14745
14775
|
const one = addressText(address);
|
|
14746
14776
|
const lines = typeof address === "string" ? address.split(/\n+/).map((l) => l.trim()).filter(Boolean) : address.map((l) => (l ?? "").trim()).filter(Boolean);
|
|
14747
14777
|
const { validateAddress } = useContactValuesHost();
|
|
14748
|
-
const searchRow = useSearchRow();
|
|
14749
14778
|
const [validation, setValidation] = React61.useState({ phase: "idle" });
|
|
14750
14779
|
React61.useEffect(() => setValidation({ phase: "idle" }), [one]);
|
|
14751
14780
|
const ok = state === "ok" && one.length > 0;
|
|
@@ -14780,8 +14809,7 @@ function AddressValue({ address, owner, state = "ok", peek = true, multiline = f
|
|
|
14780
14809
|
...owner && lines.length > 1 ? [{ property: "For", value: owner }] : [],
|
|
14781
14810
|
...validationBlock ? [validationBlock] : [],
|
|
14782
14811
|
actions([
|
|
14783
|
-
ok && validateAddress && validation.phase !== "done" && { text: "Open in maps", glyph: MapPinGlyph, href: mapsHref(one) }
|
|
14784
|
-
searchRow(one)
|
|
14812
|
+
ok && validateAddress && validation.phase !== "done" && { text: "Open in maps", glyph: MapPinGlyph, href: mapsHref(one) }
|
|
14785
14813
|
])
|
|
14786
14814
|
],
|
|
14787
14815
|
...ok && validateAddress && validation.phase !== "done" ? { primary: { label: validation.phase === "checking" ? "Checking\u2026" : "Validate", onSelect: validate } } : ok ? { primary: { label: "Open in maps", onSelect: () => (0, import_outbound2.openOutbound)(mapsHref(validation.phase === "done" && validation.result.formatted ? validation.result.formatted : one)) } } : {},
|
|
@@ -14792,6 +14820,7 @@ function AddressValue({ address, owner, state = "ok", peek = true, multiline = f
|
|
|
14792
14820
|
{
|
|
14793
14821
|
kind: "address",
|
|
14794
14822
|
glyph: MapPinGlyph,
|
|
14823
|
+
webSearch: one,
|
|
14795
14824
|
text: multiline ? lines.join("\n") : one,
|
|
14796
14825
|
copy: lines.join("\n"),
|
|
14797
14826
|
state,
|
|
@@ -14802,7 +14831,7 @@ function AddressValue({ address, owner, state = "ok", peek = true, multiline = f
|
|
|
14802
14831
|
}
|
|
14803
14832
|
);
|
|
14804
14833
|
}
|
|
14805
|
-
function socialRecord(parsed, props, glyph
|
|
14834
|
+
function socialRecord(parsed, props, glyph) {
|
|
14806
14835
|
const state = props.state ?? "ok";
|
|
14807
14836
|
const ok = state === "ok" && Boolean(parsed.href);
|
|
14808
14837
|
return {
|
|
@@ -14817,9 +14846,7 @@ function socialRecord(parsed, props, glyph, searchRow) {
|
|
|
14817
14846
|
...parsed.handle ? [{ property: "Handle", value: parsed.display }] : [],
|
|
14818
14847
|
...props.followers != null ? [{ fact: `${compactCount(props.followers)} followers`, glyph: UsersIcon }] : [],
|
|
14819
14848
|
...props.owner ? [{ property: "For", value: props.owner }] : [],
|
|
14820
|
-
actions([
|
|
14821
|
-
searchRow(`${parsed.display} ${parsed.platformName}`)
|
|
14822
|
-
])
|
|
14849
|
+
actions([])
|
|
14823
14850
|
],
|
|
14824
14851
|
...ok ? { primary: { label: "Open profile", onSelect: () => (0, import_outbound2.openOutbound)(parsed.href) } } : {},
|
|
14825
14852
|
copyData: { platform: parsed.platformName, handle: parsed.display, ...parsed.href ? { url: parsed.href } : {}, ...props.followers != null ? { followers: props.followers } : {} }
|
|
@@ -14828,7 +14855,6 @@ function socialRecord(parsed, props, glyph, searchRow) {
|
|
|
14828
14855
|
function SocialHandleValue(props) {
|
|
14829
14856
|
const { value, platform, state = "ok", peek = true } = props;
|
|
14830
14857
|
const parsed = parseSocial(value, platform);
|
|
14831
|
-
const searchRow = useSearchRow();
|
|
14832
14858
|
const glyph = parsed.platform === "other" ? AtSignGlyph : markFor(parsed.platform);
|
|
14833
14859
|
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(
|
|
14834
14860
|
ValueShell,
|
|
@@ -14838,7 +14864,8 @@ function SocialHandleValue(props) {
|
|
|
14838
14864
|
text: parsed.display,
|
|
14839
14865
|
copy: parsed.handle ? parsed.display : parsed.href ?? parsed.display,
|
|
14840
14866
|
state,
|
|
14841
|
-
record: socialRecord(parsed, props, glyph
|
|
14867
|
+
record: socialRecord(parsed, props, glyph),
|
|
14868
|
+
webSearch: `${parsed.display} ${parsed.platformName}`,
|
|
14842
14869
|
peek,
|
|
14843
14870
|
...props.about !== void 0 ? { about: props.about } : {}
|
|
14844
14871
|
}
|
|
@@ -14846,7 +14873,6 @@ function SocialHandleValue(props) {
|
|
|
14846
14873
|
}
|
|
14847
14874
|
function UrlValue({ url, title, owner, state = "ok", peek = true, icon = true, about }) {
|
|
14848
14875
|
const parsed = parseUrl(url);
|
|
14849
|
-
const searchRow = useSearchRow();
|
|
14850
14876
|
const ok = state === "ok" && Boolean(parsed.href);
|
|
14851
14877
|
const record = {
|
|
14852
14878
|
kind: "Web address",
|
|
@@ -14858,14 +14884,12 @@ function UrlValue({ url, title, owner, state = "ok", peek = true, icon = true, a
|
|
|
14858
14884
|
body: [
|
|
14859
14885
|
{ property: "Domain", value: parsed.domain },
|
|
14860
14886
|
...owner && title ? [{ property: "For", value: owner }] : [],
|
|
14861
|
-
actions([
|
|
14862
|
-
searchRow(parsed.domain)
|
|
14863
|
-
])
|
|
14887
|
+
actions([])
|
|
14864
14888
|
],
|
|
14865
14889
|
...ok ? { primary: { label: "Open", onSelect: () => (0, import_outbound2.openOutbound)(parsed.href) } } : {},
|
|
14866
14890
|
copyData: { url: parsed.href ?? url, domain: parsed.domain, ...title ? { title } : {} }
|
|
14867
14891
|
};
|
|
14868
|
-
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "link", ...icon ? { glyph: GlobeIcon } : {}, text: parsed.display, copy: parsed.href ?? url, state, record, peek, ...about !== void 0 ? { about } : {} });
|
|
14892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime92.jsx)(ValueShell, { kind: "link", ...icon ? { glyph: GlobeIcon } : {}, text: parsed.display, copy: parsed.href ?? url, state, record, peek, webSearch: parsed.domain, ...about !== void 0 ? { about } : {} });
|
|
14869
14893
|
}
|
|
14870
14894
|
function ContactValue({ type, value, platform, followers, title, icon, ...common }) {
|
|
14871
14895
|
switch (type) {
|