@exponential_app/eui 0.0.0-stage → 0.2.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/LICENSE +201 -0
- package/NOTICE +54 -0
- package/README.md +377 -2
- package/catalog/a11y.json +705 -0
- package/catalog/basic-map.json +104 -0
- package/catalog/code.json +58 -0
- package/catalog/core.catalog.json +5190 -0
- package/catalog/core.schema.json +24542 -0
- package/catalog/host.json +95 -0
- package/catalog/layout.json +20 -0
- package/catalog/limits.json +9 -0
- package/catalog/locale.json +48 -0
- package/catalog/macros.json +4152 -0
- package/catalog/recipes.json +64 -0
- package/catalog/strings.json +84 -0
- package/catalog/style.json +180 -0
- package/catalog/theme.schema.json +47754 -0
- package/catalog/tokens.json +47 -0
- package/conformance/README.md +218 -0
- package/conformance/baseline.ts +101 -0
- package/conformance/browser-page.ts +146 -0
- package/conformance/browser-suites.ts +699 -0
- package/conformance/compare.ts +201 -0
- package/conformance/dom.ts +97 -0
- package/conformance/dump.ts +163 -0
- package/conformance/fonts.json +157 -0
- package/conformance/manifest.json +233 -0
- package/conformance/parity-compare.ts +191 -0
- package/conformance/parity-report.schema.json +73 -0
- package/conformance/parity.ts +412 -0
- package/conformance/pixel.ts +177 -0
- package/conformance/primitives-page.ts +49 -0
- package/conformance/report.schema.json +66 -0
- package/conformance/run.ts +118 -0
- package/conformance/voice-wave-child.ts +102 -0
- package/dist/chunks/index-5fmaa0xq.js +8384 -0
- package/dist/chunks/index-5fmaa0xq.js.map +10 -0
- package/dist/chunks/index-62yzr94z.js +2784 -0
- package/dist/chunks/index-62yzr94z.js.map +10 -0
- package/dist/chunks/index-bg2jsgjq.js +8541 -0
- package/dist/chunks/index-bg2jsgjq.js.map +15 -0
- package/dist/chunks/index-fy7y2nz8.js +186 -0
- package/dist/chunks/index-fy7y2nz8.js.map +9 -0
- package/dist/chunks/index-gtk2gwsb.js +4555 -0
- package/dist/chunks/index-gtk2gwsb.js.map +31 -0
- package/dist/chunks/index-t6qz1770.js +95 -0
- package/dist/chunks/index-t6qz1770.js.map +11 -0
- package/dist/conformance.js +230462 -0
- package/dist/conformance.js.map +10 -0
- package/dist/entries/prompt.js +251 -0
- package/dist/entries/prompt.js.map +11 -0
- package/dist/entries/schema.js +1725 -0
- package/dist/entries/schema.js.map +11 -0
- package/dist/host/index.js +194 -0
- package/dist/host/index.js.map +9 -0
- package/dist/index.js +3840 -0
- package/dist/index.js.map +29 -0
- package/dist/types/src/a11y.d.ts +21 -0
- package/dist/types/src/animation.d.ts +76 -0
- package/dist/types/src/basic-map.d.ts +38 -0
- package/dist/types/src/builder.d.ts +50 -0
- package/dist/types/src/catalog.d.ts +54 -0
- package/dist/types/src/catalog.described.d.ts +33 -0
- package/dist/types/src/catalog.generated.d.ts +904 -0
- package/dist/types/src/chart.d.ts +46 -0
- package/dist/types/src/code.d.ts +44 -0
- package/dist/types/src/color.d.ts +20 -0
- package/dist/types/src/conformance.d.ts +39 -0
- package/dist/types/src/connector/app.d.ts +14 -0
- package/dist/types/src/connector/connector.d.ts +77 -0
- package/dist/types/src/connector/index.d.ts +4 -0
- package/dist/types/src/css.d.ts +27 -0
- package/dist/types/src/define.d.ts +66 -0
- package/dist/types/src/direction.d.ts +16 -0
- package/dist/types/src/dynamic.d.ts +161 -0
- package/dist/types/src/entries/prompt.d.ts +11 -0
- package/dist/types/src/entries/schema.d.ts +8 -0
- package/dist/types/src/expr.d.ts +71 -0
- package/dist/types/src/extension.d.ts +4 -0
- package/dist/types/src/format.d.ts +112 -0
- package/dist/types/src/geometry.d.ts +40 -0
- package/dist/types/src/host/contract.d.ts +225 -0
- package/dist/types/src/host/decoders.d.ts +61 -0
- package/dist/types/src/host/index.d.ts +15 -0
- package/dist/types/src/host/package.d.ts +102 -0
- package/dist/types/src/host/policy.d.ts +107 -0
- package/dist/types/src/host/record-store.d.ts +103 -0
- package/dist/types/src/host/records.d.ts +45 -0
- package/dist/types/src/host/router.d.ts +38 -0
- package/dist/types/src/host/runtime.d.ts +213 -0
- package/dist/types/src/host/signature.d.ts +52 -0
- package/dist/types/src/host/sources.d.ts +22 -0
- package/dist/types/src/host/tools.d.ts +42 -0
- package/dist/types/src/host/transports.d.ts +109 -0
- package/dist/types/src/index.d.ts +69 -0
- package/dist/types/src/layout.d.ts +20 -0
- package/dist/types/src/limits.d.ts +21 -0
- package/dist/types/src/list.d.ts +133 -0
- package/dist/types/src/locale.d.ts +22 -0
- package/dist/types/src/macros.d.ts +29 -0
- package/dist/types/src/overlay.d.ts +27 -0
- package/dist/types/src/prompt.d.ts +44 -0
- package/dist/types/src/qr-code.d.ts +30 -0
- package/dist/types/src/recipes.d.ts +17 -0
- package/dist/types/src/reducer.d.ts +41 -0
- package/dist/types/src/resizable.d.ts +38 -0
- package/dist/types/src/schema.d.ts +7 -0
- package/dist/types/src/strings.d.ts +13 -0
- package/dist/types/src/style.d.ts +201 -0
- package/dist/types/src/test-preload.d.ts +1 -0
- package/dist/types/src/text-shimmer.d.ts +24 -0
- package/dist/types/src/theme-types.d.ts +162 -0
- package/dist/types/src/theme.d.ts +75 -0
- package/dist/types/src/themes.d.ts +22 -0
- package/dist/types/src/tree-guides.d.ts +17 -0
- package/dist/types/src/types.d.ts +320 -0
- package/dist/types/src/validate.d.ts +31 -0
- package/dist/types/src/voice-wave.d.ts +181 -0
- package/dist/types/src/web/base-css.d.ts +1 -0
- package/dist/types/src/web/box-css.d.ts +63 -0
- package/dist/types/src/web/coerce.d.ts +32 -0
- package/dist/types/src/web/custom-icons.generated.d.ts +4 -0
- package/dist/types/src/web/data.d.ts +107 -0
- package/dist/types/src/web/dates.d.ts +12 -0
- package/dist/types/src/web/form.d.ts +44 -0
- package/dist/types/src/web/host-types.d.ts +126 -0
- package/dist/types/src/web/index.d.ts +35 -0
- package/dist/types/src/web/inputs.d.ts +55 -0
- package/dist/types/src/web/list.d.ts +16 -0
- package/dist/types/src/web/listbox.d.ts +14 -0
- package/dist/types/src/web/markdown.d.ts +96 -0
- package/dist/types/src/web/media.d.ts +63 -0
- package/dist/types/src/web/parts.d.ts +4 -0
- package/dist/types/src/web/primitives/alert-dialog.d.ts +10 -0
- package/dist/types/src/web/primitives/alert.d.ts +9 -0
- package/dist/types/src/web/primitives/avatar-color.d.ts +2 -0
- package/dist/types/src/web/primitives/avatar.d.ts +13 -0
- package/dist/types/src/web/primitives/badge.d.ts +10 -0
- package/dist/types/src/web/primitives/breadcrumb.d.ts +10 -0
- package/dist/types/src/web/primitives/button.d.ts +6 -0
- package/dist/types/src/web/primitives/calendar.d.ts +43 -0
- package/dist/types/src/web/primitives/card.d.ts +9 -0
- package/dist/types/src/web/primitives/checkbox.d.ts +5 -0
- package/dist/types/src/web/primitives/choice-tiles.d.ts +32 -0
- package/dist/types/src/web/primitives/cn.d.ts +3 -0
- package/dist/types/src/web/primitives/code-block.d.ts +24 -0
- package/dist/types/src/web/primitives/command.d.ts +134 -0
- package/dist/types/src/web/primitives/context-ring.d.ts +24 -0
- package/dist/types/src/web/primitives/dialog-arms.d.ts +6 -0
- package/dist/types/src/web/primitives/dialog.d.ts +24 -0
- package/dist/types/src/web/primitives/disclosure-header.d.ts +5 -0
- package/dist/types/src/web/primitives/dock.d.ts +42 -0
- package/dist/types/src/web/primitives/dropdown-menu.d.ts +14 -0
- package/dist/types/src/web/primitives/empty-state.d.ts +15 -0
- package/dist/types/src/web/primitives/glass-card.d.ts +4 -0
- package/dist/types/src/web/primitives/hover-card.d.ts +7 -0
- package/dist/types/src/web/primitives/icon-disc.d.ts +12 -0
- package/dist/types/src/web/primitives/index.d.ts +50 -0
- package/dist/types/src/web/primitives/input.d.ts +5 -0
- package/dist/types/src/web/primitives/kbd.d.ts +4 -0
- package/dist/types/src/web/primitives/label.d.ts +3 -0
- package/dist/types/src/web/primitives/measure.d.ts +16 -0
- package/dist/types/src/web/primitives/menu-surface.d.ts +17 -0
- package/dist/types/src/web/primitives/meter.d.ts +21 -0
- package/dist/types/src/web/primitives/popover.d.ts +3 -0
- package/dist/types/src/web/primitives/progress-ring.d.ts +5 -0
- package/dist/types/src/web/primitives/progress.d.ts +8 -0
- package/dist/types/src/web/primitives/scroll-area.d.ts +49 -0
- package/dist/types/src/web/primitives/segmented-control.d.ts +5 -0
- package/dist/types/src/web/primitives/select.d.ts +47 -0
- package/dist/types/src/web/primitives/separator.d.ts +3 -0
- package/dist/types/src/web/primitives/sheet-chrome.d.ts +4 -0
- package/dist/types/src/web/primitives/sheet.d.ts +20 -0
- package/dist/types/src/web/primitives/skeleton.d.ts +3 -0
- package/dist/types/src/web/primitives/spinner.d.ts +3 -0
- package/dist/types/src/web/primitives/switch.d.ts +4 -0
- package/dist/types/src/web/primitives/table.d.ts +11 -0
- package/dist/types/src/web/primitives/tabs.d.ts +13 -0
- package/dist/types/src/web/primitives/textarea.d.ts +3 -0
- package/dist/types/src/web/primitives/toast.d.ts +163 -0
- package/dist/types/src/web/primitives/tooltip.d.ts +3 -0
- package/dist/types/src/web/primitives/truncate.d.ts +7 -0
- package/dist/types/src/web/primitives/typeahead-portal.d.ts +12 -0
- package/dist/types/src/web/primitives/voice-wave.d.ts +50 -0
- package/dist/types/src/web/round5.d.ts +107 -0
- package/dist/types/src/web/share.d.ts +6 -0
- package/dist/types/src/web/table.d.ts +20 -0
- package/dist/types/src/web/theme-css.d.ts +69 -0
- package/dist/types/src/web/urls.d.ts +21 -0
- package/dist/web/index.js +2565 -0
- package/dist/web/index.js.map +28 -0
- package/dist/web/primitives/index.js +1476 -0
- package/dist/web/primitives/index.js.map +57 -0
- package/docs/components.generated.json +6783 -0
- package/docs/package-format.md +182 -0
- package/docs/round-1-contract.md +679 -0
- package/docs/round-2-contract.md +476 -0
- package/docs/round-3-contract.md +174 -0
- package/docs/round-5-contract.md +268 -0
- package/docs/themes.generated.json +3647 -0
- package/fixtures/animations.json +2890 -0
- package/fixtures/bench-list.json +58 -0
- package/fixtures/bind-time.json +54734 -0
- package/fixtures/catalog-basic-map.json +1692 -0
- package/fixtures/catalog-components.json +10293 -0
- package/fixtures/catalog-extension.json +620 -0
- package/fixtures/catalog-macros.json +51805 -0
- package/fixtures/code-tokens.json +1993 -0
- package/fixtures/conformance-baseline.json +59016 -0
- package/fixtures/conformance-cases.json +49 -0
- package/fixtures/conformance-known.json +2111 -0
- package/fixtures/control-geometry.json +5129 -0
- package/fixtures/dashboard.data.json +74 -0
- package/fixtures/dashboard.json +781 -0
- package/fixtures/demo-surface.json +47 -0
- package/fixtures/format.json +870 -0
- package/fixtures/host-package.json +1262 -0
- package/fixtures/host-policy.json +1209 -0
- package/fixtures/host-router.json +2034 -0
- package/fixtures/host-transport.json +590 -0
- package/fixtures/interactions-round1.json +1058 -0
- package/fixtures/kitchen-sink.expanded.json +11972 -0
- package/fixtures/kitchen-sink.json +3140 -0
- package/fixtures/layout-geometry-round1.json +7278 -0
- package/fixtures/layout-geometry.json +2072 -0
- package/fixtures/overlay-geometry.json +272 -0
- package/fixtures/pointer.json +89 -0
- package/fixtures/primitive-specimens.json +59 -0
- package/fixtures/prompt-budget.json +33 -0
- package/fixtures/qr-code.json +480 -0
- package/fixtures/resizable.json +714 -0
- package/fixtures/round4-contract.json +2985 -0
- package/fixtures/specimens.json +11168 -0
- package/fixtures/style-conditions.json +336 -0
- package/fixtures/template-items.json +2215 -0
- package/fixtures/text-direction.json +309 -0
- package/fixtures/text-shimmer.json +96 -0
- package/fixtures/theme-extends.json +573 -0
- package/fixtures/theme-invalid.json +1300 -0
- package/fixtures/theme-recipes.json +61762 -0
- package/fixtures/theme-resolved.json +25969 -0
- package/fixtures/toast-stack.json +215 -0
- package/fixtures/tree-guides.json +224 -0
- package/fixtures/virtual-list.json +733 -0
- package/fixtures/voice-wave.json +19236 -0
- package/generated/ExponentialUICatalog.generated.kt +67 -0
- package/generated/ExponentialUICatalog.generated.swift +67 -0
- package/generated/ExponentialUIThemes.generated.kt +23 -0
- package/generated/ExponentialUIThemes.generated.swift +23 -0
- package/generated/catalog.descriptions.generated.rs +6 -0
- package/generated/catalog.generated.rs +80 -0
- package/generated/catalog.themes.generated.rs +34 -0
- package/generated/core.descriptions.json +2726 -0
- package/generated/core.runtime.json +3944 -0
- package/package.json +87 -4
- package/themes/exponential.recipes.json +49 -0
- package/themes/exponential.theme.json +768 -0
- package/themes/neutral.theme.json +6178 -0
- package/themes/orange.theme.json +43 -0
- package/themes/playful.theme.json +219 -0
- package/vendor/a2ui/LICENSE.txt +203 -0
- package/vendor/a2ui/README.md +27 -0
- package/vendor/a2ui/v0_9/basic_catalog.json +1387 -0
- package/vendor/a2ui/v0_9/basic_catalog_rules.txt +5 -0
- package/vendor/a2ui/v0_9/client_capabilities.json +97 -0
- package/vendor/a2ui/v0_9/client_to_server.json +104 -0
- package/vendor/a2ui/v0_9/common_types.json +315 -0
- package/vendor/a2ui/v0_9/server_to_client.json +132 -0
- package/vendor/json-render/LICENSE.txt +201 -0
- package/vendor/json-render/README.md +13 -0
- package/vendor/nayuki-qr/LICENSE.txt +20 -0
- package/vendor/nayuki-qr/README.md +10 -0
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// packages/exponential-ui/src/web/primitives/measure.ts
|
|
2
|
+
var near = (a, b) => Math.abs(a - b) < 1;
|
|
3
|
+
var unit = (v) => Math.round(v * 64) / 64;
|
|
4
|
+
var sized = (width, height) => ({ width: unit(width), height: unit(height) });
|
|
5
|
+
function layoutSize2(el, entry) {
|
|
6
|
+
const r = el.getBoundingClientRect();
|
|
7
|
+
const ow = el.offsetWidth;
|
|
8
|
+
const oh = el.offsetHeight;
|
|
9
|
+
if (ow === 0 && oh === 0)
|
|
10
|
+
return { width: r.width, height: r.height };
|
|
11
|
+
if (near(r.width, ow) && near(r.height, oh))
|
|
12
|
+
return { width: r.width, height: r.height };
|
|
13
|
+
const box = entry?.borderBoxSize?.[0];
|
|
14
|
+
if (box) {
|
|
15
|
+
if (near(box.inlineSize, ow) && near(box.blockSize, oh))
|
|
16
|
+
return sized(box.inlineSize, box.blockSize);
|
|
17
|
+
if (near(box.blockSize, ow) && near(box.inlineSize, oh))
|
|
18
|
+
return sized(box.blockSize, box.inlineSize);
|
|
19
|
+
}
|
|
20
|
+
const zoom = el.currentCSSZoom;
|
|
21
|
+
if (zoom && zoom !== 1 && near(r.width / zoom, ow) && near(r.height / zoom, oh))
|
|
22
|
+
return sized(r.width / zoom, r.height / zoom);
|
|
23
|
+
return { width: ow, height: oh };
|
|
24
|
+
}
|
|
25
|
+
function visualScale2(visual, layout) {
|
|
26
|
+
return layout > 0 && !near(visual, layout) ? visual / layout : 1;
|
|
27
|
+
}
|
|
28
|
+
function elementScale2(el, rect = el.getBoundingClientRect()) {
|
|
29
|
+
return { x: visualScale2(rect.width, el.offsetWidth), y: visualScale2(rect.height, el.offsetHeight) };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// packages/exponential-ui/src/web/primitives/voice-wave.ts
|
|
33
|
+
var VOICE_WAVE_SIZES2 = [`sm`, `md`, `lg`, `xl`];
|
|
34
|
+
var VOICE_WAVE_SIZE_PX2 = { sm: 32, md: 56, lg: 160, xl: 200 };
|
|
35
|
+
function voiceWaveAnimates2(activity) {
|
|
36
|
+
return activity === `listening` || activity === `thinking` || activity === `speaking`;
|
|
37
|
+
}
|
|
38
|
+
function voiceWaveQuiet2(activity) {
|
|
39
|
+
return !voiceWaveAnimates2(activity);
|
|
40
|
+
}
|
|
41
|
+
var NAMED = [`idle`, `listening`, `thinking`, `speaking`, `muted`];
|
|
42
|
+
function voiceWaveName2(label, activity) {
|
|
43
|
+
return label ? `${label}, ${NAMED.includes(activity) ? activity : `idle`}` : undefined;
|
|
44
|
+
}
|
|
45
|
+
function voiceWaveClock2(onFrame) {
|
|
46
|
+
if (typeof requestAnimationFrame !== `function`)
|
|
47
|
+
return () => {};
|
|
48
|
+
let start = null;
|
|
49
|
+
let id = 0;
|
|
50
|
+
const tick = (now) => {
|
|
51
|
+
if (start === null)
|
|
52
|
+
start = now;
|
|
53
|
+
else
|
|
54
|
+
onFrame((now - start) / 1000);
|
|
55
|
+
id = requestAnimationFrame(tick);
|
|
56
|
+
};
|
|
57
|
+
id = requestAnimationFrame(tick);
|
|
58
|
+
return () => cancelAnimationFrame(id);
|
|
59
|
+
}
|
|
60
|
+
function voiceWaveFitChild2(el, scaleOf) {
|
|
61
|
+
const apply = (width, height) => {
|
|
62
|
+
const s = scaleOf({ width, height });
|
|
63
|
+
el.style.transform = s === 1 ? `` : `scale(${s})`;
|
|
64
|
+
};
|
|
65
|
+
if (typeof ResizeObserver !== `function`) {
|
|
66
|
+
apply(el.offsetWidth, el.offsetHeight);
|
|
67
|
+
return () => {};
|
|
68
|
+
}
|
|
69
|
+
const ro = new ResizeObserver((entries) => {
|
|
70
|
+
const e = entries[entries.length - 1];
|
|
71
|
+
const b = e.borderBoxSize?.[0];
|
|
72
|
+
if (b)
|
|
73
|
+
apply(b.inlineSize, b.blockSize);
|
|
74
|
+
else
|
|
75
|
+
apply(el.offsetWidth, el.offsetHeight);
|
|
76
|
+
});
|
|
77
|
+
ro.observe(el, { box: `border-box` });
|
|
78
|
+
return () => ro.disconnect();
|
|
79
|
+
}
|
|
80
|
+
var VOICE_WAVE_CLASSES2 = {
|
|
81
|
+
root: `relative inline-flex shrink-0 items-center justify-center`,
|
|
82
|
+
quiet: `opacity-35`,
|
|
83
|
+
size: { sm: `size-8`, md: `size-14`, lg: `size-40`, xl: `size-50` },
|
|
84
|
+
svg: `pointer-events-none absolute inset-0 size-full overflow-visible`,
|
|
85
|
+
ring: { outer: `text-blue-500`, mid: `text-primary`, inner: `text-primary` },
|
|
86
|
+
ringQuiet: `text-muted-foreground`,
|
|
87
|
+
child: `relative flex shrink-0 items-center justify-center text-foreground`,
|
|
88
|
+
childHidden: `invisible pointer-events-none`,
|
|
89
|
+
childMuted: `text-muted-foreground`
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
export { layoutSize2, visualScale2, elementScale2, VOICE_WAVE_SIZES2, VOICE_WAVE_SIZE_PX2, voiceWaveAnimates2, voiceWaveQuiet2, voiceWaveName2, voiceWaveClock2, voiceWaveFitChild2, VOICE_WAVE_CLASSES2 };
|
|
93
|
+
|
|
94
|
+
//# debugId=E5287FE7B176B23B64756E2164756E21
|
|
95
|
+
//# sourceMappingURL=index-t6qz1770.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/web/primitives/measure.ts", "../src/web/primitives/voice-wave.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"// NEW-82: element measurements in LAYOUT px, framework-free (the React and\n// Solid renderers share them). `getBoundingClientRect()` is in VISUAL px: it\n// includes CSS `zoom` and transforms, while everything a painter lays out\n// (an SVG viewBox, a breakpoint, a translateY, a scrollTop) is in the\n// element's own unzoomed CSS px. Inside a `zoom: 0.76` phone frame a 200 px\n// box reads 152 from the rect.\n//\n// The rect stays the source whenever it agrees with the layout box (no\n// zoom, no transform): its FRACTIONAL width is what the renderers measured\n// before, so an unscaled page measures byte-identically. A scaled element\n// reads the ResizeObserver entry's `borderBoxSize` (fractional, unzoomed),\n// else the rect divided by `currentCSSZoom` when that alone explains the\n// difference, else `offsetWidth`/`offsetHeight` (whole px). The two\n// divided reads snap to Blink's 1/64 px LayoutUnit: un-zooming is a float\n// division (700 px under `zoom: 0.76` reads 700.0000087…).\n\nexport interface LayoutSize {\n width: number\n height: number\n}\n\n/** Within a pixel: `offsetWidth` is the layout box snapped to whole px. */\nconst near = (a: number, b: number) => Math.abs(a - b) < 1\nconst unit = (v: number) => Math.round(v * 64) / 64\nconst sized = (width: number, height: number): LayoutSize => ({ width: unit(width), height: unit(height) })\n\n/** An element's border box in layout (unzoomed, untransformed) CSS px.\n * `entry` = the ResizeObserver entry of this element, when there is one. */\nexport function layoutSize(el: HTMLElement, entry?: ResizeObserverEntry): LayoutSize {\n const r = el.getBoundingClientRect()\n const ow = el.offsetWidth\n const oh = el.offsetHeight\n // No offset box (jsdom, no layout): the rect is all there is.\n if (ow === 0 && oh === 0) return { width: r.width, height: r.height }\n if (near(r.width, ow) && near(r.height, oh)) return { width: r.width, height: r.height }\n const box = entry?.borderBoxSize?.[0]\n if (box) {\n if (near(box.inlineSize, ow) && near(box.blockSize, oh)) return sized(box.inlineSize, box.blockSize)\n // A vertical writing mode: inline = height.\n if (near(box.blockSize, ow) && near(box.inlineSize, oh)) return sized(box.blockSize, box.inlineSize)\n }\n const zoom = (el as HTMLElement & { currentCSSZoom?: number }).currentCSSZoom\n if (zoom && zoom !== 1 && near(r.width / zoom, ow) && near(r.height / zoom, oh)) return sized(r.width / zoom, r.height / zoom)\n return { width: ow, height: oh }\n}\n\n/** Visual px per layout px on one axis: 1 when they agree within a pixel\n * (an unscaled element maps byte-identically), else `visual / layout`.\n * Divide a visual delta (a pointer offset, a rect difference) by it. */\nexport function visualScale(visual: number, layout: number): number {\n return layout > 0 && !near(visual, layout) ? visual / layout : 1\n}\n\n/** `visualScale` of an element: its rect over its offset box. */\nexport function elementScale(el: HTMLElement, rect: DOMRect = el.getBoundingClientRect()): { x: number; y: number } {\n return { x: visualScale(rect.width, el.offsetWidth), y: visualScale(rect.height, el.offsetHeight) }\n}\n",
|
|
6
|
+
"// NEW-77: THE voice level (catalog/style.json `voiceWave`): three closed\n// polar waves around one optional centre child. The geometry is the core's\n// `voiceWave` (src/voice-wave.ts, fixtures/voice-wave.json; the painters\n// import it from `@exponential_app/eui`, never through here, so this barrel\n// does not carry style.json); this module holds what both web painters\n// share: the size enum's px (the neutral theme's `VoiceWave/root` edges),\n// the clock that drives the phase, the accessible name and the class\n// recipes. Colours follow the theme's\n// recipe: outer = info (blue-500, the exponential theme's `info`), mid +\n// inner = primary, all muted-foreground and the whole wave at .35 opacity\n// while idle or muted.\n\nimport type { VoiceWaveActivity, VoiceWaveRingName } from \"../../voice-wave\"\n\nexport type { VoiceWaveActivity, VoiceWaveRingName } from \"../../voice-wave\"\n\nexport const VOICE_WAVE_SIZES = [`sm`, `md`, `lg`, `xl`] as const\nexport type VoiceWaveSize = (typeof VOICE_WAVE_SIZES)[number]\n\n/** The box edge per size (px): the `VoiceWave/root` recipe's width. */\nexport const VOICE_WAVE_SIZE_PX: Readonly<Record<VoiceWaveSize, number>> = { sm: 32, md: 56, lg: 160, xl: 200 }\n\n/** Whether `activity` moves the waves (listening, thinking, speaking). */\nexport function voiceWaveAnimates(activity: VoiceWaveActivity): boolean {\n return activity === `listening` || activity === `thinking` || activity === `speaking`\n}\n\n/** Idle and muted paint quiet: muted colours, the wave at .35 opacity (an\n * unknown activity is idle, as in the core). */\nexport function voiceWaveQuiet(activity: VoiceWaveActivity): boolean {\n return !voiceWaveAnimates(activity)\n}\n\nconst NAMED: readonly string[] = [`idle`, `listening`, `thinking`, `speaking`, `muted`]\n\n/** The accessible name (a11y.json `VoiceWave`): the label with the activity\n * appended (`Voice, listening`); none without a label (decorative). */\nexport function voiceWaveName(label: string | undefined, activity: VoiceWaveActivity): string | undefined {\n return label ? `${label}, ${NAMED.includes(activity) ? activity : `idle`}` : undefined\n}\n\n/** Calls `onFrame(elapsed seconds)` on every animation frame after the\n * first (the first frame is the clock's zero, already painted); returns\n * the stop. Without `requestAnimationFrame` (SSR) it never ticks. */\nexport function voiceWaveClock(onFrame: (elapsed: number) => void): () => void {\n if (typeof requestAnimationFrame !== `function`) return () => {}\n let start: number | null = null\n let id = 0\n const tick = (now: number) => {\n if (start === null) start = now\n else onFrame((now - start) / 1000)\n id = requestAnimationFrame(tick)\n }\n id = requestAnimationFrame(tick)\n return () => cancelAnimationFrame(id)\n}\n\n/** THE CHILD RULE's painter half (catalog/style.json `voiceWave`): the child\n * is laid out centred at its own size; this measures its own (untransformed)\n * border box and draws it scaled about its centre (= the box centre) by\n * `scaleOf(its size)` (the core's `voiceWaveChildBox(size, child).scale`:\n * min(1, childSize / its longer edge), 0 at `sm`). Re-measures on every\n * resize (ResizeObserver: before the first paint); without one (SSR,\n * jsdom) it measures once. Returns the stop. */\nexport function voiceWaveFitChild(el: HTMLElement, scaleOf: (child: { width: number; height: number }) => number): () => void {\n const apply = (width: number, height: number) => {\n const s = scaleOf({ width, height })\n el.style.transform = s === 1 ? `` : `scale(${s})`\n }\n if (typeof ResizeObserver !== `function`) {\n apply(el.offsetWidth, el.offsetHeight)\n return () => {}\n }\n const ro = new ResizeObserver((entries) => {\n const e = entries[entries.length - 1]!\n const b = e.borderBoxSize?.[0]\n if (b) apply(b.inlineSize, b.blockSize)\n else apply(el.offsetWidth, el.offsetHeight)\n })\n ro.observe(el, { box: `border-box` })\n return () => ro.disconnect()\n}\n\nexport const VOICE_WAVE_CLASSES = {\n root: `relative inline-flex shrink-0 items-center justify-center`,\n quiet: `opacity-35`,\n size: { sm: `size-8`, md: `size-14`, lg: `size-40`, xl: `size-50` } satisfies Record<VoiceWaveSize, string>,\n svg: `pointer-events-none absolute inset-0 size-full overflow-visible`,\n ring: { outer: `text-blue-500`, mid: `text-primary`, inner: `text-primary` } satisfies Record<VoiceWaveRingName, string>,\n ringQuiet: `text-muted-foreground`,\n child: `relative flex shrink-0 items-center justify-center text-foreground`,\n /** At `sm` (childSize 0): kept, painted nothing, no hit target. */\n childHidden: `invisible pointer-events-none`,\n childMuted: `text-muted-foreground`,\n} as const\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "E5287FE7B176B23B64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|