@graview/primitives 0.1.64 → 0.1.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/app-bar.d.ts +88 -15
- package/dist/app-bar.d.ts.map +1 -1
- package/dist/app-bar.js +177 -131
- package/dist/app-bar.js.map +1 -1
- package/dist/app-menu.d.ts +9 -0
- package/dist/app-menu.d.ts.map +1 -0
- package/dist/app-menu.js +60 -0
- package/dist/app-menu.js.map +1 -0
- package/dist/bar-activity.d.ts +5 -9
- package/dist/bar-activity.d.ts.map +1 -1
- package/dist/bar-activity.js +24 -7
- package/dist/bar-activity.js.map +1 -1
- package/dist/bar-panes.d.ts +5 -5
- package/dist/bar-panes.d.ts.map +1 -1
- package/dist/bar-panes.js +9 -5
- package/dist/bar-panes.js.map +1 -1
- package/dist/bar-suggested.d.ts +9 -1
- package/dist/bar-suggested.d.ts.map +1 -1
- package/dist/bar-suggested.js +11 -17
- package/dist/bar-suggested.js.map +1 -1
- package/dist/better-bar.d.ts +65 -0
- package/dist/better-bar.d.ts.map +1 -0
- package/dist/better-bar.js +252 -0
- package/dist/better-bar.js.map +1 -0
- package/dist/better-panel.d.ts +50 -0
- package/dist/better-panel.d.ts.map +1 -0
- package/dist/better-panel.js +151 -0
- package/dist/better-panel.js.map +1 -0
- package/dist/chat.js +1 -1
- package/dist/chat.js.map +1 -1
- package/dist/editable.d.ts +8 -1
- package/dist/editable.d.ts.map +1 -1
- package/dist/editable.js +140 -16
- package/dist/editable.js.map +1 -1
- package/dist/find.js +3 -3
- package/dist/find.js.map +1 -1
- package/dist/first-look-door.d.ts +2 -2
- package/dist/first-look-door.js +2 -2
- package/dist/first-look.d.ts.map +1 -1
- package/dist/first-look.js +10 -8
- package/dist/first-look.js.map +1 -1
- package/dist/frame.d.ts +2 -2
- package/dist/frame.d.ts.map +1 -1
- package/dist/frame.js +1 -1
- package/dist/frame.js.map +1 -1
- package/dist/here.d.ts +1 -1
- package/dist/here.js +2 -2
- package/dist/here.js.map +1 -1
- package/dist/inbox-pane.d.ts +31 -0
- package/dist/inbox-pane.d.ts.map +1 -0
- package/dist/inbox-pane.js +89 -0
- package/dist/inbox-pane.js.map +1 -0
- package/dist/inbox.d.ts +17 -0
- package/dist/inbox.d.ts.map +1 -0
- package/dist/inbox.js +84 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/dist/inline-ai-menu.d.ts +4 -2
- package/dist/inline-ai-menu.d.ts.map +1 -1
- package/dist/inline-ai-menu.js +34 -8
- package/dist/inline-ai-menu.js.map +1 -1
- package/dist/kind-stop.d.ts.map +1 -1
- package/dist/kind-stop.js +204 -21
- package/dist/kind-stop.js.map +1 -1
- package/dist/lines-key.d.ts.map +1 -1
- package/dist/lines-key.js +22 -2
- package/dist/lines-key.js.map +1 -1
- package/dist/map-panel.js +98 -6
- package/dist/map-panel.js.map +1 -1
- package/dist/menu-rank.d.ts +25 -0
- package/dist/menu-rank.d.ts.map +1 -0
- package/dist/menu-rank.js +56 -0
- package/dist/menu-rank.js.map +1 -0
- package/dist/menu-suggested.d.ts +54 -0
- package/dist/menu-suggested.d.ts.map +1 -0
- package/dist/menu-suggested.js +140 -0
- package/dist/menu-suggested.js.map +1 -0
- package/dist/menu-told-door.d.ts +17 -0
- package/dist/menu-told-door.d.ts.map +1 -0
- package/dist/menu-told-door.js +49 -0
- package/dist/menu-told-door.js.map +1 -0
- package/dist/menu-told.d.ts +44 -0
- package/dist/menu-told.d.ts.map +1 -0
- package/dist/menu-told.js +90 -0
- package/dist/menu-told.js.map +1 -0
- package/dist/menu-words.d.ts +15 -0
- package/dist/menu-words.d.ts.map +1 -0
- package/dist/menu-words.js +28 -0
- package/dist/menu-words.js.map +1 -0
- package/dist/notify-sheet.js +2 -2
- package/dist/notify-sheet.js.map +1 -1
- package/dist/page-better.d.ts +13 -0
- package/dist/page-better.d.ts.map +1 -0
- package/dist/page-better.js +714 -0
- package/dist/page-better.js.map +1 -0
- package/dist/page-parts.d.ts +41 -0
- package/dist/page-parts.d.ts.map +1 -0
- package/dist/page-parts.js +100 -0
- package/dist/page-parts.js.map +1 -0
- package/dist/pages.d.ts +4 -3
- package/dist/pages.d.ts.map +1 -1
- package/dist/pages.js +4 -3
- package/dist/pages.js.map +1 -1
- package/dist/profile.d.ts +1 -10
- package/dist/profile.d.ts.map +1 -1
- package/dist/profile.js +2 -3
- package/dist/profile.js.map +1 -1
- package/dist/quick-ask-desk.d.ts +16 -0
- package/dist/quick-ask-desk.d.ts.map +1 -1
- package/dist/quick-ask-desk.js +20 -0
- package/dist/quick-ask-desk.js.map +1 -1
- package/dist/quick-ask-door.d.ts.map +1 -1
- package/dist/quick-ask-door.js +5 -0
- package/dist/quick-ask-door.js.map +1 -1
- package/dist/quick-ask-plan.d.ts +52 -0
- package/dist/quick-ask-plan.d.ts.map +1 -0
- package/dist/quick-ask-plan.js +112 -0
- package/dist/quick-ask-plan.js.map +1 -0
- package/dist/quick-ask.d.ts.map +1 -1
- package/dist/quick-ask.js +341 -19
- package/dist/quick-ask.js.map +1 -1
- package/dist/scene-bar.d.ts +1 -1
- package/dist/scene-bar.d.ts.map +1 -1
- package/dist/scene-bar.js +4 -7
- package/dist/scene-bar.js.map +1 -1
- package/dist/scene-css.d.ts.map +1 -1
- package/dist/scene-css.js +16 -6
- package/dist/scene-css.js.map +1 -1
- package/dist/scene-places.d.ts +3 -2
- package/dist/scene-places.d.ts.map +1 -1
- package/dist/scene-places.js +47 -8
- package/dist/scene-places.js.map +1 -1
- package/dist/scene.d.ts +2 -0
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +2 -0
- package/dist/scene.js.map +1 -1
- package/dist/section-better.d.ts +76 -0
- package/dist/section-better.d.ts.map +1 -0
- package/dist/section-better.js +529 -0
- package/dist/section-better.js.map +1 -0
- package/dist/section-door.d.ts +39 -0
- package/dist/section-door.d.ts.map +1 -0
- package/dist/section-door.js +66 -0
- package/dist/section-door.js.map +1 -0
- package/dist/section-menu.d.ts +32 -0
- package/dist/section-menu.d.ts.map +1 -0
- package/dist/section-menu.js +229 -0
- package/dist/section-menu.js.map +1 -0
- package/dist/section-outline.d.ts +8 -0
- package/dist/section-outline.d.ts.map +1 -0
- package/dist/section-outline.js +48 -0
- package/dist/section-outline.js.map +1 -0
- package/dist/section-words.d.ts +32 -0
- package/dist/section-words.d.ts.map +1 -0
- package/dist/section-words.js +116 -0
- package/dist/section-words.js.map +1 -0
- package/dist/shell.d.ts +5 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +5 -2
- package/dist/shell.js.map +1 -1
- package/dist/subject.js +2 -2
- package/dist/subject.js.map +1 -1
- package/dist/suggested.d.ts +21 -10
- package/dist/suggested.d.ts.map +1 -1
- package/dist/suggested.js +43 -64
- package/dist/suggested.js.map +1 -1
- package/dist/told-card.d.ts +66 -0
- package/dist/told-card.d.ts.map +1 -0
- package/dist/told-card.js +197 -0
- package/dist/told-card.js.map +1 -0
- package/dist/told-listed.d.ts +14 -0
- package/dist/told-listed.d.ts.map +1 -0
- package/dist/told-listed.js +46 -0
- package/dist/told-listed.js.map +1 -0
- package/dist/told-panel-door.d.ts +17 -0
- package/dist/told-panel-door.d.ts.map +1 -0
- package/dist/told-panel-door.js +6 -0
- package/dist/told-panel-door.js.map +1 -0
- package/dist/told-panel.d.ts +19 -0
- package/dist/told-panel.d.ts.map +1 -0
- package/dist/told-panel.js +83 -0
- package/dist/told-panel.js.map +1 -0
- package/dist/told-ui.d.ts +5 -0
- package/dist/told-ui.d.ts.map +1 -0
- package/dist/told-ui.js +12 -0
- package/dist/told-ui.js.map +1 -0
- package/dist/when-words.d.ts +21 -0
- package/dist/when-words.d.ts.map +1 -0
- package/dist/when-words.js +43 -0
- package/dist/when-words.js.map +1 -0
- package/dist/workbench/activity.d.ts +44 -0
- package/dist/workbench/activity.d.ts.map +1 -1
- package/dist/workbench/activity.js +74 -59
- package/dist/workbench/activity.js.map +1 -1
- package/dist/workbench/ai-entries.d.ts.map +1 -1
- package/dist/workbench/ai-entries.js +23 -2
- package/dist/workbench/ai-entries.js.map +1 -1
- package/dist/workbench/back-out.js +1 -1
- package/dist/workbench/back-out.js.map +1 -1
- package/dist/workbench/inspector.d.ts.map +1 -1
- package/dist/workbench/inspector.js +366 -27
- package/dist/workbench/inspector.js.map +1 -1
- package/dist/workbench/standing.d.ts.map +1 -1
- package/dist/workbench/standing.js +1 -1
- package/dist/workbench/standing.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DrawnRead } from "@graview/tools/section";
|
|
2
|
+
import { type ReactNode } from "react";
|
|
3
|
+
/**
|
|
4
|
+
* A DRAWING READ FOR JUDGING: its headings in order, each record a label
|
|
5
|
+
* names — the innermost element that says it, where it stands and how big
|
|
6
|
+
* its type is, what its row or card says beside its name and the heading
|
|
7
|
+
* it sits under — and all its words, through each worker view's drawing.
|
|
8
|
+
*/
|
|
9
|
+
export declare function readDrawn(root: Element | null | undefined, labels: readonly string[]): DrawnRead;
|
|
10
|
+
/**
|
|
11
|
+
* THE PART BEING CHANGED, COVERED WHILE GRAVIEW WORKS ON IT: whole, so a
|
|
12
|
+
* draft drawn under it to be judged is never seen, with the words of what
|
|
13
|
+
* is happening on it. Gone once a draft passed, or none did.
|
|
14
|
+
*/
|
|
15
|
+
export declare function Redesigning({ over, name, said }: {
|
|
16
|
+
readonly over: Element | null | undefined;
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly said?: string;
|
|
19
|
+
}): import("react").JSX.Element;
|
|
20
|
+
export interface DraftBarProps {
|
|
21
|
+
/** The phase the flow is at, carried as `data-section-phase` for the card it was. */
|
|
22
|
+
readonly phase: string;
|
|
23
|
+
/** What the bar is about: “Lists”. */
|
|
24
|
+
readonly name: string;
|
|
25
|
+
/** The one line of what changed, in the code's words. */
|
|
26
|
+
readonly said: string;
|
|
27
|
+
/** Who it changes it for, in a sentence. */
|
|
28
|
+
readonly scope?: string;
|
|
29
|
+
/** A line under it, quiet: what the host said when it kept it. */
|
|
30
|
+
readonly note?: string;
|
|
31
|
+
/** The draft's steps: how many, and whether the one before can be gone back to. */
|
|
32
|
+
readonly step?: {
|
|
33
|
+
readonly at: number;
|
|
34
|
+
readonly of: number;
|
|
35
|
+
readonly back?: () => void;
|
|
36
|
+
};
|
|
37
|
+
/** Before and After: whether the original is shown now, and the switch. */
|
|
38
|
+
readonly compare?: {
|
|
39
|
+
readonly before: boolean;
|
|
40
|
+
readonly toggle: (before: boolean) => void;
|
|
41
|
+
};
|
|
42
|
+
/** Words that change the draft again. */
|
|
43
|
+
readonly iterate?: (words: string) => void;
|
|
44
|
+
/** Its buttons: Keep and Discard on a draft, Undo and Close once kept, Close where it ends. */
|
|
45
|
+
readonly keep?: () => void;
|
|
46
|
+
readonly discard?: () => void;
|
|
47
|
+
readonly undo?: () => void;
|
|
48
|
+
readonly close?: () => void;
|
|
49
|
+
/** Words that try again, where nothing passed. */
|
|
50
|
+
readonly retry?: (words: string) => void;
|
|
51
|
+
/** Try harder: the full model, once, where the light one could not keep the page. */
|
|
52
|
+
readonly tryHarder?: () => void;
|
|
53
|
+
/** Cancel what is thinking: at once, the page as it was. */
|
|
54
|
+
readonly cancel?: () => void;
|
|
55
|
+
readonly busy?: boolean;
|
|
56
|
+
readonly children?: ReactNode;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* THE DRAFT'S BAR: one line of what changed, said by code; who it changes
|
|
60
|
+
* it for; Before and After to compare in place; "Tell it what to change…"
|
|
61
|
+
* to take another step, and a step back; Keep and Discard. Docked at the
|
|
62
|
+
* foot of the window, full width on a phone, never over what it changed.
|
|
63
|
+
*/
|
|
64
|
+
export declare function DraftBar(props: DraftBarProps): import("react").JSX.Element;
|
|
65
|
+
//# sourceMappingURL=better-bar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-bar.d.ts","sourceRoot":"","sources":["../src/better-bar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAoE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA4DzG;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CA0DhG;AA6BD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,+BAW7I;AAoBD,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,kEAAkE;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACzF,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAC5F,yCAAyC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,+FAA+F;IAC/F,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,qFAAqF;IACrF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BA4G5C"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { layer } from "@graview/core";
|
|
3
|
+
import { useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
4
|
+
import { boxOf } from "./section-outline.js";
|
|
5
|
+
import { VISUALLY_HIDDEN } from "./primitives/measure.js";
|
|
6
|
+
/*
|
|
7
|
+
* THE BETTER UI FLOW, DRAWN (Roadmap f-make-any-page-better): the part
|
|
8
|
+
* being changed covered while Graview works on it, the draft given the
|
|
9
|
+
* page once it passed, and the controls out of its way in a slim bar
|
|
10
|
+
* docked at the foot of the window — a bottom sheet's peek on a phone.
|
|
11
|
+
* Shared by a built-in page's card (`page-better.tsx`) and a view's
|
|
12
|
+
* section (`section-better.tsx`).
|
|
13
|
+
*/
|
|
14
|
+
const words = (text) => (text ?? "").replace(/\s+/g, " ").trim();
|
|
15
|
+
/** The roots a drawing is read through: the element, and each worker view's own drawing inside it. */
|
|
16
|
+
function rootsOf(root) {
|
|
17
|
+
const roots = [root];
|
|
18
|
+
if (root.shadowRoot)
|
|
19
|
+
roots.push(root.shadowRoot);
|
|
20
|
+
for (const region of root.querySelectorAll("[data-worker-view]"))
|
|
21
|
+
if (region.shadowRoot)
|
|
22
|
+
roots.push(region.shadowRoot);
|
|
23
|
+
return roots;
|
|
24
|
+
}
|
|
25
|
+
/** The text a person reads in a root: what is drawn and shown, not what is hidden. */
|
|
26
|
+
function shownText(root) {
|
|
27
|
+
if (root instanceof HTMLElement)
|
|
28
|
+
return root.innerText ?? root.textContent ?? "";
|
|
29
|
+
return [...root.children].map((one) => (one instanceof HTMLElement ? (one.innerText ?? one.textContent ?? "") : (one.textContent ?? ""))).join(" ");
|
|
30
|
+
}
|
|
31
|
+
/** Words a row says that are its controls or its marks, not what it tells of the record. */
|
|
32
|
+
const NOT_A_FACT = /^[\s·•|,:;–—\-+…✓✔×↓↑▸▾☆★⋯]*$/u;
|
|
33
|
+
/**
|
|
34
|
+
* WHAT A RECORD'S ROW OR CARD SAYS BESIDE ITS NAME: each bit of words drawn
|
|
35
|
+
* apart in it ("Todo", "Sep 3, 2026", "3 tasks"), not its name, not a
|
|
36
|
+
* control's label, nothing hidden — the facts a draft must still say.
|
|
37
|
+
*/
|
|
38
|
+
function factsOf(row, name) {
|
|
39
|
+
const facts = [];
|
|
40
|
+
const walker = (row.ownerDocument ?? document).createTreeWalker(row, NodeFilter.SHOW_TEXT);
|
|
41
|
+
const byParent = new Map();
|
|
42
|
+
for (let node = walker.nextNode(); node; node = walker.nextNode()) {
|
|
43
|
+
const parent = node.parentElement;
|
|
44
|
+
// A link goes somewhere (the trail, "In the scene", another record): where it goes is not what the row says of the record.
|
|
45
|
+
if (!parent || name.contains(parent) || parent.closest("button, input, select, textarea, [role='button'], nav, [hidden], [aria-hidden='true'], script, style"))
|
|
46
|
+
continue;
|
|
47
|
+
const link = parent.closest("a[href]");
|
|
48
|
+
if (link && !link.contains(name))
|
|
49
|
+
continue;
|
|
50
|
+
byParent.set(parent, (byParent.get(parent) ?? "") + (node.textContent ?? ""));
|
|
51
|
+
}
|
|
52
|
+
// Facts a row says together ("Sep 3, 2026 · Done: no") are each a fact of their own.
|
|
53
|
+
for (const [parent, text] of [...byParent].flatMap(([parent, text]) => text.split(/\s+·\s+/).map((one) => [parent, one]))) {
|
|
54
|
+
const said = words(text);
|
|
55
|
+
// Words or a number: a mark alone ("⚠", "·") says nothing a draft must keep.
|
|
56
|
+
if (!said || said.length > 40 || NOT_A_FACT.test(said) || !/[\p{L}\p{N}]/u.test(said) || parent.getClientRects().length === 0)
|
|
57
|
+
continue;
|
|
58
|
+
if (!facts.includes(said))
|
|
59
|
+
facts.push(said);
|
|
60
|
+
if (facts.length >= 6)
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
return facts;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A DRAWING READ FOR JUDGING: its headings in order, each record a label
|
|
67
|
+
* names — the innermost element that says it, where it stands and how big
|
|
68
|
+
* its type is, what its row or card says beside its name and the heading
|
|
69
|
+
* it sits under — and all its words, through each worker view's drawing.
|
|
70
|
+
*/
|
|
71
|
+
export function readDrawn(root, labels) {
|
|
72
|
+
if (!root?.isConnected)
|
|
73
|
+
return { headings: [], records: [], text: "" };
|
|
74
|
+
const roots = rootsOf(root);
|
|
75
|
+
const headings = [];
|
|
76
|
+
const headingAt = [];
|
|
77
|
+
for (const one of roots)
|
|
78
|
+
for (const heading of one.querySelectorAll("h1, h2, h3, [role='heading']")) {
|
|
79
|
+
if (heading.closest("[data-graview-popover], [hidden], [aria-hidden='true'], nav"))
|
|
80
|
+
continue;
|
|
81
|
+
const copy = heading.cloneNode(true);
|
|
82
|
+
for (const span of copy.querySelectorAll("span"))
|
|
83
|
+
if (/^[\s·\d]+$/.test(span.textContent ?? ""))
|
|
84
|
+
span.remove();
|
|
85
|
+
const said = words(copy.textContent).replace(/^[▸▾]\s*/, "");
|
|
86
|
+
if (said) {
|
|
87
|
+
headings.push(said);
|
|
88
|
+
headingAt.push({ element: heading, said });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const named = new Map();
|
|
92
|
+
for (const label of labels) {
|
|
93
|
+
const want = words(label).toLowerCase();
|
|
94
|
+
if (!want || named.has(label))
|
|
95
|
+
continue;
|
|
96
|
+
let best;
|
|
97
|
+
for (const one of roots)
|
|
98
|
+
for (const element of one.querySelectorAll("a, li, p, span, h2, h3, h4, strong, div, button, td")) {
|
|
99
|
+
if (words(element.textContent).toLowerCase() !== want)
|
|
100
|
+
continue;
|
|
101
|
+
if (!best || best.contains(element))
|
|
102
|
+
best = element;
|
|
103
|
+
}
|
|
104
|
+
if (best)
|
|
105
|
+
named.set(label, best);
|
|
106
|
+
}
|
|
107
|
+
const names = [...named.values()];
|
|
108
|
+
const records = [];
|
|
109
|
+
for (const [label, best] of named) {
|
|
110
|
+
// Its row or card: the widest box around its name that holds no other record's name.
|
|
111
|
+
let row = best;
|
|
112
|
+
for (let up = best.parentElement; up && up !== root && !(up instanceof HTMLBodyElement); up = up.parentElement) {
|
|
113
|
+
if (names.some((other) => other !== best && up.contains(other)))
|
|
114
|
+
break;
|
|
115
|
+
if (up.matches("main, section, ul, ol, table, tbody, [data-graview-page]"))
|
|
116
|
+
break;
|
|
117
|
+
row = up;
|
|
118
|
+
}
|
|
119
|
+
// The heading it sits under: the last one before it in the same drawing that is not in its own row.
|
|
120
|
+
let under;
|
|
121
|
+
// A heading that is a record's own name (a list's card titled "This week") heads that record, not a group.
|
|
122
|
+
const ownNames = new Set(labels.map((one) => words(one).toLowerCase()));
|
|
123
|
+
for (const one of headingAt) {
|
|
124
|
+
if (one.element.getRootNode() !== best.getRootNode() || row.contains(one.element) || one.element.contains(best) || ownNames.has(one.said.toLowerCase()))
|
|
125
|
+
continue;
|
|
126
|
+
if (one.element.compareDocumentPosition(best) & Node.DOCUMENT_POSITION_FOLLOWING)
|
|
127
|
+
under = one.said;
|
|
128
|
+
}
|
|
129
|
+
const box = best.getBoundingClientRect();
|
|
130
|
+
const size = Number.parseFloat(getComputedStyle(best).fontSize) || 16;
|
|
131
|
+
const rowText = row instanceof HTMLElement ? (row.innerText ?? row.textContent ?? "") : (row.textContent ?? "");
|
|
132
|
+
// A record that is the page itself (its title) has the page for its row: what it says is the page's headings and records, judged as those.
|
|
133
|
+
const isPage = best.matches("h1, [data-graview-page-title]") || best.closest("h1, [data-graview-page-title]") !== null;
|
|
134
|
+
// What a person could do on it there: press a control in its row (a circle that finishes it), and open it by its name.
|
|
135
|
+
const presses = !isPage && row !== best && [...row.querySelectorAll("button, [role='button'], [role='checkbox'], [aria-pressed], input[type='checkbox'], [data-act]")].some((one) => !one.contains(best) && !best.contains(one));
|
|
136
|
+
const opens = !isPage && best.closest("a[href], [data-record]") !== null;
|
|
137
|
+
records.push({ label, top: Math.round(box.top), left: Math.round(box.left), size, facts: isPage ? [] : factsOf(row, best), row: words(rowText), ...(under ? { under } : {}), ...(presses ? { presses } : {}), ...(opens ? { opens } : {}) });
|
|
138
|
+
}
|
|
139
|
+
records.sort((a, b) => a.top - b.top || a.left - b.left);
|
|
140
|
+
return { headings, records, text: roots.map(shownText).join(" ") };
|
|
141
|
+
}
|
|
142
|
+
/** Keeps a box over an element as the page moves, each frame. */
|
|
143
|
+
function useOver(target, box, pad = 0) {
|
|
144
|
+
useLayoutEffect(() => {
|
|
145
|
+
let frame = 0;
|
|
146
|
+
const place = () => {
|
|
147
|
+
const at = box.current;
|
|
148
|
+
const over = target?.isConnected ? boxOf([target]) : null;
|
|
149
|
+
if (at && over) {
|
|
150
|
+
const top = Math.max(over.top, 0);
|
|
151
|
+
const bottom = Math.min(over.bottom, innerHeight);
|
|
152
|
+
at.style.display = bottom > top ? "grid" : "none";
|
|
153
|
+
at.style.left = `${Math.round(over.left - pad)}px`;
|
|
154
|
+
at.style.top = `${Math.round(top - pad)}px`;
|
|
155
|
+
at.style.width = `${Math.round(over.width + 2 * pad)}px`;
|
|
156
|
+
at.style.height = `${Math.round(bottom - top + 2 * pad)}px`;
|
|
157
|
+
}
|
|
158
|
+
frame = requestAnimationFrame(place);
|
|
159
|
+
};
|
|
160
|
+
place();
|
|
161
|
+
return () => cancelAnimationFrame(frame);
|
|
162
|
+
}, [target, box, pad]);
|
|
163
|
+
}
|
|
164
|
+
const SHIMMER_CSS = `@keyframes graview-redesign{0%{background-position:100% 0}100%{background-position:-100% 0}}
|
|
165
|
+
[data-graview-redesigning]{background:linear-gradient(90deg,var(--graview-ground) 0%,color-mix(in srgb,var(--graview-panel) 70%,var(--graview-accent) 6%) 50%,var(--graview-ground) 100%);background-size:200% 100%;animation:graview-redesign 1.6s linear infinite}
|
|
166
|
+
@media (prefers-reduced-motion: reduce){[data-graview-redesigning]{animation:none}}`;
|
|
167
|
+
/**
|
|
168
|
+
* THE PART BEING CHANGED, COVERED WHILE GRAVIEW WORKS ON IT: whole, so a
|
|
169
|
+
* draft drawn under it to be judged is never seen, with the words of what
|
|
170
|
+
* is happening on it. Gone once a draft passed, or none did.
|
|
171
|
+
*/
|
|
172
|
+
export function Redesigning({ over, name, said }) {
|
|
173
|
+
const cover = useRef(null);
|
|
174
|
+
useOver(over, cover, 2);
|
|
175
|
+
return (_jsxs("div", { ref: cover, "data-graview-redesigning": "", "data-testid": "redesigning", "data-graview-popover": "", style: COVER, children: [_jsx("style", { children: SHIMMER_CSS }), _jsxs("p", { role: "status", "aria-live": "polite", style: COVER_WORDS, children: [_jsx("span", { "aria-hidden": "true", style: MARK, children: "\u2726" }), " ", said ?? `Graview is redesigning “${name}”…`] })] }));
|
|
176
|
+
}
|
|
177
|
+
/** Room at the foot of the page for the bar, so the end of what is drawn can be scrolled clear of it. */
|
|
178
|
+
function useRoomBelow(bar) {
|
|
179
|
+
useLayoutEffect(() => {
|
|
180
|
+
const before = document.body.style.paddingBottom;
|
|
181
|
+
const room = () => {
|
|
182
|
+
const height = bar.current?.getBoundingClientRect().height ?? 0;
|
|
183
|
+
document.body.style.paddingBottom = `${Math.round(height + 24)}px`;
|
|
184
|
+
};
|
|
185
|
+
room();
|
|
186
|
+
const watch = typeof ResizeObserver === "function" && bar.current ? new ResizeObserver(room) : null;
|
|
187
|
+
if (watch && bar.current)
|
|
188
|
+
watch.observe(bar.current);
|
|
189
|
+
return () => {
|
|
190
|
+
watch?.disconnect();
|
|
191
|
+
document.body.style.paddingBottom = before;
|
|
192
|
+
};
|
|
193
|
+
}, [bar]);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* THE DRAFT'S BAR: one line of what changed, said by code; who it changes
|
|
197
|
+
* it for; Before and After to compare in place; "Tell it what to change…"
|
|
198
|
+
* to take another step, and a step back; Keep and Discard. Docked at the
|
|
199
|
+
* foot of the window, full width on a phone, never over what it changed.
|
|
200
|
+
*/
|
|
201
|
+
export function DraftBar(props) {
|
|
202
|
+
const bar = useRef(null);
|
|
203
|
+
const [typed, setTyped] = useState("");
|
|
204
|
+
useRoomBelow(bar);
|
|
205
|
+
/* The keyboard goes to the bar's first button, else the bar itself: never left on what the card was. */
|
|
206
|
+
useEffect(() => {
|
|
207
|
+
(bar.current?.querySelector("[data-first]") ?? bar.current)?.focus({ preventScroll: true });
|
|
208
|
+
}, [props.phase]);
|
|
209
|
+
const ask = props.iterate ?? props.retry;
|
|
210
|
+
return (_jsxs("div", { ref: bar, tabIndex: -1, role: "region", "aria-label": `Changing “${props.name}”`, "data-testid": "section-card", "data-better-bar": "", "data-section-phase": props.phase, "data-graview-popover": "", style: BAR, children: [_jsxs("div", { style: { display: "grid", gap: 2, minWidth: 0 }, children: [_jsx("p", { role: "status", "aria-live": "polite", "data-testid": "section-status", style: props.busy ? BUSY : SAID, children: props.said }), props.scope ? (_jsx("p", { "data-testid": "section-scope", style: QUIET_LINE, children: props.scope })) : null, props.note ? (_jsx("p", { "data-testid": "section-note", style: QUIET_LINE, children: props.note })) : null, props.children] }), _jsxs("div", { style: CONTROLS, children: [props.compare ? (_jsx("div", { role: "group", "aria-label": "Compare", style: SWITCH, children: ["Before", "After"].map((side) => {
|
|
211
|
+
const on = side === "Before" ? props.compare.before : !props.compare.before;
|
|
212
|
+
return (_jsx("button", { type: "button", "data-testid": `section-${side.toLowerCase()}`, "aria-pressed": on, onClick: () => props.compare.toggle(side === "Before"), style: on ? SWITCH_ON : SWITCH_OFF, children: side }, side));
|
|
213
|
+
}) })) : null, props.step && props.step.of > 1 ? (_jsxs("span", { style: { display: "inline-flex", alignItems: "center", gap: 6 }, children: [_jsxs("span", { "data-testid": "section-step", style: QUIET_LINE, children: ["Step ", props.step.at, " of ", props.step.of] }), props.step.back ? (_jsx("button", { type: "button", "data-testid": "section-step-back", onClick: props.step.back, style: QUIET, children: "\u2190 Step back" })) : null] })) : null, ask ? (_jsxs("form", { onSubmit: (event) => {
|
|
214
|
+
event.preventDefault();
|
|
215
|
+
if (!typed.trim())
|
|
216
|
+
return;
|
|
217
|
+
ask(typed.trim());
|
|
218
|
+
setTyped("");
|
|
219
|
+
}, style: { display: "flex", gap: 6, flex: "1 1 220px", minWidth: 0 }, children: [_jsx("label", { htmlFor: "graview-better-words", style: VISUALLY_HIDDEN, children: props.iterate ? "Tell it what to change" : "Try again with words" }), _jsx("input", { id: "graview-better-words", "data-testid": "section-iterate", value: typed, disabled: props.busy, onChange: (event) => setTyped(event.target.value), placeholder: props.iterate ? "Tell it what to change…" : "Try again with words…", style: FIELD })] })) : null, _jsxs("span", { style: { display: "inline-flex", gap: 6, marginLeft: "auto" }, children: [props.tryHarder ? (_jsx("button", { type: "button", "data-first": "", "data-testid": "section-try-harder", onClick: props.tryHarder, style: PRIMARY, children: "Try harder" })) : null, props.retry && !props.iterate ? (_jsx("button", { type: "button", ...(props.tryHarder ? {} : { "data-first": "" }), "data-testid": "section-say-differently", onClick: () => bar.current?.querySelector('[data-testid="section-iterate"]')?.focus(), style: QUIET, children: "Say it differently" })) : null, props.cancel ? (_jsx("button", { type: "button", "data-first": "", "data-testid": "section-cancel", onClick: props.cancel, style: QUIET, children: "Cancel" })) : null, props.keep ? (_jsx("button", { type: "button", "data-first": "", "data-testid": "section-keep", disabled: props.busy, onClick: props.keep, style: PRIMARY, children: "Keep" })) : null, props.discard ? (_jsx("button", { type: "button", "data-testid": "section-discard", onClick: props.discard, style: QUIET, children: "Discard" })) : null, props.undo ? (_jsx("button", { type: "button", "data-first": "", "data-testid": "section-undo", onClick: props.undo, style: QUIET, children: "Undo" })) : null, props.close ? (_jsx("button", { type: "button", ...(props.keep || props.undo || props.tryHarder || props.retry ? {} : { "data-first": "" }), "data-testid": "section-close", onClick: props.close, style: QUIET, children: "Close" })) : null] })] })] }));
|
|
220
|
+
}
|
|
221
|
+
const COVER = { position: "fixed", display: "none", placeItems: "center", boxSizing: "border-box", borderRadius: 12, zIndex: layer("popover"), pointerEvents: "auto", overflow: "hidden" };
|
|
222
|
+
const COVER_WORDS = { margin: 0, padding: "8px 14px", borderRadius: 999, fontSize: "0.9375rem", color: "var(--graview-ink)", background: "var(--graview-float, var(--graview-panel))", border: "1px solid var(--graview-edge)", boxShadow: "var(--graview-lift-low)", position: "sticky", top: 16 };
|
|
223
|
+
const MARK = { color: "var(--graview-accent)" };
|
|
224
|
+
const BAR = {
|
|
225
|
+
position: "fixed",
|
|
226
|
+
left: "max(12px, calc(50% - 440px))",
|
|
227
|
+
right: "max(12px, calc(50% - 440px))",
|
|
228
|
+
bottom: 12,
|
|
229
|
+
zIndex: layer("popover"),
|
|
230
|
+
boxSizing: "border-box",
|
|
231
|
+
display: "grid",
|
|
232
|
+
gap: 8,
|
|
233
|
+
padding: "10px 12px",
|
|
234
|
+
borderRadius: 14,
|
|
235
|
+
border: "1px solid var(--graview-edge)",
|
|
236
|
+
background: "var(--graview-float, var(--graview-panel))",
|
|
237
|
+
color: "var(--graview-ink)",
|
|
238
|
+
boxShadow: "var(--graview-lift-high)",
|
|
239
|
+
fontSize: "0.875rem",
|
|
240
|
+
};
|
|
241
|
+
const SAID = { margin: 0, fontWeight: 600, overflowWrap: "anywhere" };
|
|
242
|
+
const BUSY = { margin: 0, fontStyle: "italic", overflowWrap: "anywhere" };
|
|
243
|
+
const QUIET_LINE = { margin: 0, color: "var(--graview-ink-muted)", fontSize: "0.8125rem" };
|
|
244
|
+
const CONTROLS = { display: "flex", flexWrap: "wrap", alignItems: "center", gap: 8 };
|
|
245
|
+
const BUTTON = { minHeight: 34, padding: "0 12px", font: "inherit", borderRadius: 8, cursor: "pointer" };
|
|
246
|
+
const PRIMARY = { ...BUTTON, color: "var(--graview-accent-ink, #fff)", background: "var(--graview-accent)", border: "1px solid var(--graview-accent)" };
|
|
247
|
+
const QUIET = { ...BUTTON, color: "var(--graview-ink)", background: "transparent", border: "1px solid var(--graview-edge)" };
|
|
248
|
+
const SWITCH = { display: "inline-flex", border: "1px solid var(--graview-edge)", borderRadius: 999, padding: 2 };
|
|
249
|
+
const SWITCH_ON = { ...BUTTON, minHeight: 28, padding: "0 10px", borderRadius: 999, border: 0, color: "var(--graview-accent-ink, #fff)", background: "var(--graview-accent)" };
|
|
250
|
+
const SWITCH_OFF = { ...BUTTON, minHeight: 28, padding: "0 10px", borderRadius: 999, border: 0, color: "var(--graview-ink)", background: "transparent" };
|
|
251
|
+
const FIELD = { boxSizing: "border-box", flex: "1 1 auto", minWidth: 0, height: 34, padding: "0 10px", font: "inherit", fontSize: "max(1rem,16px)", color: "var(--graview-ink)", background: "var(--graview-panel)", border: "1px solid var(--graview-edge)", borderRadius: 8 };
|
|
252
|
+
//# sourceMappingURL=better-bar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-bar.js","sourceRoot":"","sources":["../src/better-bar.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AACzG,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;GAOG;AAEH,MAAM,KAAK,GAAG,CAAC,IAA+B,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAE5F,sGAAsG;AACtG,SAAS,OAAO,CAAC,IAAa;IAC5B,MAAM,KAAK,GAAiB,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,UAAU;QAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;QAAE,IAAI,MAAM,CAAC,UAAU;YAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sFAAsF;AACtF,SAAS,SAAS,CAAC,IAAgB;IACjC,IAAI,IAAI,YAAY,WAAW;QAAE,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;IACjF,OAAO,CAAC,GAAI,IAAmB,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtK,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,GAAG,gCAAgC,CAAC;AAEpD;;;;GAIG;AACH,SAAS,OAAO,CAAC,GAAY,EAAE,IAAa;IAC1C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,gBAAgB,CAAC,GAAG,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC5C,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,2HAA2H;QAC3H,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sGAAsG,CAAC;YAAE,SAAS;QACzK,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAC3C,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IAChF,CAAC;IACD,qFAAqF;IACrF,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAU,CAAC,CAAC,EAAE,CAAC;QACnI,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACzB,6EAA6E;QAC7E,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACxI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,MAAM;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgC,EAAE,MAAyB;IACnF,IAAI,CAAC,IAAI,EAAE,WAAW;QAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAyC,EAAE,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,KAAK;QACrB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,EAAE,CAAC;YAC3E,IAAI,OAAO,CAAC,OAAO,CAAC,6DAA6D,CAAC;gBAAE,SAAS;YAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAY,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAAE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;oBAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/G,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7D,IAAI,IAAI,EAAE,CAAC;gBACT,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACpB,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QACxC,IAAI,IAAyB,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,KAAK;YACrB,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,gBAAgB,CAAC,qDAAqD,CAAC,EAAE,CAAC;gBAClG,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI;oBAAE,SAAS;gBAChE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,IAAI,GAAG,OAAO,CAAC;YACtD,CAAC;QACH,IAAI,IAAI;YAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClC,MAAM,OAAO,GAAmC,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAClC,qFAAqF;QACrF,IAAI,GAAG,GAAY,IAAI,CAAC;QACxB,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,YAAY,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;YAC/G,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAAE,MAAM;YACvE,IAAI,EAAE,CAAC,OAAO,CAAC,0DAA0D,CAAC;gBAAE,MAAM;YAClF,GAAG,GAAG,EAAE,CAAC;QACX,CAAC;QACD,oGAAoG;QACpG,IAAI,KAAyB,CAAC;QAC9B,2GAA2G;QAC3G,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACxE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAAE,SAAS;YAClK,IAAI,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,2BAA2B;gBAAE,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC;QACrG,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,OAAO,GAAG,GAAG,YAAY,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAChH,2IAA2I;QAC3I,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,+BAA+B,CAAC,KAAK,IAAI,CAAC;QACvH,uHAAuH;QACvH,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,gBAAgB,CAAC,gGAAgG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QACjO,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/O,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACrE,CAAC;AAED,iEAAiE;AACjE,SAAS,OAAO,CAAC,MAAkC,EAAE,GAAwC,EAAE,GAAG,GAAG,CAAC;IACpG,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC1D,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;gBAClD,EAAE,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClD,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;gBACnD,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;gBAC5C,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;gBACzD,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC;YAC9D,CAAC;YACD,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,KAAK,EAAE,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,WAAW,GAAG;;oFAEgE,CAAC;AAErF;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAgG;IAC5I,MAAM,KAAK,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACxB,OAAO,CACL,eAAK,GAAG,EAAE,KAAK,8BAA2B,EAAE,iBAAa,aAAa,0BAAsB,EAAE,EAAC,KAAK,EAAE,KAAK,aACzG,0BAAQ,WAAW,GAAS,EAC5B,aAAG,IAAI,EAAC,QAAQ,eAAW,QAAQ,EAAC,KAAK,EAAE,WAAW,aACpD,8BAAkB,MAAM,EAAC,KAAK,EAAE,IAAI,uBAAU,OAAE,IAAI,IAAI,2BAA2B,IAAI,IAAI,IACzF,IACA,CACP,CAAC;AACJ,CAAC;AAED,yGAAyG;AACzG,SAAS,YAAY,CAAC,GAAwC;IAC5D,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACjD,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;QACrE,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,MAAM,KAAK,GAAG,OAAO,cAAc,KAAK,UAAU,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACpG,IAAI,KAAK,IAAI,GAAG,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrD,OAAO,GAAG,EAAE;YACV,KAAK,EAAE,UAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QAC7C,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,CAAC;AAkCD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,GAAG,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClB,wGAAwG;IACxG,SAAS,CAAC,GAAG,EAAE;QACb,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAc,cAAc,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3G,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAClB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC;IACzC,OAAO,CACL,eAAK,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,IAAI,EAAC,QAAQ,gBAAa,aAAa,KAAK,CAAC,IAAI,GAAG,iBAAc,cAAc,qBAAiB,EAAE,wBAAqB,KAAK,CAAC,KAAK,0BAAuB,EAAE,EAAC,KAAK,EAAE,GAAG,aAClM,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,aAClD,YAAG,IAAI,EAAC,QAAQ,eAAW,QAAQ,iBAAa,gBAAgB,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,YAC7F,KAAK,CAAC,IAAI,GACT,EACH,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,2BAAe,eAAe,EAAC,KAAK,EAAE,UAAU,YAC7C,KAAK,CAAC,KAAK,GACV,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CACZ,2BAAe,cAAc,EAAC,KAAK,EAAE,UAAU,YAC5C,KAAK,CAAC,IAAI,GACT,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,QAAQ,IACX,EACN,eAAK,KAAK,EAAE,QAAQ,aACjB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,cAAK,IAAI,EAAC,OAAO,gBAAY,SAAS,EAAC,KAAK,EAAE,MAAM,YAChD,CAAC,QAAQ,EAAE,OAAO,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4BAC3C,MAAM,EAAE,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAQ,CAAC,MAAM,CAAC;4BAC9E,OAAO,CACL,iBAAmB,IAAI,EAAC,QAAQ,iBAAc,WAAW,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAgB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,YACzL,IAAI,IADM,IAAI,CAER,CACV,CAAC;wBACJ,CAAC,CAAC,GACE,CACP,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CACjC,gBAAM,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,aACnE,+BAAkB,cAAc,EAAC,KAAK,EAAE,UAAU,sBAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,UAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IACjC,EACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACjB,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,mBAAmB,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,iCAEnF,CACV,CAAC,CAAC,CAAC,IAAI,IACH,CACR,CAAC,CAAC,CAAC,IAAI,EACP,GAAG,CAAC,CAAC,CAAC,CACL,gBACE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,KAAK,CAAC,cAAc,EAAE,CAAC;4BACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gCAAE,OAAO;4BAC1B,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;4BAClB,QAAQ,CAAC,EAAE,CAAC,CAAC;wBACf,CAAC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,aAElE,gBAAO,OAAO,EAAC,sBAAsB,EAAC,KAAK,EAAE,eAAe,YACzD,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,sBAAsB,GAC5D,EACR,gBAAO,EAAE,EAAC,sBAAsB,iBAAa,iBAAiB,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,uBAAuB,EAAE,KAAK,EAAE,KAAK,GAAI,IACnP,CACR,CAAC,CAAC,CAAC,IAAI,EACR,gBAAM,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,aAChE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CACjB,iBAAQ,IAAI,EAAC,QAAQ,gBAAY,EAAE,iBAAa,oBAAoB,EAAC,OAAO,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,2BAEpG,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAC/B,iBAAQ,IAAI,EAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,iBAAc,yBAAyB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAmB,iCAAiC,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,mCAE3N,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CACd,iBAAQ,IAAI,EAAC,QAAQ,gBAAY,EAAE,iBAAa,gBAAgB,EAAC,OAAO,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,uBAE3F,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CACZ,iBAAQ,IAAI,EAAC,QAAQ,gBAAY,EAAE,iBAAa,cAAc,EAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,qBAE/G,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,iBAAiB,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,wBAE/E,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CACZ,iBAAQ,IAAI,EAAC,QAAQ,gBAAY,EAAE,iBAAa,cAAc,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,qBAEvF,CACV,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,iBAAQ,IAAI,EAAC,QAAQ,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,iBAAc,eAAe,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,sBAEzK,CACV,CAAC,CAAC,CAAC,IAAI,IACH,IACH,IACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,KAAK,GAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AAC1M,MAAM,WAAW,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,4CAA4C,EAAE,MAAM,EAAE,+BAA+B,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;AACnT,MAAM,IAAI,GAAkB,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC;AAC/D,MAAM,GAAG,GAAkB;IACzB,QAAQ,EAAE,OAAO;IACjB,IAAI,EAAE,8BAA8B;IACpC,KAAK,EAAE,8BAA8B;IACrC,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,MAAM;IACf,GAAG,EAAE,CAAC;IACN,OAAO,EAAE,WAAW;IACpB,YAAY,EAAE,EAAE;IAChB,MAAM,EAAE,+BAA+B;IACvC,UAAU,EAAE,4CAA4C;IACxD,KAAK,EAAE,oBAAoB;IAC3B,SAAS,EAAE,0BAA0B;IACrC,QAAQ,EAAE,UAAU;CACrB,CAAC;AACF,MAAM,IAAI,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACrF,MAAM,IAAI,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC;AACzF,MAAM,UAAU,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1G,MAAM,QAAQ,GAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACpG,MAAM,MAAM,GAAkB,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACxH,MAAM,OAAO,GAAkB,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,iCAAiC,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;AACvK,MAAM,KAAK,GAAkB,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;AAC5I,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACjI,MAAM,SAAS,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,UAAU,EAAE,uBAAuB,EAAE,CAAC;AAC9L,MAAM,UAAU,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AACxK,MAAM,KAAK,GAAkB,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,+BAA+B,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** A line of the conversation, as the panel shows it. */
|
|
3
|
+
export interface PanelLine {
|
|
4
|
+
readonly who: "person" | "graview";
|
|
5
|
+
readonly said: string;
|
|
6
|
+
}
|
|
7
|
+
/** A step Graview took, as the panel shows it: done, the one it is on, or one that found something to fix. */
|
|
8
|
+
export interface PanelStep {
|
|
9
|
+
readonly text: string;
|
|
10
|
+
readonly kind: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BetterPanelProps {
|
|
13
|
+
/** What is being changed: “Tasks”. */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** Who it changes it for, in a sentence. */
|
|
16
|
+
readonly scope: string;
|
|
17
|
+
readonly phase: string;
|
|
18
|
+
readonly talk: readonly PanelLine[];
|
|
19
|
+
/** This turn's steps, oldest first. */
|
|
20
|
+
readonly steps: readonly PanelStep[];
|
|
21
|
+
/** When this turn began, for its running time. */
|
|
22
|
+
readonly since: number;
|
|
23
|
+
readonly working: boolean;
|
|
24
|
+
/** The draft on the page, in the code's words: what changed. Absent with no draft. */
|
|
25
|
+
readonly draft?: {
|
|
26
|
+
readonly said: string;
|
|
27
|
+
readonly before: boolean;
|
|
28
|
+
};
|
|
29
|
+
/** Kept: what the host said, and Undo. */
|
|
30
|
+
readonly kept?: {
|
|
31
|
+
readonly note?: string;
|
|
32
|
+
readonly undo?: () => void;
|
|
33
|
+
};
|
|
34
|
+
/** What the person pointed at, said. */
|
|
35
|
+
readonly pointed?: string;
|
|
36
|
+
/** What the conversation is about, by its name: the part right-clicked ("Tasks"), or the one pointed at ("Someday"). */
|
|
37
|
+
readonly about?: string;
|
|
38
|
+
readonly ask: (words: string) => void;
|
|
39
|
+
readonly just: () => void;
|
|
40
|
+
readonly point: () => void;
|
|
41
|
+
readonly stop: () => void;
|
|
42
|
+
readonly compare: (before: boolean) => void;
|
|
43
|
+
readonly keep: () => void;
|
|
44
|
+
readonly discard: () => void;
|
|
45
|
+
readonly close: () => void;
|
|
46
|
+
/** Drawn under the draft's buttons: a rating of what it answered, where the host keeps tellings. */
|
|
47
|
+
readonly children?: ReactNode;
|
|
48
|
+
}
|
|
49
|
+
export declare function BetterPanel(props: BetterPanelProps): import("react").JSX.Element;
|
|
50
|
+
//# sourceMappingURL=better-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-panel.d.ts","sourceRoot":"","sources":["../src/better-panel.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8E,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAenH,yDAAyD;AACzD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,8GAA8G;AAC9G,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;IACrC,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACrE,0CAA0C;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACvE,wCAAwC;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,wHAAwH;IACxH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;IAC3B,oGAAoG;IACpG,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC;CAC/B;AA0ED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,+BA2KlD"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { layer } from "@graview/core";
|
|
3
|
+
import { Fragment, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
4
|
+
import { VISUALLY_HIDDEN } from "./primitives/measure.js";
|
|
5
|
+
const PHONE = 640;
|
|
6
|
+
const WIDE = 372;
|
|
7
|
+
const DRAWER = 1100;
|
|
8
|
+
const dockOf = () => (typeof innerWidth !== "number" || innerWidth >= DRAWER ? "side" : innerWidth >= PHONE ? "drawer" : "sheet");
|
|
9
|
+
/** The app's bar along the top of the window: the shell's, else a header that spans it. */
|
|
10
|
+
function barOf() {
|
|
11
|
+
const named = document.querySelector('[data-testid="app-bar"]');
|
|
12
|
+
if (named)
|
|
13
|
+
return named;
|
|
14
|
+
return [...document.querySelectorAll("header")].find((one) => {
|
|
15
|
+
const box = one.getBoundingClientRect();
|
|
16
|
+
return box.top <= 1 && box.width >= innerWidth * 0.8 && box.height > 0;
|
|
17
|
+
}) ?? null;
|
|
18
|
+
}
|
|
19
|
+
/** What holds the page under the bar: the widest box around the page's own region that is not around the bar too. */
|
|
20
|
+
function contentOf(bar) {
|
|
21
|
+
let at = document.querySelector("[data-graview-page-main], main");
|
|
22
|
+
while (at?.parentElement && at.parentElement !== document.body && !(bar && at.parentElement.contains(bar)))
|
|
23
|
+
at = at.parentElement;
|
|
24
|
+
return at;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* THE PANEL IS PART OF THE PAGE. Beside it, it is docked flush under the
|
|
28
|
+
* app's bar, at the right, down to the window's foot, and what holds the
|
|
29
|
+
* page gives up its width — the bar spans the window as always, and
|
|
30
|
+
* nothing behind the panel shows. Where the window is narrow it is a
|
|
31
|
+
* drawer over the page's right side, and on a phone a sheet from the
|
|
32
|
+
* bottom with room left below the page. Followed each frame: a bar that
|
|
33
|
+
* scrolls away leaves the panel the window's full height.
|
|
34
|
+
*/
|
|
35
|
+
function useDock(panel) {
|
|
36
|
+
const [dock, setDock] = useState(dockOf);
|
|
37
|
+
useLayoutEffect(() => {
|
|
38
|
+
const body = document.body.style;
|
|
39
|
+
const bottom = body.paddingBottom;
|
|
40
|
+
let content = null;
|
|
41
|
+
let right = "";
|
|
42
|
+
let frame = 0;
|
|
43
|
+
const give = (to, wide) => {
|
|
44
|
+
if (content && content !== to)
|
|
45
|
+
content.style.paddingRight = right;
|
|
46
|
+
if (to && to !== content)
|
|
47
|
+
right = to.style.paddingRight;
|
|
48
|
+
content = to;
|
|
49
|
+
if (content)
|
|
50
|
+
content.style.paddingRight = wide ? `${WIDE}px` : right;
|
|
51
|
+
};
|
|
52
|
+
const place = () => {
|
|
53
|
+
const now = dockOf();
|
|
54
|
+
setDock(now);
|
|
55
|
+
const bar = barOf();
|
|
56
|
+
const top = Math.max(0, Math.round(bar?.getBoundingClientRect().bottom ?? 0));
|
|
57
|
+
if (panel.current && now !== "sheet")
|
|
58
|
+
panel.current.style.top = `${top}px`;
|
|
59
|
+
give(contentOf(bar), now === "side");
|
|
60
|
+
body.paddingBottom = now === "sheet" ? `${Math.round((panel.current?.getBoundingClientRect().height ?? 0) + 16)}px` : bottom;
|
|
61
|
+
frame = requestAnimationFrame(place);
|
|
62
|
+
};
|
|
63
|
+
place();
|
|
64
|
+
return () => {
|
|
65
|
+
cancelAnimationFrame(frame);
|
|
66
|
+
give(null, false);
|
|
67
|
+
body.paddingBottom = bottom;
|
|
68
|
+
};
|
|
69
|
+
}, [panel]);
|
|
70
|
+
return dock;
|
|
71
|
+
}
|
|
72
|
+
/** Minutes and seconds: "0:42". */
|
|
73
|
+
const elapsed = (ms) => `${Math.floor(ms / 60_000)}:${String(Math.floor((ms % 60_000) / 1000)).padStart(2, "0")}`;
|
|
74
|
+
export function BetterPanel(props) {
|
|
75
|
+
const panel = useRef(null);
|
|
76
|
+
const list = useRef(null);
|
|
77
|
+
const field = useRef(null);
|
|
78
|
+
const [typed, setTyped] = useState("");
|
|
79
|
+
const [, tick] = useState(0);
|
|
80
|
+
const dock = useDock(panel);
|
|
81
|
+
/* The running time, while it works. */
|
|
82
|
+
useEffect(() => {
|
|
83
|
+
if (!props.working)
|
|
84
|
+
return;
|
|
85
|
+
const timer = setInterval(() => tick((one) => one + 1), 1000);
|
|
86
|
+
return () => clearInterval(timer);
|
|
87
|
+
}, [props.working]);
|
|
88
|
+
/* The newest line in view, and the keyboard in the words field once it is the person's turn. */
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
// Within the conversation only: scrolling the newest line into view must never move the panel, nor hide the first line under its head.
|
|
91
|
+
if (list.current)
|
|
92
|
+
list.current.scrollTop = list.current.scrollHeight;
|
|
93
|
+
}, [props.talk.length, props.steps.length]);
|
|
94
|
+
useEffect(() => {
|
|
95
|
+
if (!props.working)
|
|
96
|
+
field.current?.focus({ preventScroll: true });
|
|
97
|
+
}, [props.working, props.phase]);
|
|
98
|
+
const lastAsked = props.talk.map((line) => line.who).lastIndexOf("person");
|
|
99
|
+
const steps = props.steps.length > 0 ? (_jsx("li", { "data-testid": "better-steps", style: STEPS, children: _jsx("ol", { style: { margin: 0, padding: 0, listStyle: "none", display: "grid", gap: 3 }, children: props.steps.map((step, at) => {
|
|
100
|
+
const now = props.working && at === props.steps.length - 1;
|
|
101
|
+
return (_jsxs("li", { "data-testid": "better-step", "data-step-kind": step.kind, style: { display: "flex", gap: 6, alignItems: "baseline", color: now ? "var(--graview-ink)" : "var(--graview-ink-muted)" }, children: [_jsx("span", { "aria-hidden": "true", style: { width: 14, flex: "none", color: step.kind === "check" ? "var(--graview-warn)" : "var(--graview-accent)" }, children: now ? "…" : step.kind === "check" ? "!" : "✓" }), _jsx("span", { children: step.text })] }, `s${at}`));
|
|
102
|
+
}) }) })) : null;
|
|
103
|
+
const empty = props.talk.length === 0;
|
|
104
|
+
return (_jsxs("aside", { ref: panel, role: "complementary", "aria-label": `Change how “${props.name}” looks`, "data-testid": "better-panel", "data-better-phase": props.phase, "data-better-dock": dock, "data-graview-popover": "", style: dock === "sheet" ? SHEET : dock === "drawer" ? DRAWER_STYLE : SIDE, children: [_jsxs("header", { style: HEAD, children: [_jsxs("p", { style: { margin: 0, fontWeight: 600 }, children: ["Change how \u201C", props.name, "\u201D looks"] }), _jsx("button", { type: "button", "data-testid": "better-close", "aria-label": "Close", onClick: props.close, style: ICON, children: "\u00D7" })] }), _jsx("p", { "data-testid": "better-scope", style: QUIET_LINE, children: props.scope }), props.about ? (_jsxs("p", { "data-testid": "better-about", style: CHIP, children: ["About: ", props.about] })) : null, _jsxs("ol", { ref: list, "data-testid": "better-talk", style: TALK, children: [props.talk.map((line, at) => (_jsxs(Fragment, { children: [_jsx("li", { "data-testid": "better-message", "data-who": line.who, style: line.who === "person" ? MINE : THEIRS, children: line.said }), at === lastAsked ? steps : null] }, `t${at}`))), lastAsked < 0 ? steps : null] }), props.working ? (_jsxs("div", { style: ROW, children: [_jsxs("p", { role: "status", "aria-live": "polite", "data-testid": "better-working", style: { margin: 0, flex: 1, color: "var(--graview-ink-muted)" }, children: ["Graview is working on \u201C", props.name, "\u201D \u00B7 ", _jsx("span", { "data-testid": "better-time", children: elapsed(Date.now() - props.since) })] }), _jsx("button", { type: "button", "data-testid": "better-stop", onClick: props.stop, style: QUIET, children: "Stop" })] })) : null, props.draft && !props.working ? (_jsxs("div", { "data-testid": "better-draft", style: { flexShrink: 0, display: "grid", gap: 6 }, children: [_jsx("p", { "data-testid": "better-changed", style: { margin: 0 }, children: props.draft.said }), _jsxs("div", { style: ROW, children: [_jsx("div", { role: "group", "aria-label": "Compare", style: SWITCH, children: ["Before", "After"].map((side) => {
|
|
105
|
+
const on = side === "Before" ? props.draft.before : !props.draft.before;
|
|
106
|
+
return (_jsx("button", { type: "button", "data-testid": `better-${side.toLowerCase()}`, "aria-pressed": on, onClick: () => props.compare(side === "Before"), style: on ? SWITCH_ON : SWITCH_OFF, children: side }, side));
|
|
107
|
+
}) }), _jsxs("span", { style: { marginLeft: "auto", display: "inline-flex", gap: 6 }, children: [_jsx("button", { type: "button", "data-testid": "better-keep", onClick: props.keep, style: PRIMARY, children: "Keep" }), _jsx("button", { type: "button", "data-testid": "better-discard", onClick: props.discard, style: QUIET, children: "Discard" })] })] })] })) : null, props.children, props.kept && !props.working ? (_jsxs("div", { "data-testid": "better-kept", style: ROW, children: [_jsxs("p", { style: { margin: 0, flex: 1 }, children: ["Kept.", props.kept.note ? ` ${props.kept.note}` : ""] }), props.kept.undo ? (_jsx("button", { type: "button", "data-testid": "better-undo", onClick: props.kept.undo, style: QUIET, children: "Undo" })) : null] })) : null, empty && !props.working ? (_jsxs("div", { style: ROW, children: [_jsx("button", { type: "button", "data-testid": "better-just", onClick: props.just, style: QUIET, children: "Make it easier to read" }), _jsx("button", { type: "button", "data-testid": "better-point", onClick: props.point, style: QUIET, children: "Point at a part\u2026" })] })) : null, props.pointed && !props.working ? (_jsxs("p", { "data-testid": "better-pointed", style: QUIET_LINE, children: ["You pointed at ", props.pointed, "."] })) : null, _jsxs("form", { onSubmit: (event) => {
|
|
108
|
+
event.preventDefault();
|
|
109
|
+
if (!typed.trim() || props.working)
|
|
110
|
+
return;
|
|
111
|
+
props.ask(typed.trim());
|
|
112
|
+
setTyped("");
|
|
113
|
+
}, style: { flexShrink: 0, display: "flex", gap: 6 }, children: [_jsx("label", { htmlFor: "graview-better-panel-words", style: VISUALLY_HIDDEN, children: "Tell Graview what to change" }), _jsx("input", { id: "graview-better-panel-words", ref: field, "data-testid": "better-words", value: typed, disabled: props.working, onChange: (event) => setTyped(event.target.value), placeholder: empty ? "What should change?" : "Tell Graview what to change…", style: FIELD }), _jsx("button", { type: "submit", disabled: props.working || !typed.trim(), "data-testid": "better-send", style: PRIMARY, children: "Send" })] })] }));
|
|
114
|
+
}
|
|
115
|
+
/* The shell's own surface, one line from the page: part of the app, in its light and dark alike. */
|
|
116
|
+
const BASE = {
|
|
117
|
+
position: "fixed",
|
|
118
|
+
zIndex: layer("popover"),
|
|
119
|
+
boxSizing: "border-box",
|
|
120
|
+
display: "flex",
|
|
121
|
+
flexDirection: "column",
|
|
122
|
+
gap: 10,
|
|
123
|
+
padding: 14,
|
|
124
|
+
margin: 0,
|
|
125
|
+
fontSize: "0.875rem",
|
|
126
|
+
lineHeight: 1.45,
|
|
127
|
+
color: "var(--graview-ink)",
|
|
128
|
+
background: "var(--graview-panel)",
|
|
129
|
+
overflow: "hidden",
|
|
130
|
+
};
|
|
131
|
+
const SIDE = { ...BASE, top: 0, right: 0, bottom: 0, width: WIDE, borderLeft: "1px solid var(--graview-edge)" };
|
|
132
|
+
const DRAWER_STYLE = { ...SIDE, width: `min(${WIDE}px, 86vw)`, boxShadow: "var(--graview-lift-high, -12px 0 32px rgba(0,0,0,0.18))" };
|
|
133
|
+
const SHEET = { ...BASE, left: 0, right: 0, bottom: 0, maxHeight: "55vh", borderTop: "1px solid var(--graview-edge)", borderRadius: "14px 14px 0 0", boxShadow: "var(--graview-lift-high, 0 -12px 32px rgba(0,0,0,0.18))" };
|
|
134
|
+
const CHIP = { flexShrink: 0, margin: 0, justifySelf: "start", alignSelf: "flex-start", padding: "2px 10px", borderRadius: 999, fontSize: "0.8125rem", color: "var(--graview-ink)", background: "var(--graview-ground)", border: "1px solid var(--graview-edge)" };
|
|
135
|
+
const HEAD = { flexShrink: 0, display: "flex", alignItems: "center", gap: 8, justifyContent: "space-between" };
|
|
136
|
+
const QUIET_LINE = { flexShrink: 0, margin: 0, fontSize: "0.8125rem", color: "var(--graview-ink-muted)" };
|
|
137
|
+
const TALK = { margin: 0, padding: 0, listStyle: "none", display: "flex", flexDirection: "column", gap: 8, overflowY: "auto", flex: "1 1 0", minHeight: 0 };
|
|
138
|
+
const BUBBLE = { padding: "7px 10px", borderRadius: 10, maxWidth: "88%", whiteSpace: "pre-wrap", flex: "none" };
|
|
139
|
+
const MINE = { ...BUBBLE, alignSelf: "flex-end", background: "color-mix(in srgb, var(--graview-accent) 12%, var(--graview-panel))" };
|
|
140
|
+
const THEIRS = { ...BUBBLE, alignSelf: "flex-start", background: "var(--graview-ground)" };
|
|
141
|
+
const STEPS = { flex: "none", padding: "6px 10px", borderRadius: 10, border: "1px dashed var(--graview-edge)", fontSize: "0.8125rem" };
|
|
142
|
+
const ROW = { flexShrink: 0, display: "flex", flexWrap: "wrap", alignItems: "center", gap: 6 };
|
|
143
|
+
const BUTTON = { minHeight: 32, padding: "0 12px", borderRadius: 8, fontSize: "0.8125rem", cursor: "pointer" };
|
|
144
|
+
const PRIMARY = { ...BUTTON, color: "var(--graview-accent-ink, #fff)", background: "var(--graview-accent)", border: "1px solid var(--graview-accent)" };
|
|
145
|
+
const QUIET = { ...BUTTON, color: "var(--graview-ink)", background: "transparent", border: "1px solid var(--graview-edge)" };
|
|
146
|
+
const ICON = { ...QUIET, minHeight: 28, padding: "0 9px", fontSize: "1rem", lineHeight: 1 };
|
|
147
|
+
const FIELD = { flex: "1 1 auto", minWidth: 0, minHeight: 34, padding: "0 10px", borderRadius: 8, border: "1px solid var(--graview-edge)", background: "var(--graview-panel)", color: "var(--graview-ink)", fontSize: "0.875rem" };
|
|
148
|
+
const SWITCH = { display: "inline-flex", border: "1px solid var(--graview-edge)", borderRadius: 999, padding: 2 };
|
|
149
|
+
const SWITCH_ON = { ...BUTTON, minHeight: 28, borderRadius: 999, border: "none", color: "var(--graview-accent-ink, #fff)", background: "var(--graview-accent)" };
|
|
150
|
+
const SWITCH_OFF = { ...BUTTON, minHeight: 28, borderRadius: 999, border: "none", color: "var(--graview-ink)", background: "transparent" };
|
|
151
|
+
//# sourceMappingURL=better-panel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"better-panel.js","sourceRoot":"","sources":["../src/better-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AA0D1D,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,IAAI,GAAG,GAAG,CAAC;AAEjB,MAAM,MAAM,GAAG,IAAI,CAAC;AAIpB,MAAM,MAAM,GAAG,GAAS,EAAE,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAExI,2FAA2F;AAC3F,SAAS,KAAK;IACZ,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,CAAC;IAChE,IAAI,KAAK;QAAE,OAAO,KAAK,CAAC;IACxB,OAAO,CAAC,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3D,MAAM,GAAG,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACxC,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,IAAI,UAAU,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,CAAC,CAAC,IAAI,IAAI,CAAC;AACb,CAAC;AAED,qHAAqH;AACrH,SAAS,SAAS,CAAC,GAAmB;IACpC,IAAI,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAc,gCAAgC,CAAC,CAAC;IAC/E,OAAO,EAAE,EAAE,aAAa,IAAI,EAAE,CAAC,aAAa,KAAK,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC;IAClI,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,OAAO,CAAC,KAA0C;IACzD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAO,MAAM,CAAC,CAAC;IAC/C,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC;QAClC,IAAI,OAAO,GAAuB,IAAI,CAAC;QACvC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,IAAI,GAAG,CAAC,EAAsB,EAAE,IAAa,EAAE,EAAE;YACrD,IAAI,OAAO,IAAI,OAAO,KAAK,EAAE;gBAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;YAClE,IAAI,EAAE,IAAI,EAAE,KAAK,OAAO;gBAAE,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC;YACxD,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,OAAO;gBAAE,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QACvE,CAAC,CAAC;QACF,MAAM,KAAK,GAAG,GAAG,EAAE;YACjB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,KAAK,CAAC,OAAO,IAAI,GAAG,KAAK,OAAO;gBAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;YAC3E,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7H,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC,CAAC;QACF,KAAK,EAAE,CAAC;QACR,OAAO,GAAG,EAAE;YACV,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAClB,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC9B,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mCAAmC;AACnC,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAE1H,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,KAAK,GAAG,MAAM,CAAc,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,uCAAuC;IACvC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9D,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpB,gGAAgG;IAChG,SAAS,CAAC,GAAG,EAAE;QACb,uIAAuI;QACvI,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;IACvE,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,KAAK,GACT,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACvB,4BAAgB,cAAc,EAAC,KAAK,EAAE,KAAK,YACzC,aAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,YAC7E,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC3D,OAAO,CACL,6BAA+B,aAAa,oBAAiB,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,0BAA0B,EAAE,aAChM,8BAAkB,MAAM,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,uBAAuB,EAAE,YACxI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GACzC,EACP,yBAAO,IAAI,CAAC,IAAI,GAAQ,KAJjB,IAAI,EAAE,EAAE,CAKZ,CACN,CAAC;YACJ,CAAC,CAAC,GACC,GACF,CACN,CAAC,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IACtC,OAAO,CACL,iBACE,GAAG,EAAE,KAAK,EACV,IAAI,EAAC,eAAe,gBACR,eAAe,KAAK,CAAC,IAAI,SAAS,iBAClC,cAAc,uBACP,KAAK,CAAC,KAAK,sBACZ,IAAI,0BACD,EAAE,EACvB,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,aAEzE,kBAAQ,KAAK,EAAE,IAAI,aACjB,aAAG,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,kCACzB,KAAK,CAAC,IAAI,oBACrB,EACJ,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,cAAc,gBAAY,OAAO,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,uBAE5F,IACF,EACT,2BAAe,cAAc,EAAC,KAAK,EAAE,UAAU,YAC5C,KAAK,CAAC,KAAK,GACV,EACH,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CACb,4BAAe,cAAc,EAAC,KAAK,EAAE,IAAI,wBAC/B,KAAK,CAAC,KAAK,IACjB,CACL,CAAC,CAAC,CAAC,IAAI,EACR,cAAI,GAAG,EAAE,IAAI,iBAAc,aAAa,EAAC,KAAK,EAAE,IAAI,aACjD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAC5B,MAAC,QAAQ,eACP,4BAAgB,gBAAgB,cAAW,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,YAC9F,IAAI,CAAC,IAAI,GACP,EAEJ,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KALnB,IAAI,EAAE,EAAE,CAMZ,CACZ,CAAC,EACD,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAC1B,EACJ,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACf,eAAK,KAAK,EAAE,GAAG,aACb,aAAG,IAAI,EAAC,QAAQ,eAAW,QAAQ,iBAAa,gBAAgB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,6CACvG,KAAK,CAAC,IAAI,oBAAK,8BAAkB,aAAa,YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAQ,IAC/G,EACJ,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,aAAa,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,qBAExE,IACL,CACP,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAC/B,8BAAiB,cAAc,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aAC/E,2BAAe,gBAAgB,EAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,YACjD,KAAK,CAAC,KAAK,CAAC,IAAI,GACf,EACJ,eAAK,KAAK,EAAE,GAAG,aACb,cAAK,IAAI,EAAC,OAAO,gBAAY,SAAS,EAAC,KAAK,EAAE,MAAM,YAChD,CAAC,QAAQ,EAAE,OAAO,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oCAC3C,MAAM,EAAE,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAM,CAAC,MAAM,CAAC;oCAC1E,OAAO,CACL,iBAAmB,IAAI,EAAC,QAAQ,iBAAc,UAAU,IAAI,CAAC,WAAW,EAAE,EAAE,kBAAgB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,YAChL,IAAI,IADM,IAAI,CAER,CACV,CAAC;gCACJ,CAAC,CAAC,GACE,EACN,gBAAM,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,EAAE,aACjE,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,aAAa,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,qBAE1E,EACT,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,gBAAgB,EAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,wBAE9E,IACJ,IACH,IACF,CACP,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,QAAQ,EACd,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAC9B,8BAAiB,aAAa,EAAC,KAAK,EAAE,GAAG,aACvC,aAAG,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,sBAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAK,EACxF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CACjB,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,aAAa,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,qBAE7E,CACV,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACzB,eAAK,KAAK,EAAE,GAAG,aACb,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,aAAa,EAAC,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,uCAExE,EACT,iBAAQ,IAAI,EAAC,QAAQ,iBAAa,cAAc,EAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,sCAE1E,IACL,CACP,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CACjC,4BAAe,gBAAgB,EAAC,KAAK,EAAE,UAAU,gCAC/B,KAAK,CAAC,OAAO,SAC3B,CACL,CAAC,CAAC,CAAC,IAAI,EACR,gBACE,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;oBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;oBACvB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO;wBAAE,OAAO;oBAC3C,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACxB,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACf,CAAC,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,aAEjD,gBAAO,OAAO,EAAC,4BAA4B,EAAC,KAAK,EAAE,eAAe,4CAE1D,EACR,gBACE,EAAE,EAAC,4BAA4B,EAC/B,GAAG,EAAE,KAAK,iBACE,cAAc,EAC1B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,CAAC,OAAO,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EACjD,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,8BAA8B,EAC3E,KAAK,EAAE,KAAK,GACZ,EACF,iBAAQ,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,iBAAc,aAAa,EAAC,KAAK,EAAE,OAAO,qBAE/F,IACJ,IACD,CACT,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,IAAI,GAAkB;IAC1B,QAAQ,EAAE,OAAO;IACjB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,SAAS,EAAE,YAAY;IACvB,OAAO,EAAE,MAAM;IACf,aAAa,EAAE,QAAQ;IACvB,GAAG,EAAE,EAAE;IACP,OAAO,EAAE,EAAE;IACX,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,IAAI;IAChB,KAAK,EAAE,oBAAoB;IAC3B,UAAU,EAAE,sBAAsB;IAClC,QAAQ,EAAE,QAAQ;CACnB,CAAC;AACF,MAAM,IAAI,GAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,+BAA+B,EAAE,CAAC;AAC/H,MAAM,YAAY,GAAkB,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,OAAO,IAAI,WAAW,EAAE,SAAS,EAAE,yDAAyD,EAAE,CAAC;AACrJ,MAAM,KAAK,GAAkB,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,+BAA+B,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,yDAAyD,EAAE,CAAC;AAC3O,MAAM,IAAI,GAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;AAClR,MAAM,IAAI,GAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC;AAC9H,MAAM,UAAU,GAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC;AACzH,MAAM,IAAI,GAAkB,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;AAC3K,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/H,MAAM,IAAI,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,qEAAqE,EAAE,CAAC;AACpJ,MAAM,MAAM,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,uBAAuB,EAAE,CAAC;AAC1G,MAAM,KAAK,GAAkB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACtJ,MAAM,GAAG,GAAkB,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC9G,MAAM,MAAM,GAAkB,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AAC9H,MAAM,OAAO,GAAkB,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,iCAAiC,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;AACvK,MAAM,KAAK,GAAkB,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,CAAC;AAC5I,MAAM,IAAI,GAAkB,EAAE,GAAG,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAC3G,MAAM,KAAK,GAAkB,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,+BAA+B,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClP,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,+BAA+B,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AACjI,MAAM,SAAS,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iCAAiC,EAAE,UAAU,EAAE,uBAAuB,EAAE,CAAC;AAChL,MAAM,UAAU,GAAkB,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC"}
|
package/dist/chat.js
CHANGED
|
@@ -270,7 +270,7 @@ export function ChatPanel({ respond, onCall, onPick, testId = "chat", empty, sha
|
|
|
270
270
|
return;
|
|
271
271
|
try {
|
|
272
272
|
const answered = await onProposeChange(proposal);
|
|
273
|
-
if (answered === "applied") {
|
|
273
|
+
if (answered === "applied" || (typeof answered === "object" && answered.applied)) {
|
|
274
274
|
settle(key, { state: "applied", said: proposal.card.said });
|
|
275
275
|
noteSeat({ type: "said", author, say: `Changed the app: ${lowerFirst(proposal.card.said)}` });
|
|
276
276
|
}
|