@qualified-salesforce/web 0.0.1-oidc-bootstrap → 0.1.1
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/CAPABILITY-REFERENCE.md +41 -0
- package/CHANGELOG.md +84 -0
- package/README.md +65 -0
- package/constants.generated.js +30 -2
- package/css/widget/multimodal_v2/index.split-css.panda.css +265 -47
- package/package.json +18 -4
- package/packs/widget/api/docking/viewport_lock.js +93 -2
- package/packs/widget/esm/index.d.ts +134 -0
- package/packs/widget/esm/index.js +18 -2
- package/packs/widget/esm/qualified.css +265 -47
- package/src/graphql-types.js +74 -1
- package/src/url.js +4 -1
- package/vendor/actioncable/connection.js +40 -3
- package/vendor/actioncable/connection_monitor.js +8 -0
- package/vendor/actioncable/consumer.js +7 -1
- package/vendor/actioncable/index.js +5 -2
- package/vendor/actioncable/sse_socket.js +262 -0
- package/widget/analytics.js +8 -0
- package/widget/api_handler/base_api_handler.js +24 -0
- package/widget/booker_outcome_tracker.js +58 -20
- package/widget/capabilities.js +190 -0
- package/widget/channel.js +38 -6
- package/widget/constants.generated.js +2 -1
- package/widget/multimodal_v2/components/AppLayout.js +1 -1
- package/widget/multimodal_v2/components/app/Foreground.js +10 -9
- package/widget/multimodal_v2/components/app/Input.js +8 -3
- package/widget/multimodal_v2/components/app/LightboxExperience.js +17 -3
- package/widget/multimodal_v2/components/app/Main.js +87 -31
- package/widget/multimodal_v2/components/app/MessengerButton.js +18 -1
- package/widget/multimodal_v2/components/chat/ChatInputForm.js +8 -6
- package/widget/multimodal_v2/components/chat/timeline/CalendarEventPickRenderer.js +2 -2
- package/widget/multimodal_v2/components/chat/timeline/PresentDeckRenderer.js +346 -170
- package/widget/multimodal_v2/components/chat/timeline/SystemRenderer.js +4 -7
- package/widget/multimodal_v2/components/decks/index.js +506 -52
- package/widget/multimodal_v2/components/helpers/content_click_payloads.js +67 -1
- package/widget/multimodal_v2/components/lightbox_gather/index.js +4 -4
- package/widget/multimodal_v2/components/meetings/MeetingBookerEntry.js +8 -1
- package/widget/multimodal_v2/components/meetings/MeetingOfferEmailStep.js +1 -1
- package/widget/multimodal_v2/components/meetings/MeetingSummaryRail.js +1 -1
- package/widget/multimodal_v2/components/meetings/MeetingTimeSelector.js +1 -1
- package/widget/multimodal_v2/components/multimodal/Controls.js +11 -3
- package/widget/multimodal_v2/components/multimodal/useMultimodal.js +19 -7
- package/widget/multimodal_v2/components/presentations/index.js +61 -0
- package/widget/multimodal_v2/constants.js +1 -1
- package/widget/multimodal_v2/images/icons.js +17 -1
- package/widget/multimodal_v2/index.panda.js +2 -2
- package/widget/multimodal_v2/locales/cs.js +8 -1
- package/widget/multimodal_v2/locales/da.js +8 -1
- package/widget/multimodal_v2/locales/de.js +8 -1
- package/widget/multimodal_v2/locales/en.js +8 -1
- package/widget/multimodal_v2/locales/en_AU.js +8 -1
- package/widget/multimodal_v2/locales/en_GB.js +8 -1
- package/widget/multimodal_v2/locales/es.js +8 -1
- package/widget/multimodal_v2/locales/es_LA.js +8 -1
- package/widget/multimodal_v2/locales/fi.js +8 -1
- package/widget/multimodal_v2/locales/fr.js +8 -1
- package/widget/multimodal_v2/locales/fr_CA.js +8 -1
- package/widget/multimodal_v2/locales/id.js +8 -1
- package/widget/multimodal_v2/locales/it.js +8 -1
- package/widget/multimodal_v2/locales/ja.js +8 -1
- package/widget/multimodal_v2/locales/ko.js +8 -1
- package/widget/multimodal_v2/locales/nb.js +8 -1
- package/widget/multimodal_v2/locales/nl.js +8 -1
- package/widget/multimodal_v2/locales/pl.js +8 -1
- package/widget/multimodal_v2/locales/pt_BR.js +8 -1
- package/widget/multimodal_v2/locales/ru.js +8 -1
- package/widget/multimodal_v2/locales/sv.js +8 -1
- package/widget/multimodal_v2/locales/th.js +8 -1
- package/widget/multimodal_v2/locales/tr.js +8 -1
- package/widget/multimodal_v2/locales/vi.js +8 -1
- package/widget/multimodal_v2/locales/zh_CN.js +8 -1
- package/widget/multimodal_v2/locales/zh_TW.js +8 -1
- package/widget/multimodal_v2/multimodal.js +5 -1
- package/widget/multimodal_v2/multimodal_channel.js +13 -8
- package/widget/multimodal_v2/signals/messages_signal.js +4 -0
- package/widget/multimodal_v2/stores/ai_conversation_store.js +6 -2
- package/widget/multimodal_v2/stores/artifact_store.js +352 -27
- package/widget/multimodal_v2/stores/call_store.js +40 -1
- package/widget/multimodal_v2/stores/call_ui_adapter.js +1 -1
- package/widget/multimodal_v2/stores/decks_store.js +405 -39
- package/widget/multimodal_v2/stores/meeting_store.js +15 -10
- package/widget/multimodal_v2/stores/presentation_ga_adapter.js +64 -0
- package/widget/multimodal_v2/stores/presentation_telemetry_store.js +556 -0
- package/widget/multimodal_v2/stores/presentations_store.js +1 -0
- package/widget/multimodal_v2/stores/root_store.js +157 -268
- package/widget/multimodal_v2/stores/screen_share_store.js +41 -21
- package/widget/multimodal_v2/stores/translation_store.js +9 -0
- package/widget/multimodal_v2/stores/ui_store.js +7 -7
- package/widget/multimodal_v2/stores/website_navigation_store.js +3 -1
- package/widget/multimodal_v2/text_turn_response_tracker.js +419 -0
- package/widget/multimodal_v2/types.js +21 -1
- package/widget/multimodal_v2/utils/locale.js +2 -1
- package/widget/multimodal_v2/utils/signals.js +35 -4
- package/widget/pardot_visitor.js +7 -1
- package/widget/server-logger.js +97 -2
- package/widget/tracker.js +69 -21
- package/widget/widget/page_mirror_factory.js +9 -1
- package/widget/widget/widget.js +29 -4
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public TypeScript declarations for `@qualified-salesforce/web`.
|
|
3
|
+
*
|
|
4
|
+
* The curated public contract: the symbols the package exports and the types they reference. See
|
|
5
|
+
* `CAPABILITY-REFERENCE.md` (shipped in this package) for what each capability unlocks, the data
|
|
6
|
+
* egress it permits, and its default.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* The optional features a self-hosted consumer can enroll via `setup({ capabilities })`.
|
|
11
|
+
* Default-deny: a capability not listed stays off, and Qualified cannot turn it on. Voice is
|
|
12
|
+
* intentionally absent — this build ships text-only and cannot activate a call.
|
|
13
|
+
*
|
|
14
|
+
* A literal union rather than `string`, so a typo'd key is a compile error and an editor offers the
|
|
15
|
+
* valid keys. `CAPABILITY_KEYS` is the same set as a runtime value.
|
|
16
|
+
*
|
|
17
|
+
* See `CAPABILITY-REFERENCE.md` (shipped in this package) for what each key unlocks, the data
|
|
18
|
+
* egress it permits, and its default.
|
|
19
|
+
*/
|
|
20
|
+
export type Capability =
|
|
21
|
+
| "pardot"
|
|
22
|
+
| "liveView"
|
|
23
|
+
| "agentNavigation"
|
|
24
|
+
| "analytics"
|
|
25
|
+
| "slidePerception"
|
|
26
|
+
| "formCapture"
|
|
27
|
+
| "marketingIdentity";
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Every capability key, as a runtime value — the same set the boundary enforces. Enumerate it to
|
|
31
|
+
* build a settings UI or validate consumer input before passing `capabilities` to `setup()`.
|
|
32
|
+
*/
|
|
33
|
+
export declare const CAPABILITY_KEYS: readonly Capability[];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Host/CDN/websocket origins and versions for a Qualified environment.
|
|
37
|
+
*
|
|
38
|
+
* Normally the runtime-config endpoint serves this; pass it to `setup({ environment })` only to pin
|
|
39
|
+
* it explicitly. Public because it is part of the `setup()` option surface, so it is a SemVer
|
|
40
|
+
* contract rather than an internal shape.
|
|
41
|
+
*/
|
|
42
|
+
export interface EnvironmentConfig {
|
|
43
|
+
version: string;
|
|
44
|
+
host: string;
|
|
45
|
+
cdnHost: string;
|
|
46
|
+
wsHost: string;
|
|
47
|
+
assetsHost?: string;
|
|
48
|
+
frontendVersion: string;
|
|
49
|
+
meetingLinkHost: string;
|
|
50
|
+
heartbeatPingDivisor?: number;
|
|
51
|
+
staleThresholdSeconds?: number;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The widget's full runtime configuration, as the CORS-enabled endpoint serves it: the environment
|
|
56
|
+
* origins, the opaque team config, and the Sentry proxy URL.
|
|
57
|
+
*/
|
|
58
|
+
export interface RuntimeConfig {
|
|
59
|
+
/** Host/CDN/WS origins and versions. Overridden by `setup({ environment })` when passed. */
|
|
60
|
+
environment?: EnvironmentConfig;
|
|
61
|
+
/**
|
|
62
|
+
* Team settings, exactly as `q("initialize", token, config)` takes them. Deliberately opaque —
|
|
63
|
+
* this stays Qualified's contract with its own server, not a public interface.
|
|
64
|
+
*/
|
|
65
|
+
config: Record<string, unknown>;
|
|
66
|
+
/** Where the widget's Sentry clients POST envelopes; null on localhost. */
|
|
67
|
+
sentryProxyUrl?: string | null;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* The `q(...)` command function `setup()` resolves to — the same interface a CDN consumer gets, so
|
|
72
|
+
* `teardown`, `identify` and the rest are called as `qualified("teardown")`.
|
|
73
|
+
*/
|
|
74
|
+
export type QualifiedFunction = (command: string, ...args: unknown[]) => unknown;
|
|
75
|
+
|
|
76
|
+
/** Options for {@link setup}. */
|
|
77
|
+
export interface QualifiedSetupOptions {
|
|
78
|
+
/** Team credential. The consumer decides where this comes from. */
|
|
79
|
+
token: string;
|
|
80
|
+
/**
|
|
81
|
+
* Qualified's API origin — where the runtime-config endpoint lives and where the widget talks.
|
|
82
|
+
* Required unless `runtimeConfigUrl` points somewhere self-contained: `setup()` fetches the
|
|
83
|
+
* runtime config from `${apiHost}/w/1/${token}/runtime_config`.
|
|
84
|
+
*/
|
|
85
|
+
apiHost?: string;
|
|
86
|
+
/**
|
|
87
|
+
* Full environment config, when the consumer would rather pin it than take what the endpoint
|
|
88
|
+
* returns. When set, it wins over the fetched `environment`.
|
|
89
|
+
*/
|
|
90
|
+
environment?: EnvironmentConfig;
|
|
91
|
+
/**
|
|
92
|
+
* Base URL the package's own assets (stylesheet, fonts) are served from. Omit when the consumer
|
|
93
|
+
* bundles the package (the bundler rewrites the asset URLs); pass the served directory when the
|
|
94
|
+
* consumer instead copies `dist/` to a static path — required for web fonts to resolve.
|
|
95
|
+
*/
|
|
96
|
+
packageBase?: string;
|
|
97
|
+
/**
|
|
98
|
+
* Fetch the runtime config from this URL instead of the `/w/1/:token/runtime_config` endpoint.
|
|
99
|
+
* Must serve the same JSON shape. Intended for offline test harnesses.
|
|
100
|
+
*/
|
|
101
|
+
runtimeConfigUrl?: string;
|
|
102
|
+
/**
|
|
103
|
+
* Default-deny allowlist of optional features this consumer permits. A capability not
|
|
104
|
+
* listed stays off and Qualified cannot turn it on. **Omitting this installs an empty allowlist —
|
|
105
|
+
* every gated feature off**; pass the ones you want enabled.
|
|
106
|
+
*/
|
|
107
|
+
capabilities?: readonly Capability[];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Boots Qualified from the consumer's own bundle. Nothing runs until this is called: importing the
|
|
112
|
+
* package has no side effects, so the consumer decides when and with which credential Qualified
|
|
113
|
+
* starts.
|
|
114
|
+
*
|
|
115
|
+
* Resolves to the `q(...)` command function. Rejects loudly — booting nothing — if the runtime
|
|
116
|
+
* config cannot be fetched (bad token, unreachable host, CORS not granted).
|
|
117
|
+
*
|
|
118
|
+
* Awaiting is optional. Boot begins as soon as `setup()` is called and completes on its own, so the
|
|
119
|
+
* widget starts and renders whether or not the returned promise is awaited. Await it (or use
|
|
120
|
+
* `.then()`) only when you need the resolved `q(...)` command function — to call `identify`,
|
|
121
|
+
* `teardown`, etc. — or want to handle a boot failure.
|
|
122
|
+
*/
|
|
123
|
+
export declare function setup(options: QualifiedSetupOptions): Promise<QualifiedFunction>;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Fetches the widget's runtime configuration from the CORS-enabled JSON endpoint, without booting
|
|
127
|
+
* the widget. `setup()` calls this internally; it is exported so the fetch and its failure modes
|
|
128
|
+
* are testable in isolation. Most consumers call {@link setup} instead.
|
|
129
|
+
*/
|
|
130
|
+
export declare function fetchRuntimeConfig(options: {
|
|
131
|
+
host?: string;
|
|
132
|
+
token: string;
|
|
133
|
+
runtimeConfigUrl?: string;
|
|
134
|
+
}): Promise<RuntimeConfig>;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "../../../widget/multimodal_v2/index.split-css.panda.js";
|
|
2
2
|
import "../../../widget/widget.split-css.js";
|
|
3
3
|
import "../../../widget/multimodal_v2/host.split-css.js";
|
|
4
|
+
import { filterRuntimeConfig, installCapabilityBoundary } from "../../../widget/capabilities.js";
|
|
4
5
|
import { default as LinkedWidgetV2 } from "../../../widget/widget/linked_widget_v2.js";
|
|
5
6
|
import { Sentry } from "../../../widget/widget/sentry.js";
|
|
6
7
|
import { widgetBootstrap } from "../../../widget/widget_bootstrap.js";
|
|
@@ -30,6 +31,12 @@ import { _extends } from "../../../js/4101.js";
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
|
|
34
|
+
|
|
35
|
+
// Re-exported so a consumer can enumerate the allowlist keys at runtime and get a compile-time
|
|
36
|
+
// error on a typo'd capability (QAI-5919): `import { CAPABILITY_KEYS, type Capability } from
|
|
37
|
+
// "@qualified-salesforce/web"`. Sourced from the same module the boundary enforces, so the value
|
|
38
|
+
// a consumer reads and the set `setup()` installs can never drift apart.
|
|
39
|
+
|
|
33
40
|
/** Those URLs, or null in any build that is not the npm packaging (the hosted widget, Jest). */ function packagedAssetUrls() {
|
|
34
41
|
if (false) {}
|
|
35
42
|
return _extends({
|
|
@@ -112,7 +119,7 @@ let bootPromise = null;
|
|
|
112
119
|
}
|
|
113
120
|
if (bootPromise) return bootPromise;
|
|
114
121
|
const promise = (async ()=>{
|
|
115
|
-
var _options_apiHost, _options_environment;
|
|
122
|
+
var _options_apiHost, _options_environment, _options_capabilities;
|
|
116
123
|
var _globalThis_location, _options_environment1;
|
|
117
124
|
// npm-native telemetry origin (QAI-5770). Our code is inlined into the consumer's
|
|
118
125
|
// content-hashed chunk, so `script_time_to_start_ms` has no `qualified.js` resource entry to
|
|
@@ -147,6 +154,12 @@ let bootPromise = null;
|
|
|
147
154
|
if (!(environment == null ? void 0 : environment.host)) {
|
|
148
155
|
throw new Error("Qualified setup(): the runtime config carried no `environment`, and none was passed. " + "The widget will not boot.");
|
|
149
156
|
}
|
|
157
|
+
// Install the consumer's allowlist now that the boot is actually proceeding — after the fetch,
|
|
158
|
+
// before any dispatch or the config filter below. Installing here (not before the fetch) means
|
|
159
|
+
// a failed boot never locks the boundary, so a retry may pass a different allowlist (QAI-5862).
|
|
160
|
+
// Sourced from `options.capabilities` alone, so the fetched config is narrowed against a
|
|
161
|
+
// boundary our server had no say in.
|
|
162
|
+
installCapabilityBoundary((_options_capabilities = options.capabilities) != null ? _options_capabilities : []);
|
|
150
163
|
// The classic entry's import-time side effects, performed here instead.
|
|
151
164
|
// The base `call_store.ts` resolves the call machine against when it has nothing better — a
|
|
152
165
|
// filename appended to a directory. That works for a tarball served as laid out, but not when
|
|
@@ -167,7 +180,9 @@ let bootPromise = null;
|
|
|
167
180
|
// — the widget's own shadow-root mirror picks it up once applied.
|
|
168
181
|
injectStylesheet(stylesheetUrl);
|
|
169
182
|
const qualified = LinkedWidgetV2.start(environment);
|
|
170
|
-
|
|
183
|
+
// Narrow the server config against the allowlist before the widget sees it (QAI-5862): the
|
|
184
|
+
// filter only deletes denied enablers, so the server can't switch on a disallowed capability.
|
|
185
|
+
qualified("initialize", options.token, filterRuntimeConfig(runtime.config));
|
|
171
186
|
return qualified;
|
|
172
187
|
})();
|
|
173
188
|
// A rejected boot must not stay cached: a transient failure (a network blip during the config
|
|
@@ -181,3 +196,4 @@ let bootPromise = null;
|
|
|
181
196
|
}
|
|
182
197
|
|
|
183
198
|
export { fetchRuntimeConfig, setup };
|
|
199
|
+
export { CAPABILITY_KEYS } from "../../../widget/capabilities.js";
|
|
@@ -737,8 +737,8 @@
|
|
|
737
737
|
padding: 0 16px 0 8px;
|
|
738
738
|
}
|
|
739
739
|
|
|
740
|
-
.q-
|
|
741
|
-
padding: 0
|
|
740
|
+
.q-dqRdNH {
|
|
741
|
+
padding: 0;
|
|
742
742
|
}
|
|
743
743
|
|
|
744
744
|
.q-ffAOcM {
|
|
@@ -795,10 +795,6 @@
|
|
|
795
795
|
border: 1.5px solid #d7dde2;
|
|
796
796
|
}
|
|
797
797
|
|
|
798
|
-
.q-dqRdNH {
|
|
799
|
-
padding: 0;
|
|
800
|
-
}
|
|
801
|
-
|
|
802
798
|
.q-kgRGeM {
|
|
803
799
|
margin: -1px;
|
|
804
800
|
}
|
|
@@ -999,6 +995,10 @@
|
|
|
999
995
|
border: 1px solid \$colors\.border;
|
|
1000
996
|
}
|
|
1001
997
|
|
|
998
|
+
.q-kWIjhW {
|
|
999
|
+
font: inherit;
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
1002
|
.q-gPyWWT {
|
|
1003
1003
|
border: 1px solid;
|
|
1004
1004
|
}
|
|
@@ -1284,6 +1284,16 @@
|
|
|
1284
1284
|
gap: 10px;
|
|
1285
1285
|
}
|
|
1286
1286
|
|
|
1287
|
+
.q-cfDrIW {
|
|
1288
|
+
border-radius: 16px;
|
|
1289
|
+
border-radius: var(--q-dxfumK);
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
.q-iainBx {
|
|
1293
|
+
gap: 16px;
|
|
1294
|
+
gap: var(--q-jugHdA);
|
|
1295
|
+
}
|
|
1296
|
+
|
|
1287
1297
|
.q-hMIFSa {
|
|
1288
1298
|
transition: background-color .2s;
|
|
1289
1299
|
}
|
|
@@ -1441,11 +1451,6 @@
|
|
|
1441
1451
|
gap: 24px;
|
|
1442
1452
|
}
|
|
1443
1453
|
|
|
1444
|
-
.q-iainBx {
|
|
1445
|
-
gap: 16px;
|
|
1446
|
-
gap: var(--q-jugHdA);
|
|
1447
|
-
}
|
|
1448
|
-
|
|
1449
1454
|
.q-bMcXFr {
|
|
1450
1455
|
border-radius: 8px;
|
|
1451
1456
|
border-radius: var(--q-control-border-radius, 8px);
|
|
@@ -1618,6 +1623,23 @@
|
|
|
1618
1623
|
transition: opacity .2s, box-shadow .2s, transform .2s;
|
|
1619
1624
|
}
|
|
1620
1625
|
|
|
1626
|
+
.q-bkgpAA {
|
|
1627
|
+
inset-inline: 16px;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
.q-NGWtr {
|
|
1631
|
+
inset-inline: 8px;
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
.q-DHTGQ {
|
|
1635
|
+
inset-inline: -20px;
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
.q-fNJrUv {
|
|
1639
|
+
border-radius: 8px;
|
|
1640
|
+
border-radius: var(--q-bewZvn);
|
|
1641
|
+
}
|
|
1642
|
+
|
|
1621
1643
|
.q-brKOqO {
|
|
1622
1644
|
overscroll-behavior: contain;
|
|
1623
1645
|
}
|
|
@@ -2212,6 +2234,18 @@
|
|
|
2212
2234
|
resize: none;
|
|
2213
2235
|
}
|
|
2214
2236
|
|
|
2237
|
+
.q-kGHEMe {
|
|
2238
|
+
align-self: flex-start;
|
|
2239
|
+
}
|
|
2240
|
+
|
|
2241
|
+
.q-cOEFXT {
|
|
2242
|
+
transform: rotate(180deg);
|
|
2243
|
+
}
|
|
2244
|
+
|
|
2245
|
+
.q-kTBjet {
|
|
2246
|
+
align-items: stretch;
|
|
2247
|
+
}
|
|
2248
|
+
|
|
2215
2249
|
.q-bSTPIv {
|
|
2216
2250
|
box-shadow: 0 8px 32px #0000004d;
|
|
2217
2251
|
}
|
|
@@ -2233,14 +2267,27 @@
|
|
|
2233
2267
|
transform-origin: bottom;
|
|
2234
2268
|
}
|
|
2235
2269
|
|
|
2236
|
-
.q-
|
|
2237
|
-
|
|
2270
|
+
.q-jcVpEa {
|
|
2271
|
+
line-height: 22px;
|
|
2238
2272
|
}
|
|
2239
2273
|
|
|
2240
2274
|
.q-iCfjvi {
|
|
2241
2275
|
flex-grow: 1;
|
|
2242
2276
|
}
|
|
2243
2277
|
|
|
2278
|
+
.q-gasSYy {
|
|
2279
|
+
flex-wrap: wrap;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
.q-loatqo {
|
|
2283
|
+
background-color: #fff6;
|
|
2284
|
+
}
|
|
2285
|
+
|
|
2286
|
+
.q-hdUyV {
|
|
2287
|
+
background-color: #e6e9ec;
|
|
2288
|
+
background-color: var(--q-gjomaU);
|
|
2289
|
+
}
|
|
2290
|
+
|
|
2244
2291
|
.q-eIsAcC {
|
|
2245
2292
|
-webkit-user-select: none;
|
|
2246
2293
|
user-select: none;
|
|
@@ -2263,18 +2310,10 @@
|
|
|
2263
2310
|
transform: translateY(8px);
|
|
2264
2311
|
}
|
|
2265
2312
|
|
|
2266
|
-
.q-gasSYy {
|
|
2267
|
-
flex-wrap: wrap;
|
|
2268
|
-
}
|
|
2269
|
-
|
|
2270
2313
|
.q-hxBzcr {
|
|
2271
2314
|
align-items: flex-end;
|
|
2272
2315
|
}
|
|
2273
2316
|
|
|
2274
|
-
.q-kTBjet {
|
|
2275
|
-
align-items: stretch;
|
|
2276
|
-
}
|
|
2277
|
-
|
|
2278
2317
|
.q-hYhvQY {
|
|
2279
2318
|
box-shadow: none;
|
|
2280
2319
|
box-shadow: var(--q-jLtLHp);
|
|
@@ -2337,10 +2376,6 @@
|
|
|
2337
2376
|
container-name: bookerPanel;
|
|
2338
2377
|
}
|
|
2339
2378
|
|
|
2340
|
-
.q-cOEFXT {
|
|
2341
|
-
transform: rotate(180deg);
|
|
2342
|
-
}
|
|
2343
|
-
|
|
2344
2379
|
.q-hBOzJB {
|
|
2345
2380
|
color: #e4251b;
|
|
2346
2381
|
}
|
|
@@ -2592,10 +2627,6 @@
|
|
|
2592
2627
|
background-color: #2dd272;
|
|
2593
2628
|
}
|
|
2594
2629
|
|
|
2595
|
-
.q-kGHEMe {
|
|
2596
|
-
align-self: flex-start;
|
|
2597
|
-
}
|
|
2598
|
-
|
|
2599
2630
|
.q-iMVOnP {
|
|
2600
2631
|
align-self: center;
|
|
2601
2632
|
}
|
|
@@ -2608,10 +2639,6 @@
|
|
|
2608
2639
|
line-height: 14px;
|
|
2609
2640
|
}
|
|
2610
2641
|
|
|
2611
|
-
.q-jcVpEa {
|
|
2612
|
-
line-height: 22px;
|
|
2613
|
-
}
|
|
2614
|
-
|
|
2615
2642
|
.q-krbBcV {
|
|
2616
2643
|
white-space: normal;
|
|
2617
2644
|
}
|
|
@@ -2714,6 +2741,45 @@
|
|
|
2714
2741
|
justify-content: flex-start;
|
|
2715
2742
|
}
|
|
2716
2743
|
|
|
2744
|
+
.q-bGTgkg {
|
|
2745
|
+
appearance: none;
|
|
2746
|
+
}
|
|
2747
|
+
|
|
2748
|
+
.q-vNRpm {
|
|
2749
|
+
-webkit-appearance: none;
|
|
2750
|
+
}
|
|
2751
|
+
|
|
2752
|
+
.q-jKfYXo {
|
|
2753
|
+
text-align: inherit;
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2756
|
+
.q-irWrst {
|
|
2757
|
+
background-color: #66a8eb;
|
|
2758
|
+
background-color: var(--q-btpljM);
|
|
2759
|
+
}
|
|
2760
|
+
|
|
2761
|
+
.q-gXqRpG {
|
|
2762
|
+
opacity: .45;
|
|
2763
|
+
}
|
|
2764
|
+
|
|
2765
|
+
.q-bMGTxJ {
|
|
2766
|
+
opacity: .75;
|
|
2767
|
+
}
|
|
2768
|
+
|
|
2769
|
+
.q-cqCfxu {
|
|
2770
|
+
-o-object-position: top;
|
|
2771
|
+
object-position: top;
|
|
2772
|
+
}
|
|
2773
|
+
|
|
2774
|
+
.q-boLblZ {
|
|
2775
|
+
filter: blur(12px);
|
|
2776
|
+
}
|
|
2777
|
+
|
|
2778
|
+
.q-hwlKiV {
|
|
2779
|
+
background-color: #152229;
|
|
2780
|
+
background-color: var(--q-ckoJkw);
|
|
2781
|
+
}
|
|
2782
|
+
|
|
2717
2783
|
.q-fLVKVB {
|
|
2718
2784
|
scrollbar-width: none;
|
|
2719
2785
|
}
|
|
@@ -2965,6 +3031,10 @@
|
|
|
2965
3031
|
height: 48px;
|
|
2966
3032
|
}
|
|
2967
3033
|
|
|
3034
|
+
.q-eRLSQw {
|
|
3035
|
+
width: 48px;
|
|
3036
|
+
}
|
|
3037
|
+
|
|
2968
3038
|
.q-iWjbPW {
|
|
2969
3039
|
width: 24px;
|
|
2970
3040
|
}
|
|
@@ -3010,6 +3080,10 @@
|
|
|
3010
3080
|
height: 64px;
|
|
3011
3081
|
}
|
|
3012
3082
|
|
|
3083
|
+
.q-cCoqvZ {
|
|
3084
|
+
max-width: 100%;
|
|
3085
|
+
}
|
|
3086
|
+
|
|
3013
3087
|
.q-dxbJmu {
|
|
3014
3088
|
min-height: 0;
|
|
3015
3089
|
}
|
|
@@ -3018,14 +3092,52 @@
|
|
|
3018
3092
|
width: auto;
|
|
3019
3093
|
}
|
|
3020
3094
|
|
|
3021
|
-
.q-cCoqvZ {
|
|
3022
|
-
max-width: 100%;
|
|
3023
|
-
}
|
|
3024
|
-
|
|
3025
3095
|
.q-jJlZBc {
|
|
3026
3096
|
max-height: 100%;
|
|
3027
3097
|
}
|
|
3028
3098
|
|
|
3099
|
+
.q-niSFv {
|
|
3100
|
+
border-bottom-left-radius: 0;
|
|
3101
|
+
}
|
|
3102
|
+
|
|
3103
|
+
.q-gqcmcs {
|
|
3104
|
+
border-bottom-right-radius: 0;
|
|
3105
|
+
}
|
|
3106
|
+
|
|
3107
|
+
.q-hnYqHC {
|
|
3108
|
+
max-height: calc(100% - 124px);
|
|
3109
|
+
}
|
|
3110
|
+
|
|
3111
|
+
.q-dQsKWZ {
|
|
3112
|
+
max-height: calc(100% - 172px);
|
|
3113
|
+
}
|
|
3114
|
+
|
|
3115
|
+
.q-dQrOvv {
|
|
3116
|
+
border-bottom-left-radius: 16px;
|
|
3117
|
+
border-bottom-left-radius: var(--q-dxfumK);
|
|
3118
|
+
}
|
|
3119
|
+
|
|
3120
|
+
.q-kZnTsk {
|
|
3121
|
+
border-bottom-right-radius: 16px;
|
|
3122
|
+
border-bottom-right-radius: var(--q-dxfumK);
|
|
3123
|
+
}
|
|
3124
|
+
|
|
3125
|
+
.q-fSNeID {
|
|
3126
|
+
border-top-left-radius: 0;
|
|
3127
|
+
}
|
|
3128
|
+
|
|
3129
|
+
.q-lmIybk {
|
|
3130
|
+
border-top-right-radius: 0;
|
|
3131
|
+
}
|
|
3132
|
+
|
|
3133
|
+
.q-kEmBGl {
|
|
3134
|
+
min-height: 124px;
|
|
3135
|
+
}
|
|
3136
|
+
|
|
3137
|
+
.q-eeWvqi {
|
|
3138
|
+
min-height: 172px;
|
|
3139
|
+
}
|
|
3140
|
+
|
|
3029
3141
|
.q-ipiJSk {
|
|
3030
3142
|
width: 8px;
|
|
3031
3143
|
}
|
|
@@ -3520,6 +3632,41 @@
|
|
|
3520
3632
|
border-top-left-radius: 4px;
|
|
3521
3633
|
}
|
|
3522
3634
|
|
|
3635
|
+
.q-cBlWNH {
|
|
3636
|
+
min-height: 32px;
|
|
3637
|
+
}
|
|
3638
|
+
|
|
3639
|
+
.q-kJvXpK {
|
|
3640
|
+
padding-top: 12px;
|
|
3641
|
+
padding-top: var(--q-cXTyBO);
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
.q-dlHacb {
|
|
3645
|
+
top: 6px;
|
|
3646
|
+
}
|
|
3647
|
+
|
|
3648
|
+
.q-iHDoAO {
|
|
3649
|
+
top: -20px;
|
|
3650
|
+
}
|
|
3651
|
+
|
|
3652
|
+
.q-bYDZOv {
|
|
3653
|
+
width: calc(100% + 40px);
|
|
3654
|
+
}
|
|
3655
|
+
|
|
3656
|
+
.q-jQmYcu {
|
|
3657
|
+
height: calc(100% + 40px);
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3660
|
+
.q-lnCtVe {
|
|
3661
|
+
right: 8px;
|
|
3662
|
+
right: var(--q-cSaSxh);
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3665
|
+
.q-jgAsJt {
|
|
3666
|
+
bottom: 8px;
|
|
3667
|
+
bottom: var(--q-cSaSxh);
|
|
3668
|
+
}
|
|
3669
|
+
|
|
3523
3670
|
.q-ilCorh {
|
|
3524
3671
|
line-clamp: 1;
|
|
3525
3672
|
}
|
|
@@ -3789,10 +3936,19 @@
|
|
|
3789
3936
|
color: var(--q-ekJvRZ);
|
|
3790
3937
|
}
|
|
3791
3938
|
|
|
3939
|
+
.q-eHRSUh:empty {
|
|
3940
|
+
display: none;
|
|
3941
|
+
}
|
|
3942
|
+
|
|
3792
3943
|
.q-ldTxnm[data-active="true"] {
|
|
3793
3944
|
background-color: #fffffff2;
|
|
3794
3945
|
}
|
|
3795
3946
|
|
|
3947
|
+
.q-hmyJss[data-active="true"] {
|
|
3948
|
+
background-color: #0070d2;
|
|
3949
|
+
background-color: var(--q-bebYds);
|
|
3950
|
+
}
|
|
3951
|
+
|
|
3796
3952
|
.q-bEFJjx:disabled {
|
|
3797
3953
|
opacity: .6;
|
|
3798
3954
|
}
|
|
@@ -4487,6 +4643,12 @@
|
|
|
4487
4643
|
background: #e6e9ec;
|
|
4488
4644
|
}
|
|
4489
4645
|
|
|
4646
|
+
.q-kEebOH:is(:hover, :focus-visible) [data-component-name="Button.StyledButton"] {
|
|
4647
|
+
background: #fff linear-gradient(#0070d2e6, #0070d2e6);
|
|
4648
|
+
background: linear-gradient(var(--q-bQGTFq),var(--q-bQGTFq)) #fff;
|
|
4649
|
+
background: linear-gradient(var(--q-bQGTFq),var(--q-bQGTFq)) var(--q-button-hover-background-layer, #fff);
|
|
4650
|
+
}
|
|
4651
|
+
|
|
4490
4652
|
.q-fRIQMO:focus-visible {
|
|
4491
4653
|
outline: 2px solid #0070d2;
|
|
4492
4654
|
outline: 2px solid var(--q-bebYds);
|
|
@@ -4549,6 +4711,11 @@
|
|
|
4549
4711
|
outline: none;
|
|
4550
4712
|
}
|
|
4551
4713
|
|
|
4714
|
+
.q-hHgwIf:is(:hover, :focus-visible) [data-component-name="Button.StyledButton"] {
|
|
4715
|
+
border-color: #0000;
|
|
4716
|
+
border-color: var(--q-eBDiUw);
|
|
4717
|
+
}
|
|
4718
|
+
|
|
4552
4719
|
.q-jtPCJn:has(select:focus-visible) {
|
|
4553
4720
|
outline: 2px solid #0070d2;
|
|
4554
4721
|
outline: 2px solid var(--q-bebYds);
|
|
@@ -4626,6 +4793,10 @@
|
|
|
4626
4793
|
visibility: visible;
|
|
4627
4794
|
}
|
|
4628
4795
|
|
|
4796
|
+
.q-kELdYL:is(:hover, :focus-visible) [data-component-name="Button.StyledButton"] {
|
|
4797
|
+
color: var(--q-kHrcNZ);
|
|
4798
|
+
}
|
|
4799
|
+
|
|
4629
4800
|
.q-iayYaR:has(select:focus-visible) {
|
|
4630
4801
|
outline-offset: -2px;
|
|
4631
4802
|
}
|
|
@@ -4636,11 +4807,16 @@
|
|
|
4636
4807
|
background: linear-gradient(var(--q-bQGTFq),var(--q-bQGTFq)) var(--q-button-hover-background-layer, #fff);
|
|
4637
4808
|
}
|
|
4638
4809
|
|
|
4810
|
+
.q-hnauCG:hover {
|
|
4811
|
+
background: none;
|
|
4812
|
+
background: var(--q-cWcXnW);
|
|
4813
|
+
}
|
|
4814
|
+
|
|
4639
4815
|
.q-jjvLow:hover {
|
|
4640
4816
|
background: #e6e9ec;
|
|
4641
4817
|
}
|
|
4642
4818
|
|
|
4643
|
-
.q-
|
|
4819
|
+
.q-ixOhNh:hover:not(:disabled), .q-hKPjHd:hover {
|
|
4644
4820
|
background: #0000000f;
|
|
4645
4821
|
}
|
|
4646
4822
|
|
|
@@ -4689,6 +4865,10 @@
|
|
|
4689
4865
|
color: var(--q-kHrcNZ);
|
|
4690
4866
|
}
|
|
4691
4867
|
|
|
4868
|
+
.q-crUTNY:hover {
|
|
4869
|
+
box-shadow: none;
|
|
4870
|
+
}
|
|
4871
|
+
|
|
4692
4872
|
.q-MuFSQ:hover {
|
|
4693
4873
|
color: var(--q-ckoJkw);
|
|
4694
4874
|
}
|
|
@@ -4880,10 +5060,6 @@
|
|
|
4880
5060
|
height: 100%;
|
|
4881
5061
|
}
|
|
4882
5062
|
|
|
4883
|
-
.q-gfNJoW {
|
|
4884
|
-
height: 40%;
|
|
4885
|
-
}
|
|
4886
|
-
|
|
4887
5063
|
.q-jMeGMD {
|
|
4888
5064
|
height: 50%;
|
|
4889
5065
|
}
|
|
@@ -4914,7 +5090,7 @@
|
|
|
4914
5090
|
height: 24px;
|
|
4915
5091
|
}
|
|
4916
5092
|
|
|
4917
|
-
.q-
|
|
5093
|
+
.q-kSIGpb > [part="multimodal"], .q-cAmJVr > [part="multimodal"] {
|
|
4918
5094
|
padding: 0;
|
|
4919
5095
|
}
|
|
4920
5096
|
|
|
@@ -4926,7 +5102,28 @@
|
|
|
4926
5102
|
z-index: 1001;
|
|
4927
5103
|
}
|
|
4928
5104
|
|
|
4929
|
-
.q-
|
|
5105
|
+
.q-kxvSgE > [part="chat"], .q-kxvSgE > [part="input"], .q-kxvSgE > [part="privacy"] {
|
|
5106
|
+
display: none;
|
|
5107
|
+
}
|
|
5108
|
+
|
|
5109
|
+
.q-iNDLkz > [part="artifact"] {
|
|
5110
|
+
background-color: #00000080;
|
|
5111
|
+
}
|
|
5112
|
+
|
|
5113
|
+
.q-isJuhH > [part="artifact"] {
|
|
5114
|
+
-webkit-backdrop-filter: blur(2px);
|
|
5115
|
+
backdrop-filter: blur(2px);
|
|
5116
|
+
}
|
|
5117
|
+
|
|
5118
|
+
.q-cbBLhX > [part="artifact"] {
|
|
5119
|
+
z-index: 2;
|
|
5120
|
+
}
|
|
5121
|
+
|
|
5122
|
+
.q-gTaxHS > [part="multimodal"] {
|
|
5123
|
+
z-index: 3;
|
|
5124
|
+
}
|
|
5125
|
+
|
|
5126
|
+
.q-cEUyLT > [part="toolbar"] {
|
|
4930
5127
|
display: none;
|
|
4931
5128
|
}
|
|
4932
5129
|
|
|
@@ -5007,13 +5204,30 @@
|
|
|
5007
5204
|
width: 100%;
|
|
5008
5205
|
}
|
|
5009
5206
|
|
|
5010
|
-
.q-
|
|
5011
|
-
height:
|
|
5207
|
+
.q-xjpwZ > [part="artifact"] {
|
|
5208
|
+
height: 100%;
|
|
5012
5209
|
}
|
|
5013
5210
|
|
|
5014
5211
|
.q-gZeTFg > [part="artifact"] {
|
|
5015
5212
|
height: 80%;
|
|
5016
5213
|
}
|
|
5214
|
+
|
|
5215
|
+
.q-hSCbuw > [part="multimodal"] {
|
|
5216
|
+
bottom: 24px;
|
|
5217
|
+
bottom: calc(24px + var(--q-bottom-offset, 0px));
|
|
5218
|
+
}
|
|
5219
|
+
|
|
5220
|
+
.q-iWYrFM > [part="multimodal"] {
|
|
5221
|
+
right: 24px;
|
|
5222
|
+
}
|
|
5223
|
+
|
|
5224
|
+
.q-gUeaVj > [part="multimodal"] {
|
|
5225
|
+
width: fit-content;
|
|
5226
|
+
}
|
|
5227
|
+
|
|
5228
|
+
.q-bEbKWC > [part="multimodal"] {
|
|
5229
|
+
height: auto;
|
|
5230
|
+
}
|
|
5017
5231
|
}
|
|
5018
5232
|
|
|
5019
5233
|
@container bookerPanel (width <= 720px) {
|
|
@@ -5178,7 +5392,7 @@
|
|
|
5178
5392
|
transform: translateY(calc(-100% - 8px));
|
|
5179
5393
|
}
|
|
5180
5394
|
|
|
5181
|
-
.q-
|
|
5395
|
+
.q-lgmAsb > [part="controls"], .q-eQFZen > [data-chat-controls] {
|
|
5182
5396
|
opacity: 1;
|
|
5183
5397
|
}
|
|
5184
5398
|
|
|
@@ -5235,6 +5449,10 @@
|
|
|
5235
5449
|
.q-iLwSqI {
|
|
5236
5450
|
opacity: .14;
|
|
5237
5451
|
}
|
|
5452
|
+
|
|
5453
|
+
.q-bfvFLs:hover {
|
|
5454
|
+
transform: none;
|
|
5455
|
+
}
|
|
5238
5456
|
}
|
|
5239
5457
|
}
|
|
5240
5458
|
|