@hraness/design-kit 0.35.3 → 0.36.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/MARKETING_COPY.md +1 -0
- package/README.md +53 -7
- package/dist/{chunk-vst6p4wd.js → chunk-sabcr66p.js} +68 -0
- package/dist/{chunk-fmeg5cxf.js → chunk-thv5t11w.js} +1 -1
- package/dist/{chunk-4tgt8egt.js → chunk-v8byd3hw.js} +106 -23
- package/dist/index.js +2 -2
- package/dist/mockups/client.js +169 -21
- package/dist/mockups/index.js +4 -0
- package/dist/provider-marks.js +1 -1
- package/dist/react/index.js +58 -3
- package/dist/react/server.js +2 -2
- package/dist/stylex-manifest.json +1 -1
- package/dist/stylex.css +30 -0
- package/package.json +1 -1
- package/portfolio-inventory.json +1 -1
- package/src/mockups/client.tsx +120 -7
- package/src/mockups/frames.tsx +4 -2
- package/src/mockups.css +43 -0
- package/src/product-marketing-foundation.css +12 -0
- package/src/product-marketing.css +59 -0
- package/src/provider-marks.generated.ts +20 -0
- package/src/provider-marks.ts +5 -0
- package/src/react/design-gallery.tsx +11 -0
- package/src/react/product-marketing.stylex.ts +50 -2
- package/src/react/product-marketing.tsx +38 -28
- package/vendor/provider-marks/BEEPER-NOTICE.md +16 -0
- package/vendor/provider-marks/SIMPLE-ICONS-LICENSE.md +30 -0
- package/vendor/provider-marks/UPSTREAM.md +24 -0
- package/vendor/provider-marks/beeper-glyph.svg +3 -0
- package/vendor/provider-marks/beeper.svg +16 -0
- package/vendor/provider-marks/lobehub/ollama.svg +1 -0
- package/vendor/provider-marks/lobehub/vercel.svg +1 -0
- package/vendor/provider-marks/simple-icons/imessage.svg +1 -0
- package/vendor/provider-marks/simple-icons/whatsapp.svg +1 -0
package/dist/stylex.css
CHANGED
|
@@ -109,6 +109,10 @@
|
|
|
109
109
|
padding: 0;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
.x1aetswf {
|
|
113
|
+
padding: 1.125rem;
|
|
114
|
+
}
|
|
115
|
+
|
|
112
116
|
.x194jd1b {
|
|
113
117
|
padding: 1.1rem 7rem 1rem 1rem;
|
|
114
118
|
}
|
|
@@ -1084,6 +1088,10 @@
|
|
|
1084
1088
|
accent-color: var(--primary, Highlight);
|
|
1085
1089
|
}
|
|
1086
1090
|
|
|
1091
|
+
.xc26acl {
|
|
1092
|
+
align-content: center;
|
|
1093
|
+
}
|
|
1094
|
+
|
|
1087
1095
|
.xcdzlcm {
|
|
1088
1096
|
align-content: space-between;
|
|
1089
1097
|
}
|
|
@@ -1675,6 +1683,10 @@
|
|
|
1675
1683
|
block-size: 1rem;
|
|
1676
1684
|
}
|
|
1677
1685
|
|
|
1686
|
+
.x1vlpzvb {
|
|
1687
|
+
block-size: 3.5rem;
|
|
1688
|
+
}
|
|
1689
|
+
|
|
1678
1690
|
.x18o2qet {
|
|
1679
1691
|
block-size: 4.5rem;
|
|
1680
1692
|
}
|
|
@@ -2523,6 +2535,10 @@
|
|
|
2523
2535
|
grid-template-columns: 2.25rem minmax(0, 1fr);
|
|
2524
2536
|
}
|
|
2525
2537
|
|
|
2538
|
+
.xrdwe0 {
|
|
2539
|
+
grid-template-columns: 3.5rem minmax(0, 1fr);
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2526
2542
|
.xx9t13c {
|
|
2527
2543
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
2528
2544
|
}
|
|
@@ -2631,6 +2647,10 @@
|
|
|
2631
2647
|
inline-size: 2rem;
|
|
2632
2648
|
}
|
|
2633
2649
|
|
|
2650
|
+
.x1pf0uk5 {
|
|
2651
|
+
inline-size: 3.5rem;
|
|
2652
|
+
}
|
|
2653
|
+
|
|
2634
2654
|
.x6qm275 {
|
|
2635
2655
|
inline-size: 4.5rem;
|
|
2636
2656
|
}
|
|
@@ -2966,6 +2986,10 @@
|
|
|
2966
2986
|
max-block-size: min(38rem, 75dvh);
|
|
2967
2987
|
}
|
|
2968
2988
|
|
|
2989
|
+
.x1vj640n {
|
|
2990
|
+
max-block-size: none;
|
|
2991
|
+
}
|
|
2992
|
+
|
|
2969
2993
|
.xgyk9h7 {
|
|
2970
2994
|
max-inline-size: 100%;
|
|
2971
2995
|
}
|
|
@@ -4101,6 +4125,12 @@
|
|
|
4101
4125
|
}
|
|
4102
4126
|
}
|
|
4103
4127
|
|
|
4128
|
+
@media (width >= 64rem) {
|
|
4129
|
+
.x13f99nf.x13f99nf {
|
|
4130
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, .8fr);
|
|
4131
|
+
}
|
|
4132
|
+
}
|
|
4133
|
+
|
|
4104
4134
|
@media (width >= 50rem) {
|
|
4105
4135
|
.x2k1869.x2k1869 {
|
|
4106
4136
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hraness/design-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "React components and CSS for Hraness apps and product sites: application shells, marketing sections, charts, themes, effects, and syntax highlighting. Built on @hraness/ui.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
package/portfolio-inventory.json
CHANGED
package/src/mockups/client.tsx
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
type ReactNode,
|
|
7
7
|
useId,
|
|
8
8
|
useLayoutEffect,
|
|
9
|
+
useMemo,
|
|
9
10
|
useRef,
|
|
10
11
|
useState,
|
|
11
12
|
} from "react";
|
|
@@ -145,8 +146,10 @@ export type ModeShowcaseProps<S extends string, M extends string, O extends stri
|
|
|
145
146
|
status?: (state: Readonly<{ surface: S; mode: M; option: O | undefined }>) => ReactNode;
|
|
146
147
|
/** Optional context that adds to the visual. Omit repeated descriptions or generic disclaimers. */
|
|
147
148
|
caption?: string;
|
|
148
|
-
/** Page-window
|
|
149
|
+
/** Page-window cap in natural mode; minimum complete stage height in fill mode. */
|
|
149
150
|
height?: number;
|
|
151
|
+
/** Reserve every authored choice at readable size, up to 128 combinations. */
|
|
152
|
+
fit?: "natural" | "fill";
|
|
150
153
|
/** Narrowest layout width before the stage scales down. */
|
|
151
154
|
minWidth?: number;
|
|
152
155
|
theme?: MockupTheme;
|
|
@@ -164,6 +167,7 @@ export type ModeShowcaseProps<S extends string, M extends string, O extends stri
|
|
|
164
167
|
export function ModeShowcase<S extends string, M extends string, O extends string = string>({
|
|
165
168
|
caption,
|
|
166
169
|
className,
|
|
170
|
+
fit = "natural",
|
|
167
171
|
height = 440,
|
|
168
172
|
initial,
|
|
169
173
|
label,
|
|
@@ -181,7 +185,9 @@ export function ModeShowcase<S extends string, M extends string, O extends strin
|
|
|
181
185
|
assertUniqueIds(modes, "ModeShowcase mode");
|
|
182
186
|
if (options !== undefined) assertUniqueIds(options, "ModeShowcase option");
|
|
183
187
|
const captionText = optionalText(caption, "ModeShowcase");
|
|
184
|
-
if (!(height > 0)) throw new RangeError("ModeShowcase height must be positive.");
|
|
188
|
+
if (!Number.isFinite(height) || !(height > 0)) throw new RangeError("ModeShowcase height must be finite and positive.");
|
|
189
|
+
if (fit !== "natural" && fit !== "fill") throw new RangeError("ModeShowcase fit must be natural or fill.");
|
|
190
|
+
if (fit === "fill" && surfaces.length * modes.length * (options?.length ?? 1) > 128) throw new RangeError("ModeShowcase fill supports up to 128 surface, mode, and option combinations.");
|
|
185
191
|
|
|
186
192
|
const id = useId();
|
|
187
193
|
const firstSurface = surfaces.find((surface) => surface.id === initial?.surface) ?? itemAt(surfaces, 0, "ModeShowcase surfaces");
|
|
@@ -199,6 +205,17 @@ export function ModeShowcase<S extends string, M extends string, O extends strin
|
|
|
199
205
|
const optionChoice = options?.find((entry) => entry.id === option);
|
|
200
206
|
const optionInactive = optionInactiveModes.includes(mode);
|
|
201
207
|
|
|
208
|
+
// Pure, nonanimated authored states reserve one maximum before any choice.
|
|
209
|
+
// They stay hidden and inert; only a detached measurement clone reveals them.
|
|
210
|
+
const measurements = useMemo(() => fit !== "fill" ? null : surfaces.flatMap((entry) => modes.flatMap((choice) => (options ?? [{ id: undefined }]).map((optionChoice) => (
|
|
211
|
+
<div aria-hidden="true" className="hkm-mode-surface" data-hkm-measurement="" hidden inert key={JSON.stringify([entry.id, choice.id, optionChoice.id])}>
|
|
212
|
+
<div className="hkm-fit"><div className="hkm-fit-inner">
|
|
213
|
+
{entry.render({ animated: false, mode: choice.id, option: optionChoice.id, previousMode: choice.id, theme })}
|
|
214
|
+
</div></div>
|
|
215
|
+
</div>
|
|
216
|
+
)))), [fit, modes, options, surfaces, theme]);
|
|
217
|
+
const stage = useFittedShowcaseStage(fit, measurements, JSON.stringify([mode, option]), height);
|
|
218
|
+
|
|
202
219
|
const chooseMode = (next: M) => {
|
|
203
220
|
if (next === mode) return;
|
|
204
221
|
setPreviousMode(mode);
|
|
@@ -230,6 +247,7 @@ export function ModeShowcase<S extends string, M extends string, O extends strin
|
|
|
230
247
|
<figure
|
|
231
248
|
aria-label={label?.(surface) ?? `Illustration of ${surface.label.toLowerCase()}`}
|
|
232
249
|
className={joinMockupClasses("hkm-showcase", "hkm-modes", className)}
|
|
250
|
+
data-hkm-fit={fit === "fill" ? fit : undefined}
|
|
233
251
|
data-hkm-theme={theme}
|
|
234
252
|
data-nosnippet=""
|
|
235
253
|
>
|
|
@@ -291,7 +309,8 @@ export function ModeShowcase<S extends string, M extends string, O extends strin
|
|
|
291
309
|
</div>
|
|
292
310
|
{hint === "" ? null : <p className="hkm-showcase-hint">{hint}</p>}
|
|
293
311
|
</div>
|
|
294
|
-
<div className="hkm-mode-stage">
|
|
312
|
+
<div className="hkm-mode-stage" ref={stage}>
|
|
313
|
+
{measurements}
|
|
295
314
|
{surfaces.map((entry) => (
|
|
296
315
|
<div
|
|
297
316
|
aria-hidden={entry.id !== surface.id}
|
|
@@ -301,7 +320,7 @@ export function ModeShowcase<S extends string, M extends string, O extends strin
|
|
|
301
320
|
inert={entry.id !== surface.id}
|
|
302
321
|
key={entry.id}
|
|
303
322
|
>
|
|
304
|
-
<FitToWidth minWidth={minWidth}>
|
|
323
|
+
<FitToWidth minWidth={fit === "fill" ? 1 : minWidth}>
|
|
305
324
|
{entry.render({ animated: entry.id === surface.id && animated, mode, option, previousMode, theme })}
|
|
306
325
|
</FitToWidth>
|
|
307
326
|
</div>
|
|
@@ -331,6 +350,93 @@ export type ThroughStep = Readonly<{
|
|
|
331
350
|
render: (state: Readonly<{ animated: boolean; theme: MockupTheme | undefined }>) => ReactNode;
|
|
332
351
|
}>;
|
|
333
352
|
|
|
353
|
+
/** Measure complete mounted slides at a readable baseline, separately from fitted paint. */
|
|
354
|
+
function fitShowcaseStage(stage: HTMLDivElement, minimumHeight: number): void {
|
|
355
|
+
const owner = stage.parentElement;
|
|
356
|
+
if (owner === null || stage.clientWidth <= 0) return;
|
|
357
|
+
const probe = stage.cloneNode(true) as HTMLDivElement;
|
|
358
|
+
probe.setAttribute("aria-hidden", "true");
|
|
359
|
+
probe.setAttribute("inert", "");
|
|
360
|
+
probe.setAttribute("data-hkm-measuring", "");
|
|
361
|
+
probe.style.cssText = `position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;inline-size:${stage.getBoundingClientRect().width}px;block-size:auto;`;
|
|
362
|
+
for (const sentinel of probe.querySelectorAll("[data-hkm-font-sentinel]")) sentinel.remove();
|
|
363
|
+
for (const node of probe.querySelectorAll("[id]")) node.removeAttribute("id");
|
|
364
|
+
for (const node of probe.querySelectorAll("[data-hkm-animated]")) node.removeAttribute("data-hkm-animated");
|
|
365
|
+
for (const body of probe.querySelectorAll<HTMLElement>('[data-hkm-density="presentation"]')) body.style.removeProperty("--hkm-terminal-presentation-size");
|
|
366
|
+
for (const fixture of probe.querySelectorAll<HTMLElement>("[data-hkm-measurement]")) fixture.hidden = false;
|
|
367
|
+
owner.append(probe);
|
|
368
|
+
try {
|
|
369
|
+
const naturalHeight = Math.max(minimumHeight, Math.ceil(probe.getBoundingClientRect().height));
|
|
370
|
+
// The tallest complete slide establishes the floor. Fitted type never feeds
|
|
371
|
+
// back into it, and changing the active tab never requests a measurement.
|
|
372
|
+
stage.style.setProperty("--hkm-showcase-fill-height", `${naturalHeight}px`);
|
|
373
|
+
for (const fixture of probe.querySelectorAll("[data-hkm-measurement]")) fixture.remove();
|
|
374
|
+
probe.style.blockSize = `${naturalHeight}px`;
|
|
375
|
+
probe.removeAttribute("data-hkm-measuring");
|
|
376
|
+
const bodies = [...stage.querySelectorAll<HTMLElement>('[data-hkm-density="presentation"]')].filter((body) => body.closest("[data-hkm-measurement]") === null);
|
|
377
|
+
const copies = [...probe.querySelectorAll<HTMLElement>('[data-hkm-density="presentation"]')];
|
|
378
|
+
for (const [index, copy] of copies.entries()) {
|
|
379
|
+
const body = bodies[index];
|
|
380
|
+
if (body === undefined) continue;
|
|
381
|
+
const lines = [...copy.querySelectorAll<HTMLElement>(".hkm-terminal-line")];
|
|
382
|
+
const wrappedRows = (line: HTMLElement) => Math.ceil((line.getBoundingClientRect().height - 0.5) / Number.parseFloat(getComputedStyle(line).lineHeight));
|
|
383
|
+
const baselineRows = lines.map(wrappedRows);
|
|
384
|
+
let low = 1;
|
|
385
|
+
let high = 4;
|
|
386
|
+
for (let attempt = 0; attempt < 9; attempt += 1) {
|
|
387
|
+
const candidate = (low + high) / 2;
|
|
388
|
+
copy.style.setProperty("--hkm-terminal-presentation-size", `${candidate}rem`);
|
|
389
|
+
if (copy.scrollHeight <= copy.clientHeight + 1 && copy.scrollWidth <= copy.clientWidth + 1 && lines.every((line, index) => { const baseline = baselineRows[index]; return baseline !== undefined && wrappedRows(line) <= baseline; })) low = candidate;
|
|
390
|
+
else high = candidate;
|
|
391
|
+
}
|
|
392
|
+
body.style.setProperty("--hkm-terminal-presentation-size", `${Math.floor(low * 1000) / 1000}rem`);
|
|
393
|
+
}
|
|
394
|
+
stage.setAttribute("data-hkm-fitted", "");
|
|
395
|
+
} finally {
|
|
396
|
+
probe.remove();
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/** Share one measurement lifecycle across surface and walkthrough selectors. */
|
|
401
|
+
function useFittedShowcaseStage(fit: "natural" | "fill", source: unknown, variation = "", minimumHeight = 0) {
|
|
402
|
+
const stage = useRef<HTMLDivElement>(null);
|
|
403
|
+
useIsomorphicLayoutEffect(() => {
|
|
404
|
+
const node = stage.current;
|
|
405
|
+
if (fit !== "fill" || node === null || typeof ResizeObserver === "undefined") return undefined;
|
|
406
|
+
// A rem-sized box changes even when both the document and stage are fixed.
|
|
407
|
+
const fontSentinel = document.createElement("span");
|
|
408
|
+
fontSentinel.setAttribute("data-hkm-font-sentinel", "");
|
|
409
|
+
fontSentinel.setAttribute("aria-hidden", "true");
|
|
410
|
+
fontSentinel.inert = true;
|
|
411
|
+
fontSentinel.style.cssText = "position:absolute;inline-size:1rem;block-size:1rem;visibility:hidden;pointer-events:none;inset:0 auto auto 0;";
|
|
412
|
+
node.append(fontSentinel);
|
|
413
|
+
let previous = "";
|
|
414
|
+
let disposed = false;
|
|
415
|
+
const measure = () => {
|
|
416
|
+
if (disposed) return;
|
|
417
|
+
const key = `${node.clientWidth}/${getComputedStyle(document.documentElement).fontSize}`;
|
|
418
|
+
if (key === previous) return;
|
|
419
|
+
previous = key;
|
|
420
|
+
fitShowcaseStage(node, minimumHeight);
|
|
421
|
+
};
|
|
422
|
+
measure();
|
|
423
|
+
const observer = new ResizeObserver(measure);
|
|
424
|
+
observer.observe(node);
|
|
425
|
+
observer.observe(document.documentElement);
|
|
426
|
+
observer.observe(fontSentinel);
|
|
427
|
+
void document.fonts.ready.then(() => { previous = ""; measure(); });
|
|
428
|
+
return () => {
|
|
429
|
+
disposed = true;
|
|
430
|
+
observer.disconnect();
|
|
431
|
+
fontSentinel.remove();
|
|
432
|
+
node.style.removeProperty("--hkm-showcase-fill-height");
|
|
433
|
+
node.removeAttribute("data-hkm-fitted");
|
|
434
|
+
for (const body of node.querySelectorAll<HTMLElement>('[data-hkm-density="presentation"]')) body.style.removeProperty("--hkm-terminal-presentation-size");
|
|
435
|
+
};
|
|
436
|
+
}, [fit, source, variation, minimumHeight]);
|
|
437
|
+
return stage;
|
|
438
|
+
}
|
|
439
|
+
|
|
334
440
|
/**
|
|
335
441
|
* Folder tabs and chevron controls walk a flow. All render functions stay mounted
|
|
336
442
|
* to reserve the tallest panel; inactive panels are inert and visually hidden.
|
|
@@ -340,12 +446,15 @@ export function StepThrough({
|
|
|
340
446
|
caption,
|
|
341
447
|
className,
|
|
342
448
|
initial,
|
|
449
|
+
fit = "natural",
|
|
343
450
|
label = "Steps",
|
|
344
451
|
minWidth = 400,
|
|
345
452
|
steps,
|
|
346
453
|
theme,
|
|
347
454
|
}: Readonly<{
|
|
348
455
|
steps: readonly ThroughStep[];
|
|
456
|
+
/** Fill the tallest natural slide and fit presentation terminals without scaling. */
|
|
457
|
+
fit?: "natural" | "fill";
|
|
349
458
|
caption?: string;
|
|
350
459
|
initial?: string;
|
|
351
460
|
label?: string;
|
|
@@ -354,6 +463,8 @@ export function StepThrough({
|
|
|
354
463
|
className?: string;
|
|
355
464
|
}>) {
|
|
356
465
|
assertUniqueIds(steps, "StepThrough step");
|
|
466
|
+
if (fit !== "natural" && fit !== "fill") throw new RangeError("StepThrough fit must be natural or fill.");
|
|
467
|
+
const stage = useFittedShowcaseStage(fit, steps);
|
|
357
468
|
const captionText = optionalText(caption, "StepThrough");
|
|
358
469
|
const id = useId();
|
|
359
470
|
const [index, setIndex] = useState(() => Math.max(0, steps.findIndex((step) => step.id === initial)));
|
|
@@ -376,7 +487,7 @@ export function StepThrough({
|
|
|
376
487
|
};
|
|
377
488
|
|
|
378
489
|
return (
|
|
379
|
-
<figure aria-label={`Illustration: ${label.toLowerCase()}`} className={joinMockupClasses("hkm-showcase", "hkm-steps", className)} data-hkm-theme={theme} data-nosnippet="">
|
|
490
|
+
<figure aria-label={`Illustration: ${label.toLowerCase()}`} className={joinMockupClasses("hkm-showcase", "hkm-steps", className)} data-hkm-fit={fit === "fill" ? fit : undefined} data-hkm-theme={theme} data-nosnippet="">
|
|
380
491
|
<div className="hkm-showcase-controls">
|
|
381
492
|
<div aria-label={label} className="hkm-tabs hkm-folder-tabs hkm-step-tabs" role="tablist">
|
|
382
493
|
{steps.map((entry, position) => (
|
|
@@ -403,7 +514,7 @@ export function StepThrough({
|
|
|
403
514
|
))}
|
|
404
515
|
</div>
|
|
405
516
|
</div>
|
|
406
|
-
<div className="hkm-showcase-stage hkm-step-stage">
|
|
517
|
+
<div className="hkm-showcase-stage hkm-step-stage" ref={stage}>
|
|
407
518
|
{steps.map((entry, position) => (
|
|
408
519
|
<div
|
|
409
520
|
aria-hidden={position !== current}
|
|
@@ -415,7 +526,9 @@ export function StepThrough({
|
|
|
415
526
|
key={entry.id}
|
|
416
527
|
role="tabpanel"
|
|
417
528
|
>
|
|
418
|
-
|
|
529
|
+
{fit === "fill"
|
|
530
|
+
? <div className="hkm-fit"><div className="hkm-fit-inner">{entry.render({ animated: position === current && animated, theme })}</div></div>
|
|
531
|
+
: <FitToWidth minWidth={minWidth}>{entry.render({ animated: position === current && animated, theme })}</FitToWidth>}
|
|
419
532
|
</div>
|
|
420
533
|
))}
|
|
421
534
|
</div>
|
package/src/mockups/frames.tsx
CHANGED
|
@@ -106,13 +106,15 @@ const TERMINAL_KINDS = new Set(["input", "output", "comment"]);
|
|
|
106
106
|
* Commands and output are sample text; keep them to commands the product ships.
|
|
107
107
|
*/
|
|
108
108
|
export function TerminalFrame({
|
|
109
|
+
density = "standard",
|
|
109
110
|
fade,
|
|
110
111
|
height,
|
|
111
112
|
lines,
|
|
112
113
|
prompt = "$",
|
|
113
114
|
title = "Terminal",
|
|
114
115
|
...root
|
|
115
|
-
}: MockupRootProps & Readonly<{ title?: string; prompt?: string; lines: readonly TerminalLine[]; height?: number; fade?: boolean }>) {
|
|
116
|
+
}: MockupRootProps & Readonly<{ title?: string; prompt?: string; lines: readonly TerminalLine[]; height?: number; fade?: boolean; density?: "standard" | "presentation" }>) {
|
|
117
|
+
if (density !== "standard" && density !== "presentation") throw new RangeError("Terminal density must be standard or presentation.");
|
|
116
118
|
for (const line of lines) {
|
|
117
119
|
if (!TERMINAL_KINDS.has(line.kind)) throw new TypeError(`Unknown terminal line kind ${JSON.stringify(line.kind)}.`);
|
|
118
120
|
}
|
|
@@ -125,7 +127,7 @@ export function TerminalFrame({
|
|
|
125
127
|
<span className="hkm-title">{title}</span>
|
|
126
128
|
<span />
|
|
127
129
|
</div>
|
|
128
|
-
<div className="hkm-page hkm-terminal-body" data-hkm-fade={fades ? "" : undefined} style={pageStyle(height)}>
|
|
130
|
+
<div className="hkm-page hkm-terminal-body" data-hkm-density={density === "presentation" ? density : undefined} data-hkm-fade={fades ? "" : undefined} style={pageStyle(height)}>
|
|
129
131
|
<div className="hkm-terminal-lines">
|
|
130
132
|
{lines.map((line, index) => (
|
|
131
133
|
<div className="hkm-terminal-line" data-hkm-beat={line.beat} data-hkm-line={line.kind} data-hkm-tone={line.tone} key={index}>
|
package/src/mockups.css
CHANGED
|
@@ -333,6 +333,15 @@
|
|
|
333
333
|
font-variant-ligatures: none;
|
|
334
334
|
}
|
|
335
335
|
|
|
336
|
+
.hkm-root .hkm-terminal-body[data-hkm-density="presentation"] {
|
|
337
|
+
font-size: var(--hkm-terminal-presentation-size, 1rem);
|
|
338
|
+
line-height: 1.5;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
.hkm-root .hkm-terminal-body[data-hkm-density="presentation"] .hkm-terminal-line {
|
|
342
|
+
min-block-size: 1.5em;
|
|
343
|
+
}
|
|
344
|
+
|
|
336
345
|
.hkm-root .hkm-terminal-lines {
|
|
337
346
|
display: grid;
|
|
338
347
|
gap: 1px;
|
|
@@ -2522,6 +2531,40 @@
|
|
|
2522
2531
|
.hkm-step-panel { grid-area: 1 / 1; min-inline-size: 0; align-self: start; }
|
|
2523
2532
|
.hkm-step-panel[aria-hidden="true"] { visibility: hidden; pointer-events: none; }
|
|
2524
2533
|
.hkm-showcase.hkm-steps .hkm-step-panel .hkm-root { border-start-start-radius: 0; border-start-end-radius: 0; box-shadow: none; }
|
|
2534
|
+
/* Fill uses the tallest complete slide as its natural height. It does not
|
|
2535
|
+
* scale text or ask fitted font sizes to determine the stage height. */
|
|
2536
|
+
.hkm-showcase[data-hkm-fit="fill"] [data-hkm-measuring] .hkm-page { max-block-size: none; }
|
|
2537
|
+
|
|
2538
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) {
|
|
2539
|
+
block-size: var(--hkm-showcase-fill-height, auto);
|
|
2540
|
+
}
|
|
2541
|
+
|
|
2542
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) :is(.hkm-step-panel, .hkm-mode-surface) {
|
|
2543
|
+
align-self: stretch;
|
|
2544
|
+
min-block-size: 0;
|
|
2545
|
+
}
|
|
2546
|
+
|
|
2547
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) :is(.hkm-fit, .hkm-fit-inner, .hkm-root, .hkm-root > .hkm-window) {
|
|
2548
|
+
block-size: 100%;
|
|
2549
|
+
min-block-size: 0;
|
|
2550
|
+
}
|
|
2551
|
+
|
|
2552
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) .hkm-window:has(> .hkm-page) {
|
|
2553
|
+
display: flex;
|
|
2554
|
+
flex-direction: column;
|
|
2555
|
+
}
|
|
2556
|
+
|
|
2557
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) .hkm-window > .hkm-page {
|
|
2558
|
+
flex: 1 1 auto;
|
|
2559
|
+
block-size: auto;
|
|
2560
|
+
min-block-size: 0;
|
|
2561
|
+
max-block-size: none;
|
|
2562
|
+
}
|
|
2563
|
+
|
|
2564
|
+
.hkm-showcase[data-hkm-fit="fill"] :is(.hkm-step-stage, .hkm-mode-stage):not([data-hkm-measuring]) :is(.hkm-title-bar, .hkm-browser-bar) {
|
|
2565
|
+
flex: none;
|
|
2566
|
+
}
|
|
2567
|
+
|
|
2525
2568
|
.hkm-showcase.hkm-steps .hkm-step-nav { justify-content: space-between; padding-block-start: 18px; gap: 16px; }
|
|
2526
2569
|
.hkm-showcase.hkm-steps .hkm-step-button { display: inline-grid; place-items: center; min-inline-size: 52px; min-block-size: 52px; padding: 10px; border: 0; border-radius: 12px; background: transparent; color: var(--hkm-sc-fg); }
|
|
2527
2570
|
.hkm-showcase.hkm-steps .hkm-step-button[data-hkm-primary] { background: var(--hkm-sc-fg); color: var(--hkm-sc-bg); }
|
|
@@ -415,6 +415,13 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
415
415
|
z-index: 30;
|
|
416
416
|
}
|
|
417
417
|
|
|
418
|
+
/* Intrinsic media sizing is shared with raw HTML card icons. */
|
|
419
|
+
.hraness-marketing-card__icon > :is(img, svg) {
|
|
420
|
+
inline-size: 100%;
|
|
421
|
+
block-size: 100%;
|
|
422
|
+
object-fit: contain;
|
|
423
|
+
}
|
|
424
|
+
|
|
418
425
|
.hraness-marketing-card-row,
|
|
419
426
|
.hraness-marketing-interface-grid,
|
|
420
427
|
.hraness-marketing-trust-grid,
|
|
@@ -439,6 +446,11 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
439
446
|
display: none;
|
|
440
447
|
}
|
|
441
448
|
|
|
449
|
+
/* Supplemental proof belongs below both columns of a split hero. */
|
|
450
|
+
.hraness-marketing-hero[data-layout="split"] > :where(.hraness-marketing-proof, .hraness-marketing-facts) {
|
|
451
|
+
grid-column: 1 / -1;
|
|
452
|
+
}
|
|
453
|
+
|
|
442
454
|
/* Keep all meaningful hero content above the inert decorative backdrop. */
|
|
443
455
|
.hraness-marketing-hero > :where(.hraness-marketing-hero__copy, .hraness-marketing-hero__frame, .hraness-marketing-proof, .hraness-marketing-facts) {
|
|
444
456
|
position: relative;
|
|
@@ -707,6 +707,17 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
707
707
|
padding-block: var(--hraness-marketing-hero-space, clamp(3.5rem, 9vw, 7rem) clamp(2.5rem, 6vw, 4.5rem));
|
|
708
708
|
}
|
|
709
709
|
|
|
710
|
+
.hraness-marketing-hero[data-layout="split"] {
|
|
711
|
+
grid-template-columns: minmax(0, 1fr);
|
|
712
|
+
align-items: center;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
@media (min-width: 64rem) {
|
|
716
|
+
.hraness-marketing-hero[data-layout="split"] {
|
|
717
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 0.8fr);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
|
|
710
721
|
/* Hero backdrops are retired. Hand-authored markup that still ships the old
|
|
711
722
|
* backdrop hooks paints nothing and takes no space. */
|
|
712
723
|
.hraness-marketing-hero-backdrop {
|
|
@@ -1698,6 +1709,49 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
1698
1709
|
box-shadow: var(--hraness-marketing-surface-shadow);
|
|
1699
1710
|
}
|
|
1700
1711
|
|
|
1712
|
+
.hraness-marketing-card[data-layout="icon"] {
|
|
1713
|
+
display: grid;
|
|
1714
|
+
grid-template-columns: 3.5rem minmax(0, 1fr);
|
|
1715
|
+
align-items: center;
|
|
1716
|
+
gap: 1rem;
|
|
1717
|
+
padding: 1.125rem;
|
|
1718
|
+
}
|
|
1719
|
+
|
|
1720
|
+
.hraness-marketing-card[data-layout="icon"]:focus-visible {
|
|
1721
|
+
outline: 2px solid var(--hraness-marketing-ink);
|
|
1722
|
+
outline-offset: 3px;
|
|
1723
|
+
}
|
|
1724
|
+
|
|
1725
|
+
.hraness-marketing-card__icon {
|
|
1726
|
+
display: flex;
|
|
1727
|
+
align-items: center;
|
|
1728
|
+
justify-content: center;
|
|
1729
|
+
inline-size: 3.5rem;
|
|
1730
|
+
block-size: 3.5rem;
|
|
1731
|
+
min-inline-size: 0;
|
|
1732
|
+
pointer-events: none;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
.hraness-marketing-card__icon > :is(img, svg) {
|
|
1736
|
+
inline-size: 100%;
|
|
1737
|
+
block-size: 100%;
|
|
1738
|
+
object-fit: contain;
|
|
1739
|
+
}
|
|
1740
|
+
|
|
1741
|
+
.hraness-marketing-card__copy {
|
|
1742
|
+
display: grid;
|
|
1743
|
+
align-content: center;
|
|
1744
|
+
min-inline-size: 0;
|
|
1745
|
+
gap: 0.35rem;
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1748
|
+
.hraness-marketing-card[data-layout="icon"] .hraness-marketing-card__meta {
|
|
1749
|
+
overflow: visible;
|
|
1750
|
+
min-block-size: 0;
|
|
1751
|
+
max-block-size: none;
|
|
1752
|
+
overflow-wrap: anywhere;
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1701
1755
|
.hraness-marketing-card__art {
|
|
1702
1756
|
display: flex;
|
|
1703
1757
|
flex: 0 0 auto;
|
|
@@ -2266,6 +2320,11 @@ html:has(:is(.hraness-marketing-header, .hraness-marketing-header-surface):not([
|
|
|
2266
2320
|
}
|
|
2267
2321
|
}
|
|
2268
2322
|
|
|
2323
|
+
/* Supplemental proof belongs below both columns of a split hero. */
|
|
2324
|
+
.hraness-marketing-hero[data-layout="split"] > :where(.hraness-marketing-proof, .hraness-marketing-facts) {
|
|
2325
|
+
grid-column: 1 / -1;
|
|
2326
|
+
}
|
|
2327
|
+
|
|
2269
2328
|
/* Keep all meaningful hero content above the inert decorative backdrop. */
|
|
2270
2329
|
.hraness-marketing-hero > :where(.hraness-marketing-hero__copy, .hraness-marketing-hero__frame, .hraness-marketing-proof, .hraness-marketing-facts) {
|
|
2271
2330
|
position: relative;
|
|
@@ -29,6 +29,10 @@ export const providerMarkAssets = {
|
|
|
29
29
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M13.827 3.52h3.603L24 20h-3.603l-6.57-16.48zm-7.258 0h3.767L16.906 20h-3.674l-1.343-3.461H5.017l-1.344 3.46H0L6.57 3.522zm4.132 9.959L8.453 7.687 6.205 13.48H10.7z\"></path>" },
|
|
30
30
|
art: null,
|
|
31
31
|
},
|
|
32
|
+
"beeper": {
|
|
33
|
+
glyph: { viewBox: "62 47 114 143", body: "<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M62.2222 87.1665C62.2222 65.2221 79.9305 47.1665 102.312 47.1665H135.466C157.607 47.1665 175.555 65.0257 175.555 87.1665C175.529 99.0909 170.321 109.363 163.073 116.194L155.477 123.764C166.539 130.217 175.464 140.342 175.464 154.072C175.464 174.631 158.797 189.389 138.238 189.389H82.2222V121.819C70.3819 114.91 62.2222 101.987 62.2222 87.1665ZM102.312 58.2776C86.1111 58.2776 73.3333 71.2984 73.3333 87.1665C73.3333 103.035 86.1111 116.055 102.312 116.055H116.115L108.437 154.875L155.269 108.286C160.634 103.286 164.444 95.7229 164.444 87.1665C164.444 71.0554 151.25 58.104 135.466 58.2776H102.312Z\" fill=\"currentColor\"/>" },
|
|
34
|
+
art: { viewBox: "0 0 240 241", body: "<g clip-path=\"url(#clip0_2816_41661)\"> <rect width=\"240\" height=\"240\" transform=\"translate(0 0.5)\" fill=\"url(#paint0_linear_2816_41661)\"/> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M62.2222 87.1665C62.2222 65.2221 79.9305 47.1665 102.312 47.1665H135.466C157.607 47.1665 175.555 65.0257 175.555 87.1665C175.529 99.0909 170.321 109.363 163.073 116.194L155.477 123.764C166.539 130.217 175.464 140.342 175.464 154.072C175.464 174.631 158.797 189.389 138.238 189.389H82.2222V121.819C70.3819 114.91 62.2222 101.987 62.2222 87.1665ZM102.312 58.2776C86.1111 58.2776 73.3333 71.2984 73.3333 87.1665C73.3333 103.035 86.1111 116.055 102.312 116.055H116.115L108.437 154.875L155.269 108.286C160.634 103.286 164.444 95.7229 164.444 87.1665C164.444 71.0554 151.25 58.104 135.466 58.2776H102.312Z\" fill=\"white\"/> </g> <defs> <linearGradient id=\"paint0_linear_2816_41661\" x1=\"240\" y1=\"-20.4739\" x2=\"182.953\" y2=\"299.878\" gradientUnits=\"userSpaceOnUse\"> <stop stop-color=\"#6953F2\"/> <stop offset=\"1\" stop-color=\"#0C52F9\"/> <stop offset=\"1\" stop-color=\"#0C52F9\"/> </linearGradient> <clipPath id=\"clip0_2816_41661\"> <rect y=\"0.5\" width=\"240\" height=\"240\" rx=\"120\" fill=\"white\"/> </clipPath> </defs>" },
|
|
35
|
+
},
|
|
32
36
|
"claude": {
|
|
33
37
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z\"></path>" },
|
|
34
38
|
art: { viewBox: "0 0 24 24", body: "<path d=\"M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z\" fill=\"#D97757\" fill-rule=\"nonzero\"></path>" },
|
|
@@ -73,6 +77,10 @@ export const providerMarkAssets = {
|
|
|
73
77
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M21.595 23.61c1.167-.254 2.405-.944 2.405-.944l-2.167-1.784a12.124 12.124 0 01-2.695-3.131 12.127 12.127 0 00-3.97-4.049l-.794-.462a1.115 1.115 0 01-.488-.815.844.844 0 01.154-.575c.413-.582 2.548-3.115 2.94-3.44.503-.416 1.065-.762 1.586-1.159.074-.056.148-.112.221-.17.003-.002.007-.004.009-.007.167-.131.325-.272.45-.438.453-.524.563-.988.59-1.193-.061-.197-.244-.639-.753-1.148.319.02.705.272 1.056.569.235-.376.481-.773.727-1.171.165-.266-.08-.465-.086-.471h-.001V3.22c-.007-.007-.206-.25-.471-.086-.567.35-1.134.702-1.639 1.021 0 0-.597-.012-1.305.599a2.464 2.464 0 00-.438.45l-.007.009c-.058.072-.114.147-.17.221-.397.521-.743 1.083-1.16 1.587-.323.391-2.857 2.526-3.44 2.94a.842.842 0 01-.574.153 1.115 1.115 0 01-.815-.488l-.462-.794a12.123 12.123 0 00-4.049-3.97 12.133 12.133 0 01-3.13-2.695L1.332 0S.643 1.238.39 2.405c.352.428 1.27 1.49 2.34 2.302C1.58 4.167.73 3.75.06 3.4c-.103.765-.063 1.92.043 2.816.726.317 1.961.806 3.219 1.066-1.006.236-2.11.278-2.961.262.15.554.358 1.119.64 1.688.119.263.25.52.39.77.452.125 2.222.383 3.164.171l-2.51.897a27.776 27.776 0 002.544 2.726c2.031-1.092 2.494-1.241 4.018-2.238-2.467 2.008-3.108 2.828-3.8 3.67l-.483.678c-.25.351-.469.725-.65 1.117-.61 1.31-1.47 4.1-1.47 4.1-.154.486.202.842.674.674 0 0 2.79-.861 4.1-1.47.392-.182.766-.4 1.118-.65l.677-.483c.227-.187.453-.37.701-.586 0 0 1.705 2.02 3.458 3.349l.896-2.511c-.211.942.046 2.712.17 3.163.252.142.509.272.772.392.569.28 1.134.49 1.688.64-.016-.853.026-1.956.261-2.962.26 1.258.75 2.493 1.067 3.219.895.106 2.051.146 2.816.043a73.87 73.87 0 01-1.308-2.67c.811 1.07 1.874 1.988 2.302 2.34h-.001z\"></path>" },
|
|
74
78
|
art: null,
|
|
75
79
|
},
|
|
80
|
+
"imessage": {
|
|
81
|
+
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M5.285 0A5.273 5.273 0 0 0 0 5.285v13.43A5.273 5.273 0 0 0 5.285 24h13.43A5.273 5.273 0 0 0 24 18.715V5.285A5.273 5.273 0 0 0 18.715 0ZM12 4.154a8.809 7.337 0 0 1 8.809 7.338A8.809 7.337 0 0 1 12 18.828a8.809 7.337 0 0 1-2.492-.303A8.656 7.337 0 0 1 5.93 19.93a9.929 7.337 0 0 0 1.54-2.155 8.809 7.337 0 0 1-4.279-6.283A8.809 7.337 0 0 1 12 4.154\"/>" },
|
|
82
|
+
art: null,
|
|
83
|
+
},
|
|
76
84
|
"mem0": {
|
|
77
85
|
glyph: { viewBox: "0 0 100 100", body: "<g fill=\"currentColor\" clip-path=\"url(#mem0-clip)\"><path d=\"M50.004 41.547a8.446 8.446 0 0 0-8.45 8.449 8.446 8.446 0 0 0 8.45 8.449 8.447 8.447 0 0 0 8.449-8.45 8.446 8.446 0 0 0-8.45-8.448m.042-16.531a2.513 2.513 0 0 0 2.463-2.553A2.486 2.486 0 0 0 49.955 20a2.486 2.486 0 0 0-2.462 2.553 2.486 2.486 0 0 0 2.552 2.463m-.089 49.963a2.486 2.486 0 0 0-2.463 2.552 2.486 2.486 0 0 0 2.552 2.463 2.513 2.513 0 0 0 2.463-2.552 2.486 2.486 0 0 0-2.553-2.463M32.372 32.3a2.513 2.513 0 0 0-.065-3.547 2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548 2.487 2.487 0 0 0 3.548-.065m35.262 35.394a2.487 2.487 0 0 0 .065 3.548 2.487 2.487 0 0 0 3.548-.065 2.513 2.513 0 0 0-.065-3.548 2.487 2.487 0 0 0-3.548.065m.065-35.329c.98.944 2.572.946 3.548-.065a2.487 2.487 0 0 0-.065-3.548 2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548M32.307 67.63a2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548c.98.944 2.572.946 3.548-.065a2.487 2.487 0 0 0-.065-3.548m45.046-20.136a2.487 2.487 0 0 0-2.364 2.647 2.514 2.514 0 0 0 2.646 2.364 2.487 2.487 0 0 0 2.364-2.646 2.484 2.484 0 0 0-2.646-2.362zM22.65 52.501a2.487 2.487 0 0 0 2.365-2.646 2.485 2.485 0 0 0-2.646-2.362 2.487 2.487 0 0 0-2.365 2.646 2.515 2.515 0 0 0 2.646 2.364zm23.463-16.915a4.37 4.37 0 0 0 6.053 1.152c1.125-.765 1.819-2.005 1.904-3.403.062-.908.261-2.196 1.268-2.89 1.03-.655 2.293-.335 3.154-.04 1.32.467 2.732.313 3.875-.425a4.32 4.32 0 0 0 1.894-2.743 4.32 4.32 0 0 0-.597-3.28l-.174-.26a4.37 4.37 0 0 0-6.053-1.152c-1.126.764-1.82 2.003-1.904 3.402-.063.908-.262 2.196-1.269 2.89-1.029.655-2.293.335-3.154.04-1.317-.467-2.731-.313-3.874.425a4.36 4.36 0 0 0-1.3 6.022l.175.262zm-9.602 40.709a4.37 4.37 0 0 0 6.053 1.152c1.126-.765 1.82-2.005 1.904-3.403.063-.908.262-2.197 1.269-2.89 1.029-.655 2.292-.335 3.154-.04 1.32.467 2.731.313 3.874-.425a4.32 4.32 0 0 0 1.895-2.743 4.32 4.32 0 0 0-.597-3.28l-.175-.26a4.37 4.37 0 0 0-6.053-1.152c-1.125.764-1.819 2.003-1.904 3.401-.062.909-.261 2.197-1.268 2.89-1.03.656-2.293.336-3.154.041-1.318-.468-2.732-.313-3.875.425a4.36 4.36 0 0 0-1.3 6.022l.175.262zM57.42 37.048q-.08.434-.076.872a4.37 4.37 0 0 0 3.548 4.217c1.338.252 2.705-.137 3.75-1.067.686-.6 1.735-1.372 2.939-1.15 1.19.261 1.86 1.38 2.261 2.199.604 1.261 1.714 2.15 3.045 2.434a4.33 4.33 0 0 0 3.28-.604 4.32 4.32 0 0 0 1.892-2.745l.062-.309q.082-.435.076-.872a4.37 4.37 0 0 0-3.548-4.217c-1.337-.253-2.702.137-3.749 1.067-.687.6-1.738 1.371-2.94 1.15-1.19-.262-1.86-1.38-2.26-2.2-.605-1.26-1.714-2.149-3.043-2.433a4.36 4.36 0 0 0-5.172 3.349l-.062.309zm-35.539 22.05q-.08.435-.076.873a4.37 4.37 0 0 0 3.548 4.216c1.338.253 2.704-.136 3.75-1.067.686-.6 1.735-1.37 2.938-1.15 1.19.262 1.862 1.38 2.262 2.2.604 1.261 1.714 2.15 3.045 2.433A4.33 4.33 0 0 0 40.627 66a4.32 4.32 0 0 0 1.892-2.744l.063-.31q.081-.433.076-.871a4.37 4.37 0 0 0-3.548-4.217c-1.337-.253-2.702.136-3.749 1.067-.686.6-1.738 1.371-2.94 1.15-1.19-.262-1.86-1.38-2.26-2.2-.605-1.261-1.714-2.149-3.043-2.433a4.36 4.36 0 0 0-5.172 3.349l-.062.308zm42.525-13.01a4.5 4.5 0 0 0-.671.563 4.37 4.37 0 0 0-.472 5.49c.767 1.125 2.009 1.816 3.404 1.897.909.06 2.197.26 2.893 1.264.657 1.027.34 2.29.045 3.154-.466 1.32-.31 2.731.431 3.874a4.33 4.33 0 0 0 2.745 1.89 4.33 4.33 0 0 0 3.28-.601l.261-.175q.365-.25.671-.563a4.37 4.37 0 0 0 .472-5.49c-.767-1.123-2.006-1.816-3.404-1.897-.909-.06-2.2-.26-2.893-1.264-.657-1.026-.34-2.29-.044-3.154.465-1.32.308-2.731-.432-3.872a4.36 4.36 0 0 0-6.024-1.288l-.262.174zM23.687 36.55a4.5 4.5 0 0 0-.671.564 4.37 4.37 0 0 0-.472 5.49c.767 1.125 2.009 1.816 3.405 1.897.908.06 2.196.26 2.892 1.264.658 1.026.34 2.29.045 3.154-.465 1.32-.309 2.731.432 3.874a4.32 4.32 0 0 0 2.744 1.89 4.33 4.33 0 0 0 3.28-.601l.261-.175q.365-.25.672-.563a4.37 4.37 0 0 0 .472-5.49c-.768-1.123-2.007-1.816-3.405-1.897-.908-.06-2.2-.26-2.892-1.264-.658-1.027-.34-2.29-.045-3.154.465-1.32.308-2.731-.432-3.872a4.36 4.36 0 0 0-6.024-1.289l-.262.175zm39.268 20.868a4.4 4.4 0 0 0-.873-.076 4.37 4.37 0 0 0-4.217 3.548c-.252 1.338.137 2.705 1.067 3.75.6.686 1.372 1.735 1.15 2.939-.261 1.19-1.38 1.86-2.199 2.261-1.261.604-2.15 1.714-2.433 3.045a4.33 4.33 0 0 0 .603 3.28 4.32 4.32 0 0 0 2.745 1.892l.309.062q.435.082.872.076a4.37 4.37 0 0 0 4.217-3.547c.253-1.338-.136-2.703-1.067-3.75-.6-.686-1.371-1.738-1.15-2.94.262-1.19 1.38-1.86 2.2-2.26 1.26-.605 2.149-1.714 2.433-3.043a4.36 4.36 0 0 0-3.349-5.172l-.308-.062zM40.9 21.88a4.4 4.4 0 0 0-.872-.077 4.37 4.37 0 0 0-4.217 3.548c-.253 1.338.136 2.704 1.067 3.75.6.686 1.371 1.735 1.15 2.939-.262 1.19-1.38 1.86-2.2 2.261-1.26.604-2.149 1.714-2.433 3.045a4.33 4.33 0 0 0 .604 3.28 4.32 4.32 0 0 0 2.745 1.892l.308.062q.435.081.873.076a4.37 4.37 0 0 0 4.216-3.548c.253-1.337-.136-2.702-1.067-3.749-.6-.687-1.37-1.738-1.15-2.94.262-1.19 1.38-1.86 2.2-2.26 1.261-.605 2.15-1.714 2.433-3.043a4.36 4.36 0 0 0-3.348-5.172l-.31-.062z\"/></g><defs><clipPath id=\"mem0-clip\"><path fill=\"currentColor\" d=\"M20 20h60v59.998H20z\"/></clipPath></defs>" },
|
|
78
86
|
art: { viewBox: "0 0 100 100", body: "<rect width=\"100\" height=\"100\" fill=\"#CBB2FF\" rx=\"12\"/><g fill=\"#09090B\" clip-path=\"url(#mem0-clip)\"><path d=\"M50.004 41.547a8.446 8.446 0 0 0-8.45 8.449 8.446 8.446 0 0 0 8.45 8.449 8.447 8.447 0 0 0 8.449-8.45 8.446 8.446 0 0 0-8.45-8.448m.042-16.531a2.513 2.513 0 0 0 2.463-2.553A2.486 2.486 0 0 0 49.955 20a2.486 2.486 0 0 0-2.462 2.553 2.486 2.486 0 0 0 2.552 2.463m-.089 49.963a2.486 2.486 0 0 0-2.463 2.552 2.486 2.486 0 0 0 2.552 2.463 2.513 2.513 0 0 0 2.463-2.552 2.486 2.486 0 0 0-2.553-2.463M32.372 32.3a2.513 2.513 0 0 0-.065-3.547 2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548 2.487 2.487 0 0 0 3.548-.065m35.262 35.394a2.487 2.487 0 0 0 .065 3.548 2.487 2.487 0 0 0 3.548-.065 2.513 2.513 0 0 0-.065-3.548 2.487 2.487 0 0 0-3.548.065m.065-35.329c.98.944 2.572.946 3.548-.065a2.487 2.487 0 0 0-.065-3.548 2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548M32.307 67.63a2.487 2.487 0 0 0-3.548.065 2.487 2.487 0 0 0 .065 3.548c.98.944 2.572.946 3.548-.065a2.487 2.487 0 0 0-.065-3.548m45.046-20.136a2.487 2.487 0 0 0-2.364 2.647 2.514 2.514 0 0 0 2.646 2.364 2.487 2.487 0 0 0 2.364-2.646 2.484 2.484 0 0 0-2.646-2.362zM22.65 52.501a2.487 2.487 0 0 0 2.365-2.646 2.485 2.485 0 0 0-2.646-2.362 2.487 2.487 0 0 0-2.365 2.646 2.515 2.515 0 0 0 2.646 2.364zm23.463-16.915a4.37 4.37 0 0 0 6.053 1.152c1.125-.765 1.819-2.005 1.904-3.403.062-.908.261-2.196 1.268-2.89 1.03-.655 2.293-.335 3.154-.04 1.32.467 2.732.313 3.875-.425a4.32 4.32 0 0 0 1.894-2.743 4.32 4.32 0 0 0-.597-3.28l-.174-.26a4.37 4.37 0 0 0-6.053-1.152c-1.126.764-1.82 2.003-1.904 3.402-.063.908-.262 2.196-1.269 2.89-1.029.655-2.293.335-3.154.04-1.317-.467-2.731-.313-3.874.425a4.36 4.36 0 0 0-1.3 6.022l.175.262zm-9.602 40.709a4.37 4.37 0 0 0 6.053 1.152c1.126-.765 1.82-2.005 1.904-3.403.063-.908.262-2.197 1.269-2.89 1.029-.655 2.292-.335 3.154-.04 1.32.467 2.731.313 3.874-.425a4.32 4.32 0 0 0 1.895-2.743 4.32 4.32 0 0 0-.597-3.28l-.175-.26a4.37 4.37 0 0 0-6.053-1.152c-1.125.764-1.819 2.003-1.904 3.401-.062.909-.261 2.197-1.268 2.89-1.03.656-2.293.336-3.154.041-1.318-.468-2.732-.313-3.875.425a4.36 4.36 0 0 0-1.3 6.022l.175.262zM57.42 37.048q-.08.434-.076.872a4.37 4.37 0 0 0 3.548 4.217c1.338.252 2.705-.137 3.75-1.067.686-.6 1.735-1.372 2.939-1.15 1.19.261 1.86 1.38 2.261 2.199.604 1.261 1.714 2.15 3.045 2.434a4.33 4.33 0 0 0 3.28-.604 4.32 4.32 0 0 0 1.892-2.745l.062-.309q.082-.435.076-.872a4.37 4.37 0 0 0-3.548-4.217c-1.337-.253-2.702.137-3.749 1.067-.687.6-1.738 1.371-2.94 1.15-1.19-.262-1.86-1.38-2.26-2.2-.605-1.26-1.714-2.149-3.043-2.433a4.36 4.36 0 0 0-5.172 3.349l-.062.309zm-35.539 22.05q-.08.435-.076.873a4.37 4.37 0 0 0 3.548 4.216c1.338.253 2.704-.136 3.75-1.067.686-.6 1.735-1.37 2.938-1.15 1.19.262 1.862 1.38 2.262 2.2.604 1.261 1.714 2.15 3.045 2.433A4.33 4.33 0 0 0 40.627 66a4.32 4.32 0 0 0 1.892-2.744l.063-.31q.081-.433.076-.871a4.37 4.37 0 0 0-3.548-4.217c-1.337-.253-2.702.136-3.749 1.067-.686.6-1.738 1.371-2.94 1.15-1.19-.262-1.86-1.38-2.26-2.2-.605-1.261-1.714-2.149-3.043-2.433a4.36 4.36 0 0 0-5.172 3.349l-.062.308zm42.525-13.01a4.5 4.5 0 0 0-.671.563 4.37 4.37 0 0 0-.472 5.49c.767 1.125 2.009 1.816 3.404 1.897.909.06 2.197.26 2.893 1.264.657 1.027.34 2.29.045 3.154-.466 1.32-.31 2.731.431 3.874a4.33 4.33 0 0 0 2.745 1.89 4.33 4.33 0 0 0 3.28-.601l.261-.175q.365-.25.671-.563a4.37 4.37 0 0 0 .472-5.49c-.767-1.123-2.006-1.816-3.404-1.897-.909-.06-2.2-.26-2.893-1.264-.657-1.026-.34-2.29-.044-3.154.465-1.32.308-2.731-.432-3.872a4.36 4.36 0 0 0-6.024-1.288l-.262.174zM23.687 36.55a4.5 4.5 0 0 0-.671.564 4.37 4.37 0 0 0-.472 5.49c.767 1.125 2.009 1.816 3.405 1.897.908.06 2.196.26 2.892 1.264.658 1.026.34 2.29.045 3.154-.465 1.32-.309 2.731.432 3.874a4.32 4.32 0 0 0 2.744 1.89 4.33 4.33 0 0 0 3.28-.601l.261-.175q.365-.25.672-.563a4.37 4.37 0 0 0 .472-5.49c-.768-1.123-2.007-1.816-3.405-1.897-.908-.06-2.2-.26-2.892-1.264-.658-1.027-.34-2.29-.045-3.154.465-1.32.308-2.731-.432-3.872a4.36 4.36 0 0 0-6.024-1.289l-.262.175zm39.268 20.868a4.4 4.4 0 0 0-.873-.076 4.37 4.37 0 0 0-4.217 3.548c-.252 1.338.137 2.705 1.067 3.75.6.686 1.372 1.735 1.15 2.939-.261 1.19-1.38 1.86-2.199 2.261-1.261.604-2.15 1.714-2.433 3.045a4.33 4.33 0 0 0 .603 3.28 4.32 4.32 0 0 0 2.745 1.892l.309.062q.435.082.872.076a4.37 4.37 0 0 0 4.217-3.547c.253-1.338-.136-2.703-1.067-3.75-.6-.686-1.371-1.738-1.15-2.94.262-1.19 1.38-1.86 2.2-2.26 1.26-.605 2.149-1.714 2.433-3.043a4.36 4.36 0 0 0-3.349-5.172l-.308-.062zM40.9 21.88a4.4 4.4 0 0 0-.872-.077 4.37 4.37 0 0 0-4.217 3.548c-.253 1.338.136 2.704 1.067 3.75.6.686 1.371 1.735 1.15 2.939-.262 1.19-1.38 1.86-2.2 2.261-1.26.604-2.149 1.714-2.433 3.045a4.33 4.33 0 0 0 .604 3.28 4.32 4.32 0 0 0 2.745 1.892l.308.062q.435.081.873.076a4.37 4.37 0 0 0 4.216-3.548c.253-1.337-.136-2.702-1.067-3.749-.6-.687-1.37-1.738-1.15-2.94.262-1.19 1.38-1.86 2.2-2.26 1.261-.605 2.15-1.714 2.433-3.043a4.36 4.36 0 0 0-3.348-5.172l-.31-.062z\"/></g><defs><clipPath id=\"mem0-clip\"><path fill=\"#fff\" d=\"M20 20h60v59.998H20z\"/></clipPath></defs>" },
|
|
@@ -97,6 +105,10 @@ export const providerMarkAssets = {
|
|
|
97
105
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M9.643 14.012c.615-.183 1.605-.465 2.745-.534-.684-1.725-.849-3.235-.716-4.579.153-1.552.7-2.847 1.234-3.95.114-.235.223-.454.328-.664.149-.297.289-.577.42-.86.217-.47.378-.885.46-1.27.08-.38.08-.719-.014-1.044-.095-.325-.297-.675-.681-1.06a1.6 1.6 0 00-1.475.36l-4.95 4.453a1.602 1.602 0 00-.512.952l-.427 2.83c.67.592 2.327 2.317 3.335 4.71.09.213.174.432.253.656zM5.855 9.937c-.024.1-.057.197-.099.29L3.14 16.058a1.602 1.602 0 00.313 1.772l4.117 4.24c2.102-3.102 1.795-6.02.835-8.3-.728-1.73-1.832-3.083-2.55-3.833z\"></path><path d=\"M8.52 22.57c.073.01.146.018.22.02.781.023 2.095.091 3.16.288.87.16 2.593.642 4.011 1.056 1.082.316 2.197-.548 2.354-1.664.115-.814.33-1.735.725-2.58l-.009.004c-.67-1.87-1.523-3.077-2.417-3.847a5.294 5.294 0 00-2.777-1.258c-1.541-.216-2.952.189-3.841.45.532 2.218.368 4.828-1.425 7.53z\"></path><path d=\"M19.676 18.538a69.072 69.072 0 001.858-2.952.811.811 0 00-.061-.901c-.516-.684-1.504-2.075-2.042-3.362-.554-1.323-.636-3.378-.64-4.378a1.708 1.708 0 00-.359-1.051L15.235 1.83a3.757 3.757 0 01-.076.545c-.107.503-.307 1.004-.536 1.498-.135.29-.29.601-.446.915-.105.21-.21.42-.31.626-.517 1.068-.998 2.227-1.132 3.59-.125 1.262.046 2.73.814 4.484.128.01.257.025.386.043a6.364 6.364 0 013.327 1.506c.916.79 1.743 1.921 2.414 3.5z\"></path>" },
|
|
98
106
|
art: { viewBox: "0 0 24 24", body: "<path d=\"M9.643 14.012c.615-.183 1.605-.465 2.745-.534-.684-1.725-.849-3.235-.716-4.579.153-1.552.7-2.847 1.234-3.95.114-.235.223-.454.328-.664.149-.297.289-.577.42-.86.217-.47.378-.885.46-1.27.08-.38.08-.719-.014-1.044-.095-.325-.297-.675-.681-1.06a1.6 1.6 0 00-1.475.36l-4.95 4.453a1.602 1.602 0 00-.512.952l-.427 2.83c.67.592 2.327 2.317 3.335 4.71.09.213.174.432.253.656zM5.855 9.937c-.024.1-.057.197-.099.29L3.14 16.058a1.602 1.602 0 00.313 1.772l4.117 4.24c2.102-3.102 1.795-6.02.835-8.3-.728-1.73-1.832-3.083-2.55-3.833z\" fill=\"#A88BFA\"></path><path d=\"M8.52 22.57c.073.01.146.018.22.02.781.023 2.095.091 3.16.288.87.16 2.593.642 4.011 1.056 1.082.316 2.197-.548 2.354-1.664.115-.814.33-1.735.725-2.58l-.009.004c-.67-1.87-1.523-3.077-2.417-3.847a5.294 5.294 0 00-2.777-1.258c-1.541-.216-2.952.189-3.841.45.532 2.218.368 4.828-1.425 7.53z\" fill=\"#A88BFA\"></path><path d=\"M19.676 18.538a69.072 69.072 0 001.858-2.952.811.811 0 00-.061-.901c-.516-.684-1.504-2.075-2.042-3.362-.554-1.323-.636-3.378-.64-4.378a1.708 1.708 0 00-.359-1.051L15.235 1.83a3.757 3.757 0 01-.076.545c-.107.503-.307 1.004-.536 1.498-.135.29-.29.601-.446.915-.105.21-.21.42-.31.626-.517 1.068-.998 2.227-1.132 3.59-.125 1.262.046 2.73.814 4.484.128.01.257.025.386.043a6.364 6.364 0 013.327 1.506c.916.79 1.743 1.921 2.414 3.5z\" fill=\"#A88BFA\"></path>" },
|
|
99
107
|
},
|
|
108
|
+
"ollama": {
|
|
109
|
+
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M7.905 1.09c.216.085.411.225.588.41.295.306.544.744.734 1.263.191.522.315 1.1.362 1.68a5.054 5.054 0 012.049-.636l.051-.004c.87-.07 1.73.087 2.48.474.101.053.2.11.297.17.05-.569.172-1.134.36-1.644.19-.52.439-.957.733-1.264a1.67 1.67 0 01.589-.41c.257-.1.53-.118.796-.042.401.114.745.368 1.016.737.248.337.434.769.561 1.287.23.934.27 2.163.115 3.645l.053.04.026.019c.757.576 1.284 1.397 1.563 2.35.435 1.487.216 3.155-.534 4.088l-.018.021.002.003c.417.762.67 1.567.724 2.4l.002.03c.064 1.065-.2 2.137-.814 3.19l-.007.01.01.024c.472 1.157.62 2.322.438 3.486l-.006.039a.651.651 0 01-.747.536.648.648 0 01-.54-.742c.167-1.033.01-2.069-.48-3.123a.643.643 0 01.04-.617l.004-.006c.604-.924.854-1.83.8-2.72-.046-.779-.325-1.544-.8-2.273a.644.644 0 01.18-.886l.009-.006c.243-.159.467-.565.58-1.12a4.229 4.229 0 00-.095-1.974c-.205-.7-.58-1.284-1.105-1.683-.595-.454-1.383-.673-2.38-.61a.653.653 0 01-.632-.371c-.314-.665-.772-1.141-1.343-1.436a3.288 3.288 0 00-1.772-.332c-1.245.099-2.343.801-2.67 1.686a.652.652 0 01-.61.425c-1.067.002-1.893.252-2.497.703-.522.39-.878.935-1.066 1.588a4.07 4.07 0 00-.068 1.886c.112.558.331 1.02.582 1.269l.008.007c.212.207.257.53.109.785-.36.622-.629 1.549-.673 2.44-.05 1.018.186 1.902.719 2.536l.016.019a.643.643 0 01.095.69c-.576 1.236-.753 2.252-.562 3.052a.652.652 0 01-1.269.298c-.243-1.018-.078-2.184.473-3.498l.014-.035-.008-.012a4.339 4.339 0 01-.598-1.309l-.005-.019a5.764 5.764 0 01-.177-1.785c.044-.91.278-1.842.622-2.59l.012-.026-.002-.002c-.293-.418-.51-.953-.63-1.545l-.005-.024a5.352 5.352 0 01.093-2.49c.262-.915.777-1.701 1.536-2.269.06-.045.123-.09.186-.132-.159-1.493-.119-2.73.112-3.67.127-.518.314-.95.562-1.287.27-.368.614-.622 1.015-.737.266-.076.54-.059.797.042zm4.116 9.09c.936 0 1.8.313 2.446.855.63.527 1.005 1.235 1.005 1.94 0 .888-.406 1.58-1.133 2.022-.62.375-1.451.557-2.403.557-1.009 0-1.871-.259-2.493-.734-.617-.47-.963-1.13-.963-1.845 0-.707.398-1.417 1.056-1.946.668-.537 1.55-.849 2.485-.849zm0 .896a3.07 3.07 0 00-1.916.65c-.461.37-.722.835-.722 1.25 0 .428.21.829.61 1.134.455.347 1.124.548 1.943.548.799 0 1.473-.147 1.932-.426.463-.28.7-.686.7-1.257 0-.423-.246-.89-.683-1.256-.484-.405-1.14-.643-1.864-.643zm.662 1.21l.004.004c.12.151.095.37-.056.49l-.292.23v.446a.375.375 0 01-.376.373.375.375 0 01-.376-.373v-.46l-.271-.218a.347.347 0 01-.052-.49.353.353 0 01.494-.051l.215.172.22-.174a.353.353 0 01.49.051zm-5.04-1.919c.478 0 .867.39.867.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zm8.706 0c.48 0 .868.39.868.871a.87.87 0 01-.868.871.87.87 0 01-.867-.87.87.87 0 01.867-.872zM7.44 2.3l-.003.002a.659.659 0 00-.285.238l-.005.006c-.138.189-.258.467-.348.832-.17.692-.216 1.631-.124 2.782.43-.128.899-.208 1.404-.237l.01-.001.019-.034c.046-.082.095-.161.148-.239.123-.771.022-1.692-.253-2.444-.134-.364-.297-.65-.453-.813a.628.628 0 00-.107-.09L7.44 2.3zm9.174.04l-.002.001a.628.628 0 00-.107.09c-.156.163-.32.45-.453.814-.29.794-.387 1.776-.23 2.572l.058.097.008.014h.03a5.184 5.184 0 011.466.212c.086-1.124.038-2.043-.128-2.722-.09-.365-.21-.643-.349-.832l-.004-.006a.659.659 0 00-.285-.239h-.004z\"></path>" },
|
|
110
|
+
art: null,
|
|
111
|
+
},
|
|
100
112
|
"openai": {
|
|
101
113
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M9.205 8.658v-2.26c0-.19.072-.333.238-.428l4.543-2.616c.619-.357 1.356-.523 2.117-.523 2.854 0 4.662 2.212 4.662 4.566 0 .167 0 .357-.024.547l-4.71-2.759a.797.797 0 00-.856 0l-5.97 3.473zm10.609 8.8V12.06c0-.333-.143-.57-.429-.737l-5.97-3.473 1.95-1.118a.433.433 0 01.476 0l4.543 2.617c1.309.76 2.189 2.378 2.189 3.948 0 1.808-1.07 3.473-2.76 4.163zM7.802 12.703l-1.95-1.142c-.167-.095-.239-.238-.239-.428V5.899c0-2.545 1.95-4.472 4.591-4.472 1 0 1.927.333 2.712.928L8.23 5.067c-.285.166-.428.404-.428.737v6.898zM12 15.128l-2.795-1.57v-3.33L12 8.658l2.795 1.57v3.33L12 15.128zm1.796 7.23c-1 0-1.927-.332-2.712-.927l4.686-2.712c.285-.166.428-.404.428-.737v-6.898l1.974 1.142c.167.095.238.238.238.428v5.233c0 2.545-1.974 4.472-4.614 4.472zm-5.637-5.303l-4.544-2.617c-1.308-.761-2.188-2.378-2.188-3.948A4.482 4.482 0 014.21 6.327v5.423c0 .333.143.571.428.738l5.947 3.449-1.95 1.118a.432.432 0 01-.476 0zm-.262 3.9c-2.688 0-4.662-2.021-4.662-4.519 0-.19.024-.38.047-.57l4.686 2.71c.286.167.571.167.856 0l5.97-3.448v2.26c0 .19-.07.333-.237.428l-4.543 2.616c-.619.357-1.356.523-2.117.523zm5.899 2.83a5.947 5.947 0 005.827-4.756C22.287 18.339 24 15.84 24 13.296c0-1.665-.713-3.282-1.998-4.448.119-.5.19-.999.19-1.498 0-3.401-2.759-5.947-5.946-5.947-.642 0-1.26.095-1.88.31A5.962 5.962 0 0010.205 0a5.947 5.947 0 00-5.827 4.757C1.713 5.447 0 7.945 0 10.49c0 1.666.713 3.283 1.998 4.448-.119.5-.19 1-.19 1.499 0 3.401 2.759 5.946 5.946 5.946.642 0 1.26-.095 1.88-.309a5.96 5.96 0 004.162 1.713z\"></path>" },
|
|
102
114
|
art: null,
|
|
@@ -117,6 +129,14 @@ export const providerMarkAssets = {
|
|
|
117
129
|
glyph: { viewBox: "0 0 206 168", body: "<path fill=\"currentColor\" d=\"M205.864 66.263h-76.401V0h-24.684v71.897c0 7.636 3.021 14.97 8.391 20.373l62.383 62.777 17.454-17.564-46.076-46.365h58.948v-24.84l-.015-.015ZM12.872 30.517l46.075 46.365H0v24.84h76.4v66.264h24.685V96.089c0-7.637-3.021-14.97-8.39-20.374l-62.37-62.762-17.453 17.564Z\"/>" },
|
|
118
130
|
art: null,
|
|
119
131
|
},
|
|
132
|
+
"vercel": {
|
|
133
|
+
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M12 0l12 20.785H0L12 0z\"></path>" },
|
|
134
|
+
art: null,
|
|
135
|
+
},
|
|
136
|
+
"whatsapp": {
|
|
137
|
+
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z\"/>" },
|
|
138
|
+
art: null,
|
|
139
|
+
},
|
|
120
140
|
"xai": {
|
|
121
141
|
glyph: { viewBox: "0 0 24 24", body: "<path d=\"M6.469 8.776L16.512 23h-4.464L2.005 8.776H6.47zm-.004 7.9l2.233 3.164L6.467 23H2l4.465-6.324zM22 2.582V23h-3.659V7.764L22 2.582zM22 1l-9.952 14.095-2.233-3.163L17.533 1H22z\"></path>" },
|
|
122
142
|
art: null,
|
package/src/provider-marks.ts
CHANGED
|
@@ -31,6 +31,7 @@ const MARK_SPECS = {
|
|
|
31
31
|
alibabacloud: { accent: "#ff6a00", aliases: ["alibaba", "alibaba cloud"], kind: "vendor", name: "Alibaba Cloud" },
|
|
32
32
|
amp: { accent: "#f34e3f", aliases: ["amp"], kind: "agent", name: "Amp" },
|
|
33
33
|
anthropic: { accent: "#d97757", aliases: ["anthropic"], kind: "vendor", name: "Anthropic" },
|
|
34
|
+
beeper: { accent: "#6953f2", aliases: ["beeper", "beeper chat"], kind: "vendor", name: "Beeper" },
|
|
34
35
|
claude: { accent: "#d97757", aliases: ["claude"], kind: "vendor", name: "Claude" },
|
|
35
36
|
claudecode: { accent: "#d97757", aliases: ["claude code", "claude-code"], kind: "agent", name: "Claude Code" },
|
|
36
37
|
codex: { accent: "#111418", aliases: ["codex", "codex cli"], kind: "agent", name: "Codex" },
|
|
@@ -42,17 +43,21 @@ const MARK_SPECS = {
|
|
|
42
43
|
geminicli: { accent: "#3186ff", aliases: ["gemini cli", "gemini-cli"], kind: "agent", name: "Gemini CLI" },
|
|
43
44
|
githubcopilot: { accent: "#1f2328", aliases: ["github copilot", "github-copilot", "copilot"], kind: "agent", name: "GitHub Copilot" },
|
|
44
45
|
goose: { accent: "#0e7c86", aliases: ["goose", "block goose"], kind: "agent", name: "Goose" },
|
|
46
|
+
imessage: { accent: "#34da50", aliases: ["imessage", "apple messages"], kind: "vendor", name: "iMessage" },
|
|
45
47
|
mem0: { accent: "#cbb2ff", aliases: ["mem0", "memzero"], kind: "vendor", name: "Mem0" },
|
|
46
48
|
meta: { accent: "#0082fb", aliases: ["meta", "meta ai", "llama"], kind: "vendor", name: "Meta" },
|
|
47
49
|
mistral: { accent: "#fa500f", aliases: ["mistral", "mistral ai"], kind: "vendor", name: "Mistral" },
|
|
48
50
|
moonshot: { accent: "#5b5bd6", aliases: ["moonshot", "moonshot ai", "kimi"], kind: "vendor", name: "Moonshot AI" },
|
|
49
51
|
nvidia: { accent: "#74b71b", aliases: ["nvidia"], kind: "vendor", name: "NVIDIA" },
|
|
50
52
|
obsidian: { accent: "#7c3aed", aliases: ["obsidian", "obsidian md"], kind: "vendor", name: "Obsidian" },
|
|
53
|
+
ollama: { accent: "#111111", aliases: ["ollama"], kind: "vendor", name: "Ollama" },
|
|
51
54
|
openai: { accent: "#0f1014", aliases: ["openai", "chatgpt", "gpt"], kind: "vendor", name: "OpenAI" },
|
|
52
55
|
perplexity: { accent: "#22b8cd", aliases: ["perplexity", "perplexity ai"], kind: "vendor", name: "Perplexity" },
|
|
53
56
|
opencode: { accent: "#d97706", aliases: ["opencode", "open code"], kind: "agent", name: "opencode" },
|
|
54
57
|
qwen: { accent: "#615ced", aliases: ["qwen", "tongyi"], kind: "vendor", name: "Qwen" },
|
|
55
58
|
supermemory: { accent: "#2563eb", aliases: ["supermemory", "supermemory ai"], kind: "vendor", name: "Supermemory" },
|
|
59
|
+
vercel: { accent: "#000000", aliases: ["vercel", "vercel ai gateway"], kind: "vendor", name: "Vercel" },
|
|
60
|
+
whatsapp: { accent: "#25d366", aliases: ["whatsapp", "whats app"], kind: "vendor", name: "WhatsApp" },
|
|
56
61
|
xai: { accent: "#1a1a1a", aliases: ["xai", "x.ai", "grok", "spacexai"], kind: "vendor", name: "xAI" },
|
|
57
62
|
zai: { accent: "#2d4d9e", aliases: ["zai", "z.ai", "z ai", "zhipu"], kind: "vendor", name: "Z.AI" },
|
|
58
63
|
} as const satisfies Record<keyof typeof providerMarkAssets, ProviderMarkSpec>;
|