dsh-ptc-plus 0.4.3 → 0.4.10
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.en.md +15 -3
- package/README.md +15 -3
- package/client.js +1157 -533
- package/cordis.patch.yml +12 -2
- package/docs/README.md +2 -0
- package/docs/adr/0005-temporary-rejected-cell-edit-transport.md +60 -4
- package/docs/adr/0017-track-the-latest-dsh-public-surface.md +5 -1
- package/docs/adr/0019-plugin-settings-and-kill-switch.md +14 -3
- package/docs/adr/0020-optional-cordis-tools-in-ptc-mode.md +2 -2
- package/docs/adr/0023-global-user-bindings.md +1 -1
- package/docs/adr/0028-attach-to-the-host-ptc-execution-seam.md +82 -18
- package/docs/adr/0030-serve-both-typert-codec-generations-from-one-codec.md +3 -3
- package/docs/adr/0032-own-session-log-facts-in-a-host-only-projection.md +27 -0
- package/docs/adr/0033-gate-client-visual-usability-in-a-browser.md +23 -0
- package/docs/architecture.md +6 -4
- package/docs/binding-review-placement-design.md +29 -21
- package/docs/client-ui.md +20 -8
- package/docs/client-visual-contract.md +48 -0
- package/docs/durability-design.md +12 -0
- package/docs/installation.md +48 -9
- package/docs/publishing.md +4 -4
- package/docs/release-notes.md +109 -0
- package/docs/runtime-reference.md +8 -2
- package/docs/user-bindings.en.md +2 -2
- package/docs/user-bindings.md +3 -3
- package/docs/verification-optimization-work.md +26 -0
- package/docs/verification.md +7 -1
- package/index.js +28 -7
- package/internal/compiler-platform.js +5 -3
- package/internal/compiler-service.js +2 -9
- package/internal/cordis-tools-owner.js +75 -16
- package/internal/direct-surface-owner.js +333 -7
- package/internal/edit-transport-owner.js +8 -5
- package/internal/execution-provider-owner.js +157 -0
- package/internal/execution-seam-compat.js +69 -113
- package/internal/isolated-worker.js +12 -8
- package/internal/recovery-tips.js +50 -21
- package/internal/rejected-cell-editor.js +11 -21
- package/internal/runtime-bridge-owner.js +88 -57
- package/internal/runtime-contexts.js +13 -13
- package/internal/session-events.js +40 -4
- package/internal/session-journal-recovery.js +678 -181
- package/internal/session-log-view.js +189 -43
- package/internal/session-runtime.js +58 -10
- package/internal/settings-compat.js +12 -2
- package/internal/user-bindings-owner.js +6 -5
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +18 -13
- package/src/client-authoring-view.js +222 -141
- package/src/client-binding-review.js +2 -0
- package/src/client-code-editor.js +6 -0
- package/src/client-copy.js +10 -0
- package/src/client-feature-gates.js +12 -5
- package/src/client-host-compat.js +23 -2
- package/src/client-primitives.js +249 -0
- package/src/client-repl-view.js +3 -3
- package/src/client-settings-view.js +2 -29
- package/src/client-styles.js +92 -33
- package/src/client-tool-view.js +8 -3
- package/src/client-workbench.js +9 -7
- package/src/client.js +72 -46
- package/assets/ptc-plus-bindings-en.png +0 -0
- package/assets/ptc-plus-bindings-zh.png +0 -0
- package/assets/ptc-plus-repair-en.png +0 -0
- package/assets/ptc-plus-repair-zh.png +0 -0
package/client.js
CHANGED
|
@@ -1,4 +1,139 @@
|
|
|
1
1
|
(() => {
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
9
|
+
try {
|
|
10
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
11
|
+
} catch (e) {
|
|
12
|
+
throw mod = 0, e;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
var __copyProps = (to, from2, except, desc) => {
|
|
16
|
+
if (from2 && typeof from2 === "object" || typeof from2 === "function") {
|
|
17
|
+
for (let key of __getOwnPropNames(from2))
|
|
18
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
19
|
+
__defProp(to, key, { get: () => from2[key], enumerable: !(desc = __getOwnPropDesc(from2, key)) || desc.enumerable });
|
|
20
|
+
}
|
|
21
|
+
return to;
|
|
22
|
+
};
|
|
23
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
24
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
25
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
26
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
27
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
28
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
29
|
+
mod
|
|
30
|
+
));
|
|
31
|
+
|
|
32
|
+
// node_modules/react-is/cjs/react-is.development.js
|
|
33
|
+
var require_react_is_development = __commonJS({
|
|
34
|
+
"node_modules/react-is/cjs/react-is.development.js"(exports) {
|
|
35
|
+
"use strict";
|
|
36
|
+
(function() {
|
|
37
|
+
function typeOf(object) {
|
|
38
|
+
if ("object" === typeof object && null !== object) {
|
|
39
|
+
var $$typeof = object.$$typeof;
|
|
40
|
+
switch ($$typeof) {
|
|
41
|
+
case REACT_ELEMENT_TYPE:
|
|
42
|
+
switch (object = object.type, object) {
|
|
43
|
+
case REACT_FRAGMENT_TYPE:
|
|
44
|
+
case REACT_PROFILER_TYPE:
|
|
45
|
+
case REACT_STRICT_MODE_TYPE:
|
|
46
|
+
case REACT_SUSPENSE_TYPE:
|
|
47
|
+
case REACT_SUSPENSE_LIST_TYPE:
|
|
48
|
+
case REACT_VIEW_TRANSITION_TYPE:
|
|
49
|
+
return object;
|
|
50
|
+
default:
|
|
51
|
+
switch (object = object && object.$$typeof, object) {
|
|
52
|
+
case REACT_CONTEXT_TYPE:
|
|
53
|
+
case REACT_FORWARD_REF_TYPE:
|
|
54
|
+
case REACT_LAZY_TYPE:
|
|
55
|
+
case REACT_MEMO_TYPE:
|
|
56
|
+
return object;
|
|
57
|
+
case REACT_CONSUMER_TYPE:
|
|
58
|
+
return object;
|
|
59
|
+
default:
|
|
60
|
+
return $$typeof;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
case REACT_PORTAL_TYPE:
|
|
64
|
+
return $$typeof;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
var REACT_ELEMENT_TYPE = /* @__PURE__ */ Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = /* @__PURE__ */ Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = /* @__PURE__ */ Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = /* @__PURE__ */ Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = /* @__PURE__ */ Symbol.for("react.profiler"), REACT_CONSUMER_TYPE = /* @__PURE__ */ Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = /* @__PURE__ */ Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = /* @__PURE__ */ Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = /* @__PURE__ */ Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = /* @__PURE__ */ Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = /* @__PURE__ */ Symbol.for("react.memo"), REACT_LAZY_TYPE = /* @__PURE__ */ Symbol.for("react.lazy"), REACT_VIEW_TRANSITION_TYPE = /* @__PURE__ */ Symbol.for("react.view_transition"), REACT_CLIENT_REFERENCE = /* @__PURE__ */ Symbol.for("react.client.reference");
|
|
69
|
+
exports.ContextConsumer = REACT_CONSUMER_TYPE;
|
|
70
|
+
exports.ContextProvider = REACT_CONTEXT_TYPE;
|
|
71
|
+
exports.Element = REACT_ELEMENT_TYPE;
|
|
72
|
+
exports.ForwardRef = REACT_FORWARD_REF_TYPE;
|
|
73
|
+
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
74
|
+
exports.Lazy = REACT_LAZY_TYPE;
|
|
75
|
+
exports.Memo = REACT_MEMO_TYPE;
|
|
76
|
+
exports.Portal = REACT_PORTAL_TYPE;
|
|
77
|
+
exports.Profiler = REACT_PROFILER_TYPE;
|
|
78
|
+
exports.StrictMode = REACT_STRICT_MODE_TYPE;
|
|
79
|
+
exports.Suspense = REACT_SUSPENSE_TYPE;
|
|
80
|
+
exports.SuspenseList = REACT_SUSPENSE_LIST_TYPE;
|
|
81
|
+
exports.isContextConsumer = function(object) {
|
|
82
|
+
return typeOf(object) === REACT_CONSUMER_TYPE;
|
|
83
|
+
};
|
|
84
|
+
exports.isContextProvider = function(object) {
|
|
85
|
+
return typeOf(object) === REACT_CONTEXT_TYPE;
|
|
86
|
+
};
|
|
87
|
+
exports.isElement = function(object) {
|
|
88
|
+
return "object" === typeof object && null !== object && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
89
|
+
};
|
|
90
|
+
exports.isForwardRef = function(object) {
|
|
91
|
+
return typeOf(object) === REACT_FORWARD_REF_TYPE;
|
|
92
|
+
};
|
|
93
|
+
exports.isFragment = function(object) {
|
|
94
|
+
return typeOf(object) === REACT_FRAGMENT_TYPE;
|
|
95
|
+
};
|
|
96
|
+
exports.isLazy = function(object) {
|
|
97
|
+
return typeOf(object) === REACT_LAZY_TYPE;
|
|
98
|
+
};
|
|
99
|
+
exports.isMemo = function(object) {
|
|
100
|
+
return typeOf(object) === REACT_MEMO_TYPE;
|
|
101
|
+
};
|
|
102
|
+
exports.isPortal = function(object) {
|
|
103
|
+
return typeOf(object) === REACT_PORTAL_TYPE;
|
|
104
|
+
};
|
|
105
|
+
exports.isProfiler = function(object) {
|
|
106
|
+
return typeOf(object) === REACT_PROFILER_TYPE;
|
|
107
|
+
};
|
|
108
|
+
exports.isStrictMode = function(object) {
|
|
109
|
+
return typeOf(object) === REACT_STRICT_MODE_TYPE;
|
|
110
|
+
};
|
|
111
|
+
exports.isSuspense = function(object) {
|
|
112
|
+
return typeOf(object) === REACT_SUSPENSE_TYPE;
|
|
113
|
+
};
|
|
114
|
+
exports.isSuspenseList = function(object) {
|
|
115
|
+
return typeOf(object) === REACT_SUSPENSE_LIST_TYPE;
|
|
116
|
+
};
|
|
117
|
+
exports.isValidElementType = function(type) {
|
|
118
|
+
return "string" === typeof type || "function" === typeof type || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_VIEW_TRANSITION_TYPE || "object" === typeof type && null !== type && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE || void 0 !== type.getModuleId) ? true : false;
|
|
119
|
+
};
|
|
120
|
+
exports.typeOf = typeOf;
|
|
121
|
+
})();
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// node_modules/react-is/index.js
|
|
126
|
+
var require_react_is = __commonJS({
|
|
127
|
+
"node_modules/react-is/index.js"(exports, module) {
|
|
128
|
+
"use strict";
|
|
129
|
+
if (false) {
|
|
130
|
+
module.exports = null;
|
|
131
|
+
} else {
|
|
132
|
+
module.exports = require_react_is_development();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
|
|
2
137
|
// node_modules/@deepseek-ai/cosmokit/lib/index.js
|
|
3
138
|
function isNullable(value) {
|
|
4
139
|
return value === null || value === void 0;
|
|
@@ -1815,11 +1950,141 @@
|
|
|
1815
1950
|
return Object.freeze({ state, description, code: code2, output, ptc: true, features: Object.freeze(features) });
|
|
1816
1951
|
}
|
|
1817
1952
|
|
|
1953
|
+
// src/client-host-compat.js
|
|
1954
|
+
var import_react_is = __toESM(require_react_is(), 1);
|
|
1955
|
+
function isHostComponent(component) {
|
|
1956
|
+
if (typeof component === "function") return true;
|
|
1957
|
+
if (typeof component !== "object" || component === null) return false;
|
|
1958
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1959
|
+
while ((0, import_react_is.isValidElementType)(component)) {
|
|
1960
|
+
if (typeof component !== "object" || component === null) return true;
|
|
1961
|
+
if (seen.has(component)) return false;
|
|
1962
|
+
seen.add(component);
|
|
1963
|
+
if (component.$$typeof === import_react_is.ForwardRef) return typeof component.render === "function";
|
|
1964
|
+
if (component.$$typeof === import_react_is.Lazy) return typeof component._init === "function" && typeof component._payload === "object" && component._payload !== null;
|
|
1965
|
+
if (component.$$typeof !== import_react_is.Memo) return false;
|
|
1966
|
+
if (component.compare != null && typeof component.compare !== "function") return false;
|
|
1967
|
+
component = component.type;
|
|
1968
|
+
}
|
|
1969
|
+
return false;
|
|
1970
|
+
}
|
|
1971
|
+
var HOST_ICON_EXPORTS = Object.freeze({
|
|
1972
|
+
check: ["IconCheckOutlineRegular", "IconCheckOutline14"],
|
|
1973
|
+
chevron: ["IconChevronDownOutlineRegular", "IconChevronDownOutline14"],
|
|
1974
|
+
inspect: ["IconInspectOutlineRegular", "IconInspectOutline12"],
|
|
1975
|
+
sparkle: ["IconSparkleRegular", "IconSparkle16"],
|
|
1976
|
+
close: ["IconCloseOutlineRegular", "IconCloseOutline16"],
|
|
1977
|
+
search: ["IconSearchOutlineRegular", "IconSearchOutline16"],
|
|
1978
|
+
plus: ["IconPlusOutlineRegular", "IconPlusOutline16"],
|
|
1979
|
+
refresh: ["IconRefreshOutlineRegular", "IconRefreshOutline16"],
|
|
1980
|
+
trash: ["IconTrashOutlineRegular", "IconTrashOutline16"],
|
|
1981
|
+
edit: ["IconEditOutlineRegular", "IconEditOutline16"],
|
|
1982
|
+
play: ["IconPlayOutlineRegular", "IconPlayOutline16"],
|
|
1983
|
+
stop: ["IconStopFillRegular", "IconStopFill16"]
|
|
1984
|
+
});
|
|
1985
|
+
var ABSENT_HOST_ICON = () => null;
|
|
1986
|
+
ABSENT_HOST_ICON.absentHostIcon = true;
|
|
1987
|
+
function isHostIconComponent(icon) {
|
|
1988
|
+
return isHostComponent(icon) && icon.absentHostIcon !== true;
|
|
1989
|
+
}
|
|
1990
|
+
function hostIconComponents(primitives) {
|
|
1991
|
+
return Object.fromEntries(Object.entries(HOST_ICON_EXPORTS).map(([name2, candidates]) => [
|
|
1992
|
+
name2,
|
|
1993
|
+
candidates.map((candidate) => primitives?.[candidate]).find(isHostComponent) ?? ABSENT_HOST_ICON
|
|
1994
|
+
]));
|
|
1995
|
+
}
|
|
1996
|
+
var MENU_CHILDREN_PROBE_SENTINEL = "ptcPlusMenuChildrenProbe";
|
|
1997
|
+
function readMenuChildrenProbe(container) {
|
|
1998
|
+
if (container === null || container === void 0) return false;
|
|
1999
|
+
return container.querySelector(`.${MENU_CHILDREN_PROBE_SENTINEL}`) !== null;
|
|
2000
|
+
}
|
|
2001
|
+
function createMenuChildrenEvidence() {
|
|
2002
|
+
let supported;
|
|
2003
|
+
return {
|
|
2004
|
+
supported: () => supported,
|
|
2005
|
+
record(value) {
|
|
2006
|
+
supported ??= value === true;
|
|
2007
|
+
}
|
|
2008
|
+
};
|
|
2009
|
+
}
|
|
2010
|
+
function sessionPresetValue(projected, summary) {
|
|
2011
|
+
if (projected !== void 0) return projected;
|
|
2012
|
+
const values = summary?.projectionValues;
|
|
2013
|
+
return values !== void 0 && Object.hasOwn(values, "agentPreset") ? values.agentPreset : summary?.agentPreset;
|
|
2014
|
+
}
|
|
2015
|
+
function currentSessionId(snapshot2, remembered) {
|
|
2016
|
+
if (snapshot2?.current !== void 0) return snapshot2.current;
|
|
2017
|
+
const held = (id2) => id2 !== void 0 && (snapshot2?.byId?.[id2]?.retainedBy?.mainView ?? 0) > 0;
|
|
2018
|
+
if (held(remembered)) return remembered;
|
|
2019
|
+
for (const row of Object.values(snapshot2?.byId ?? {})) {
|
|
2020
|
+
if ((row?.retainedBy?.mainView ?? 0) > 0) return row.id;
|
|
2021
|
+
}
|
|
2022
|
+
return void 0;
|
|
2023
|
+
}
|
|
2024
|
+
function sessionUsesPtcPreset(preset) {
|
|
2025
|
+
return preset === "ptc" || preset === "code";
|
|
2026
|
+
}
|
|
2027
|
+
function useSessionPreset({ sessionId, useProjection, useSessions }) {
|
|
2028
|
+
const projected = useProjection("agentPreset");
|
|
2029
|
+
return typeof useSessions === "function" ? useSessions((state) => sessionPresetValue(projected, state.byId?.[sessionId])) : projected;
|
|
2030
|
+
}
|
|
2031
|
+
function watchCurrentSessionPreset(sessions, listener) {
|
|
2032
|
+
let source;
|
|
2033
|
+
let unsubscribeProjection;
|
|
2034
|
+
let selected;
|
|
2035
|
+
const sync = () => {
|
|
2036
|
+
const snapshot2 = sessions.list.getSnapshot();
|
|
2037
|
+
const current = currentSessionId(snapshot2, selected);
|
|
2038
|
+
selected = current;
|
|
2039
|
+
const summary = current === void 0 ? void 0 : snapshot2.byId?.[current];
|
|
2040
|
+
const next = current === void 0 ? void 0 : sessions.binding?.(current)?.session?.projections?.faceOf?.("agentPreset");
|
|
2041
|
+
if (source !== next) {
|
|
2042
|
+
unsubscribeProjection?.();
|
|
2043
|
+
source = next;
|
|
2044
|
+
unsubscribeProjection = source?.subscribe(sync);
|
|
2045
|
+
}
|
|
2046
|
+
listener(sessionPresetValue(source?.getSnapshot(), summary));
|
|
2047
|
+
};
|
|
2048
|
+
const unsubscribeList = sessions.list.subscribe(sync);
|
|
2049
|
+
const dispose = () => {
|
|
2050
|
+
unsubscribeList();
|
|
2051
|
+
unsubscribeProjection?.();
|
|
2052
|
+
};
|
|
2053
|
+
try {
|
|
2054
|
+
sync();
|
|
2055
|
+
} catch (error) {
|
|
2056
|
+
dispose();
|
|
2057
|
+
throw error;
|
|
2058
|
+
}
|
|
2059
|
+
return dispose;
|
|
2060
|
+
}
|
|
2061
|
+
function isIdleSessionComposer(owner, sessionId) {
|
|
2062
|
+
return Object.hasOwn(owner, "sessionId") ? owner.sessionId === sessionId && owner.pendingInteraction === void 0 : owner.session?.sessionId === sessionId && Array.isArray(owner.interactions) && owner.interactions.length === 0;
|
|
2063
|
+
}
|
|
2064
|
+
var BUNDLE_PATCH_ROW_ID = "ptc-plus";
|
|
2065
|
+
function settingsCardSeats(bundleName) {
|
|
2066
|
+
return [
|
|
2067
|
+
{ slot: "settings.plugin.item", identity: { key: SETTINGS_NAMESPACE } },
|
|
2068
|
+
{ slot: "plugins.row.config", identity: { key: `${bundleName}#${BUNDLE_PATCH_ROW_ID}` } }
|
|
2069
|
+
];
|
|
2070
|
+
}
|
|
2071
|
+
function publishSettingsCard(ctx, { bundleName, locale, injectProps, component }) {
|
|
2072
|
+
let live;
|
|
2073
|
+
const releases = settingsCardSeats(bundleName).map(({ slot, identity }) => ctx.slots.inject(
|
|
2074
|
+
slot,
|
|
2075
|
+
() => {
|
|
2076
|
+
live = slot;
|
|
2077
|
+
return ctx.slots.register({ name: slot, ...identity, locale, inject: injectProps }, component);
|
|
2078
|
+
}
|
|
2079
|
+
));
|
|
2080
|
+
return { seat: () => live, releases };
|
|
2081
|
+
}
|
|
2082
|
+
|
|
1818
2083
|
// src/client-tool-view.js
|
|
1819
2084
|
function createPtcToolView(React, deps) {
|
|
1820
2085
|
const { CodeBlock, DisclosureRow, icons } = deps;
|
|
1821
2086
|
const h = React.createElement;
|
|
1822
|
-
const hasDisclosureRow =
|
|
2087
|
+
const hasDisclosureRow = isHostComponent(DisclosureRow);
|
|
1823
2088
|
function PTCPlusToolRow({ toolName, block, inspect, t: t2 }) {
|
|
1824
2089
|
const [open, setOpen] = React.useState(false);
|
|
1825
2090
|
const view = derivePtcToolView(block, toolName);
|
|
@@ -1851,7 +2116,7 @@
|
|
|
1851
2116
|
"div",
|
|
1852
2117
|
{ className: "ptcPlusToolSection" },
|
|
1853
2118
|
h("span", { className: "ptcPlusToolSectionLabel" }, t2("tool.source")),
|
|
1854
|
-
|
|
2119
|
+
isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
1855
2120
|
code: view.code,
|
|
1856
2121
|
lang: "typescript",
|
|
1857
2122
|
className: "ptcPlusToolCode",
|
|
@@ -1905,6 +2170,11 @@
|
|
|
1905
2170
|
expandOnRowClick: true,
|
|
1906
2171
|
previewChevron: false,
|
|
1907
2172
|
keepContentWhenOpen: true,
|
|
2173
|
+
className: "ptcPlusToolDisclosure",
|
|
2174
|
+
rowClassName: "ptcPlusToolRow",
|
|
2175
|
+
contentClassName: "ptcPlusToolDisclosureContent",
|
|
2176
|
+
contentLayoutClassName: "ptcPlusToolDisclosureLayout",
|
|
2177
|
+
titleClassName: "ptcPlusToolTitle",
|
|
1908
2178
|
collapsedContent,
|
|
1909
2179
|
children: body
|
|
1910
2180
|
})
|
|
@@ -2025,8 +2295,8 @@
|
|
|
2025
2295
|
function featureEnabled(snapshot2, feature) {
|
|
2026
2296
|
const rule = FEATURE_SETTINGS[feature];
|
|
2027
2297
|
if (rule === void 0) throw new Error(`Unknown client feature: ${feature}`);
|
|
2028
|
-
|
|
2029
|
-
|
|
2298
|
+
const value = snapshot2?.status === "ready" && snapshot2.value !== void 0 ? snapshot2.value : CONFIG_DEFAULTS;
|
|
2299
|
+
if (value.enabled === false) return false;
|
|
2030
2300
|
return rule.every((key) => value[key] !== false);
|
|
2031
2301
|
}
|
|
2032
2302
|
function registerGated(scope, { subscribe, isEnabled, register }) {
|
|
@@ -2055,7 +2325,6 @@
|
|
|
2055
2325
|
function createPtcSettingsView(React, deps) {
|
|
2056
2326
|
const { ActionButton, BindingsDialog, Modal, useWorkbenchController, icons } = deps;
|
|
2057
2327
|
const h = React.createElement;
|
|
2058
|
-
const focusableSelector = 'button:not(:disabled),input:not(:disabled),textarea:not(:disabled),select:not(:disabled),[href],[tabindex]:not([tabindex="-1"]),[contenteditable=true],summary';
|
|
2059
2328
|
function fieldInput(field, value, disabled, onChange, label) {
|
|
2060
2329
|
if (field.type === "boolean") {
|
|
2061
2330
|
return h("input", {
|
|
@@ -2065,6 +2334,7 @@
|
|
|
2065
2334
|
checked: value === true,
|
|
2066
2335
|
disabled,
|
|
2067
2336
|
"aria-label": label,
|
|
2337
|
+
"data-modal-autofocus": field.key === "enabled" && !disabled ? true : void 0,
|
|
2068
2338
|
onChange: (event) => onChange(field, event.target.checked)
|
|
2069
2339
|
});
|
|
2070
2340
|
}
|
|
@@ -2262,30 +2532,7 @@
|
|
|
2262
2532
|
}
|
|
2263
2533
|
function PTCPlusSettingsDialog(props) {
|
|
2264
2534
|
const { t: t2, onClose } = props;
|
|
2265
|
-
const body = React.useRef(null);
|
|
2266
2535
|
const [bindingsOpen, setBindingsOpen] = React.useState(false);
|
|
2267
|
-
React.useEffect(() => {
|
|
2268
|
-
const dialog = body.current?.closest("[role=dialog]");
|
|
2269
|
-
const target = body.current?.querySelector(focusableSelector) ?? dialog?.querySelector(focusableSelector);
|
|
2270
|
-
target?.focus({ preventScroll: true });
|
|
2271
|
-
}, []);
|
|
2272
|
-
React.useEffect(() => {
|
|
2273
|
-
const trapFocus = (event) => {
|
|
2274
|
-
if (event.key !== "Tab" || bindingsOpen) return;
|
|
2275
|
-
const dialog = body.current?.closest("[role=dialog]");
|
|
2276
|
-
if (dialog === void 0 || dialog === null) return;
|
|
2277
|
-
const controls = [...dialog.querySelectorAll(focusableSelector)].filter((element) => !element.closest('[hidden], [inert], [aria-hidden="true"]'));
|
|
2278
|
-
const first = controls[0];
|
|
2279
|
-
const last2 = controls.at(-1);
|
|
2280
|
-
const active = document.activeElement;
|
|
2281
|
-
if (!dialog.contains(active) || event.shiftKey && active === first || !event.shiftKey && active === last2) {
|
|
2282
|
-
event.preventDefault();
|
|
2283
|
-
(event.shiftKey ? last2 : first)?.focus({ preventScroll: true });
|
|
2284
|
-
}
|
|
2285
|
-
};
|
|
2286
|
-
document.addEventListener("keydown", trapFocus);
|
|
2287
|
-
return () => document.removeEventListener("keydown", trapFocus);
|
|
2288
|
-
}, [bindingsOpen]);
|
|
2289
2536
|
const close = () => {
|
|
2290
2537
|
if (!bindingsOpen) onClose();
|
|
2291
2538
|
};
|
|
@@ -2299,142 +2546,29 @@
|
|
|
2299
2546
|
contentClassName: "ptcPlusSettingsDialogContent"
|
|
2300
2547
|
}, h(
|
|
2301
2548
|
"div",
|
|
2302
|
-
{ className: "ptcPlusSettingsDialog"
|
|
2549
|
+
{ className: "ptcPlusSettingsDialog" },
|
|
2303
2550
|
h(PTCPlusSettingsCard, { ...props, view: "dialog", onBindingsOpenChange: setBindingsOpen })
|
|
2304
2551
|
));
|
|
2305
2552
|
}
|
|
2306
2553
|
return { PTCPlusSettingsCard, PTCPlusSettingsDialog };
|
|
2307
2554
|
}
|
|
2308
2555
|
|
|
2309
|
-
// src/client-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
ABSENT_HOST_ICON.absentHostIcon = true;
|
|
2326
|
-
function isHostIconComponent(icon) {
|
|
2327
|
-
return typeof icon === "function" && icon.absentHostIcon !== true;
|
|
2328
|
-
}
|
|
2329
|
-
function hostIconComponents(primitives) {
|
|
2330
|
-
return Object.fromEntries(Object.entries(HOST_ICON_EXPORTS).map(([name2, candidates]) => [
|
|
2331
|
-
name2,
|
|
2332
|
-
candidates.map((candidate) => primitives?.[candidate]).find((value) => typeof value === "function") ?? ABSENT_HOST_ICON
|
|
2333
|
-
]));
|
|
2334
|
-
}
|
|
2335
|
-
var MENU_CHILDREN_PROBE_SENTINEL = "ptcPlusMenuChildrenProbe";
|
|
2336
|
-
function readMenuChildrenProbe(container) {
|
|
2337
|
-
if (container === null || container === void 0) return false;
|
|
2338
|
-
return container.querySelector(`.${MENU_CHILDREN_PROBE_SENTINEL}`) !== null;
|
|
2339
|
-
}
|
|
2340
|
-
function createMenuChildrenEvidence() {
|
|
2341
|
-
let supported;
|
|
2342
|
-
return {
|
|
2343
|
-
supported: () => supported,
|
|
2344
|
-
record(value) {
|
|
2345
|
-
supported ??= value === true;
|
|
2346
|
-
}
|
|
2347
|
-
};
|
|
2348
|
-
}
|
|
2349
|
-
function sessionPresetValue(projected, summary) {
|
|
2350
|
-
if (projected !== void 0) return projected;
|
|
2351
|
-
const values = summary?.projectionValues;
|
|
2352
|
-
return values !== void 0 && Object.hasOwn(values, "agentPreset") ? values.agentPreset : summary?.agentPreset;
|
|
2353
|
-
}
|
|
2354
|
-
function currentSessionId(snapshot2, remembered) {
|
|
2355
|
-
if (snapshot2?.current !== void 0) return snapshot2.current;
|
|
2356
|
-
const held = (id2) => id2 !== void 0 && (snapshot2?.byId?.[id2]?.retainedBy?.mainView ?? 0) > 0;
|
|
2357
|
-
if (held(remembered)) return remembered;
|
|
2358
|
-
for (const row of Object.values(snapshot2?.byId ?? {})) {
|
|
2359
|
-
if ((row?.retainedBy?.mainView ?? 0) > 0) return row.id;
|
|
2360
|
-
}
|
|
2361
|
-
return void 0;
|
|
2362
|
-
}
|
|
2363
|
-
function sessionUsesPtcPreset(preset) {
|
|
2364
|
-
return preset === "ptc" || preset === "code";
|
|
2365
|
-
}
|
|
2366
|
-
function useSessionPreset({ sessionId, useProjection, useSessions }) {
|
|
2367
|
-
const projected = useProjection("agentPreset");
|
|
2368
|
-
return typeof useSessions === "function" ? useSessions((state) => sessionPresetValue(projected, state.byId?.[sessionId])) : projected;
|
|
2369
|
-
}
|
|
2370
|
-
function watchCurrentSessionPreset(sessions, listener) {
|
|
2371
|
-
let source;
|
|
2372
|
-
let unsubscribeProjection;
|
|
2373
|
-
let selected;
|
|
2374
|
-
const sync = () => {
|
|
2375
|
-
const snapshot2 = sessions.list.getSnapshot();
|
|
2376
|
-
const current = currentSessionId(snapshot2, selected);
|
|
2377
|
-
selected = current;
|
|
2378
|
-
const summary = current === void 0 ? void 0 : snapshot2.byId?.[current];
|
|
2379
|
-
const next = current === void 0 ? void 0 : sessions.binding?.(current)?.session?.projections?.faceOf?.("agentPreset");
|
|
2380
|
-
if (source !== next) {
|
|
2381
|
-
unsubscribeProjection?.();
|
|
2382
|
-
source = next;
|
|
2383
|
-
unsubscribeProjection = source?.subscribe(sync);
|
|
2384
|
-
}
|
|
2385
|
-
listener(sessionPresetValue(source?.getSnapshot(), summary));
|
|
2386
|
-
};
|
|
2387
|
-
const unsubscribeList = sessions.list.subscribe(sync);
|
|
2388
|
-
const dispose = () => {
|
|
2389
|
-
unsubscribeList();
|
|
2390
|
-
unsubscribeProjection?.();
|
|
2391
|
-
};
|
|
2392
|
-
try {
|
|
2393
|
-
sync();
|
|
2394
|
-
} catch (error) {
|
|
2395
|
-
dispose();
|
|
2396
|
-
throw error;
|
|
2397
|
-
}
|
|
2398
|
-
return dispose;
|
|
2399
|
-
}
|
|
2400
|
-
function isIdleSessionComposer(owner, sessionId) {
|
|
2401
|
-
return Object.hasOwn(owner, "sessionId") ? owner.sessionId === sessionId && owner.pendingInteraction === void 0 : owner.session?.sessionId === sessionId && Array.isArray(owner.interactions) && owner.interactions.length === 0;
|
|
2402
|
-
}
|
|
2403
|
-
var BUNDLE_PATCH_ROW_ID = "ptc-plus";
|
|
2404
|
-
function settingsCardSeats(bundleName) {
|
|
2405
|
-
return [
|
|
2406
|
-
{ slot: "settings.plugin.item", identity: { key: SETTINGS_NAMESPACE } },
|
|
2407
|
-
{ slot: "plugins.row.config", identity: { key: `${bundleName}#${BUNDLE_PATCH_ROW_ID}` } }
|
|
2408
|
-
];
|
|
2409
|
-
}
|
|
2410
|
-
function publishSettingsCard(ctx, { bundleName, locale, injectProps, component }) {
|
|
2411
|
-
let live;
|
|
2412
|
-
const releases = settingsCardSeats(bundleName).map(({ slot, identity }) => ctx.slots.inject(
|
|
2413
|
-
slot,
|
|
2414
|
-
() => {
|
|
2415
|
-
live = slot;
|
|
2416
|
-
return ctx.slots.register({ name: slot, ...identity, locale, inject: injectProps }, component);
|
|
2417
|
-
}
|
|
2418
|
-
));
|
|
2419
|
-
return { seat: () => live, releases };
|
|
2420
|
-
}
|
|
2421
|
-
|
|
2422
|
-
// src/client-repl-view.js
|
|
2423
|
-
function createReplView(React, deps) {
|
|
2424
|
-
const {
|
|
2425
|
-
CodeBlock,
|
|
2426
|
-
featureEnabled: featureEnabled2,
|
|
2427
|
-
normalizeReplMemorySnapshot: normalizeReplMemorySnapshot2,
|
|
2428
|
-
unavailableReplMemorySnapshot: unavailableReplMemorySnapshot2,
|
|
2429
|
-
useSessionPreset: useSessionPreset2,
|
|
2430
|
-
sessionUsesPtcPreset: sessionUsesPtcPreset2,
|
|
2431
|
-
useWorkbenchController,
|
|
2432
|
-
UserBindingsWorkbench,
|
|
2433
|
-
icons: { search: IconSearchOutline16, chevron: IconChevronDownOutline14 }
|
|
2434
|
-
} = deps;
|
|
2435
|
-
const h = React.createElement;
|
|
2436
|
-
function ReplComposer() {
|
|
2437
|
-
return null;
|
|
2556
|
+
// src/client-repl-view.js
|
|
2557
|
+
function createReplView(React, deps) {
|
|
2558
|
+
const {
|
|
2559
|
+
CodeBlock,
|
|
2560
|
+
featureEnabled: featureEnabled2,
|
|
2561
|
+
normalizeReplMemorySnapshot: normalizeReplMemorySnapshot2,
|
|
2562
|
+
unavailableReplMemorySnapshot: unavailableReplMemorySnapshot2,
|
|
2563
|
+
useSessionPreset: useSessionPreset2,
|
|
2564
|
+
sessionUsesPtcPreset: sessionUsesPtcPreset2,
|
|
2565
|
+
useWorkbenchController,
|
|
2566
|
+
UserBindingsWorkbench,
|
|
2567
|
+
icons: { search: IconSearchOutline16, chevron: IconChevronDownOutline14 }
|
|
2568
|
+
} = deps;
|
|
2569
|
+
const h = React.createElement;
|
|
2570
|
+
function ReplComposer() {
|
|
2571
|
+
return null;
|
|
2438
2572
|
}
|
|
2439
2573
|
function ReplBindingInspector({ entry, preview, t: t2 }) {
|
|
2440
2574
|
const readable = preview?.status === "readable";
|
|
@@ -2448,7 +2582,7 @@
|
|
|
2448
2582
|
h("span", null, t2("memory.location", entry.definition))
|
|
2449
2583
|
),
|
|
2450
2584
|
h("div", { className: "ptcPlusObservationLabel" }, t2("console.definition")),
|
|
2451
|
-
|
|
2585
|
+
isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
2452
2586
|
code: entry.definition.source,
|
|
2453
2587
|
lang: "typescript",
|
|
2454
2588
|
className: "ptcPlusObservationCode",
|
|
@@ -2813,7 +2947,7 @@
|
|
|
2813
2947
|
line: binding.definition.line,
|
|
2814
2948
|
column: binding.definition.column
|
|
2815
2949
|
})),
|
|
2816
|
-
|
|
2950
|
+
isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
2817
2951
|
code: binding.definition.source,
|
|
2818
2952
|
lang: "typescript",
|
|
2819
2953
|
className: "ptcPlusReplCode",
|
|
@@ -3350,6 +3484,7 @@
|
|
|
3350
3484
|
};
|
|
3351
3485
|
const review = {
|
|
3352
3486
|
getSnapshot: () => snapshot2,
|
|
3487
|
+
isCurrentCandidate: (candidate) => !disposed && attached && snapshot2.action === null && sameCandidate(snapshot2.candidate, candidate),
|
|
3353
3488
|
subscribe(listener) {
|
|
3354
3489
|
listeners.add(listener);
|
|
3355
3490
|
return () => listeners.delete(listener);
|
|
@@ -3411,9 +3546,12 @@
|
|
|
3411
3546
|
ActionButton,
|
|
3412
3547
|
IconButton,
|
|
3413
3548
|
Menu,
|
|
3549
|
+
MenuFallback,
|
|
3414
3550
|
Toast,
|
|
3415
3551
|
Tooltip,
|
|
3416
3552
|
CodeBlock,
|
|
3553
|
+
Modal,
|
|
3554
|
+
createPortal,
|
|
3417
3555
|
BindingsDialog,
|
|
3418
3556
|
PTCPlusSettingsDialog,
|
|
3419
3557
|
useWorkbenchController,
|
|
@@ -3432,6 +3570,44 @@
|
|
|
3432
3570
|
}
|
|
3433
3571
|
} = deps;
|
|
3434
3572
|
const h = React.createElement;
|
|
3573
|
+
function EnlargeIcon() {
|
|
3574
|
+
return h(
|
|
3575
|
+
"svg",
|
|
3576
|
+
{ width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": true },
|
|
3577
|
+
h("path", {
|
|
3578
|
+
d: "M6 2H2v4m8-4h4v4M2 10v4h4m8-4v4h-4",
|
|
3579
|
+
stroke: "currentColor",
|
|
3580
|
+
strokeWidth: 1.5,
|
|
3581
|
+
strokeLinecap: "round",
|
|
3582
|
+
strokeLinejoin: "round"
|
|
3583
|
+
})
|
|
3584
|
+
);
|
|
3585
|
+
}
|
|
3586
|
+
function RestoreIcon() {
|
|
3587
|
+
return h(
|
|
3588
|
+
"svg",
|
|
3589
|
+
{ width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": true },
|
|
3590
|
+
h("path", {
|
|
3591
|
+
d: "M2 6h4V2m4 0v4h4M6 14v-4H2m12 0h-4v4",
|
|
3592
|
+
stroke: "currentColor",
|
|
3593
|
+
strokeWidth: 1.5,
|
|
3594
|
+
strokeLinecap: "round",
|
|
3595
|
+
strokeLinejoin: "round"
|
|
3596
|
+
})
|
|
3597
|
+
);
|
|
3598
|
+
}
|
|
3599
|
+
function ReviewCloseIcon() {
|
|
3600
|
+
return h(
|
|
3601
|
+
"svg",
|
|
3602
|
+
{ width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", "aria-hidden": true },
|
|
3603
|
+
h("path", {
|
|
3604
|
+
d: "m4 4 8 8m0-8-8 8",
|
|
3605
|
+
stroke: "currentColor",
|
|
3606
|
+
strokeWidth: 1.5,
|
|
3607
|
+
strokeLinecap: "round"
|
|
3608
|
+
})
|
|
3609
|
+
);
|
|
3610
|
+
}
|
|
3435
3611
|
const settingsPath = (t2) => t2({
|
|
3436
3612
|
"settings.plugin.item": "settings.pathSettings",
|
|
3437
3613
|
"plugins.row.config": "settings.pathPlugins"
|
|
@@ -3453,10 +3629,10 @@
|
|
|
3453
3629
|
anchorRef.current = element;
|
|
3454
3630
|
review.access = element;
|
|
3455
3631
|
}, [review]);
|
|
3456
|
-
const
|
|
3457
|
-
const manageItemRef = React.useRef(null);
|
|
3632
|
+
const menuBodyRef = React.useRef(null);
|
|
3458
3633
|
const reloadItemRef = React.useRef(null);
|
|
3459
|
-
const
|
|
3634
|
+
const disabledGroupRef = React.useRef(null);
|
|
3635
|
+
const [disabledOpen, setDisabledOpen] = React.useState(false);
|
|
3460
3636
|
const focused = React.useRef(false);
|
|
3461
3637
|
const dialogReturnFocus = React.useRef(null);
|
|
3462
3638
|
const hoverTimer = React.useRef(void 0);
|
|
@@ -3517,7 +3693,10 @@
|
|
|
3517
3693
|
React.useEffect(() => cancelHoverOpen, [cancelHoverOpen]);
|
|
3518
3694
|
const showMenu = (mode) => {
|
|
3519
3695
|
cancelHoverOpen();
|
|
3520
|
-
if (!menuOpen
|
|
3696
|
+
if (!menuOpen) {
|
|
3697
|
+
setDisabledOpen(false);
|
|
3698
|
+
if (quickAccess) void refreshCatalog();
|
|
3699
|
+
}
|
|
3521
3700
|
setMenu({ key: view.candidateKey, mode, step: "root" });
|
|
3522
3701
|
};
|
|
3523
3702
|
const hoverMenu = (event) => {
|
|
@@ -3528,10 +3707,19 @@
|
|
|
3528
3707
|
showMenu("hover");
|
|
3529
3708
|
}, HOVER_DWELL_MS);
|
|
3530
3709
|
};
|
|
3531
|
-
const menuElement = () =>
|
|
3710
|
+
const menuElement = () => menuBodyRef.current;
|
|
3532
3711
|
const captureCatalogFocus = () => {
|
|
3533
3712
|
catalogFocus.current = menuElement()?.contains(document.activeElement) ? document.activeElement : null;
|
|
3534
3713
|
};
|
|
3714
|
+
const focusMenuItem = (next) => {
|
|
3715
|
+
next?.focus({ preventScroll: true });
|
|
3716
|
+
const scroll = menuElement()?.querySelector(".ptcPlusBindingMenuScroll");
|
|
3717
|
+
if (!scroll?.contains(next)) return;
|
|
3718
|
+
const viewport = scroll.getBoundingClientRect();
|
|
3719
|
+
const item = next.getBoundingClientRect();
|
|
3720
|
+
const offset = item.height > scroll.clientHeight ? item.top + item.height / 2 - (viewport.top + viewport.height / 2) : item.top < viewport.top ? item.top - viewport.top : item.bottom > viewport.bottom ? item.bottom - viewport.bottom : 0;
|
|
3721
|
+
scroll.scrollTop += offset;
|
|
3722
|
+
};
|
|
3535
3723
|
const menuAnchorRect = () => {
|
|
3536
3724
|
const anchor = anchorRef.current;
|
|
3537
3725
|
if (!anchor) return null;
|
|
@@ -3574,17 +3762,18 @@
|
|
|
3574
3762
|
}
|
|
3575
3763
|
if (catalogStatus === "writing" || catalogStatus === "loading") return;
|
|
3576
3764
|
const target = catalogFocus.current;
|
|
3577
|
-
|
|
3578
|
-
if (!target || document.activeElement !== document.body) return;
|
|
3765
|
+
if (!target || document.activeElement !== document.body && document.activeElement !== target) return;
|
|
3579
3766
|
const root = menuElement();
|
|
3580
|
-
const
|
|
3581
|
-
|
|
3767
|
+
const bindingId = target.dataset.bindingId;
|
|
3768
|
+
const currentRow = bindingId === void 0 ? null : [...root?.querySelectorAll("[data-binding-id]") ?? []].find((row) => row.dataset.bindingId === bindingId);
|
|
3769
|
+
const next = root?.contains(target) && !target.disabled ? target : currentRow ?? (bindingId !== void 0 && catalog?.entries.some((entry) => entry.id === bindingId && !entry.enabled) ? disabledGroupRef.current : null) ?? reloadItemRef.current ?? root?.querySelector("button:not(:disabled)");
|
|
3770
|
+
focusMenuItem(next);
|
|
3582
3771
|
}, [catalogStatus, menuOpen]);
|
|
3583
3772
|
React.useLayoutEffect(() => {
|
|
3584
3773
|
if (!menuOpen || menu.mode === "hover") return;
|
|
3585
3774
|
let cancelled = false;
|
|
3586
3775
|
queueMicrotask(() => {
|
|
3587
|
-
if (!cancelled && anchorRef.current?.getClientRects().length) menuElement()?.querySelector("button:not(:disabled)")
|
|
3776
|
+
if (!cancelled && anchorRef.current?.getClientRects().length) focusMenuItem(menuElement()?.querySelector("button:not(:disabled)"));
|
|
3588
3777
|
});
|
|
3589
3778
|
return () => {
|
|
3590
3779
|
cancelled = true;
|
|
@@ -3597,7 +3786,7 @@
|
|
|
3597
3786
|
setProbing(false);
|
|
3598
3787
|
}, [probing, menuChildren]);
|
|
3599
3788
|
React.useEffect(() => {
|
|
3600
|
-
if (toast === null ||
|
|
3789
|
+
if (toast === null || isHostComponent(Toast)) return void 0;
|
|
3601
3790
|
const timer = setTimeout(() => setToast(null), 2500);
|
|
3602
3791
|
return () => clearTimeout(timer);
|
|
3603
3792
|
}, [toast]);
|
|
@@ -3622,7 +3811,7 @@
|
|
|
3622
3811
|
className: "ptcPlusAuthorButton",
|
|
3623
3812
|
"aria-label": label,
|
|
3624
3813
|
// Older UI-kit lines ship no Tooltip primitive; the native title carries the hint there.
|
|
3625
|
-
title:
|
|
3814
|
+
title: isHostComponent(Tooltip) || menuOpen || managing || settingsOpen ? void 0 : hint,
|
|
3626
3815
|
"aria-haspopup": "menu",
|
|
3627
3816
|
"aria-expanded": menuOpen,
|
|
3628
3817
|
onPointerEnter: hoverMenu,
|
|
@@ -3645,23 +3834,58 @@
|
|
|
3645
3834
|
"data-attention": view.message !== null
|
|
3646
3835
|
}, "1") : null
|
|
3647
3836
|
);
|
|
3837
|
+
const catalogRow = (entry) => ({
|
|
3838
|
+
id: `global:${entry.id}`,
|
|
3839
|
+
bindingId: entry.id,
|
|
3840
|
+
disabled: catalog === null,
|
|
3841
|
+
label: h(
|
|
3842
|
+
"span",
|
|
3843
|
+
{ className: "ptcPlusBindingQuickRow", "data-enabled": entry.enabled },
|
|
3844
|
+
h(
|
|
3845
|
+
"span",
|
|
3846
|
+
{ className: "ptcPlusBindingQuickName" },
|
|
3847
|
+
h("strong", { title: entry.name }, entry.name),
|
|
3848
|
+
h("span", { className: "ptcPlusBindingQuickState" }, t2(entry.enabled ? "bindings.enabled" : "bindings.disabledEntry"))
|
|
3849
|
+
),
|
|
3850
|
+
h("span", { className: "ptcPlusBindingQuickPurpose", title: entry.purpose }, entry.purpose)
|
|
3851
|
+
)
|
|
3852
|
+
});
|
|
3853
|
+
const enabledEntries = (catalog?.entries ?? []).filter((entry) => entry.enabled);
|
|
3854
|
+
const disabledEntries = (catalog?.entries ?? []).filter((entry) => !entry.enabled);
|
|
3648
3855
|
const catalogItems = !quickAccess ? [] : [
|
|
3649
3856
|
{ id: "global-heading", type: "label", text: t2("bindings.quickHeading") },
|
|
3650
|
-
...
|
|
3651
|
-
id:
|
|
3652
|
-
|
|
3653
|
-
label:
|
|
3654
|
-
|
|
3655
|
-
{
|
|
3656
|
-
|
|
3657
|
-
|
|
3658
|
-
|
|
3659
|
-
|
|
3660
|
-
|
|
3661
|
-
|
|
3662
|
-
|
|
3663
|
-
|
|
3664
|
-
|
|
3857
|
+
...catalog === null || catalog.entries.length === 0 ? [] : [
|
|
3858
|
+
{ id: "enabled-heading", type: "label", text: t2("bindings.quickEnabled", { count: enabledEntries.length }) },
|
|
3859
|
+
...enabledEntries.map(catalogRow),
|
|
3860
|
+
...enabledEntries.length === 0 ? [{ id: "no-enabled", type: "label", text: t2("bindings.quickNoEnabled") }] : [],
|
|
3861
|
+
...disabledEntries.length === 0 ? [] : [
|
|
3862
|
+
{ id: "disabled-group", label: h(
|
|
3863
|
+
React.Fragment,
|
|
3864
|
+
null,
|
|
3865
|
+
h(
|
|
3866
|
+
"svg",
|
|
3867
|
+
{
|
|
3868
|
+
className: "ptcPlusMenuGroupChevron",
|
|
3869
|
+
"aria-hidden": true,
|
|
3870
|
+
width: 14,
|
|
3871
|
+
height: 14,
|
|
3872
|
+
viewBox: "0 0 14 14",
|
|
3873
|
+
fill: "none",
|
|
3874
|
+
"data-expanded": disabledOpen
|
|
3875
|
+
},
|
|
3876
|
+
h("path", {
|
|
3877
|
+
d: "m5 3 4 4-4 4",
|
|
3878
|
+
stroke: "currentColor",
|
|
3879
|
+
strokeWidth: 1.5,
|
|
3880
|
+
strokeLinecap: "round",
|
|
3881
|
+
strokeLinejoin: "round"
|
|
3882
|
+
})
|
|
3883
|
+
),
|
|
3884
|
+
h("span", null, t2("bindings.quickDisabled", { count: disabledEntries.length }))
|
|
3885
|
+
) },
|
|
3886
|
+
...disabledOpen ? disabledEntries.map(catalogRow) : []
|
|
3887
|
+
]
|
|
3888
|
+
],
|
|
3665
3889
|
...catalog !== null && catalog.entries.length === 0 ? [{ id: "empty", type: "label", text: t2("memory.globalEmpty") }] : [],
|
|
3666
3890
|
...catalog === null && catalogStatus !== "error" ? [{ id: "pending", type: "label", text: t2(catalogStatus === "writing" ? "bindings.quickSaving" : "bindings.quickLoading") }] : [],
|
|
3667
3891
|
...catalogError === null ? [] : [{ id: "error", type: "label", text: t2("bindings.failed", { error: catalogError }) }]
|
|
@@ -3682,13 +3906,14 @@
|
|
|
3682
3906
|
),
|
|
3683
3907
|
h("span", { className: "ptcPlusBindingQuickPurpose", title: entry.purpose }, entry.purpose)
|
|
3684
3908
|
)
|
|
3685
|
-
}))
|
|
3686
|
-
// The back row also anchors menu lookup, so the step still owns its list
|
|
3687
|
-
// when the catalog is momentarily empty.
|
|
3688
|
-
{ id: "edit-back", label: h("span", { className: "ptcPlusBindingMenuAction", ref: firstItemRef }, t2("bindings.back")) }
|
|
3909
|
+
}))
|
|
3689
3910
|
];
|
|
3690
3911
|
const selectMenuItem = (id2) => {
|
|
3691
3912
|
if (!anchorRef.current?.getClientRects().length) return;
|
|
3913
|
+
if (id2 === "disabled-group") {
|
|
3914
|
+
setDisabledOpen((open) => !open);
|
|
3915
|
+
return;
|
|
3916
|
+
}
|
|
3692
3917
|
if (id2 === "edit") {
|
|
3693
3918
|
setMenu((current) => current === null ? current : { ...current, step: "edit" });
|
|
3694
3919
|
return;
|
|
@@ -3723,17 +3948,16 @@
|
|
|
3723
3948
|
setManaging(true);
|
|
3724
3949
|
} else if (id2 === view.candidateKey) openBindingReview(review, view.candidate);
|
|
3725
3950
|
};
|
|
3726
|
-
const actionCopy = (id2, copy
|
|
3727
|
-
ref,
|
|
3951
|
+
const actionCopy = (id2, copy) => h("span", {
|
|
3728
3952
|
className: "ptcPlusBindingMenuAction",
|
|
3729
3953
|
title: id2 === "settings" ? settingsPath(t2) : void 0
|
|
3730
3954
|
}, t2(copy));
|
|
3731
|
-
const actionButton = (id2, copy
|
|
3955
|
+
const actionButton = (id2, copy) => h("button", {
|
|
3732
3956
|
type: "button",
|
|
3733
3957
|
role: "menuitem",
|
|
3734
3958
|
className: "ptcPlusMenuButton",
|
|
3735
3959
|
onClick: () => selectMenuItem(id2)
|
|
3736
|
-
}, actionCopy(id2, copy
|
|
3960
|
+
}, actionCopy(id2, copy));
|
|
3737
3961
|
const actionSections = [
|
|
3738
3962
|
canAuthor ? h(
|
|
3739
3963
|
"div",
|
|
@@ -3749,16 +3973,50 @@
|
|
|
3749
3973
|
h(
|
|
3750
3974
|
"div",
|
|
3751
3975
|
{ key: "utilities", className: "ptcPlusMenuUtilities" },
|
|
3752
|
-
quickAccess ? actionButton("manage", "bindings.manage"
|
|
3753
|
-
actionButton("settings", "settings.menuEntry"
|
|
3976
|
+
quickAccess ? actionButton("manage", "bindings.manage") : null,
|
|
3977
|
+
actionButton("settings", "settings.menuEntry")
|
|
3754
3978
|
)
|
|
3755
3979
|
];
|
|
3756
|
-
const
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
|
|
3760
|
-
|
|
3761
|
-
|
|
3980
|
+
const menuEntries = menu?.step === "edit" ? editItems : [
|
|
3981
|
+
...hasDraft ? [{ id: "draft-heading", type: "label", text: t2("bindings.quickDrafts") }, {
|
|
3982
|
+
id: view.candidateKey,
|
|
3983
|
+
label: h(
|
|
3984
|
+
"span",
|
|
3985
|
+
{ className: "ptcPlusDraftMenuItem" },
|
|
3986
|
+
h("strong", null, view.candidate.entry.name),
|
|
3987
|
+
h("span", null, t2(bindingReviewStatus(view)))
|
|
3988
|
+
)
|
|
3989
|
+
}, ...quickAccess ? [{ id: "draft-separator", type: "separator" }] : []] : [],
|
|
3990
|
+
...catalogItems,
|
|
3991
|
+
...quickAccess && catalogError !== null ? [{ id: "reload", label: t2("bindings.reload") }] : []
|
|
3992
|
+
];
|
|
3993
|
+
const menuContent = h(
|
|
3994
|
+
"div",
|
|
3995
|
+
{
|
|
3996
|
+
className: "ptcPlusBindingMenuContent",
|
|
3997
|
+
ref: menuBodyRef,
|
|
3998
|
+
// A reopened menu can acquire foreground focus while an earlier write is
|
|
3999
|
+
// pending. Recovery follows the live menu, not the initiating operation.
|
|
4000
|
+
onFocusCapture: (event) => {
|
|
4001
|
+
catalogFocus.current = event.target;
|
|
4002
|
+
},
|
|
4003
|
+
onBlurCapture: (event) => {
|
|
4004
|
+
if (!event.currentTarget.contains(event.relatedTarget)) catalogFocus.current = null;
|
|
4005
|
+
}
|
|
4006
|
+
},
|
|
4007
|
+
h("div", { className: "ptcPlusBindingMenuScroll" }, ...menuEntries.map((entry) => entry.type === "separator" ? h("div", { key: entry.id, role: "separator", className: "ptcPlusOwnedMenuSeparator" }) : entry.type === "label" ? h("div", { key: entry.id, className: "ptcPlusMenuGroupLabel" }, entry.text) : h("button", {
|
|
4008
|
+
key: entry.id,
|
|
4009
|
+
type: "button",
|
|
4010
|
+
role: "menuitem",
|
|
4011
|
+
className: "ptcPlusOwnedMenuRow",
|
|
4012
|
+
disabled: entry.disabled,
|
|
4013
|
+
"data-binding-id": entry.bindingId,
|
|
4014
|
+
ref: entry.id === "reload" ? reloadItemRef : entry.id === "disabled-group" ? disabledGroupRef : void 0,
|
|
4015
|
+
"aria-expanded": entry.id === "disabled-group" ? disabledOpen : void 0,
|
|
4016
|
+
onClick: () => selectMenuItem(entry.id)
|
|
4017
|
+
}, entry.label))),
|
|
4018
|
+
h("div", { className: "ptcPlusMenuActions" }, menu?.step === "edit" ? h("div", { className: "ptcPlusMenuUtilities" }, actionButton("edit-back", "bindings.back")) : actionSections)
|
|
4019
|
+
);
|
|
3762
4020
|
return h(
|
|
3763
4021
|
"span",
|
|
3764
4022
|
{
|
|
@@ -3773,38 +4031,22 @@
|
|
|
3773
4031
|
"data-text": isHostIconComponent(IconSparkle16) ? void 0 : true,
|
|
3774
4032
|
ref: attachAnchor
|
|
3775
4033
|
},
|
|
3776
|
-
!hasDraft && !quickAccess ? null : h(Menu, {
|
|
4034
|
+
!hasDraft && !quickAccess ? null : h(menuChildrenRegion ? Menu : MenuFallback, {
|
|
3777
4035
|
className: "ptcPlusAuthorButtonShell",
|
|
3778
4036
|
open: menuOpen,
|
|
3779
|
-
anchor:
|
|
4037
|
+
anchor: isHostComponent(Tooltip) ? h(Tooltip, { label: hint, delayMs: 700, disabled: menuOpen || managing || settingsOpen }, starButton) : starButton,
|
|
3780
4038
|
portal: true,
|
|
3781
4039
|
side: "top",
|
|
3782
4040
|
dense: true,
|
|
4041
|
+
listClassName: "ptcPlusBindingMenu",
|
|
3783
4042
|
// A hovered menu leaves with the pointer once it leaves the trigger and the
|
|
3784
4043
|
// list for the published grace, which re-entering either cancels; click and
|
|
3785
4044
|
// keyboard menus stay until dismissed.
|
|
3786
4045
|
closeOnPointerLeave: menu !== null && menu.mode === "hover",
|
|
3787
4046
|
getAnchorRect: menuAnchorRect,
|
|
3788
4047
|
onClose: hideMenu,
|
|
3789
|
-
items:
|
|
3790
|
-
|
|
3791
|
-
{ id: "draft-heading", type: "label", text: t2("bindings.quickDrafts") },
|
|
3792
|
-
{
|
|
3793
|
-
id: view.candidateKey,
|
|
3794
|
-
label: h(
|
|
3795
|
-
"span",
|
|
3796
|
-
{ className: "ptcPlusDraftMenuItem", ref: firstItemRef },
|
|
3797
|
-
h("strong", null, view.candidate.entry.name),
|
|
3798
|
-
h("span", null, t2(bindingReviewStatus(view)))
|
|
3799
|
-
)
|
|
3800
|
-
},
|
|
3801
|
-
...quickAccess ? [{ id: "draft-separator", type: "separator" }] : []
|
|
3802
|
-
] : [],
|
|
3803
|
-
...catalogItems,
|
|
3804
|
-
...quickAccess && catalogError !== null ? [{ id: "reload", label: h("span", { ref: reloadItemRef }, t2("bindings.reload")) }] : []
|
|
3805
|
-
],
|
|
3806
|
-
children: actionsInRegion,
|
|
3807
|
-
...actionsPinned.length === 0 ? {} : { footer: actionsPinned },
|
|
4048
|
+
items: [],
|
|
4049
|
+
children: menuContent,
|
|
3808
4050
|
onSelect: selectMenuItem
|
|
3809
4051
|
}),
|
|
3810
4052
|
// The probe mounts the host Menu's own `children` region inside a hidden
|
|
@@ -3841,7 +4083,7 @@
|
|
|
3841
4083
|
queueMicrotask(() => anchorRef.current?.querySelector(".ptcPlusAuthorButton")?.focus({ preventScroll: true }));
|
|
3842
4084
|
}
|
|
3843
4085
|
}) : null,
|
|
3844
|
-
toast === null ? null :
|
|
4086
|
+
toast === null ? null : isHostComponent(Toast) ? h(Toast, {
|
|
3845
4087
|
key: toast.sequence,
|
|
3846
4088
|
text: toast.text,
|
|
3847
4089
|
anchor: anchorRef.current,
|
|
@@ -3862,7 +4104,7 @@
|
|
|
3862
4104
|
showName ? h("strong", null, candidate.entry.name) : null,
|
|
3863
4105
|
h("span", { className: "ptcPlusBindingMeta" }, `${candidate.entry.scope} - ${candidate.entry.symbols.join(", ")}`),
|
|
3864
4106
|
candidate.entry.purpose ? h("p", { className: "ptcPlusMessage" }, candidate.entry.purpose) : null,
|
|
3865
|
-
|
|
4107
|
+
isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
3866
4108
|
code: candidate.entry.source,
|
|
3867
4109
|
lang: "typescript",
|
|
3868
4110
|
className: "ptcPlusBindingCommandCode",
|
|
@@ -3903,20 +4145,15 @@
|
|
|
3903
4145
|
}
|
|
3904
4146
|
function focusComposer(anchor) {
|
|
3905
4147
|
if (!anchor || anchor.getClientRects().length === 0) return;
|
|
3906
|
-
for (let parent = anchor.parentElement; parent; parent = parent.parentElement) {
|
|
3907
|
-
const editable2 = [...parent.querySelectorAll('textarea, [contenteditable="true"]')].find((element) => element.getClientRects().length > 0 && !element.disabled);
|
|
3908
|
-
if (editable2) {
|
|
3909
|
-
editable2.focus({ preventScroll: true });
|
|
3910
|
-
return;
|
|
3911
|
-
}
|
|
3912
|
-
}
|
|
3913
4148
|
anchor.focus({ preventScroll: true });
|
|
3914
4149
|
}
|
|
3915
|
-
function openBindingReview(review, candidate = review.getSnapshot().candidate) {
|
|
3916
|
-
if (!review.display(
|
|
4150
|
+
function openBindingReview(review, candidate = review.getSnapshot().candidate, visibility = "enlarged") {
|
|
4151
|
+
if (!review.display(visibility, candidate)) return;
|
|
3917
4152
|
requestAnimationFrame(() => {
|
|
3918
|
-
|
|
3919
|
-
|
|
4153
|
+
const current = review.getSnapshot();
|
|
4154
|
+
if (review.isCurrentCandidate(candidate) && current.reachable && current.visibility === "expanded" && review.panel?.getClientRects().length) {
|
|
4155
|
+
if (review.previewAvailable === false) focusBindingReviewAccess(review);
|
|
4156
|
+
else review.panel.focus({ preventScroll: true });
|
|
3920
4157
|
}
|
|
3921
4158
|
});
|
|
3922
4159
|
}
|
|
@@ -3926,60 +4163,6 @@
|
|
|
3926
4163
|
if (button?.getClientRects().length) button.focus({ preventScroll: true });
|
|
3927
4164
|
else focusComposer(anchor);
|
|
3928
4165
|
}
|
|
3929
|
-
function fitBindingReview(panel) {
|
|
3930
|
-
const body = panel?.querySelector(".ptcPlusBindingDockBody");
|
|
3931
|
-
const anchor = panel?.parentElement;
|
|
3932
|
-
if (!anchor || typeof ResizeObserver !== "function") return void 0;
|
|
3933
|
-
const ancestors = [];
|
|
3934
|
-
let seat = panel;
|
|
3935
|
-
let viewport;
|
|
3936
|
-
for (let parent = panel.parentElement; parent; parent = parent.parentElement) {
|
|
3937
|
-
ancestors.push(parent);
|
|
3938
|
-
if (/auto|scroll|hidden|clip/.test(getComputedStyle(parent).overflowY)) {
|
|
3939
|
-
viewport = parent;
|
|
3940
|
-
break;
|
|
3941
|
-
}
|
|
3942
|
-
seat = parent;
|
|
3943
|
-
}
|
|
3944
|
-
if (!viewport) return void 0;
|
|
3945
|
-
let frame;
|
|
3946
|
-
const update = () => {
|
|
3947
|
-
if (!panel.getClientRects().length) return;
|
|
3948
|
-
const top2 = Math.max(
|
|
3949
|
-
viewport.getBoundingClientRect().top + viewport.clientTop,
|
|
3950
|
-
window.visualViewport?.offsetTop ?? 0
|
|
3951
|
-
);
|
|
3952
|
-
const offset = anchor.getBoundingClientRect().bottom - seat.getBoundingClientRect().top + 8;
|
|
3953
|
-
panel.style.setProperty("--ptc-plus-review-offset", `${Math.max(8, Math.ceil(offset))}px`);
|
|
3954
|
-
const room = Math.max(0, seat.getBoundingClientRect().top - top2 - 16);
|
|
3955
|
-
panel.style.setProperty("--ptc-plus-review-height", `${Math.floor(room)}px`);
|
|
3956
|
-
if (body) {
|
|
3957
|
-
const chrome2 = panel.scrollHeight - body.offsetHeight + 2;
|
|
3958
|
-
const available = Math.max(0, room - chrome2);
|
|
3959
|
-
panel.dataset.scroll = available < 80 ? "panel" : "body";
|
|
3960
|
-
body.style.setProperty("--ptc-plus-review-space", `${Math.floor(available)}px`);
|
|
3961
|
-
}
|
|
3962
|
-
};
|
|
3963
|
-
const schedule = () => {
|
|
3964
|
-
cancelAnimationFrame(frame);
|
|
3965
|
-
frame = requestAnimationFrame(update);
|
|
3966
|
-
};
|
|
3967
|
-
const observer = new ResizeObserver(schedule);
|
|
3968
|
-
for (const element of [panel, ...panel.children, ...ancestors]) observer.observe(element);
|
|
3969
|
-
window.visualViewport?.addEventListener("resize", schedule);
|
|
3970
|
-
window.visualViewport?.addEventListener("scroll", schedule);
|
|
3971
|
-
update();
|
|
3972
|
-
return () => {
|
|
3973
|
-
observer.disconnect();
|
|
3974
|
-
cancelAnimationFrame(frame);
|
|
3975
|
-
window.visualViewport?.removeEventListener("resize", schedule);
|
|
3976
|
-
window.visualViewport?.removeEventListener("scroll", schedule);
|
|
3977
|
-
panel.style.removeProperty("--ptc-plus-review-offset");
|
|
3978
|
-
panel.style.removeProperty("--ptc-plus-review-height");
|
|
3979
|
-
delete panel.dataset.scroll;
|
|
3980
|
-
body?.style.removeProperty("--ptc-plus-review-space");
|
|
3981
|
-
};
|
|
3982
|
-
}
|
|
3983
4166
|
function BindingReviewDock({ sessionId, useProjection, t: t2 }) {
|
|
3984
4167
|
const raw = useProjection("ptcPlusBindingDraft");
|
|
3985
4168
|
const projection = React.useMemo(() => bindingDraftProjection(raw), [raw]);
|
|
@@ -3998,12 +4181,71 @@
|
|
|
3998
4181
|
}, [review, projection]);
|
|
3999
4182
|
const title = React.useId();
|
|
4000
4183
|
const content2 = React.useId();
|
|
4001
|
-
const
|
|
4184
|
+
const anchor = React.useRef(null);
|
|
4185
|
+
const layer2 = React.useRef(null);
|
|
4186
|
+
const [compact, setCompact] = React.useState(false);
|
|
4187
|
+
const enlarged = view.visibility === "enlarged";
|
|
4188
|
+
const expanded = enlarged || view.visibility === "expanded" && !compact;
|
|
4002
4189
|
const candidateKey = view.candidateKey;
|
|
4003
|
-
React.useLayoutEffect(
|
|
4004
|
-
(
|
|
4005
|
-
|
|
4006
|
-
|
|
4190
|
+
React.useLayoutEffect(() => {
|
|
4191
|
+
if (enlarged || !view.reachable || view.visibility === "hidden" || view.candidate === null) return void 0;
|
|
4192
|
+
let frame;
|
|
4193
|
+
let previous;
|
|
4194
|
+
const place = () => {
|
|
4195
|
+
const rect = anchor.current?.getBoundingClientRect();
|
|
4196
|
+
const surface = layer2.current;
|
|
4197
|
+
if (rect && surface) {
|
|
4198
|
+
const viewport = window.visualViewport;
|
|
4199
|
+
const leftEdge = (viewport?.offsetLeft ?? 0) + 8;
|
|
4200
|
+
const topEdge = (viewport?.offsetTop ?? 0) + 8;
|
|
4201
|
+
const rightEdge = leftEdge + (viewport?.width ?? window.innerWidth) - 16;
|
|
4202
|
+
const bottomEdge = topEdge + (viewport?.height ?? window.innerHeight) - 16;
|
|
4203
|
+
const width = Math.min(rect.width, rightEdge - leftEdge);
|
|
4204
|
+
const left = Math.max(leftEdge, Math.min(rect.left, rightEdge - width));
|
|
4205
|
+
if (surface.style.width !== `${width}px`) surface.style.width = `${width}px`;
|
|
4206
|
+
const panel2 = surface.querySelector(".ptcPlusBindingDock");
|
|
4207
|
+
const head = panel2?.querySelector(".ptcPlusBindingDockHead");
|
|
4208
|
+
const actions = panel2?.querySelector(".ptcPlusBindingDockActions");
|
|
4209
|
+
const body = panel2?.querySelector(".ptcPlusBindingDockBody");
|
|
4210
|
+
const panelStyle = panel2 && getComputedStyle(panel2);
|
|
4211
|
+
const border = (parseFloat(panelStyle?.borderTopWidth) || 0) + (parseFloat(panelStyle?.borderBottomWidth) || 0);
|
|
4212
|
+
const chrome2 = (head?.getBoundingClientRect().height ?? 0) + border;
|
|
4213
|
+
const bottom = Math.max(topEdge, Math.min(Math.max(topEdge + chrome2, rect.top - 8), rect.top, bottomEdge));
|
|
4214
|
+
const height = bottom - topEdge;
|
|
4215
|
+
const geometry = [width, left, bottom, height, chrome2].join(",");
|
|
4216
|
+
if (geometry !== previous) {
|
|
4217
|
+
previous = geometry;
|
|
4218
|
+
surface.style.left = `${left}px`;
|
|
4219
|
+
surface.style.bottom = `${window.innerHeight - bottom}px`;
|
|
4220
|
+
surface.style.setProperty("--ptc-plus-review-space", `${height}px`);
|
|
4221
|
+
}
|
|
4222
|
+
if (rect.width > 0) {
|
|
4223
|
+
const available = surface.getBoundingClientRect().height >= chrome2 && bottom <= rect.top;
|
|
4224
|
+
review.previewAvailable = available;
|
|
4225
|
+
if (surface.dataset.available !== String(available)) {
|
|
4226
|
+
surface.dataset.available = String(available);
|
|
4227
|
+
if (available) {
|
|
4228
|
+
surface.removeAttribute("inert");
|
|
4229
|
+
surface.removeAttribute("aria-hidden");
|
|
4230
|
+
} else {
|
|
4231
|
+
surface.setAttribute("inert", "");
|
|
4232
|
+
surface.setAttribute("aria-hidden", "true");
|
|
4233
|
+
}
|
|
4234
|
+
}
|
|
4235
|
+
}
|
|
4236
|
+
if (head && actions && body && rect.width > 0) {
|
|
4237
|
+
const minimumBody = parseFloat(getComputedStyle(body).minBlockSize);
|
|
4238
|
+
const required = chrome2 + actions.getBoundingClientRect().height + minimumBody;
|
|
4239
|
+
setCompact(surface.getBoundingClientRect().height < required);
|
|
4240
|
+
}
|
|
4241
|
+
}
|
|
4242
|
+
frame = requestAnimationFrame(place);
|
|
4243
|
+
};
|
|
4244
|
+
place();
|
|
4245
|
+
return () => {
|
|
4246
|
+
cancelAnimationFrame(frame);
|
|
4247
|
+
};
|
|
4248
|
+
}, [candidateKey, enlarged, view.reachable, view.visibility, view.candidate === null]);
|
|
4007
4249
|
const close = () => {
|
|
4008
4250
|
review.display("hidden");
|
|
4009
4251
|
requestAnimationFrame(() => focusBindingReviewAccess(review));
|
|
@@ -4012,101 +4254,125 @@
|
|
|
4012
4254
|
if (review.panel?.contains(document.activeElement)) review.panel.focus({ preventScroll: true });
|
|
4013
4255
|
void review.act(operation, activate);
|
|
4014
4256
|
};
|
|
4257
|
+
const restorePreview = () => openBindingReview(review, view.candidate, "expanded");
|
|
4015
4258
|
if (view.candidate === null || view.visibility === "hidden") return null;
|
|
4016
|
-
|
|
4017
|
-
"
|
|
4018
|
-
{
|
|
4019
|
-
|
|
4020
|
-
"
|
|
4021
|
-
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
|
|
4025
|
-
|
|
4026
|
-
|
|
4027
|
-
|
|
4028
|
-
},
|
|
4029
|
-
onFocusCapture: () => {
|
|
4030
|
-
focused.current = true;
|
|
4031
|
-
},
|
|
4032
|
-
onBlurCapture: (event) => {
|
|
4033
|
-
if (event.relatedTarget || review.getSnapshot().action === null) focused.current = false;
|
|
4034
|
-
},
|
|
4035
|
-
"aria-busy": view.busy
|
|
4259
|
+
const panel = h(
|
|
4260
|
+
"section",
|
|
4261
|
+
{
|
|
4262
|
+
key: candidateKey,
|
|
4263
|
+
className: "ptcPlusBindingDock",
|
|
4264
|
+
"aria-labelledby": title,
|
|
4265
|
+
tabIndex: -1,
|
|
4266
|
+
ref: (element) => {
|
|
4267
|
+
review.panel = element;
|
|
4268
|
+
},
|
|
4269
|
+
onFocusCapture: () => {
|
|
4270
|
+
focused.current = true;
|
|
4036
4271
|
},
|
|
4272
|
+
onBlurCapture: (event) => {
|
|
4273
|
+
if (event.relatedTarget || review.getSnapshot().action === null) focused.current = false;
|
|
4274
|
+
},
|
|
4275
|
+
"aria-busy": view.busy,
|
|
4276
|
+
"data-compact": !enlarged && compact
|
|
4277
|
+
},
|
|
4278
|
+
h(
|
|
4279
|
+
"div",
|
|
4280
|
+
{ className: "ptcPlusBindingDockHead" },
|
|
4037
4281
|
h(
|
|
4038
|
-
"div",
|
|
4039
|
-
{
|
|
4282
|
+
enlarged ? "div" : "button",
|
|
4283
|
+
{
|
|
4284
|
+
type: enlarged ? void 0 : "button",
|
|
4285
|
+
className: "ptcPlusBindingDockToggle",
|
|
4286
|
+
"aria-label": enlarged ? void 0 : t2(expanded ? "bindings.reviewCollapse" : "bindings.reviewExpand"),
|
|
4287
|
+
"aria-expanded": enlarged ? void 0 : expanded,
|
|
4288
|
+
"aria-controls": expanded && !enlarged ? content2 : void 0,
|
|
4289
|
+
onClick: enlarged ? void 0 : () => review.display(compact ? "enlarged" : expanded ? "collapsed" : "expanded")
|
|
4290
|
+
},
|
|
4291
|
+
h("span", { className: "ptcPlusBindingDockSymbol", "aria-hidden": true }, "</>"),
|
|
4040
4292
|
h(
|
|
4041
|
-
"
|
|
4042
|
-
{
|
|
4043
|
-
|
|
4044
|
-
className: "ptcPlusBindingDockToggle",
|
|
4045
|
-
"aria-label": t2(expanded ? "bindings.reviewCollapse" : "bindings.reviewExpand"),
|
|
4046
|
-
"aria-expanded": expanded,
|
|
4047
|
-
"aria-controls": expanded ? content2 : void 0,
|
|
4048
|
-
onClick: () => review.display(expanded ? "collapsed" : "expanded")
|
|
4049
|
-
},
|
|
4050
|
-
h("span", { className: "ptcPlusBindingDockSymbol", "aria-hidden": true }, "</>"),
|
|
4051
|
-
h(
|
|
4052
|
-
"span",
|
|
4053
|
-
{ className: "ptcPlusBindingDockHeading" },
|
|
4054
|
-
h("strong", { id: title, title: view.candidate.entry.name }, view.candidate.entry.name),
|
|
4055
|
-
h(
|
|
4056
|
-
"span",
|
|
4057
|
-
{ role: "status", title: t2(bindingReviewStatus(view)) },
|
|
4058
|
-
`${t2("bindings.reviewTitle")} \xB7 ${t2(bindingReviewStatus(view))}`
|
|
4059
|
-
)
|
|
4060
|
-
),
|
|
4293
|
+
"span",
|
|
4294
|
+
{ className: "ptcPlusBindingDockHeading" },
|
|
4295
|
+
h("strong", { id: title, title: view.candidate.entry.name }, view.candidate.entry.name),
|
|
4061
4296
|
h(
|
|
4062
4297
|
"span",
|
|
4063
|
-
{
|
|
4064
|
-
|
|
4298
|
+
{ role: "status", title: t2(bindingReviewStatus(view)) },
|
|
4299
|
+
`${t2("bindings.reviewTitle")} \xB7 ${t2(bindingReviewStatus(view))}`
|
|
4065
4300
|
)
|
|
4066
4301
|
),
|
|
4067
|
-
|
|
4302
|
+
enlarged ? null : h(
|
|
4303
|
+
"span",
|
|
4304
|
+
{ className: "ptcPlusBindingDockChevron", "aria-hidden": true },
|
|
4305
|
+
h(IconChevronDownOutline14, { size: 16 })
|
|
4306
|
+
)
|
|
4068
4307
|
),
|
|
4069
|
-
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
h(
|
|
4073
|
-
|
|
4074
|
-
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
|
|
4082
|
-
|
|
4308
|
+
h(
|
|
4309
|
+
"div",
|
|
4310
|
+
{ className: "ptcPlusBindingDockControls" },
|
|
4311
|
+
h(IconButton, {
|
|
4312
|
+
icon: enlarged ? RestoreIcon : EnlargeIcon,
|
|
4313
|
+
label: t2(enlarged ? "bindings.reviewRestore" : "bindings.reviewEnlarge"),
|
|
4314
|
+
onClick: enlarged ? restorePreview : () => review.display("enlarged", view.candidate)
|
|
4315
|
+
}),
|
|
4316
|
+
h(IconButton, {
|
|
4317
|
+
icon: isHostIconComponent(IconCloseOutline16) ? IconCloseOutline16 : ReviewCloseIcon,
|
|
4318
|
+
label: t2("bindings.reviewClose"),
|
|
4319
|
+
onClick: close
|
|
4320
|
+
})
|
|
4321
|
+
)
|
|
4322
|
+
),
|
|
4323
|
+
!enlarged && view.visibility !== "expanded" ? null : h(
|
|
4324
|
+
React.Fragment,
|
|
4325
|
+
null,
|
|
4326
|
+
h(
|
|
4327
|
+
"div",
|
|
4328
|
+
{
|
|
4329
|
+
className: "ptcPlusBindingDockBody",
|
|
4330
|
+
id: content2,
|
|
4331
|
+
tabIndex: 0,
|
|
4332
|
+
inert: !expanded ? "" : void 0,
|
|
4333
|
+
"aria-hidden": !expanded ? true : void 0,
|
|
4334
|
+
role: "region",
|
|
4335
|
+
"aria-label": t2("bindings.source")
|
|
4336
|
+
},
|
|
4083
4337
|
view.message === null ? null : h("p", { className: "ptcPlusMessage ptcPlusDanger", role: "status" }, t2(view.message)),
|
|
4084
|
-
h(
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
|
|
4090
|
-
|
|
4091
|
-
|
|
4092
|
-
|
|
4093
|
-
|
|
4094
|
-
|
|
4095
|
-
|
|
4096
|
-
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4100
|
-
|
|
4101
|
-
|
|
4102
|
-
|
|
4103
|
-
|
|
4104
|
-
|
|
4105
|
-
|
|
4106
|
-
)
|
|
4338
|
+
view.message === null ? null : h(ActionButton, {
|
|
4339
|
+
disabled: view.busy,
|
|
4340
|
+
onClick: () => review.reset()
|
|
4341
|
+
}, t2("bindings.reviewRetry")),
|
|
4342
|
+
h(BindingCandidateContent, { candidate: view.candidate, t: t2, showName: false })
|
|
4343
|
+
),
|
|
4344
|
+
h(
|
|
4345
|
+
"div",
|
|
4346
|
+
{
|
|
4347
|
+
className: "ptcPlusBindingDockActions",
|
|
4348
|
+
inert: !expanded ? "" : void 0,
|
|
4349
|
+
"aria-hidden": !expanded ? true : void 0
|
|
4350
|
+
},
|
|
4351
|
+
h(ActionButton, {
|
|
4352
|
+
className: "ptcPlusBindingDockDiscard",
|
|
4353
|
+
"data-kind": "ghost",
|
|
4354
|
+
disabled: !view.writable || view.busy,
|
|
4355
|
+
onClick: () => act("discard-draft")
|
|
4356
|
+
}, t2("bindings.draftDiscard")),
|
|
4357
|
+
h(ActionButton, {
|
|
4358
|
+
disabled: !view.writable || view.busy,
|
|
4359
|
+
onClick: () => act("save-draft", false)
|
|
4360
|
+
}, t2("bindings.draftSave")),
|
|
4361
|
+
h(ActionButton, {
|
|
4362
|
+
"data-kind": "primary",
|
|
4363
|
+
disabled: !view.writable || view.busy,
|
|
4364
|
+
onClick: () => act("save-draft", true)
|
|
4365
|
+
}, t2("bindings.draftSaveEnable"))
|
|
4107
4366
|
)
|
|
4108
4367
|
)
|
|
4109
4368
|
);
|
|
4369
|
+
return h("div", { className: "ptcPlusBindingDockAnchor", ref: anchor }, enlarged ? h(Modal, {
|
|
4370
|
+
open: view.reachable,
|
|
4371
|
+
title: `${view.candidate.entry.name} \xB7 ${t2("bindings.reviewTitle")}`,
|
|
4372
|
+
headless: true,
|
|
4373
|
+
className: "ptcPlusBindingReviewModal",
|
|
4374
|
+
onClose: restorePreview
|
|
4375
|
+
}, panel) : !view.reachable ? null : createPortal(h("div", { className: "ptcPlusBindingPreviewLayer", ref: layer2 }, panel), document.body));
|
|
4110
4376
|
}
|
|
4111
4377
|
function BindingCommandCard({ node, sessionId, t: t2, useProjection }) {
|
|
4112
4378
|
const projection = bindingDraftProjection(useProjection?.("ptcPlusBindingDraft"));
|
|
@@ -29728,6 +29994,149 @@
|
|
|
29728
29994
|
return true;
|
|
29729
29995
|
});
|
|
29730
29996
|
|
|
29997
|
+
// src/client-styles.js
|
|
29998
|
+
var CLIENT_STYLE_ID = "ptc-plus-client-style";
|
|
29999
|
+
var CLIENT_CSS = `
|
|
30000
|
+
.ptcPlusTool,.ptcPlusComposerBindingAnchor{--ptc-plus-warning-label:color-mix(in srgb,var(--dsw-alias-state-warn-primary,#a15c00) 65%,var(--dsw-alias-label-primary,#18191c))}.ptcPlusTool{font-family:inherit;font-size:13px;line-height:18px}.ptcPlusTool .ptcPlusToolRow{box-sizing:border-box;height:auto;min-height:24px;align-items:flex-start;padding-block:3px}.ptcPlusToolDisclosureContent{min-width:0;flex:1}.ptcPlusTool .ptcPlusToolDisclosureLayout{min-width:0;align-items:flex-start}.ptcPlusTool .ptcPlusToolTitle,.ptcPlusTool .ptcPlusToolSummary,.ptcPlusTool .ptcPlusToolSummaryLine,.ptcPlusTool .ptcPlusToolState,.ptcPlusTool .ptcPlusToolDescription,.ptcPlusTool .ptcPlusToolSep{font-size:13px;line-height:18px}.ptcPlusTool .ptcPlusToolTitle{flex:none;margin-inline-end:6px}.ptcPlusTool .ptcPlusToolState{flex:none;white-space:nowrap}.ptcPlusTool .ptcPlusToolSep{display:inline-block;min-width:6px}.ptcPlusToolSummary{display:flex;min-width:0;align-items:baseline}.ptcPlusToolSummaryLine{display:flex;min-width:0;align-items:baseline;overflow:hidden}.ptcPlusToolDescription{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ptcPlusToolSummary .ptcPlusToolDescription{flex:1}.ptcPlusToolPreview{display:flex;flex:1;min-width:0;flex-direction:column;gap:4px;margin-inline-start:6px}.ptcPlusToolPreview .ptcPlusToolSummaryLine{display:block}.ptcPlusToolPreview .ptcPlusToolDescription{display:inline;white-space:normal;overflow-wrap:anywhere}.ptcPlusToolPreview .ptcPlusFeatures{margin:0}
|
|
30001
|
+
.ptcPlusBindingMenuContent{font-family:inherit;font-size:13px;line-height:18px;display:flex;flex-direction:column;min-width:0;min-height:0;width:100%;max-block-size:min(440px,60dvh,var(--ptc-plus-menu-space,100dvh));overflow:hidden}.ptcPlusBindingMenuScroll{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.ptcPlusMenuGroupChevron{display:block;align-self:center;width:14px;height:14px;flex:none;margin-inline-end:6px}.ptcPlusMenuGroupChevron[data-expanded=true]{transform:rotate(90deg)}.ptcPlusOwnedMenuRow{appearance:none;box-sizing:border-box;display:flex;align-items:center;width:100%;min-width:0;min-height:38px;padding:8px 10px;border:0;border-radius:6px;background:transparent;color:inherit;font:inherit;text-align:start;cursor:pointer}.ptcPlusOwnedMenuRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusOwnedMenuRow:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}.ptcPlusOwnedMenuRow:disabled{opacity:.5;cursor:default}.ptcPlusOwnedMenuSeparator{margin:6px 0;border-top:1px solid var(--dsw-alias-border-l2)}
|
|
30002
|
+
.ptcPlusBindingDockAnchor{position:relative;flex:none;min-width:0;block-size:0;width:min(calc(100% - 32px),44rem);margin-inline:auto}
|
|
30003
|
+
.ptcPlusBindingPreviewLayer{position:fixed;z-index:40;block-size:min(440px,45dvh,var(--ptc-plus-review-space,100dvh));display:flex;align-items:flex-end;pointer-events:none;font-family:inherit;font-size:13px;line-height:18px}.ptcPlusBindingPreviewLayer[data-available=false]{visibility:hidden;pointer-events:none}.ptcPlusBindingDock{position:relative;font-family:inherit;font-size:13px;line-height:18px;box-sizing:border-box;min-width:0;display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:14px;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-primary,#18191c);box-shadow:0 8px 32px rgba(0,0,0,.14),0 2px 6px rgba(0,0,0,.06);width:100%;max-block-size:100%;pointer-events:auto;overflow:hidden;overscroll-behavior:contain}
|
|
30004
|
+
.ptcPlusBindingDockHead{display:flex;flex:none;align-items:center;gap:4px;min-width:0;padding:0 10px 0 0}.ptcPlusBindingDockControls{display:flex;flex:none;align-items:center;gap:12px}.ptcPlusBindingDockToggle{box-sizing:border-box;appearance:none;display:flex;flex:1;align-items:center;gap:10px;min-width:0;min-height:54px;padding:10px 12px;border:0;background:transparent;color:inherit;text-align:start;font:inherit;cursor:pointer}.ptcPlusBindingDockToggle:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusBindingDockToggle:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-3px}.ptcPlusBindingDockSymbol{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:8px;background:var(--dsw-alias-bg-layer-2,#f3f4f6);color:var(--dsw-alias-label-secondary,#52565d);font:600 13px ui-monospace,monospace}.ptcPlusBindingDockHeading{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:18px}.ptcPlusBindingDockHeading strong,.ptcPlusBindingDockHeading>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingDockHeading>span{font-size:11px;color:var(--dsw-alias-label-secondary,#52565d)}.ptcPlusBindingDockChevron{display:flex;flex:none;transform:rotate(180deg);transition:transform .16s ease}.ptcPlusBindingDockToggle[aria-expanded=true] .ptcPlusBindingDockChevron{transform:rotate(0deg)}
|
|
30005
|
+
.ptcPlusBindingDockBody{box-sizing:border-box;flex:1 1 auto;min-width:0;min-block-size:41px;max-block-size:20rem;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusBindingDockBody:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}.ptcPlusBindingDockBody .ptcPlusAuthoringDraft{border:0;padding:12px 14px;background:transparent;gap:10px}.ptcPlusBindingDockBody .ptcPlusBindingCommandSource,.ptcPlusBindingDockBody .ptcPlusBindingCommandCode{max-height:none;margin:0}.ptcPlusBindingDockBody pre{font-size:12px;line-height:19px}.ptcPlusBindingDockBody .ptcPlusBindingMeta{font:11px/17px ui-monospace,monospace;overflow-wrap:anywhere}.ptcPlusBindingDockActions{display:flex;flex:none;flex-wrap:wrap;align-items:center;gap:6px;padding:10px 12px;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusBindingDockActions>button{width:auto;min-width:0;white-space:normal}.ptcPlusBindingDockDiscard{margin-inline-end:auto}.ptcPlusBindingDock .ptcPlusMessage{margin:0;font-size:12px;line-height:19px}.ptcPlusBindingDockBody>.ptcPlusMessage{padding:8px 12px;overflow-wrap:anywhere}.ptcPlusBindingDock[data-compact=true]>.ptcPlusBindingDockBody,.ptcPlusBindingDock[data-compact=true]>.ptcPlusBindingDockActions{position:absolute;inset-inline:0;visibility:hidden;pointer-events:none}.ptcPlusComposerBindingAnchor{display:inline-flex;min-width:1px;min-height:1px}.ptcPlusComposerBindingAnchor .ptcPlusAuthorButton{position:relative}.ptcPlusDraftBadge{position:absolute;top:-2px;right:-3px;display:grid;place-items:center;box-sizing:border-box;min-width:14px;height:14px;padding-inline:3px;border:1.5px solid var(--dsw-alias-bg-base,#fff);border-radius:8px;background:var(--dsw-alias-state-business-primary,#4d6bfe);color:#fff;font:600 9px/1 system-ui,sans-serif;pointer-events:none}.ptcPlusDraftBadge[data-attention=true]{background:var(--ptc-plus-warning-label);color:var(--dsw-alias-bg-base,#fff)}.ptcPlusDraftMenuItem{display:flex;min-width:0;max-width:240px;flex-direction:column;gap:3px;white-space:normal;overflow-wrap:anywhere}.ptcPlusDraftMenuItem strong{font-size:12px;font-weight:600}.ptcPlusDraftMenuItem>span{font-size:11px;color:var(--dsw-alias-label-secondary,#52565d)}.ptcPlusComposerBindingAnchor[data-text=true] .ptcPlusAuthorButtonShell{width:auto}
|
|
30006
|
+
.ptcPlusBindingReviewModal.ptcPlusBindingReviewModal{box-sizing:border-box;display:flex;flex-direction:column;width:min(1200px,calc(100vw - 48px));max-width:100%;height:min(900px,88dvh);max-height:100%;min-height:0;padding:0;gap:0;border-radius:14px;overflow:hidden}.ptcPlusBindingReviewModal .ptcPlusBindingDock{position:relative;inset:auto;flex:1;min-height:0;max-block-size:none;border:0;border-radius:0;box-shadow:none;overflow:hidden}.ptcPlusBindingReviewModal .ptcPlusBindingDockToggle{cursor:default;padding:16px 20px}.ptcPlusBindingReviewModal .ptcPlusBindingDockToggle:hover{background:transparent}.ptcPlusBindingReviewModal .ptcPlusBindingDockBody{min-block-size:0;max-block-size:none}.ptcPlusBindingReviewModal .ptcPlusAuthoringDraft{padding:18px 20px;gap:14px}.ptcPlusBindingReviewModal .ptcPlusBindingDockBody pre{font-size:13px;line-height:21px}.ptcPlusBindingReviewModal .ptcPlusBindingDockActions{padding:12px 20px}.ptcPlusBindingReviewModal .ptcPlusBindingDockHead{padding-inline-end:16px}
|
|
30007
|
+
@media(max-height:400px){.ptcPlusBindingReviewModal.ptcPlusBindingReviewModal{height:calc(100dvh - 24px)}.ptcPlusBindingReviewModal .ptcPlusBindingDockToggle{padding-block:8px}.ptcPlusBindingReviewModal .ptcPlusBindingDockActions{padding-block:6px}}
|
|
30008
|
+
@media(max-width:560px){.ptcPlusBindingDockAnchor{width:calc(100% - 16px)}.ptcPlusBindingReviewModal.ptcPlusBindingReviewModal{width:calc(100vw - 48px);height:calc(100dvh - 24px)}.ptcPlusBindingReviewModal .ptcPlusBindingDockToggle{padding:12px}.ptcPlusBindingReviewModal .ptcPlusBindingDockHead{padding-inline-end:8px}.ptcPlusBindingReviewModal .ptcPlusAuthoringDraft{padding:12px}.ptcPlusBindingReviewModal .ptcPlusBindingDockActions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding:10px 12px}.ptcPlusBindingReviewModal .ptcPlusBindingDockDiscard{grid-column:1/-1;justify-self:start}}
|
|
30009
|
+
.ptcPlusBindingCommand .ptcPlusMessage{margin:0}.ptcPlusBindingSourceDetails{min-width:0}.ptcPlusBindingSourceDetails>summary{cursor:pointer;font-size:12px;line-height:20px}.ptcPlusBindingItem>button,.ptcPlusGlobalItem>button{align-self:center}.ptcPlusAuthoringDraft>strong{font-size:13px;line-height:20px;overflow-wrap:anywhere}.ptcPlusBindingCommand .ptcPlusBindingCommandState{max-width:100%;box-sizing:border-box;white-space:normal}.ptcPlusBindingCommand .ptcPlusAuthoringDraft{min-width:0;padding:0;border:0;border-radius:0;background:transparent}
|
|
30010
|
+
.ptcPlusCard{list-style:none;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);overflow:hidden;transition:border-color .16s ease,background-color .16s ease}
|
|
30011
|
+
.ptcPlusCard:hover{border-color:var(--dsw-alias-label-dimmed)}
|
|
30012
|
+
.ptcPlusRow>.ptcPlusSelect{width:auto;max-width:100%;flex:none}
|
|
30013
|
+
.ptcPlusCard[data-open=true]{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}
|
|
30014
|
+
.ptcPlusHeader{appearance:none;width:100%;display:flex;align-items:center;gap:12px;padding:14px 16px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:12px}
|
|
30015
|
+
.ptcPlusHeader:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusHeader:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}
|
|
30016
|
+
.ptcPlusButton:focus-visible,.ptcPlusInput:focus-visible,.ptcPlusSelect:focus-visible,.ptcPlusTextarea:focus-visible,.ptcPlusBindingSelect:focus-visible,.ptcPlusReplBindingTrigger:focus-visible,.ptcPlusReplInspect:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}
|
|
30017
|
+
.ptcPlusBindingSelect:disabled,.ptcPlusSelect:disabled,.ptcPlusTextarea:disabled{cursor:not-allowed;opacity:.4}
|
|
30018
|
+
.ptcPlusHeadText{display:flex;flex:1;min-width:0;flex-direction:column;align-items:flex-start;gap:3px}.ptcPlusName{font-size:15px;font-weight:600;line-height:1.4}.ptcPlusDescription{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5;overflow-wrap:anywhere}.ptcPlusStatus{display:inline-flex;align-items:center;flex:none;padding:1px 8px;border-radius:999px;corner-shape:round;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusStatus[data-enabled=true]{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-tertiary)}.ptcPlusStatus[data-enabled=false]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-module-platform)}
|
|
30019
|
+
.ptcPlusChevron{display:flex;color:var(--dsw-alias-label-tertiary);transition:transform .18s ease}.ptcPlusChevron[data-open=true]{transform:rotate(180deg)}.ptcPlusBody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s ease}.ptcPlusBody[data-open=true]{grid-template-rows:1fr}.ptcPlusBodyInner{min-height:0;overflow:hidden}.ptcPlusFields{margin:0 16px;padding:8px 0 12px;border-top:0.5px solid var(--dsw-alias-border-l2)}
|
|
30020
|
+
.ptcPlusGroup+.ptcPlusGroup{margin-top:20px;padding-top:12px;border-top:1px solid var(--dsw-alias-border-l2)}.ptcPlusGroupTitle{margin:0;padding:8px 0;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:600;letter-spacing:0;line-height:20px}.ptcPlusRow{display:flex;align-items:center;gap:12px;min-height:48px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusGroupTitle+.ptcPlusRow{border-top:0}.ptcPlusMain{flex:1;min-width:0}.ptcPlusLabel{font-size:13px;font-weight:500;line-height:1.5}.ptcPlusDetail,.ptcPlusMessage{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.ptcPlusInput{box-sizing:border-box;min-width:72px;width:140px;height:34px;padding:0 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:1.5}.ptcPlusInput:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusCheck{width:18px;height:18px;accent-color:var(--dsw-alias-brand-primary)}
|
|
30021
|
+
.ptcPlusFooter{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}.ptcPlusButton{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:32px;padding:4px 14px;border:0.5px solid var(--dsw-alias-border-l3);border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;font-size:13px;line-height:1.5;transition:color .16s ease,border-color .16s ease,background-color .16s ease}.ptcPlusButton:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}.ptcPlusButton[data-kind=primary]{background:var(--dsw-alias-label-primary);border-color:transparent;color:var(--dsw-alias-bg-layer-3)}.ptcPlusButton[data-kind=primary]:hover:not(:disabled){background:var(--dsw-alias-label-primary-dimmed);border-color:transparent;color:var(--dsw-alias-bg-layer-3)}.ptcPlusButton[data-kind=ghost]{border-color:transparent}.ptcPlusButton[data-kind=ghost]:hover:not(:disabled){border-color:var(--dsw-alias-border-l3)}.ptcPlusButton[data-kind=danger]{color:var(--dsw-alias-state-error-primary)}.ptcPlusButton[data-kind=danger]:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.ptcPlusButton:disabled,.ptcPlusInput:disabled,.ptcPlusCheck:disabled{cursor:not-allowed;opacity:.4}
|
|
30022
|
+
.ptcPlusSettingAction{padding:4px 0 12px}
|
|
30023
|
+
.ptcPlusSettingsModal.ptcPlusSettingsModal{width:min(760px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 40px);border-radius:8px}.ptcPlusSettingsDialogContent{min-height:0;overflow:auto;overscroll-behavior:contain}.ptcPlusSettingsDialog{min-width:0}.ptcPlusSettingsDialog .ptcPlusFields{margin:0;padding:0 0 12px;border-top:0}
|
|
30024
|
+
.ptcPlusDanger{color:var(--dsw-alias-state-error-primary)}
|
|
30025
|
+
.ptcPlusActiveShell{display:inline-flex;align-items:center}.ptcPlusActive{appearance:none;display:inline-flex;height:24px;align-items:center;gap:5px;padding:0 8px;border:1px solid color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 32%,transparent);border-radius:6px;background:var(--dsw-alias-state-success-tertiary,#e7f7ef);color:var(--dsw-alias-state-success-primary,#16794f);cursor:help;font-family:inherit;font-size:12px;font-weight:600;line-height:18px;white-space:nowrap;transition:background-color .14s ease,border-color .14s ease}.ptcPlusActive:hover,.ptcPlusActive[aria-expanded=true]{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 48%,transparent);background:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 16%,var(--dsw-alias-bg-layer-3,#fff))}.ptcPlusActive:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary,#16794f);outline-offset:2px}.ptcPlusReplPopover{position:fixed;z-index:2147483000;inset:auto;display:none;box-sizing:border-box;margin:0;padding:0;border:0;overflow:visible;background:transparent;color:var(--dsw-alias-label-primary,#18191c)}.ptcPlusReplPopover:popover-open,.ptcPlusReplPopover[data-open=true]{display:block}.ptcPlusReplPopover::backdrop{background:transparent}.ptcPlusReplCard{display:flex;max-height:inherit;overflow:hidden;flex-direction:column;border:1px solid color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 22%,var(--dsw-alias-border-l2,rgba(0,0,0,.1)));border-top:3px solid var(--dsw-alias-state-success-primary,#16794f);border-radius:8px;background:var(--dsw-alias-bg-layer-3,#fff);box-shadow:0 14px 36px rgba(16,24,40,.2),0 3px 10px rgba(16,24,40,.1);color:var(--dsw-alias-label-primary,#18191c);white-space:normal}.ptcPlusReplHead{display:grid;flex:none;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:8px;padding:11px 13px 10px;border-bottom:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 7%,var(--dsw-alias-bg-layer-3,#fff))}.ptcPlusReplStatusDot{grid-row:1/3;width:8px;height:8px;border-radius:50%;background:var(--dsw-alias-state-success-primary,#16794f);box-shadow:0 0 0 3px color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 14%,transparent)}.ptcPlusReplTitle,.ptcPlusReplSummary{display:block;min-width:0}.ptcPlusReplTitle{font-size:13px;font-weight:600;line-height:19px}.ptcPlusReplSummary{min-height:16px;overflow-wrap:anywhere;color:var(--dsw-alias-label-tertiary,#74777d);font-size:11px;line-height:16px}.ptcPlusReplList{min-height:0;margin:0;padding:5px 0;overflow:auto;overscroll-behavior:contain;list-style:none;scrollbar-gutter:stable}.ptcPlusReplBinding{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 10px;padding:7px 12px}.ptcPlusReplBinding:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusReplIdentity{display:flex;min-width:0;align-items:center;gap:7px}.ptcPlusReplName{min-width:0;overflow:hidden;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusReplKind{flex:none;padding:1px 6px;border:1px solid color-mix(in srgb,currentColor 22%,transparent);border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:10px;font-weight:600;line-height:15px}.ptcPlusReplKind[data-kind=variable]{color:var(--dsw-alias-state-business-primary,#315fbd)}.ptcPlusReplKind[data-kind=function]{color:#7651b5}.ptcPlusReplKind[data-kind=class]{color:var(--dsw-alias-state-warn-primary,#946200)}.ptcPlusReplKind[data-kind=import]{color:#14766f}.ptcPlusReplPreview{grid-column:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-tertiary,#74777d);font:11px/16px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusReplInspect{grid-column:2;grid-row:1/3;display:inline-flex;align-items:center;gap:4px;padding:3px 5px;border:0;border-radius:4px;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;font:500 11px/17px inherit;white-space:nowrap}.ptcPlusReplInspect:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));color:var(--dsw-alias-state-business-primary,#4d6bfe)}.ptcPlusReplInspect:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:1px}.ptcPlusReplDefinition{grid-column:1/-1;min-width:0;margin-top:4px;padding:8px;border-left:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03))}.ptcPlusReplLocation{display:block;margin-bottom:5px;color:var(--dsw-alias-label-tertiary,#74777d);font-size:10px;line-height:15px}.ptcPlusReplCode{max-height:180px;margin:0;overflow:auto;color:inherit;font:11px/16px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusReplEmpty,.ptcPlusReplMore{display:block;color:var(--dsw-alias-label-tertiary,#74777d)}.ptcPlusReplEmpty{padding:18px 13px;font-size:12px;line-height:18px}.ptcPlusReplMore{padding:8px 13px;border-top:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03));font-size:11px;line-height:17px}
|
|
30026
|
+
.ptcPlusReplTabs{display:flex;flex:none;padding:6px 8px 0;border-bottom:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1))}.ptcPlusReplTab{flex:1;padding:5px 6px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;line-height:17px}.ptcPlusReplTab[aria-selected=true]{border-bottom-color:var(--dsw-alias-state-business-primary,#4d6bfe);color:var(--dsw-alias-label-primary,#18191c)}.ptcPlusGlobalPane{display:flex;min-height:0;flex-direction:column;gap:8px;padding:8px 12px}.ptcPlusGlobalList{min-height:0;margin:0 -12px -8px;padding:5px 0;overflow:auto;list-style:none}.ptcPlusGlobalItem{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 10px;padding:7px 12px;border-radius:8px}.ptcPlusGlobalItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusGlobalItem .ptcPlusGlobalSource,.ptcPlusGlobalItem .ptcPlusReplEmpty{grid-column:1/-1}.ptcPlusAuthoringDraft{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:12px;background:var(--dsw-alias-bg-layer-3)}.ptcPlusGlobalSource{max-height:180px;margin:6px 0 0;padding:8px 10px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30027
|
+
.ptcPlusReplList{max-height:min(52vh,480px)}.ptcPlusReplBinding{grid-template-columns:minmax(0,1fr) 24px;gap:3px 8px;min-height:36px;padding:5px 12px;content-visibility:auto;contain-intrinsic-size:36px;cursor:pointer;transition:background-color .16s ease}.ptcPlusReplBinding:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}.ptcPlusReplBinding[data-expanded=true]{background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 5%,transparent)}.ptcPlusReplName{grid-column:1}.ptcPlusReplName[data-kind=variable]{color:var(--dsw-alias-state-business-primary,#315fbd)}.ptcPlusReplName[data-kind=function]{color:#7651b5}.ptcPlusReplName[data-kind=class]{color:var(--dsw-alias-state-warn-primary,#946200)}.ptcPlusReplName[data-kind=import]{color:#14766f}.ptcPlusReplPreview{grid-column:1}.ptcPlusReplChevron{grid-column:2;grid-row:1/3;display:flex;align-items:center;justify-content:center;color:var(--dsw-alias-label-tertiary,#74777d);transition:transform .2s ease}.ptcPlusReplChevron[data-open=true]{transform:rotate(180deg)}.ptcPlusReplDefinitionWrap{grid-column:1/-1;display:grid;grid-template-rows:0fr;min-width:0;transition:grid-template-rows .24s cubic-bezier(.2,.7,.2,1)}.ptcPlusReplDefinitionWrap[data-open=true]{grid-template-rows:1fr}.ptcPlusReplDefinitionInner{min-height:0;overflow:hidden}
|
|
30028
|
+
.ptcPlusDraftBadge[data-attention=true]{background:var(--dsw-alias-bg-base,#fff);color:var(--ptc-plus-warning-label)}
|
|
30029
|
+
.ptcPlusToolSummary+.ptcPlusFeatures{margin-top:4px}.ptcPlusFeatures{display:flex;min-width:0;flex-wrap:wrap;gap:3px 14px;margin:0 0 5px 23px}.ptcPlusFeature{display:inline-flex;min-width:0;max-width:100%;align-items:center;gap:5px;color:var(--dsw-alias-label-secondary,#52565d);font-size:11px;line-height:17px}.ptcPlusFeature::before{width:4px;height:4px;flex:none;border-radius:50%;background:var(--dsw-alias-state-business-primary,#4d6bfe);content:''}.ptcPlusFeatureName{min-width:0;font-weight:500;overflow-wrap:anywhere}.ptcPlusFeatureDetail{min-width:0;overflow:hidden;color:var(--dsw-alias-label-tertiary,#74777d);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}
|
|
30030
|
+
.ptcPlusToolBody{margin:4px 0 8px 23px;border-left:2px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03))}.ptcPlusToolSection{display:flex;min-width:0;flex-direction:column;gap:4px;padding:9px 11px}.ptcPlusToolSection+.ptcPlusToolSection{border-top:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1))}.ptcPlusToolSectionLabel{color:var(--dsw-alias-label-tertiary,#74777d);font-size:10px;font-weight:600;line-height:16px;text-transform:uppercase}.ptcPlusToolCode{max-height:320px;margin:0;overflow:auto;color:inherit;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusIoCard{display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-l1,rgba(0,0,0,.1));border-radius:12px;background:var(--dsw-alias-markdown-code-block,rgba(38,49,72,.06));overflow:hidden}.ptcPlusIoText{max-height:320px;margin:0;padding:12px 16px;overflow:auto;color:var(--dsw-alias-label-secondary,#52565d);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusIoText[data-error]{color:var(--dsw-alias-state-error-primary,#c43d3d)}.ptcPlusInspect{display:inline-flex;align-self:flex-start;align-items:center;gap:4px;margin:4px 0 2px 4px;padding:2px 8px;border:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));border-radius:999px;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;opacity:0;font-size:11px;line-height:16px;transition:opacity .1s ease;display:inline-flex}.ptcPlusTool:hover .ptcPlusInspect,.ptcPlusInspect:focus-visible{opacity:1}.ptcPlusInspect:hover{background:var(--dsw-alias-interactive-bg-hover-solid,rgba(38,49,72,.06));color:var(--dsw-alias-label-primary,#18191c)}
|
|
30031
|
+
.ptcPlusAuthorButtonShell{display:inline-flex;width:28px;height:28px;flex:none;align-items:center;justify-content:center}.ptcPlusAuthorButton{appearance:none;display:inline-flex;box-sizing:border-box;width:28px;height:28px;align-items:center;justify-content:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer}.ptcPlusAuthorButton:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));color:var(--dsw-alias-state-business-primary,#4d6bfe)}.ptcPlusAuthorButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:1px}.ptcPlusAuthorButtonShell[data-text=true]{width:auto}.ptcPlusAuthorButtonLabel{padding:0 4px;font-size:12px;line-height:18px;font-weight:500}.ptcPlusComposerNotice{max-width:160px;color:var(--dsw-alias-label-secondary,#52565d);font-size:11px;line-height:17px;overflow-wrap:anywhere}.ptcPlusButton>svg{flex:none;margin-right:5px;vertical-align:-2px}
|
|
30032
|
+
@media(max-width:760px){.ptcPlusBindingsGrid{grid-template-columns:1fr}.ptcPlusBindingFields{grid-template-columns:1fr}.ptcPlusBindingField[data-wide=true]{grid-column:auto}.ptcPlusBindingSourceGrid{grid-template-columns:1fr}.ptcPlusBindingDebugBody{grid-template-columns:1fr}.ptcPlusBindingDebugBody .ptcPlusButton{width:100%}.ptcPlusBindingDebugWarning{grid-column:1}}
|
|
30033
|
+
@media(max-width:560px){.ptcPlusHeader{padding:12px}.ptcPlusFields{margin:0 12px}.ptcPlusSettingsModal.ptcPlusSettingsModal{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.ptcPlusSettingsDialog .ptcPlusFields{margin:0}.ptcPlusRow{align-items:flex-start;flex-direction:column;gap:6px;padding:10px 0}.ptcPlusInput{width:100%}.ptcPlusFooter,.ptcPlusBindingsHead{align-items:stretch;flex-direction:column}.ptcPlusButton{width:100%}.ptcPlusFeatures,.ptcPlusToolBody{margin-left:0}.ptcPlusToolSummary .ptcPlusToolDescription{white-space:normal;overflow-wrap:anywhere}}
|
|
30034
|
+
@media(prefers-reduced-motion:reduce){.ptcPlusHeader,.ptcPlusChevron,.ptcPlusBody,.ptcPlusButton,.ptcPlusActive,.ptcPlusToolChevron,.ptcPlusReplChevron,.ptcPlusReplDefinitionWrap,.ptcPlusInspect,.ptcPlusBindingDockChevron{transition:none}}
|
|
30035
|
+
/* The summary button owns disclosure; definition content is a separate grid item. */
|
|
30036
|
+
.ptcPlusReplBinding{padding:0;cursor:default}.ptcPlusReplBindingTrigger{appearance:none;display:grid;width:100%;grid-column:1/-1;grid-template-columns:minmax(0,1fr) 24px;gap:3px 8px;min-height:36px;padding:5px 12px;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;font:inherit;transition:background-color .16s ease}.ptcPlusReplBindingTrigger:hover,.ptcPlusReplBindingTrigger[aria-expanded=true]{background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 5%,transparent)}.ptcPlusReplBindingTrigger:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}
|
|
30037
|
+
/* High-contrast TypeScript-like token colors adapt to the active text theme. */
|
|
30038
|
+
.ptcPlusReplCard .ptcPlusReplName[data-kind=variable]{color:color-mix(in srgb,#005cc5 55%,var(--dsw-alias-label-primary,#18191c))}
|
|
30039
|
+
.ptcPlusReplCard .ptcPlusReplName[data-kind=function]{color:color-mix(in srgb,#795e26 55%,var(--dsw-alias-label-primary,#18191c))}
|
|
30040
|
+
.ptcPlusReplCard .ptcPlusReplName[data-kind=class]{color:color-mix(in srgb,#267f99 55%,var(--dsw-alias-label-primary,#18191c))}
|
|
30041
|
+
.ptcPlusReplCard .ptcPlusReplName[data-kind=import]{color:color-mix(in srgb,#af00db 55%,var(--dsw-alias-label-primary,#18191c))}
|
|
30042
|
+
/* Keep the session-header action on the same compact 32px rhythm as DSH chrome. */
|
|
30043
|
+
.ptcPlusActiveShell{display:inline-flex;height:28px;align-items:center;justify-content:center;line-height:0;vertical-align:middle}.ptcPlusActive{box-sizing:border-box;height:28px;justify-content:center;gap:6px;padding:0 6px;border:0;background:transparent;font-family:inherit;font-size:13px;font-weight:500;line-height:18px}.ptcPlusActive::before{width:6px;height:6px;flex:none;border-radius:50%;background:currentColor;box-shadow:0 0 0 2px color-mix(in srgb,currentColor 18%,transparent);content:''}.ptcPlusActive:hover,.ptcPlusActive[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusActiveLabel{display:inline-flex;height:18px;align-items:center;line-height:18px}
|
|
30044
|
+
@media(max-width:560px){.ptcPlusActiveShell{display:none}}
|
|
30045
|
+
/* The compatibility probe never paints: it exists so the entry can read whether
|
|
30046
|
+
the installed Menu mounted the region it was given. */
|
|
30047
|
+
.ptcPlusMenuProbe{display:none}
|
|
30048
|
+
.ptcPlusBindingMenu{display:flex;flex-direction:column;overflow:hidden;width:min(320px,calc(100vw - 24px));min-width:0;max-height:min(440px,60dvh);border-radius:12px}.ptcPlusBindingQuickRow{display:flex;flex:1;min-width:0;flex-direction:column;gap:3px;white-space:normal}.ptcPlusBindingQuickName{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.ptcPlusBindingQuickName strong{min-width:0;overflow:hidden;text-overflow:ellipsis;font-weight:500;white-space:nowrap}.ptcPlusBindingQuickState{flex:none;min-width:5em;text-align:end;font-size:11px;color:var(--dsw-alias-label-tertiary)}.ptcPlusBindingQuickRow[data-enabled=true] .ptcPlusBindingQuickState{color:var(--dsw-alias-state-success-primary)}.ptcPlusBindingQuickPurpose{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary);font-size:12px}.ptcPlusBindingMenuAction{font-size:13px}
|
|
30049
|
+
.ptcPlusMenuActions{flex:none;margin-top:0;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusMenuAuthoring{padding:6px 4px}.ptcPlusMenuGroupLabel{padding:0 4px 4px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.ptcPlusMenuActionGrid,.ptcPlusMenuUtilities{display:flex;gap:6px;min-width:0}.ptcPlusMenuUtilities{padding:4px}.ptcPlusMenuAuthoring+.ptcPlusMenuUtilities{border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusMenuButton{box-sizing:border-box;appearance:none;display:flex;flex:1;align-items:center;justify-content:center;min-width:0;min-height:34px;padding:6px 8px;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:7px;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;text-align:center;cursor:pointer}.ptcPlusMenuButton:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusMenuButton:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}.ptcPlusMenuButton .ptcPlusBindingMenuAction{white-space:normal;overflow-wrap:anywhere;line-height:18px}.ptcPlusMenuUtilities .ptcPlusMenuButton{border-color:transparent;color:var(--dsw-alias-label-secondary)}.ptcPlusMenuUtilities .ptcPlusBindingMenuAction{font-size:12px}
|
|
30050
|
+
@media(max-height:440px){.ptcPlusMenuAuthoring .ptcPlusMenuGroupLabel{display:none}.ptcPlusMenuAuthoring{padding-block:4px}.ptcPlusMenuButton{min-height:30px;padding:4px}}
|
|
30051
|
+
.ptcPlusBindingMenu.ptcPlusFallbackMenuList{overflow:hidden}
|
|
30052
|
+
/* Fallbacks used only when the installed generation ships no Menu or Modal. */
|
|
30053
|
+
.ptcPlusFallbackMenu{display:inline-flex}.ptcPlusFallbackMenuList{position:fixed;z-index:60;box-sizing:border-box;min-width:min(220px,calc(100vw - 24px));max-width:min(320px,calc(100vw - 24px));overflow:auto;overscroll-behavior:contain;padding:6px;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:12px;background:var(--dsw-alias-bg-layer-3,#fff);color:var(--dsw-alias-label-primary,#18191c);box-shadow:0 8px 32px rgba(0,0,0,.14)}
|
|
30054
|
+
.ptcPlusFallbackMenuItem{display:flex;box-sizing:border-box;width:100%;align-items:center;gap:6px;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:inherit;font:inherit;font-size:13px;text-align:start;cursor:pointer}
|
|
30055
|
+
.ptcPlusFallbackMenuItem:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}
|
|
30056
|
+
.ptcPlusFallbackMenuItem:disabled{opacity:.5;cursor:not-allowed}
|
|
30057
|
+
.ptcPlusFallbackMenuLabel{padding:6px 10px 2px;color:var(--dsw-alias-label-tertiary,#74777d);font-size:11px;line-height:16px}
|
|
30058
|
+
.ptcPlusFallbackMenuSeparator{height:1px;margin:4px 6px;background:var(--dsw-alias-border-l3,rgba(0,0,0,.1))}
|
|
30059
|
+
.ptcPlusFallbackModalBackdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;background:rgba(16,24,40,.35)}
|
|
30060
|
+
.ptcPlusFallbackModal{box-sizing:border-box;width:min(760px,calc(100vw - 32px));max-height:calc(100dvh - 40px);overflow:auto;padding:16px 18px;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:8px;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-primary,#18191c)}
|
|
30061
|
+
.ptcPlusFallbackModalHead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.ptcPlusFallbackModalHead h2{margin:0;font-size:17px;line-height:24px}
|
|
30062
|
+
|
|
30063
|
+
`;
|
|
30064
|
+
var BINDING_WORKBENCH_CSS = `
|
|
30065
|
+
.ptcPlusCandidateContext{min-width:0;margin-top:4px;padding:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-module-platform)}.ptcPlusCandidateContext h4{margin:0 0 10px;color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.ptcPlusCandidateContext dl{display:grid;gap:12px;margin:0}.ptcPlusCandidateContext dt{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:20px}.ptcPlusCandidateContext dd{min-width:0;margin:0}.ptcPlusCandidateDeclaration{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 12px}.ptcPlusCandidateDeclaration dd{display:inline-flex;align-items:center;gap:4px;max-width:100%;box-sizing:border-box;padding:2px 8px;border-radius:6px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font-size:11px;line-height:18px;overflow-wrap:anywhere}.ptcPlusCandidateDeclaration dd[data-included=true]{background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-state-business-primary)}.ptcPlusCandidateDeclaration svg{flex:none}.ptcPlusCandidatePrompt{display:grid;gap:6px}.ptcPlusCandidatePrompt dd{padding:8px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-size:12px;line-height:20px;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusCandidatePrompt dd[data-empty=true]{padding:0;border:0;background:transparent;color:var(--dsw-alias-label-tertiary)}
|
|
30066
|
+
.ptcPlusBindings{margin-top:16px;padding-top:14px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingsHead{display:flex;align-items:center;justify-content:space-between;gap:12px}.ptcPlusBindingsTitle{margin:0;font-size:15px;font-weight:600;line-height:1.4}.ptcPlusBindingsActions{display:flex;flex-wrap:wrap;gap:8px}.ptcPlusBindingsGrid{display:grid;grid-template-columns:minmax(240px,.7fr) minmax(340px,1.3fr);gap:12px;margin-top:12px;align-items:start}.ptcPlusBindingPane{display:flex;min-width:0;flex-direction:column;gap:8px}
|
|
30067
|
+
.ptcPlusBindingList{display:flex;min-width:0;margin:0;padding:8px;flex-direction:column;gap:2px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);list-style:none}.ptcPlusBindingItem{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;padding:6px 8px;border-radius:8px;transition:background-color .12s ease}.ptcPlusBindingItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusBindingItem[data-selected=true]{background:var(--dsw-alias-bg-module-platform)}.ptcPlusBindingSelect{display:flex;min-width:0;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;flex-direction:column;align-items:flex-start;gap:1px}.ptcPlusBindingSelect:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.ptcPlusBindingName{display:block;min-width:0;max-width:100%;overflow:hidden;font:500 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingMeta{display:block;min-width:0;max-width:100%;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingState{display:inline-flex;align-items:center;gap:5px;padding:1px 8px;border-radius:999px;corner-shape:round;font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusBindingState[data-enabled=true]{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-tertiary)}.ptcPlusBindingState[data-enabled=false]{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-tertiary)}.ptcPlusBindingStateDot{width:6px;height:6px;border-radius:50%;background:currentColor}.ptcPlusBindingToggle{grid-column:2;grid-row:1/3;align-self:center;justify-self:end;min-height:26px;padding:2px 10px;font-size:12px;line-height:17px;border-radius:999px;corner-shape:round}.ptcPlusBindingRun{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding-top:10px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingRun .ptcPlusInput{flex:1;min-width:160px;width:auto}
|
|
30068
|
+
.ptcPlusBindingEditor{display:flex;min-width:0;flex-direction:column;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);overflow:hidden}.ptcPlusBindingSection{display:flex;min-width:0;flex-direction:column;gap:12px;padding:14px 16px}.ptcPlusBindingSection+.ptcPlusBindingSection{border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingSectionTitle{margin:0;font-size:13px;font-weight:600;line-height:1.5}.ptcPlusBindingFields{display:grid;min-width:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.ptcPlusBindingField{display:flex;min-width:0;flex-direction:column;gap:5px}.ptcPlusBindingField[data-wide=true]{grid-column:1/-1}.ptcPlusBindingFieldLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.ptcPlusBindingEditor .ptcPlusInput,.ptcPlusSelect{box-sizing:border-box;width:100%;min-width:0;height:34px;padding:0 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:1.5}.ptcPlusBindingEditor .ptcPlusInput:focus-visible,.ptcPlusSelect:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusTextarea{box-sizing:border-box;width:100%;min-height:220px;resize:vertical;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;tab-size:2}.ptcPlusTextarea:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusDeclaration{box-sizing:border-box;max-height:220px;margin:0;padding:12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:12px;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingSourceGrid{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}.ptcPlusBindingSourceEditor,.ptcPlusBindingSourcePreview{display:flex;min-width:0;flex-direction:column;gap:6px}.ptcPlusBindingSourcePreview .ptcPlusCodeBlock{max-height:220px;overflow:auto}
|
|
30069
|
+
.ptcPlusBindingLifecycle{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.ptcPlusBindingDebug{display:flex;min-width:0;flex-direction:column;gap:10px;padding:12px 16px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingDebugSummary{display:flex;align-items:center;gap:6px;margin:0;cursor:pointer;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;line-height:1.5;list-style:none}.ptcPlusBindingDebugSummary::-webkit-details-marker{display:none}.ptcPlusBindingDebugSummary::after{content:'';width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform .16s ease}.ptcPlusBindingDebug[open] .ptcPlusBindingDebugSummary::after{transform:rotate(-135deg)}.ptcPlusBindingDebugBody{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:end;gap:10px}.ptcPlusBindingDebugBody .ptcPlusBindingField{min-width:0}.ptcPlusBindingDebugBody .ptcPlusButton{align-self:end}.ptcPlusBindingDebugWarning{grid-column:1/-1;color:var(--dsw-alias-state-warn-label);font-size:12px;line-height:1.5}.ptcPlusBindingOutput{grid-column:1/-1;margin:0;padding:10px 12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;color:var(--dsw-alias-label-secondary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30070
|
+
.ptcPlusBindingCommand{display:flex;min-width:0;flex-direction:column;gap:6px;margin:6px 0 10px;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3)}.ptcPlusBindingCommandHeader{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:8px}.ptcPlusBindingCommandTitle{margin:0;font-size:13px;font-weight:600;line-height:1.5}.ptcPlusBindingCommandState{display:inline-flex;align-items:center;gap:5px;padding:1px 8px;border-radius:999px;corner-shape:round;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusBindingCommand[data-phase=pending] .ptcPlusBindingCommandState{background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-state-business-primary)}.ptcPlusBindingCommand[data-phase=ready] .ptcPlusBindingCommandState{background:var(--dsw-alias-state-success-tertiary);color:var(--dsw-alias-state-success-primary)}.ptcPlusBindingCommand[data-phase=failed] .ptcPlusBindingCommandState{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.ptcPlusBindingCommandStateDot{width:6px;height:6px;border-radius:50%;background:currentColor}.ptcPlusBindingCommandRequirement{margin:0;overflow:auto;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingCommandSource{max-height:280px;margin:0;padding:10px 12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingCommandCode{max-height:300px;overflow:auto}.ptcPlusBindingCommandActions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}
|
|
30071
|
+
|
|
30072
|
+
`;
|
|
30073
|
+
var REPL_CONSOLE_CSS = `
|
|
30074
|
+
.ptcPlusBindingsSurface .ptcPlusBindingSection.ptcPlusModelPrompt{padding:12px 0}.ptcPlusModelPrompt .ptcPlusBindingSectionTitle{margin:0 0 10px}.ptcPlusModelPrompt textarea.ptcPlusInput{height:auto;min-height:80px;padding:8px 12px;resize:vertical}.ptcPlusModelPrompt .ptcPlusPromptToggle{flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer}.ptcPlusModelPrompt .ptcPlusCheck{flex:none}.ptcPlusEditorHead .ptcPlusBindingLifecycle{min-width:0}.ptcPlusEditorHead .ptcPlusButton{width:auto}
|
|
30075
|
+
.ptcPlusConsole{box-sizing:border-box;flex:1;min-width:0;min-height:0;width:100%;height:100%;overflow:auto;padding:20px 24px;color:var(--dsw-alias-label-primary);container-type:inline-size}
|
|
30076
|
+
.ptcPlusConsoleSection{min-width:0}.ptcPlusConsoleSection+.ptcPlusConsoleSection{margin-top:22px;padding-top:20px;border-top:1px solid var(--dsw-alias-border-l2)}
|
|
30077
|
+
.ptcPlusObservationHead,.ptcPlusObservationTitle{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}.ptcPlusObservationHead{justify-content:space-between;margin-bottom:14px}
|
|
30078
|
+
.ptcPlusObservationTitle h2{margin:0;font-size:15px;font-weight:600;line-height:22px}.ptcPlusObservationCount{font-size:13px;color:var(--dsw-alias-label-tertiary)}.ptcPlusObservationTime{font-size:11px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
|
|
30079
|
+
.ptcPlusObservationGrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.ptcPlusObservationCatalog{min-width:0}
|
|
30080
|
+
.ptcPlusObservationFilters{display:flex;gap:10px;align-items:center;margin-bottom:8px}.ptcPlusObservationFilters>.ptcPlusSelect{width:120px;height:32px;flex:none;font-size:12px}
|
|
30081
|
+
.ptcPlusSearch{display:flex;align-items:center;gap:8px;box-sizing:border-box;min-width:0;flex:1;height:32px;padding:0 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-tertiary)}
|
|
30082
|
+
.ptcPlusSearch>svg{flex:none}.ptcPlusSearch input{min-width:0;width:100%;height:100%;padding:0;border:0;outline:none;background:transparent;color:var(--dsw-alias-label-primary);font:12px/20px inherit}.ptcPlusSearch:focus-within{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:1px}
|
|
30083
|
+
.ptcPlusObservations{height:256px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;border:1px solid var(--dsw-alias-border-l2);border-radius:6px}
|
|
30084
|
+
.ptcPlusObservationTable{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;font-size:12px;text-align:left}.ptcPlusObservationTable th{position:sticky;top:0;z-index:1;height:32px;padding:0 10px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-tertiary);font-weight:500;border-bottom:1px solid var(--dsw-alias-border-l2)}
|
|
30085
|
+
.ptcPlusObservationTable th:first-child{width:34%}.ptcPlusObservationTable th:nth-child(2){width:16%}.ptcPlusObservationTable th:nth-child(3){width:72px}.ptcPlusObservationTable td{height:34px;padding:0 10px;border-bottom:1px solid var(--dsw-alias-border-l2);overflow:hidden}.ptcPlusObservationTable tr:last-child td{border-bottom:0}.ptcPlusObservationTable tbody tr{cursor:pointer}.ptcPlusObservationTable tbody tr:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusObservationTable tr[data-selected=true]{background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 7%,transparent)}
|
|
30086
|
+
.ptcPlusObservationSelect{display:block;width:100%;min-width:0;height:34px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationKind{color:var(--dsw-alias-label-tertiary);white-space:nowrap}
|
|
30087
|
+
.ptcPlusObservationValue{display:flex;min-width:0;align-items:center;gap:6px}.ptcPlusObservationValue code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:11px/18px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationState{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px}.ptcPlusObservationValue .ptcPlusObservationState{flex:none}.ptcPlusObservationEmpty{padding:12px}
|
|
30088
|
+
.ptcPlusBindingInspector{box-sizing:border-box;min-width:0;max-height:296px;overflow:auto;padding-left:24px;border-left:1px solid var(--dsw-alias-border-l2)}
|
|
30089
|
+
.ptcPlusInspectorHead{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;margin:0 0 12px}.ptcPlusInspectorHead strong{min-width:0;overflow-wrap:anywhere;font:600 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusInspectorHead span{font-size:11px;color:var(--dsw-alias-label-tertiary)}
|
|
30090
|
+
.ptcPlusObservationLabel{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:12px 0 6px;font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary)}
|
|
30091
|
+
.ptcPlusObservationCode{max-height:184px;margin:0;overflow:auto;border-radius:6px;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusObservationPreview{margin:0;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationUnavailable{margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px}
|
|
30092
|
+
.ptcPlusBindingsSurface{min-width:0;container-type:inline-size}.ptcPlusBindingsSurface .ptcPlusBindings{margin:0;padding:0;border:0}.ptcPlusBindingsSurface .ptcPlusBindingsGrid{grid-template-columns:220px minmax(0,1fr);gap:20px;margin-top:12px}.ptcPlusBindingsSurface .ptcPlusBindingsTitle{font-size:15px;line-height:22px}
|
|
30093
|
+
.ptcPlusBindingPane{min-width:0}.ptcPlusBindingPane>.ptcPlusSearch{flex:none;margin-bottom:2px}.ptcPlusBindingsSurface .ptcPlusBindingsHead{flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px}.ptcPlusBindingsSurface .ptcPlusBindingList{max-height:350px;overflow:auto;gap:0;padding:0;border:0;border-radius:0;background:transparent}.ptcPlusBindingsSurface .ptcPlusBindingItem{min-height:52px;padding:8px;border-radius:4px;box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusBindingsSurface .ptcPlusBindingItem[data-selected=true]{background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 7%,transparent)}
|
|
30094
|
+
.ptcPlusBindingsSurface .ptcPlusBindingName{font-size:12px;font-weight:500;white-space:normal;overflow-wrap:anywhere}.ptcPlusBindingsSurface .ptcPlusBindingMeta{font-size:11px;line-height:16px}.ptcPlusBindingsSurface .ptcPlusBindingEditor{border:0;border-radius:0;background:transparent;overflow:visible}
|
|
30095
|
+
.ptcPlusBindingSwitch{appearance:none;position:relative;align-self:center;flex:none;width:30px;height:18px;padding:2px;border:0;border-radius:9px;background:var(--dsw-alias-label-dimmed,#a5a7ad);cursor:pointer}.ptcPlusBindingSwitch span{display:block;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0002;transition:transform .15s ease}.ptcPlusBindingSwitch[aria-checked=true]{background:var(--dsw-alias-state-business-primary,#4d6bfe)}.ptcPlusBindingSwitch[aria-checked=true] span{transform:translateX(12px)}.ptcPlusBindingSwitch:disabled{cursor:not-allowed;opacity:.5}
|
|
30096
|
+
.ptcPlusEditorHead{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-height:32px;margin-bottom:8px}.ptcPlusEditorFile{min-width:0;overflow-wrap:anywhere;font:600 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusBindingLifecycle{gap:6px}
|
|
30097
|
+
.ptcPlusIconButton{display:inline-flex;align-items:center;justify-content:center;flex:none;box-sizing:border-box;width:30px;height:30px;padding:0;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer}.ptcPlusIconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusIconButton[data-kind=danger]:hover{color:var(--dsw-alias-state-error-primary)}.ptcPlusIconButton:disabled{opacity:.4;cursor:not-allowed}
|
|
30098
|
+
.ptcPlusCodeEditor{min-width:0;overflow:hidden;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;--ptc-code-keyword:color-mix(in srgb,#a13d96 75%,var(--dsw-alias-label-primary));--ptc-code-string:color-mix(in srgb,#af643c 75%,var(--dsw-alias-label-primary));--ptc-code-number:color-mix(in srgb,#477ac2 75%,var(--dsw-alias-label-primary));--ptc-code-type:color-mix(in srgb,#258579 75%,var(--dsw-alias-label-primary));--ptc-code-function:color-mix(in srgb,#825bbe 75%,var(--dsw-alias-label-primary))}.ptcPlusCodeEditor:focus-within{border-color:var(--dsw-alias-state-business-primary,#4d6bfe)}.ptcPlusCodeEditor .cm-editor{height:336px}.ptcPlusCodeEditor .cm-scroller{min-height:0}.ptcPlusCodeEditor .cm-line{overflow-wrap:anywhere}
|
|
30099
|
+
.ptcPlusBindingsSurface .ptcPlusBindingSection{display:block;padding:0;margin-top:0;border:0;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusBindingSection>summary,.ptcPlusBindingsSurface .ptcPlusBindingDebugSummary{padding:11px 0;cursor:pointer;font-size:12px;font-weight:500;color:var(--dsw-alias-label-secondary)}.ptcPlusEntrySettings .ptcPlusBindingFields{padding:0 0 14px}.ptcPlusBindingsSurface .ptcPlusBindingSourcePreview{display:block}.ptcPlusBindingSourcePreview>.ptcPlusCodeBlock{margin-bottom:12px}.ptcPlusBindingsSurface .ptcPlusBindingDebug{display:block;padding:0;border-top:0}.ptcPlusBindingsSurface .ptcPlusBindingDebugBody{grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding-bottom:12px}
|
|
30100
|
+
.ptcPlusBindingsSurface .ptcPlusBindingRun{gap:6px;margin-top:10px}.ptcPlusBindingsSurface .ptcPlusBindingRun .ptcPlusInput{flex-basis:100%;min-width:0;width:100%;height:32px;font-size:12px}.ptcPlusBindingsSurface .ptcPlusMessage[role=status]{grid-column:1/-1;margin:0}
|
|
30101
|
+
.ptcPlusSessionEmpty{box-sizing:border-box;width:100%;padding:16px 18px;border:1px dashed var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px}.ptcPlusObservationGrid[data-empty=true]{grid-template-columns:minmax(0,1fr)}.ptcPlusObservationGrid[data-empty=true] .ptcPlusObservations{height:auto;min-height:94px}
|
|
30102
|
+
.ptcPlusSourceSection{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusSourceToggle{display:flex;min-width:0;align-items:center;gap:6px;padding:12px 0;border:0;background:transparent;color:var(--dsw-alias-label-secondary);text-align:left;cursor:pointer;font:500 12px/20px inherit}.ptcPlusSourceToggle svg{flex:none}.ptcPlusSourceFilename{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary);font:11px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusSourceActions{display:flex;flex-wrap:wrap;gap:6px;padding:6px 0}.ptcPlusSourceBody{grid-column:1/-1;min-width:0;margin-bottom:12px}.ptcPlusSourceCode{max-height:336px;overflow:auto;margin:0;border-radius:6px;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30103
|
+
.ptcPlusWorkbenchFeedback{min-height:22px;padding:4px 0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;overflow-wrap:anywhere}.ptcPlusBindings[aria-busy=true] button:disabled,.ptcPlusBindings[aria-busy=true] input:disabled{opacity:1}.ptcPlusBindings[aria-busy=true] button:disabled{cursor:wait}
|
|
30104
|
+
.ptcPlusExecution{min-width:0;margin:0 0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;overflow:hidden;background:var(--dsw-alias-bg-layer-3)}.ptcPlusExecution>summary{padding:10px 12px;cursor:pointer;font-size:12px;font-weight:500;line-height:20px;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionToolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid var(--dsw-alias-border-l2);border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusExecutionLanguage{font:11px/18px ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionState{font-size:11px;line-height:18px;color:var(--dsw-alias-label-tertiary)}.ptcPlusExecutionActions{display:flex;align-items:center;gap:6px;margin-left:auto}.ptcPlusExecutionActions .ptcPlusButton{min-width:68px;min-height:30px;padding:3px 10px;font-size:12px}
|
|
30105
|
+
.ptcPlusExecutionHistory{min-height:48px;max-height:320px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.ptcPlusExecutionHistory:empty{min-height:0}.ptcPlusExecutionRecord{min-width:0;padding:10px 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusExecutionCommand,.ptcPlusExecutionOutput{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusExecutionCommand{color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionCommand>span{color:var(--dsw-alias-label-tertiary)}.ptcPlusExecutionResult{flex-direction:row;gap:12px;margin-top:8px;padding:12px 16px}.ptcPlusExecutionOutputLabel{flex:none;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px}.ptcPlusExecutionOutput{flex:1;min-width:0;max-height:240px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionOutput:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}.ptcPlusExecutionOutput[data-error=true]{color:var(--dsw-alias-state-error-primary)}.ptcPlusExecutionDuration{display:block;margin-top:4px;color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:16px}.ptcPlusExecutionInput .ptcPlusCodeEditor{border:0;border-radius:0}.ptcPlusExecutionInput .cm-editor{height:108px}.ptcPlusExecutionInput .cm-content{min-height:88px}
|
|
30106
|
+
@container(max-width:460px){.ptcPlusSourceSection{grid-template-columns:minmax(0,1fr)}.ptcPlusSourceToggle{padding-bottom:6px}.ptcPlusSourceActions{justify-content:flex-end}.ptcPlusExecutionToolbar{gap:6px;padding:8px}.ptcPlusExecutionActions{gap:4px}.ptcPlusSourceFilename{display:none}}
|
|
30107
|
+
.ptcPlusBindingsModal.ptcPlusBindingsModal{width:min(1200px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 40px);border-radius:8px}.ptcPlusBindingsDialog{box-sizing:border-box;max-height:calc(100dvh - 40px);overflow:auto;padding:24px}.ptcPlusBindingsDialogHead{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.ptcPlusBindingsDialogHead h2{margin:0;font-size:17px;line-height:24px}.ptcPlusDialogClose{display:flex;flex:none;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}.ptcPlusDialogClose:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusConsole button:focus-visible,.ptcPlusBindingsDialog button:focus-visible{outline:2px solid var(--dsw-alias-state-business-primary,#4d6bfe);outline-offset:-2px}
|
|
30108
|
+
@container(max-width:780px){.ptcPlusObservationGrid{grid-template-columns:minmax(0,1fr);gap:16px}.ptcPlusBindingInspector{max-height:none;padding:12px 0 0;border-left:0;border-top:1px solid var(--dsw-alias-border-l2)}.ptcPlusObservations{height:200px}.ptcPlusBindingsSurface .ptcPlusBindingsGrid{grid-template-columns:minmax(0,1fr);gap:18px}.ptcPlusBindingsSurface .ptcPlusBindingList{max-height:180px}.ptcPlusBindingsSurface .ptcPlusBindingFields,.ptcPlusBindingsSurface .ptcPlusBindingDebugBody{grid-template-columns:minmax(0,1fr)}.ptcPlusObservationTable th:first-child{width:35%}.ptcPlusObservationTable th:nth-child(2){width:64px}.ptcPlusObservationTable th:nth-child(3){width:64px}}
|
|
30109
|
+
@media(max-width:560px){.ptcPlusConsole{padding:14px 12px}.ptcPlusBindingsModal.ptcPlusBindingsModal{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.ptcPlusBindingsDialog{padding:16px;max-height:calc(100dvh - 16px)}.ptcPlusObservationFilters>.ptcPlusSelect{width:105px}.ptcPlusObservationTable th,.ptcPlusObservationTable td{padding:0 6px}.ptcPlusObservationValue{gap:3px}.ptcPlusObservationState{font-size:10px}.ptcPlusEditorHead{align-items:flex-start}.ptcPlusEditorHead>.ptcPlusBindingLifecycle{margin-left:auto}.ptcPlusSourceBody .cm-editor{height:300px}}
|
|
30110
|
+
.ptcPlusReplIdentity{grid-column:1}.ptcPlusReplReuse{flex:none;padding:0 5px;border-radius:999px;background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.06));color:var(--dsw-alias-label-tertiary,#74777d);font:500 10px/15px system-ui,sans-serif;white-space:nowrap}
|
|
30111
|
+
.ptcPlusObservationReuseTotal{font-size:13px;color:var(--dsw-alias-label-tertiary)}.ptcPlusObservationReuse{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-variant-numeric:tabular-nums}
|
|
30112
|
+
`;
|
|
30113
|
+
var CLIENT_PLUGIN_ID = true ? "dsh-ptc-plus" : "dsh-ptc-plus";
|
|
30114
|
+
var CLIENT_STYLE_TAG = `${CLIENT_PLUGIN_ID}/client.css`;
|
|
30115
|
+
var CODEMIRROR_STYLE_TAG = `${CLIENT_PLUGIN_ID}/codemirror.css`;
|
|
30116
|
+
function installStyles() {
|
|
30117
|
+
if (typeof document === "undefined") return () => {
|
|
30118
|
+
};
|
|
30119
|
+
const style = document.createElement("style");
|
|
30120
|
+
style.id = CLIENT_STYLE_ID;
|
|
30121
|
+
style.dataset.plugin = CLIENT_PLUGIN_ID;
|
|
30122
|
+
style.dataset.pluginCss = CLIENT_STYLE_TAG;
|
|
30123
|
+
style.textContent = `${CLIENT_CSS}${BINDING_WORKBENCH_CSS}${REPL_CONSOLE_CSS}`;
|
|
30124
|
+
document.head.append(style);
|
|
30125
|
+
return () => style.remove();
|
|
30126
|
+
}
|
|
30127
|
+
function captureUnownedStyles() {
|
|
30128
|
+
if (typeof document === "undefined") return /* @__PURE__ */ new Set();
|
|
30129
|
+
return new Set(document.querySelectorAll("style:not([data-plugin])"));
|
|
30130
|
+
}
|
|
30131
|
+
function adoptUnownedStyles(known, tagId = CODEMIRROR_STYLE_TAG) {
|
|
30132
|
+
if (typeof document === "undefined") return;
|
|
30133
|
+
for (const style of document.querySelectorAll("style:not([data-plugin])")) {
|
|
30134
|
+
if (known?.has(style)) continue;
|
|
30135
|
+
style.dataset.plugin = CLIENT_PLUGIN_ID;
|
|
30136
|
+
style.dataset.pluginCss = tagId;
|
|
30137
|
+
}
|
|
30138
|
+
}
|
|
30139
|
+
|
|
29731
30140
|
// src/client-code-editor.js
|
|
29732
30141
|
var editorTheme = EditorView.theme({
|
|
29733
30142
|
"&": { backgroundColor: "var(--dsw-alias-bg-layer-3)", color: "var(--dsw-alias-label-primary)", fontSize: "12px" },
|
|
@@ -29761,6 +30170,7 @@
|
|
|
29761
30170
|
latest.current = { value, onChange, onRun };
|
|
29762
30171
|
const accessExtensions = () => [EditorState.readOnly.of(disabled), EditorView.editable.of(!disabled)];
|
|
29763
30172
|
React.useLayoutEffect(() => {
|
|
30173
|
+
const unowned = captureUnownedStyles();
|
|
29764
30174
|
const editor = new EditorView({
|
|
29765
30175
|
parent: parent.current,
|
|
29766
30176
|
state: EditorState.create({ doc: value, extensions: [
|
|
@@ -29784,6 +30194,7 @@
|
|
|
29784
30194
|
})
|
|
29785
30195
|
] })
|
|
29786
30196
|
});
|
|
30197
|
+
adoptUnownedStyles(unowned);
|
|
29787
30198
|
view.current = editor;
|
|
29788
30199
|
return () => {
|
|
29789
30200
|
view.current = null;
|
|
@@ -30184,6 +30595,9 @@
|
|
|
30184
30595
|
"bindings.openHint": "PTC Plus \xB7 \u5168\u5C40\u7ED1\u5B9A\u4E0E\u8BBE\u7F6E",
|
|
30185
30596
|
"bindings.draftHint": "PTC Plus \u63D2\u4EF6 \xB7 \u7ED1\u5B9A\u8349\u7A3F\u5F85\u5904\u7406\uFF0C\u70B9\u51FB\u67E5\u770B",
|
|
30186
30597
|
"bindings.quickHeading": "\u5168\u5C40\u7528\u6237\u7ED1\u5B9A \xB7 \u5BF9\u6240\u6709\u4F1A\u8BDD\u751F\u6548",
|
|
30598
|
+
"bindings.quickEnabled": "\u5DF2\u542F\u7528\uFF08{count}\uFF09",
|
|
30599
|
+
"bindings.quickDisabled": "\u505C\u7528\uFF08{count}\uFF09",
|
|
30600
|
+
"bindings.quickNoEnabled": "\u6682\u65E0\u542F\u7528\u7ED1\u5B9A",
|
|
30187
30601
|
"bindings.quickDrafts": "\u5F85\u5904\u7406\u8349\u7A3F",
|
|
30188
30602
|
"bindings.quickLoading": "\u6B63\u5728\u8BFB\u53D6\u7ED1\u5B9A\u2026",
|
|
30189
30603
|
"bindings.quickSaving": "\u6B63\u5728\u4FDD\u5B58\u2026",
|
|
@@ -30196,6 +30610,8 @@
|
|
|
30196
30610
|
"bindings.reviewExpand": "\u5C55\u5F00\u7ED1\u5B9A\u8349\u7A3F",
|
|
30197
30611
|
"bindings.reviewCollapse": "\u6298\u53E0\u7ED1\u5B9A\u8349\u7A3F",
|
|
30198
30612
|
"bindings.reviewClose": "\u5173\u95ED\u7ED1\u5B9A\u8349\u7A3F\u9762\u677F",
|
|
30613
|
+
"bindings.reviewEnlarge": "\u653E\u5927\u67E5\u770B\u7ED1\u5B9A\u8349\u7A3F",
|
|
30614
|
+
"bindings.reviewRestore": "\u7F29\u5C0F\u663E\u793A\u7ED1\u5B9A\u8349\u7A3F",
|
|
30199
30615
|
"bindings.reviewOpen": "\u6253\u5F00\u8349\u7A3F",
|
|
30200
30616
|
"bindings.reviewMenuLabel": "\u7ED1\u5B9A\u8349\u7A3F\uFF08{count}\uFF09",
|
|
30201
30617
|
"bindings.reviewLoading": "\u6B63\u5728\u786E\u8BA4\u8349\u7A3F\u64CD\u4F5C\u8D44\u683C\u2026",
|
|
@@ -30355,6 +30771,9 @@
|
|
|
30355
30771
|
"bindings.openHint": "PTC Plus \xB7 Global bindings and settings",
|
|
30356
30772
|
"bindings.draftHint": "PTC Plus plugin \xB7 Binding draft pending; click to review",
|
|
30357
30773
|
"bindings.quickHeading": "Global bindings \xB7 Applies to all sessions",
|
|
30774
|
+
"bindings.quickEnabled": "Enabled ({count})",
|
|
30775
|
+
"bindings.quickDisabled": "Disabled ({count})",
|
|
30776
|
+
"bindings.quickNoEnabled": "No enabled bindings",
|
|
30358
30777
|
"bindings.quickDrafts": "Pending drafts",
|
|
30359
30778
|
"bindings.quickLoading": "Loading bindings\u2026",
|
|
30360
30779
|
"bindings.quickSaving": "Saving\u2026",
|
|
@@ -30367,6 +30786,8 @@
|
|
|
30367
30786
|
"bindings.reviewExpand": "Expand binding draft",
|
|
30368
30787
|
"bindings.reviewCollapse": "Collapse binding draft",
|
|
30369
30788
|
"bindings.reviewClose": "Close binding draft panel",
|
|
30789
|
+
"bindings.reviewEnlarge": "Enlarge binding draft",
|
|
30790
|
+
"bindings.reviewRestore": "Shrink binding draft",
|
|
30370
30791
|
"bindings.reviewOpen": "Open draft",
|
|
30371
30792
|
"bindings.reviewMenuLabel": "Binding drafts ({count})",
|
|
30372
30793
|
"bindings.reviewLoading": "Confirming draft actions\u2026",
|
|
@@ -30443,120 +30864,6 @@
|
|
|
30443
30864
|
})])
|
|
30444
30865
|
));
|
|
30445
30866
|
|
|
30446
|
-
// src/client-styles.js
|
|
30447
|
-
var CLIENT_STYLE_ID = "ptc-plus-client-style";
|
|
30448
|
-
var CLIENT_CSS = `
|
|
30449
|
-
.ptcPlusBindingDockAnchor{position:relative;flex:none;block-size:0;min-width:0;width:min(calc(100% - 32px),44rem);margin-inline:auto}
|
|
30450
|
-
.ptcPlusBindingDock{position:absolute;inset-inline:0;bottom:var(--ptc-plus-review-offset,8px);box-sizing:border-box;min-width:0;display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:14px;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-primary,#18191c);box-shadow:0 8px 32px rgba(0,0,0,.14),0 2px 6px rgba(0,0,0,.06);max-block-size:var(--ptc-plus-review-height,80dvh);overflow:auto;overscroll-behavior:contain}
|
|
30451
|
-
.ptcPlusBindingDockHead{display:flex;flex:none;align-items:center;gap:4px;min-width:0;padding:0 10px 0 0}.ptcPlusBindingDockToggle{appearance:none;display:flex;flex:1;align-items:center;gap:10px;min-width:0;min-height:54px;padding:10px 12px;border:0;background:transparent;color:inherit;text-align:start;font:inherit;cursor:pointer}.ptcPlusBindingDockToggle:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusBindingDockToggle:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:-3px}.ptcPlusBindingDockSymbol{display:grid;place-items:center;flex:none;width:30px;height:30px;border-radius:8px;background:var(--dsw-alias-bg-layer-2,#f3f4f6);color:var(--dsw-alias-label-secondary,#52565d);font:600 13px ui-monospace,monospace}.ptcPlusBindingDockHeading{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:18px}.ptcPlusBindingDockHeading strong,.ptcPlusBindingDockHeading>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingDockHeading>span{font-size:11px;color:var(--dsw-alias-label-secondary,#52565d)}.ptcPlusBindingDockChevron{display:flex;flex:none;transform:rotate(180deg);transition:transform .16s ease}.ptcPlusBindingDockToggle[aria-expanded=true] .ptcPlusBindingDockChevron{transform:rotate(0deg)}
|
|
30452
|
-
.ptcPlusBindingDockBody{flex:none;min-width:0;max-block-size:min(32dvh,20rem,var(--ptc-plus-review-space,100dvh));overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusBindingDock[data-scroll=panel] .ptcPlusBindingDockBody{max-block-size:none;overflow:visible;scrollbar-gutter:auto}.ptcPlusBindingDockBody:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary);outline-offset:-2px}.ptcPlusBindingDockBody .ptcPlusAuthoringDraft{border:0;padding:12px 14px;background:transparent;gap:10px}.ptcPlusBindingDockBody .ptcPlusBindingCommandSource,.ptcPlusBindingDockBody .ptcPlusBindingCommandCode{max-height:none;margin:0}.ptcPlusBindingDockBody pre{font-size:12px;line-height:19px}.ptcPlusBindingDockBody .ptcPlusBindingMeta{font:11px/17px ui-monospace,monospace;overflow-wrap:anywhere}.ptcPlusBindingDockActions{display:flex;flex:none;flex-wrap:wrap;align-items:center;gap:6px;padding:10px 12px;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusBindingDockActions>button{min-width:0;white-space:normal}.ptcPlusBindingDockDiscard{margin-inline-end:auto}.ptcPlusBindingDock .ptcPlusMessage{margin:0;font-size:12px;line-height:19px}.ptcPlusBindingDock>.ptcPlusMessage{padding:8px 12px}.ptcPlusComposerBindingAnchor{display:inline-flex;min-width:1px;min-height:1px}.ptcPlusComposerBindingAnchor .ptcPlusAuthorButton{position:relative}.ptcPlusDraftBadge{position:absolute;top:-2px;right:-3px;display:grid;place-items:center;box-sizing:border-box;min-width:14px;height:14px;padding-inline:3px;border:1.5px solid var(--dsw-alias-bg-base,#fff);border-radius:8px;background:var(--dsw-alias-state-business-primary,#4d6bfe);color:#fff;font:600 9px/1 system-ui,sans-serif;pointer-events:none}.ptcPlusDraftBadge[data-attention=true]{background:var(--dsw-alias-state-warning-primary,#a15c00)}.ptcPlusDraftMenuItem{display:flex;min-width:0;max-width:240px;flex-direction:column;gap:3px;white-space:normal;overflow-wrap:anywhere}.ptcPlusDraftMenuItem strong{font-size:12px;font-weight:600}.ptcPlusDraftMenuItem>span{font-size:11px;color:var(--dsw-alias-label-secondary,#52565d)}.ptcPlusComposerBindingAnchor[data-text=true] .ptcPlusAuthorButtonShell{width:auto}
|
|
30453
|
-
.ptcPlusBindingCommand .ptcPlusMessage{margin:0}.ptcPlusBindingSourceDetails{min-width:0}.ptcPlusBindingSourceDetails>summary{cursor:pointer;font-size:12px;line-height:20px}.ptcPlusBindingItem>button,.ptcPlusGlobalItem>button{align-self:center}.ptcPlusAuthoringDraft>strong{font-size:13px;line-height:20px;overflow-wrap:anywhere}.ptcPlusBindingCommand .ptcPlusBindingCommandState{max-width:100%;box-sizing:border-box;white-space:normal}.ptcPlusBindingCommand .ptcPlusAuthoringDraft{min-width:0;padding:0;border:0;border-radius:0;background:transparent}
|
|
30454
|
-
.ptcPlusCard{list-style:none;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);overflow:hidden;transition:border-color .16s ease,background-color .16s ease}
|
|
30455
|
-
.ptcPlusCard:hover{border-color:var(--dsw-alias-label-dimmed)}
|
|
30456
|
-
.ptcPlusRow>.ptcPlusSelect{width:auto;max-width:100%;flex:none}
|
|
30457
|
-
.ptcPlusCard[data-open=true]{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}
|
|
30458
|
-
.ptcPlusHeader{appearance:none;width:100%;display:flex;align-items:center;gap:12px;padding:14px 16px;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:12px}
|
|
30459
|
-
.ptcPlusHeader:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusHeader:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}
|
|
30460
|
-
.ptcPlusButton:focus-visible,.ptcPlusInput:focus-visible,.ptcPlusSelect:focus-visible,.ptcPlusTextarea:focus-visible,.ptcPlusBindingSelect:focus-visible,.ptcPlusReplBindingTrigger:focus-visible,.ptcPlusReplInspect:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}
|
|
30461
|
-
.ptcPlusHeadText{display:flex;flex:1;min-width:0;flex-direction:column;align-items:flex-start;gap:3px}.ptcPlusName{font-size:15px;font-weight:600;line-height:1.4}.ptcPlusDescription{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5;overflow-wrap:anywhere}.ptcPlusStatus{display:inline-flex;align-items:center;flex:none;padding:1px 8px;border-radius:999px;corner-shape:round;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusStatus[data-enabled=true]{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-tertiary)}.ptcPlusStatus[data-enabled=false]{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-module-platform)}
|
|
30462
|
-
.ptcPlusChevron{display:flex;color:var(--dsw-alias-label-tertiary);transition:transform .18s ease}.ptcPlusChevron[data-open=true]{transform:rotate(180deg)}.ptcPlusBody{display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s ease}.ptcPlusBody[data-open=true]{grid-template-rows:1fr}.ptcPlusBodyInner{min-height:0;overflow:hidden}.ptcPlusFields{margin:0 16px;padding:8px 0 12px;border-top:0.5px solid var(--dsw-alias-border-l2)}
|
|
30463
|
-
.ptcPlusGroup+.ptcPlusGroup{margin-top:20px;padding-top:12px;border-top:1px solid var(--dsw-alias-border-l2)}.ptcPlusGroupTitle{margin:0;padding:8px 0;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:600;letter-spacing:0;line-height:20px}.ptcPlusRow{display:flex;align-items:center;gap:12px;min-height:48px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusGroupTitle+.ptcPlusRow{border-top:0}.ptcPlusMain{flex:1;min-width:0}.ptcPlusLabel{font-size:13px;font-weight:500;line-height:1.5}.ptcPlusDetail,.ptcPlusMessage{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5;overflow-wrap:anywhere}.ptcPlusInput{box-sizing:border-box;min-width:72px;width:140px;height:34px;padding:0 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:1.5}.ptcPlusInput:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusCheck{width:18px;height:18px;accent-color:var(--dsw-alias-brand-primary)}
|
|
30464
|
-
.ptcPlusFooter{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}.ptcPlusButton{appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:32px;padding:4px 14px;border:0.5px solid var(--dsw-alias-border-l3);border-radius:8px;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;font-size:13px;line-height:1.5;transition:color .16s ease,border-color .16s ease,background-color .16s ease}.ptcPlusButton:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}.ptcPlusButton[data-kind=primary]{background:var(--dsw-alias-label-primary);border-color:transparent;color:var(--dsw-alias-bg-layer-3)}.ptcPlusButton[data-kind=primary]:hover:not(:disabled){background:var(--dsw-alias-label-primary-dimmed);border-color:transparent;color:var(--dsw-alias-bg-layer-3)}.ptcPlusButton[data-kind=ghost]{border-color:transparent}.ptcPlusButton[data-kind=ghost]:hover:not(:disabled){border-color:var(--dsw-alias-border-l3)}.ptcPlusButton[data-kind=danger]{color:var(--dsw-alias-state-error-primary)}.ptcPlusButton[data-kind=danger]:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover-danger);border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.ptcPlusButton:disabled,.ptcPlusInput:disabled,.ptcPlusCheck:disabled{cursor:not-allowed;opacity:.4}
|
|
30465
|
-
.ptcPlusSettingAction{padding:4px 0 12px}
|
|
30466
|
-
.ptcPlusSettingsModal.ptcPlusSettingsModal{width:min(760px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 40px);border-radius:8px}.ptcPlusSettingsDialogContent{min-height:0;overflow:auto;overscroll-behavior:contain}.ptcPlusSettingsDialog{min-width:0}.ptcPlusSettingsDialog .ptcPlusFields{margin:0;padding:0 0 12px;border-top:0}
|
|
30467
|
-
.ptcPlusDanger{color:var(--dsw-alias-state-error-primary)}
|
|
30468
|
-
.ptcPlusActiveShell{display:inline-flex;align-items:center}.ptcPlusActive{appearance:none;display:inline-flex;height:24px;align-items:center;gap:5px;padding:0 8px;border:1px solid color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 32%,transparent);border-radius:6px;background:var(--dsw-alias-state-success-tertiary,#e7f7ef);color:var(--dsw-alias-state-success-primary,#16794f);cursor:help;font-family:inherit;font-size:12px;font-weight:600;line-height:18px;white-space:nowrap;transition:background-color .14s ease,border-color .14s ease}.ptcPlusActive:hover,.ptcPlusActive[aria-expanded=true]{border-color:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 48%,transparent);background:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 16%,var(--dsw-alias-bg-layer-3,#fff))}.ptcPlusActive:focus-visible{outline:2px solid var(--dsw-alias-state-success-primary,#16794f);outline-offset:2px}.ptcPlusReplPopover{position:fixed;z-index:2147483000;inset:auto;display:none;box-sizing:border-box;margin:0;padding:0;border:0;overflow:visible;background:transparent;color:var(--dsw-alias-label-primary,#18191c)}.ptcPlusReplPopover:popover-open,.ptcPlusReplPopover[data-open=true]{display:block}.ptcPlusReplPopover::backdrop{background:transparent}.ptcPlusReplCard{display:flex;max-height:inherit;overflow:hidden;flex-direction:column;border:1px solid color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 22%,var(--dsw-alias-border-l2,rgba(0,0,0,.1)));border-top:3px solid var(--dsw-alias-state-success-primary,#16794f);border-radius:8px;background:var(--dsw-alias-bg-layer-3,#fff);box-shadow:0 14px 36px rgba(16,24,40,.2),0 3px 10px rgba(16,24,40,.1);color:var(--dsw-alias-label-primary,#18191c);white-space:normal}.ptcPlusReplHead{display:grid;flex:none;grid-template-columns:auto minmax(0,1fr);align-items:center;column-gap:8px;padding:11px 13px 10px;border-bottom:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 7%,var(--dsw-alias-bg-layer-3,#fff))}.ptcPlusReplStatusDot{grid-row:1/3;width:8px;height:8px;border-radius:50%;background:var(--dsw-alias-state-success-primary,#16794f);box-shadow:0 0 0 3px color-mix(in srgb,var(--dsw-alias-state-success-primary,#16794f) 14%,transparent)}.ptcPlusReplTitle,.ptcPlusReplSummary{display:block;min-width:0}.ptcPlusReplTitle{font-size:13px;font-weight:600;line-height:19px}.ptcPlusReplSummary{min-height:16px;overflow-wrap:anywhere;color:var(--dsw-alias-label-tertiary,#74777d);font-size:11px;line-height:16px}.ptcPlusReplList{min-height:0;margin:0;padding:5px 0;overflow:auto;overscroll-behavior:contain;list-style:none;scrollbar-gutter:stable}.ptcPlusReplBinding{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:4px 10px;padding:7px 12px}.ptcPlusReplBinding:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusReplIdentity{display:flex;min-width:0;align-items:center;gap:7px}.ptcPlusReplName{min-width:0;overflow:hidden;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusReplKind{flex:none;padding:1px 6px;border:1px solid color-mix(in srgb,currentColor 22%,transparent);border-radius:999px;background:color-mix(in srgb,currentColor 10%,transparent);font-size:10px;font-weight:600;line-height:15px}.ptcPlusReplKind[data-kind=variable]{color:var(--dsw-alias-interactive-primary,#315fbd)}.ptcPlusReplKind[data-kind=function]{color:#7651b5}.ptcPlusReplKind[data-kind=class]{color:var(--dsw-alias-state-warning-primary,#946200)}.ptcPlusReplKind[data-kind=import]{color:#14766f}.ptcPlusReplPreview{grid-column:1;min-width:0;overflow:hidden;color:var(--dsw-alias-label-tertiary,#74777d);font:11px/16px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusReplInspect{grid-column:2;grid-row:1/3;display:inline-flex;align-items:center;gap:4px;padding:3px 5px;border:0;border-radius:4px;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;font:500 11px/17px inherit;white-space:nowrap}.ptcPlusReplInspect:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));color:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusReplInspect:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:1px}.ptcPlusReplDefinition{grid-column:1/-1;min-width:0;margin-top:4px;padding:8px;border-left:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03))}.ptcPlusReplLocation{display:block;margin-bottom:5px;color:var(--dsw-alias-label-tertiary,#74777d);font-size:10px;line-height:15px}.ptcPlusReplCode{max-height:180px;margin:0;overflow:auto;color:inherit;font:11px/16px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusReplEmpty,.ptcPlusReplMore{display:block;color:var(--dsw-alias-label-tertiary,#74777d)}.ptcPlusReplEmpty{padding:18px 13px;font-size:12px;line-height:18px}.ptcPlusReplMore{padding:8px 13px;border-top:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03));font-size:11px;line-height:17px}
|
|
30469
|
-
.ptcPlusReplTabs{display:flex;flex:none;padding:6px 8px 0;border-bottom:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1))}.ptcPlusReplTab{flex:1;padding:5px 6px;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;font-family:inherit;font-size:11px;font-weight:600;line-height:17px}.ptcPlusReplTab[aria-selected=true]{border-bottom-color:var(--dsw-alias-interactive-primary,#4d6bfe);color:var(--dsw-alias-label-primary,#18191c)}.ptcPlusGlobalPane{display:flex;min-height:0;flex-direction:column;gap:8px;padding:8px 12px}.ptcPlusGlobalList{min-height:0;margin:0 -12px -8px;padding:5px 0;overflow:auto;list-style:none}.ptcPlusGlobalItem{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:6px 10px;padding:7px 12px;border-radius:8px}.ptcPlusGlobalItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusGlobalItem .ptcPlusGlobalSource,.ptcPlusGlobalItem .ptcPlusReplEmpty{grid-column:1/-1}.ptcPlusAuthoringDraft{display:flex;flex-direction:column;gap:6px;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:12px;background:var(--dsw-alias-bg-layer-3)}.ptcPlusGlobalSource{max-height:180px;margin:6px 0 0;padding:8px 10px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30470
|
-
.ptcPlusReplList{max-height:min(52vh,480px)}.ptcPlusReplBinding{grid-template-columns:minmax(0,1fr) 24px;gap:3px 8px;min-height:36px;padding:5px 12px;content-visibility:auto;contain-intrinsic-size:36px;cursor:pointer;transition:background-color .16s ease}.ptcPlusReplBinding:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:-2px}.ptcPlusReplBinding[data-expanded=true]{background:color-mix(in srgb,var(--dsw-alias-interactive-primary,#4d6bfe) 5%,transparent)}.ptcPlusReplName{grid-column:1}.ptcPlusReplName[data-kind=variable]{color:var(--dsw-alias-interactive-primary,#315fbd)}.ptcPlusReplName[data-kind=function]{color:#7651b5}.ptcPlusReplName[data-kind=class]{color:var(--dsw-alias-state-warning-primary,#946200)}.ptcPlusReplName[data-kind=import]{color:#14766f}.ptcPlusReplPreview{grid-column:1}.ptcPlusReplChevron{grid-column:2;grid-row:1/3;display:flex;align-items:center;justify-content:center;color:var(--dsw-alias-label-tertiary,#74777d);transition:transform .2s ease}.ptcPlusReplChevron[data-open=true]{transform:rotate(180deg)}.ptcPlusReplDefinitionWrap{grid-column:1/-1;display:grid;grid-template-rows:0fr;min-width:0;transition:grid-template-rows .24s cubic-bezier(.2,.7,.2,1)}.ptcPlusReplDefinitionWrap[data-open=true]{grid-template-rows:1fr}.ptcPlusReplDefinitionInner{min-height:0;overflow:hidden}
|
|
30471
|
-
.ptcPlusTool{display:flex;min-width:0;flex-direction:column}.ptcPlusToolPreview{display:flex;min-width:0;flex:1 1 auto;flex-direction:row;align-items:center;overflow:hidden;margin-left:7px}.ptcPlusToolPreview .ptcPlusFeatures{flex:0 1 auto;flex-wrap:nowrap;overflow:hidden;margin:0 0 0 7px}.ptcPlusToolSummaryLine{box-sizing:border-box;display:flex;min-width:0;min-height:20px;flex:1 1 auto;align-items:center;gap:7px;padding:0;color:inherit;line-height:20px}.ptcPlusToolSummary{box-sizing:border-box;display:flex;min-width:0;min-height:32px;align-items:center;gap:7px;padding:0;color:inherit;line-height:20px}.ptcPlusToolSummary[data-expandable=true]{cursor:pointer}.ptcPlusToolSummary[data-expandable=true]:hover .ptcPlusToolTitle{color:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusToolSummary:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:2px}.ptcPlusToolLeading{display:flex;width:16px;height:20px;flex:none;align-items:center;justify-content:center;color:var(--dsw-alias-label-tertiary,#74777d)}.ptcPlusToolChevron{transition:transform .16s ease}.ptcPlusToolChevron[data-open=true]{transform:rotate(180deg)}.ptcPlusToolTitle{display:flex;height:20px;flex:none;align-items:center;font-size:13px;font-weight:500;line-height:20px}.ptcPlusToolState{display:flex;height:20px;flex:none;align-items:center;color:var(--dsw-alias-label-tertiary,#74777d);font-size:11px;line-height:20px}.ptcPlusToolSummaryLine[data-state=running] .ptcPlusToolState,.ptcPlusToolSummary[data-state=running] .ptcPlusToolState{color:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusToolSummaryLine[data-state=error] .ptcPlusToolState,.ptcPlusToolSummary[data-state=error] .ptcPlusToolState{color:var(--dsw-alias-state-danger-primary,#c43d3d)}.ptcPlusToolSummaryLine[data-state=stopped] .ptcPlusToolState,.ptcPlusToolSummary[data-state=stopped] .ptcPlusToolState{color:var(--dsw-alias-state-warning-primary,#a15c00)}.ptcPlusToolSep{width:3px;height:3px;flex:none;border-radius:50%;background:var(--dsw-alias-label-tertiary,#74777d)}.ptcPlusToolDescription{display:flex;min-width:0;min-height:20px;flex:1 1 auto;align-items:center;overflow:hidden;color:var(--dsw-alias-label-secondary,#52565d);font-size:13px;line-height:20px;text-overflow:ellipsis;white-space:nowrap}.ptcPlusToolPreview .ptcPlusFeature{flex:none;max-width:180px;white-space:nowrap}.ptcPlusToolPreview .ptcPlusFeatureDetail{max-width:120px}.ptcPlusToolSummaryLine[data-state=error] .ptcPlusToolDescription,.ptcPlusToolSummary[data-state=error] .ptcPlusToolDescription{color:var(--dsw-alias-state-danger-primary,#c43d3d)}.ptcPlusToolSummaryLine[data-state=stopped] .ptcPlusToolDescription,.ptcPlusToolSummary[data-state=stopped] .ptcPlusToolDescription{color:var(--dsw-alias-state-warning-primary,#a15c00)}
|
|
30472
|
-
.ptcPlusFeatures{display:flex;min-width:0;flex-wrap:wrap;gap:3px 14px;margin:0 0 5px 23px}.ptcPlusFeature{display:inline-flex;min-width:0;align-items:center;gap:5px;color:var(--dsw-alias-label-secondary,#52565d);font-size:11px;line-height:17px}.ptcPlusFeature::before{width:4px;height:4px;flex:none;border-radius:50%;background:var(--dsw-alias-interactive-primary,#4d6bfe);content:''}.ptcPlusFeatureName{font-weight:500}.ptcPlusFeatureDetail{min-width:0;overflow:hidden;color:var(--dsw-alias-label-tertiary,#74777d);font-family:ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}
|
|
30473
|
-
.ptcPlusToolBody{margin:4px 0 8px 23px;border-left:2px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.03))}.ptcPlusToolSection{display:flex;min-width:0;flex-direction:column;gap:4px;padding:9px 11px}.ptcPlusToolSection+.ptcPlusToolSection{border-top:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1))}.ptcPlusToolSectionLabel{color:var(--dsw-alias-label-tertiary,#74777d);font-size:10px;font-weight:600;line-height:16px;text-transform:uppercase}.ptcPlusToolCode{max-height:320px;margin:0;overflow:auto;color:inherit;font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusIoCard{display:flex;flex-direction:column;border:1px solid var(--dsw-alias-border-l1,rgba(0,0,0,.1));border-radius:12px;background:var(--dsw-alias-markdown-code-block,rgba(38,49,72,.06));overflow:hidden}.ptcPlusIoText{max-height:320px;margin:0;padding:12px 16px;overflow:auto;color:var(--dsw-alias-label-secondary,#52565d);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusIoText[data-error]{color:var(--dsw-alias-state-error-primary,#c43d3d)}.ptcPlusInspect{display:inline-flex;align-self:flex-start;align-items:center;gap:4px;margin:4px 0 2px 4px;padding:2px 8px;border:1px solid var(--dsw-alias-border-l2,rgba(0,0,0,.1));border-radius:999px;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer;opacity:0;font-size:11px;line-height:16px;transition:opacity .1s ease;display:inline-flex}.ptcPlusTool:hover .ptcPlusInspect,.ptcPlusInspect:focus-visible{opacity:1}.ptcPlusInspect:hover{background:var(--dsw-alias-interactive-bg-hover-solid,rgba(38,49,72,.06));color:var(--dsw-alias-label-primary,#18191c)}
|
|
30474
|
-
.ptcPlusAuthorButtonShell{display:inline-flex;width:28px;height:28px;flex:none;align-items:center;justify-content:center}.ptcPlusAuthorButton{appearance:none;display:inline-flex;box-sizing:border-box;width:28px;height:28px;align-items:center;justify-content:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary,#52565d);cursor:pointer}.ptcPlusAuthorButton:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06));color:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusAuthorButton:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:1px}.ptcPlusAuthorButtonShell[data-text=true]{width:auto}.ptcPlusAuthorButtonLabel{padding:0 4px;font-size:12px;line-height:18px;font-weight:500}.ptcPlusComposerNotice{max-width:160px;color:var(--dsw-alias-label-secondary,#52565d);font-size:11px;line-height:17px;overflow-wrap:anywhere}.ptcPlusButton>svg{flex:none;margin-right:5px;vertical-align:-2px}
|
|
30475
|
-
@media(max-width:760px){.ptcPlusBindingsGrid{grid-template-columns:1fr}.ptcPlusBindingFields{grid-template-columns:1fr}.ptcPlusBindingField[data-wide=true]{grid-column:auto}.ptcPlusBindingSourceGrid{grid-template-columns:1fr}.ptcPlusBindingDebugBody{grid-template-columns:1fr}.ptcPlusBindingDebugBody .ptcPlusButton{width:100%}.ptcPlusBindingDebugWarning{grid-column:1}}
|
|
30476
|
-
@media(max-width:560px){.ptcPlusHeader{padding:12px}.ptcPlusFields{margin:0 12px}.ptcPlusSettingsModal.ptcPlusSettingsModal{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.ptcPlusSettingsDialog .ptcPlusFields{margin:0}.ptcPlusRow{align-items:flex-start;flex-direction:column;gap:6px;padding:10px 0}.ptcPlusInput{width:100%}.ptcPlusFooter,.ptcPlusBindingsHead{align-items:stretch;flex-direction:column}.ptcPlusButton{width:100%}.ptcPlusFeatures,.ptcPlusToolBody{margin-left:0}.ptcPlusToolSummary .ptcPlusToolDescription{white-space:normal;overflow-wrap:anywhere}}
|
|
30477
|
-
@media(prefers-reduced-motion:reduce){.ptcPlusHeader,.ptcPlusChevron,.ptcPlusBody,.ptcPlusButton,.ptcPlusActive,.ptcPlusToolChevron,.ptcPlusReplChevron,.ptcPlusReplDefinitionWrap,.ptcPlusInspect,.ptcPlusBindingDockChevron{transition:none}}
|
|
30478
|
-
/* The summary button owns disclosure; definition content is a separate grid item. */
|
|
30479
|
-
.ptcPlusReplBinding{padding:0;cursor:default}.ptcPlusReplBindingTrigger{appearance:none;display:grid;width:100%;grid-column:1/-1;grid-template-columns:minmax(0,1fr) 24px;gap:3px 8px;min-height:36px;padding:5px 12px;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;font:inherit;transition:background-color .16s ease}.ptcPlusReplBindingTrigger:hover,.ptcPlusReplBindingTrigger[aria-expanded=true]{background:color-mix(in srgb,var(--dsw-alias-interactive-primary,#4d6bfe) 5%,transparent)}.ptcPlusReplBindingTrigger:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:-2px}
|
|
30480
|
-
/* High-contrast TypeScript-like token colors adapt to the active text theme. */
|
|
30481
|
-
.ptcPlusReplCard .ptcPlusReplName[data-kind=variable]{color:color-mix(in srgb,#005cc5 78%,var(--dsw-alias-label-primary,#18191c))}
|
|
30482
|
-
.ptcPlusReplCard .ptcPlusReplName[data-kind=function]{color:color-mix(in srgb,#795e26 78%,var(--dsw-alias-label-primary,#18191c))}
|
|
30483
|
-
.ptcPlusReplCard .ptcPlusReplName[data-kind=class]{color:color-mix(in srgb,#267f99 78%,var(--dsw-alias-label-primary,#18191c))}
|
|
30484
|
-
.ptcPlusReplCard .ptcPlusReplName[data-kind=import]{color:color-mix(in srgb,#af00db 78%,var(--dsw-alias-label-primary,#18191c))}
|
|
30485
|
-
/* Keep the session-header action on the same compact 32px rhythm as DSH chrome. */
|
|
30486
|
-
.ptcPlusActiveShell{display:inline-flex;height:28px;align-items:center;justify-content:center;line-height:0;vertical-align:middle}.ptcPlusActive{box-sizing:border-box;height:28px;justify-content:center;gap:6px;padding:0 6px;border:0;background:transparent;font-family:inherit;font-size:13px;font-weight:500;line-height:18px}.ptcPlusActive::before{width:6px;height:6px;flex:none;border-radius:50%;background:currentColor;box-shadow:0 0 0 2px color-mix(in srgb,currentColor 18%,transparent);content:''}.ptcPlusActive:hover,.ptcPlusActive[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusActiveLabel{display:inline-flex;height:18px;align-items:center;line-height:18px}
|
|
30487
|
-
@media(max-width:560px){.ptcPlusActiveShell{display:none}}
|
|
30488
|
-
/* The compatibility probe never paints: it exists so the entry can read whether
|
|
30489
|
-
the installed Menu mounted the region it was given. */
|
|
30490
|
-
.ptcPlusMenuProbe{display:none}
|
|
30491
|
-
/* The pinned carrier is a Client-owned label cell: the host already draws the
|
|
30492
|
-
hairline above it, and the cell's own type must not leak into the grid. The
|
|
30493
|
-
compound selector is load-bearing: the base .ptcPlusMenuActions rule is
|
|
30494
|
-
declared later in this sheet, so an equal-specificity override loses and the
|
|
30495
|
-
grid would draw a second hairline under the host's. */
|
|
30496
|
-
.ptcPlusMenuActions.ptcPlusMenuActionsPinned{margin-top:0;border-top:0;font-size:13px;line-height:18px;color:var(--dsw-alias-label-primary)}
|
|
30497
|
-
[role=menu]:has(.ptcPlusBindingMenuAction,.ptcPlusDraftMenuItem){width:min(320px,calc(100vw - 24px));min-width:0;max-height:min(440px,60dvh,var(--ptc-plus-menu-space,100dvh));border-radius:12px}.ptcPlusBindingQuickRow{display:flex;min-width:0;flex-direction:column;gap:3px;white-space:normal}.ptcPlusBindingQuickName{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:13px}.ptcPlusBindingQuickName strong{min-width:0;overflow:hidden;text-overflow:ellipsis;font-weight:500;white-space:nowrap}.ptcPlusBindingQuickState{flex:none;min-width:5em;text-align:end;font-size:11px;color:var(--dsw-alias-label-tertiary)}.ptcPlusBindingQuickRow[data-enabled=true] .ptcPlusBindingQuickState{color:var(--dsw-alias-state-success-primary)}.ptcPlusBindingQuickPurpose{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary);font-size:12px}.ptcPlusBindingMenuAction{font-size:13px}
|
|
30498
|
-
.ptcPlusMenuActions{margin-top:6px;border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusMenuAuthoring{padding:8px 4px}.ptcPlusMenuGroupLabel{padding:0 4px 6px;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.ptcPlusMenuActionGrid,.ptcPlusMenuUtilities{display:flex;gap:6px;min-width:0}.ptcPlusMenuUtilities{padding:6px 4px}.ptcPlusMenuAuthoring+.ptcPlusMenuUtilities{border-top:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1))}.ptcPlusMenuButton{appearance:none;display:flex;flex:1;align-items:center;justify-content:center;min-width:0;min-height:34px;padding:6px 8px;border:1px solid var(--dsw-alias-border-l3,rgba(0,0,0,.1));border-radius:7px;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;text-align:center;cursor:pointer}.ptcPlusMenuButton:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(38,49,72,.06))}.ptcPlusMenuButton:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:-2px}.ptcPlusMenuButton .ptcPlusBindingMenuAction{white-space:normal;overflow-wrap:anywhere;line-height:18px}.ptcPlusMenuUtilities .ptcPlusMenuButton{border-color:transparent;color:var(--dsw-alias-label-secondary)}.ptcPlusMenuUtilities .ptcPlusBindingMenuAction{font-size:12px}
|
|
30499
|
-
|
|
30500
|
-
`;
|
|
30501
|
-
var BINDING_WORKBENCH_CSS = `
|
|
30502
|
-
.ptcPlusCandidateContext{min-width:0;margin-top:4px;padding:12px;border:1px solid var(--dsw-alias-border-l2);border-radius:8px;background:var(--dsw-alias-bg-module-platform)}.ptcPlusCandidateContext h4{margin:0 0 10px;color:var(--dsw-alias-label-primary);font-size:12px;font-weight:600;line-height:18px}.ptcPlusCandidateContext dl{display:grid;gap:12px;margin:0}.ptcPlusCandidateContext dt{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:20px}.ptcPlusCandidateContext dd{min-width:0;margin:0}.ptcPlusCandidateDeclaration{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px 12px}.ptcPlusCandidateDeclaration dd{display:inline-flex;align-items:center;gap:4px;max-width:100%;box-sizing:border-box;padding:2px 8px;border-radius:6px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font-size:11px;line-height:18px;overflow-wrap:anywhere}.ptcPlusCandidateDeclaration dd[data-included=true]{background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-state-business-primary)}.ptcPlusCandidateDeclaration svg{flex:none}.ptcPlusCandidatePrompt{display:grid;gap:6px}.ptcPlusCandidatePrompt dd{padding:8px 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font-size:12px;line-height:20px;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusCandidatePrompt dd[data-empty=true]{padding:0;border:0;background:transparent;color:var(--dsw-alias-label-tertiary)}
|
|
30503
|
-
.ptcPlusBindings{margin-top:16px;padding-top:14px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingsHead{display:flex;align-items:center;justify-content:space-between;gap:12px}.ptcPlusBindingsTitle{margin:0;font-size:15px;font-weight:600;line-height:1.4}.ptcPlusBindingsActions{display:flex;flex-wrap:wrap;gap:8px}.ptcPlusBindingsGrid{display:grid;grid-template-columns:minmax(240px,.7fr) minmax(340px,1.3fr);gap:12px;margin-top:12px;align-items:start}.ptcPlusBindingPane{display:flex;min-width:0;flex-direction:column;gap:8px}
|
|
30504
|
-
.ptcPlusBindingList{display:flex;min-width:0;margin:0;padding:8px;flex-direction:column;gap:2px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);list-style:none}.ptcPlusBindingItem{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;padding:6px 8px;border-radius:8px;transition:background-color .12s ease}.ptcPlusBindingItem:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusBindingItem[data-selected=true]{background:var(--dsw-alias-bg-module-platform)}.ptcPlusBindingSelect{display:flex;min-width:0;padding:0;border:0;background:transparent;color:inherit;text-align:left;cursor:pointer;flex-direction:column;align-items:flex-start;gap:1px}.ptcPlusBindingSelect:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.ptcPlusBindingName{display:block;min-width:0;max-width:100%;overflow:hidden;font:500 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingMeta{display:block;min-width:0;max-width:100%;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px;text-overflow:ellipsis;white-space:nowrap}.ptcPlusBindingState{display:inline-flex;align-items:center;gap:5px;padding:1px 8px;border-radius:999px;corner-shape:round;font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusBindingState[data-enabled=true]{color:var(--dsw-alias-state-success-primary);background:var(--dsw-alias-state-success-tertiary)}.ptcPlusBindingState[data-enabled=false]{color:var(--dsw-alias-state-warn-primary);background:var(--dsw-alias-state-warn-tertiary)}.ptcPlusBindingStateDot{width:6px;height:6px;border-radius:50%;background:currentColor}.ptcPlusBindingToggle{grid-column:2;grid-row:1/3;align-self:center;justify-self:end;min-height:26px;padding:2px 10px;font-size:12px;line-height:17px;border-radius:999px;corner-shape:round}.ptcPlusBindingRun{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding-top:10px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingRun .ptcPlusInput{flex:1;min-width:160px;width:auto}
|
|
30505
|
-
.ptcPlusBindingEditor{display:flex;min-width:0;flex-direction:column;border:0.5px solid var(--dsw-alias-border-l4);border-radius:16px;background:var(--dsw-alias-bg-layer-3);overflow:hidden}.ptcPlusBindingSection{display:flex;min-width:0;flex-direction:column;gap:12px;padding:14px 16px}.ptcPlusBindingSection+.ptcPlusBindingSection{border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingSectionTitle{margin:0;font-size:13px;font-weight:600;line-height:1.5}.ptcPlusBindingFields{display:grid;min-width:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px}.ptcPlusBindingField{display:flex;min-width:0;flex-direction:column;gap:5px}.ptcPlusBindingField[data-wide=true]{grid-column:1/-1}.ptcPlusBindingFieldLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.ptcPlusBindingEditor .ptcPlusInput,.ptcPlusSelect{box-sizing:border-box;width:100%;min-width:0;height:34px;padding:0 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:1.5}.ptcPlusBindingEditor .ptcPlusInput:focus-visible,.ptcPlusSelect:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusTextarea{box-sizing:border-box;width:100%;min-height:220px;resize:vertical;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;tab-size:2}.ptcPlusTextarea:focus-visible{border-color:var(--dsw-alias-brand-primary);outline:none}.ptcPlusDeclaration{box-sizing:border-box;max-height:220px;margin:0;padding:12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:12px;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingSourceGrid{display:grid;min-width:0;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}.ptcPlusBindingSourceEditor,.ptcPlusBindingSourcePreview{display:flex;min-width:0;flex-direction:column;gap:6px}.ptcPlusBindingSourcePreview .ptcPlusCodeBlock{max-height:220px;overflow:auto}
|
|
30506
|
-
.ptcPlusBindingLifecycle{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.ptcPlusBindingDebug{display:flex;min-width:0;flex-direction:column;gap:10px;padding:12px 16px;border-top:0.5px solid var(--dsw-alias-border-l2)}.ptcPlusBindingDebugSummary{display:flex;align-items:center;gap:6px;margin:0;cursor:pointer;color:var(--dsw-alias-label-secondary);font-size:13px;font-weight:500;line-height:1.5;list-style:none}.ptcPlusBindingDebugSummary::-webkit-details-marker{display:none}.ptcPlusBindingDebugSummary::after{content:'';width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform .16s ease}.ptcPlusBindingDebug[open] .ptcPlusBindingDebugSummary::after{transform:rotate(-135deg)}.ptcPlusBindingDebugBody{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr) auto;align-items:end;gap:10px}.ptcPlusBindingDebugBody .ptcPlusBindingField{min-width:0}.ptcPlusBindingDebugBody .ptcPlusButton{align-self:end}.ptcPlusBindingDebugWarning{grid-column:1/-1;color:var(--dsw-alias-state-warn-label);font-size:12px;line-height:1.5}.ptcPlusBindingOutput{grid-column:1/-1;margin:0;padding:10px 12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;color:var(--dsw-alias-label-secondary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30507
|
-
.ptcPlusBindingCommand{display:flex;min-width:0;flex-direction:column;gap:6px;margin:6px 0 10px;padding:10px 12px;border:0.5px solid var(--dsw-alias-border-l4);border-radius:8px;background:var(--dsw-alias-bg-layer-3)}.ptcPlusBindingCommandHeader{display:flex;min-width:0;flex-wrap:wrap;align-items:center;gap:8px}.ptcPlusBindingCommandTitle{margin:0;font-size:13px;font-weight:600;line-height:1.5}.ptcPlusBindingCommandState{display:inline-flex;align-items:center;gap:5px;padding:1px 8px;border-radius:999px;corner-shape:round;background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:500;line-height:17px;white-space:nowrap}.ptcPlusBindingCommand[data-phase=pending] .ptcPlusBindingCommandState{background:var(--dsw-alias-state-business-tertiary);color:var(--dsw-alias-state-business-primary)}.ptcPlusBindingCommand[data-phase=ready] .ptcPlusBindingCommandState{background:var(--dsw-alias-state-success-tertiary);color:var(--dsw-alias-state-success-primary)}.ptcPlusBindingCommand[data-phase=failed] .ptcPlusBindingCommandState{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.ptcPlusBindingCommandStateDot{width:6px;height:6px;border-radius:50%;background:currentColor}.ptcPlusBindingCommandRequirement{margin:0;overflow:auto;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingCommandSource{max-height:280px;margin:0;padding:10px 12px;overflow:auto;background:var(--dsw-alias-markdown-code-block);border-radius:8px;color:var(--dsw-alias-label-primary);font:12px/18px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusBindingCommandCode{max-height:300px;overflow:auto}.ptcPlusBindingCommandActions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}
|
|
30508
|
-
|
|
30509
|
-
`;
|
|
30510
|
-
var REPL_CONSOLE_CSS = `
|
|
30511
|
-
.ptcPlusBindingsSurface .ptcPlusBindingSection.ptcPlusModelPrompt{padding:12px 0}.ptcPlusModelPrompt .ptcPlusBindingSectionTitle{margin:0 0 10px}.ptcPlusModelPrompt textarea.ptcPlusInput{height:auto;min-height:80px;padding:8px 12px;resize:vertical}.ptcPlusModelPrompt .ptcPlusPromptToggle{flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer}.ptcPlusModelPrompt .ptcPlusCheck{flex:none}.ptcPlusEditorHead .ptcPlusBindingLifecycle{min-width:0}.ptcPlusEditorHead .ptcPlusButton{width:auto}
|
|
30512
|
-
.ptcPlusConsole{box-sizing:border-box;flex:1;min-width:0;min-height:0;width:100%;height:100%;overflow:auto;padding:20px 24px;color:var(--dsw-alias-label-primary);container-type:inline-size}
|
|
30513
|
-
.ptcPlusConsoleSection{min-width:0}.ptcPlusConsoleSection+.ptcPlusConsoleSection{margin-top:22px;padding-top:20px;border-top:1px solid var(--dsw-alias-border-l2)}
|
|
30514
|
-
.ptcPlusObservationHead,.ptcPlusObservationTitle{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}.ptcPlusObservationHead{justify-content:space-between;margin-bottom:14px}
|
|
30515
|
-
.ptcPlusObservationTitle h2{margin:0;font-size:15px;font-weight:600;line-height:22px}.ptcPlusObservationCount{font-size:13px;color:var(--dsw-alias-label-tertiary)}.ptcPlusObservationTime{font-size:11px;line-height:18px;color:var(--dsw-alias-label-tertiary)}
|
|
30516
|
-
.ptcPlusObservationGrid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.ptcPlusObservationCatalog{min-width:0}
|
|
30517
|
-
.ptcPlusObservationFilters{display:flex;gap:10px;align-items:center;margin-bottom:8px}.ptcPlusObservationFilters>.ptcPlusSelect{width:120px;height:32px;flex:none;font-size:12px}
|
|
30518
|
-
.ptcPlusSearch{display:flex;align-items:center;gap:8px;box-sizing:border-box;min-width:0;flex:1;height:32px;padding:0 10px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-tertiary)}
|
|
30519
|
-
.ptcPlusSearch>svg{flex:none}.ptcPlusSearch input{min-width:0;width:100%;height:100%;padding:0;border:0;outline:none;background:transparent;color:var(--dsw-alias-label-primary);font:12px/20px inherit}.ptcPlusSearch:focus-within{outline:2px solid var(--dsw-alias-interactive-primary,#4d6bfe);outline-offset:1px}
|
|
30520
|
-
.ptcPlusObservations{height:256px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;border:1px solid var(--dsw-alias-border-l2);border-radius:6px}
|
|
30521
|
-
.ptcPlusObservationTable{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;font-size:12px;text-align:left}.ptcPlusObservationTable th{position:sticky;top:0;z-index:1;height:32px;padding:0 10px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-tertiary);font-weight:500;border-bottom:1px solid var(--dsw-alias-border-l2)}
|
|
30522
|
-
.ptcPlusObservationTable th:first-child{width:34%}.ptcPlusObservationTable th:nth-child(2){width:16%}.ptcPlusObservationTable th:nth-child(3){width:72px}.ptcPlusObservationTable td{height:34px;padding:0 10px;border-bottom:1px solid var(--dsw-alias-border-l2);overflow:hidden}.ptcPlusObservationTable tr:last-child td{border-bottom:0}.ptcPlusObservationTable tbody tr{cursor:pointer}.ptcPlusObservationTable tbody tr:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusObservationTable tr[data-selected=true]{background:color-mix(in srgb,var(--dsw-alias-interactive-primary,#4d6bfe) 7%,transparent)}
|
|
30523
|
-
.ptcPlusObservationSelect{display:block;width:100%;min-width:0;height:34px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationKind{color:var(--dsw-alias-label-tertiary);white-space:nowrap}
|
|
30524
|
-
.ptcPlusObservationValue{display:flex;min-width:0;align-items:center;gap:6px}.ptcPlusObservationValue code{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:11px/18px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationState{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px}.ptcPlusObservationValue .ptcPlusObservationState{flex:none}.ptcPlusObservationEmpty{padding:12px}
|
|
30525
|
-
.ptcPlusBindingInspector{box-sizing:border-box;min-width:0;max-height:296px;overflow:auto;padding-left:24px;border-left:1px solid var(--dsw-alias-border-l2)}
|
|
30526
|
-
.ptcPlusInspectorHead{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:6px 12px;margin:0 0 12px}.ptcPlusInspectorHead strong{min-width:0;overflow-wrap:anywhere;font:600 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusInspectorHead span{font-size:11px;color:var(--dsw-alias-label-tertiary)}
|
|
30527
|
-
.ptcPlusObservationLabel{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:12px 0 6px;font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary)}
|
|
30528
|
-
.ptcPlusObservationCode{max-height:184px;margin:0;overflow:auto;border-radius:6px;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}.ptcPlusObservationPreview{margin:0;padding:10px 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusObservationUnavailable{margin:0;color:var(--dsw-alias-label-tertiary);font-size:12px}
|
|
30529
|
-
.ptcPlusBindingsSurface{min-width:0;container-type:inline-size}.ptcPlusBindingsSurface .ptcPlusBindings{margin:0;padding:0;border:0}.ptcPlusBindingsSurface .ptcPlusBindingsGrid{grid-template-columns:220px minmax(0,1fr);gap:20px;margin-top:12px}.ptcPlusBindingsSurface .ptcPlusBindingsTitle{font-size:15px;line-height:22px}
|
|
30530
|
-
.ptcPlusBindingPane{min-width:0}.ptcPlusBindingPane>.ptcPlusSearch{flex:none;margin-bottom:2px}.ptcPlusBindingsSurface .ptcPlusBindingsHead{flex-direction:row;flex-wrap:wrap;align-items:center;gap:8px}.ptcPlusBindingsSurface .ptcPlusBindingList{max-height:350px;overflow:auto;gap:0;padding:0;border:0;border-radius:0;background:transparent}.ptcPlusBindingsSurface .ptcPlusBindingItem{min-height:52px;padding:8px;border-radius:4px;box-sizing:border-box;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusBindingsSurface .ptcPlusBindingItem[data-selected=true]{background:color-mix(in srgb,var(--dsw-alias-interactive-primary,#4d6bfe) 7%,transparent)}
|
|
30531
|
-
.ptcPlusBindingsSurface .ptcPlusBindingName{font-size:12px;font-weight:500;white-space:normal;overflow-wrap:anywhere}.ptcPlusBindingsSurface .ptcPlusBindingMeta{font-size:11px;line-height:16px}.ptcPlusBindingsSurface .ptcPlusBindingEditor{border:0;border-radius:0;background:transparent;overflow:visible}
|
|
30532
|
-
.ptcPlusBindingSwitch{appearance:none;position:relative;align-self:center;flex:none;width:30px;height:18px;padding:2px;border:0;border-radius:9px;background:var(--dsw-alias-label-dimmed,#a5a7ad);cursor:pointer}.ptcPlusBindingSwitch span{display:block;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 2px #0002;transition:transform .15s ease}.ptcPlusBindingSwitch[aria-checked=true]{background:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusBindingSwitch[aria-checked=true] span{transform:translateX(12px)}.ptcPlusBindingSwitch:disabled{cursor:not-allowed;opacity:.5}
|
|
30533
|
-
.ptcPlusEditorHead{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 12px;min-height:32px;margin-bottom:8px}.ptcPlusEditorFile{min-width:0;overflow-wrap:anywhere;font:600 13px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusBindingLifecycle{gap:6px}
|
|
30534
|
-
.ptcPlusIconButton{display:inline-flex;align-items:center;justify-content:center;flex:none;box-sizing:border-box;width:30px;height:30px;padding:0;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;background:transparent;color:var(--dsw-alias-label-secondary);cursor:pointer}.ptcPlusIconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusIconButton[data-kind=danger]:hover{color:var(--dsw-alias-state-error-primary)}.ptcPlusIconButton:disabled{opacity:.4;cursor:not-allowed}
|
|
30535
|
-
.ptcPlusCodeEditor{min-width:0;overflow:hidden;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;--ptc-code-keyword:color-mix(in srgb,#a13d96 75%,var(--dsw-alias-label-primary));--ptc-code-string:color-mix(in srgb,#af643c 75%,var(--dsw-alias-label-primary));--ptc-code-number:color-mix(in srgb,#477ac2 75%,var(--dsw-alias-label-primary));--ptc-code-type:color-mix(in srgb,#258579 75%,var(--dsw-alias-label-primary));--ptc-code-function:color-mix(in srgb,#825bbe 75%,var(--dsw-alias-label-primary))}.ptcPlusCodeEditor:focus-within{border-color:var(--dsw-alias-interactive-primary,#4d6bfe)}.ptcPlusCodeEditor .cm-editor{height:336px}.ptcPlusCodeEditor .cm-scroller{min-height:0}.ptcPlusCodeEditor .cm-line{overflow-wrap:anywhere}
|
|
30536
|
-
.ptcPlusBindingsSurface .ptcPlusBindingSection{display:block;padding:0;margin-top:0;border:0;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusBindingSection>summary,.ptcPlusBindingsSurface .ptcPlusBindingDebugSummary{padding:11px 0;cursor:pointer;font-size:12px;font-weight:500;color:var(--dsw-alias-label-secondary)}.ptcPlusEntrySettings .ptcPlusBindingFields{padding:0 0 14px}.ptcPlusBindingsSurface .ptcPlusBindingSourcePreview{display:block}.ptcPlusBindingSourcePreview>.ptcPlusCodeBlock{margin-bottom:12px}.ptcPlusBindingsSurface .ptcPlusBindingDebug{display:block;padding:0;border-top:0}.ptcPlusBindingsSurface .ptcPlusBindingDebugBody{grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding-bottom:12px}
|
|
30537
|
-
.ptcPlusBindingsSurface .ptcPlusBindingRun{gap:6px;margin-top:10px}.ptcPlusBindingsSurface .ptcPlusBindingRun .ptcPlusInput{flex-basis:100%;min-width:0;width:100%;height:32px;font-size:12px}.ptcPlusBindingsSurface .ptcPlusMessage[role=status]{grid-column:1/-1;margin:0}
|
|
30538
|
-
.ptcPlusSessionEmpty{box-sizing:border-box;width:100%;padding:16px 18px;border:1px dashed var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px}.ptcPlusObservationGrid[data-empty=true]{grid-template-columns:minmax(0,1fr)}.ptcPlusObservationGrid[data-empty=true] .ptcPlusObservations{height:auto;min-height:94px}
|
|
30539
|
-
.ptcPlusSourceSection{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusSourceToggle{display:flex;min-width:0;align-items:center;gap:6px;padding:12px 0;border:0;background:transparent;color:var(--dsw-alias-label-secondary);text-align:left;cursor:pointer;font:500 12px/20px inherit}.ptcPlusSourceToggle svg{flex:none}.ptcPlusSourceFilename{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary);font:11px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusSourceActions{display:flex;flex-wrap:wrap;gap:6px;padding:6px 0}.ptcPlusSourceBody{grid-column:1/-1;min-width:0;margin-bottom:12px}.ptcPlusSourceCode{max-height:336px;overflow:auto;margin:0;border-radius:6px;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace;white-space:pre-wrap;overflow-wrap:anywhere}
|
|
30540
|
-
.ptcPlusWorkbenchFeedback{min-height:22px;padding:4px 0;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;overflow-wrap:anywhere}.ptcPlusBindings[aria-busy=true] button:disabled,.ptcPlusBindings[aria-busy=true] input:disabled{opacity:1}.ptcPlusBindings[aria-busy=true] button:disabled{cursor:wait}
|
|
30541
|
-
.ptcPlusExecution{min-width:0;margin:0 0 12px;border:1px solid var(--dsw-alias-border-l2);border-radius:6px;overflow:hidden;background:var(--dsw-alias-bg-layer-3)}.ptcPlusExecution>summary{padding:10px 12px;cursor:pointer;font-size:12px;font-weight:500;line-height:20px;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionToolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid var(--dsw-alias-border-l2);border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusExecutionLanguage{font:11px/18px ui-monospace,SFMono-Regular,Consolas,monospace;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionState{font-size:11px;line-height:18px;color:var(--dsw-alias-label-tertiary)}.ptcPlusExecutionActions{display:flex;align-items:center;gap:6px;margin-left:auto}.ptcPlusExecutionActions .ptcPlusButton{min-width:68px;min-height:30px;padding:3px 10px;font-size:12px}
|
|
30542
|
-
.ptcPlusExecutionHistory{min-height:48px;max-height:320px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable}.ptcPlusExecutionHistory:empty{min-height:0}.ptcPlusExecutionRecord{min-width:0;padding:10px 12px;border-bottom:1px solid var(--dsw-alias-border-l2)}.ptcPlusExecutionCommand,.ptcPlusExecutionOutput{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font:12px/20px ui-monospace,SFMono-Regular,Consolas,monospace}.ptcPlusExecutionCommand{color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionCommand>span{color:var(--dsw-alias-label-tertiary)}.ptcPlusExecutionResult{flex-direction:row;gap:12px;margin-top:8px;padding:12px 16px}.ptcPlusExecutionOutputLabel{flex:none;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:20px}.ptcPlusExecutionOutput{flex:1;min-width:0;max-height:240px;overflow:auto;overscroll-behavior:contain;scrollbar-gutter:stable;color:var(--dsw-alias-label-secondary)}.ptcPlusExecutionOutput:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary);outline-offset:-2px}.ptcPlusExecutionOutput[data-error=true]{color:var(--dsw-alias-state-error-primary)}.ptcPlusExecutionDuration{display:block;margin-top:4px;color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:16px}.ptcPlusExecutionInput .ptcPlusCodeEditor{border:0;border-radius:0}.ptcPlusExecutionInput .cm-editor{height:108px}.ptcPlusExecutionInput .cm-content{min-height:88px}
|
|
30543
|
-
@container(max-width:460px){.ptcPlusSourceSection{grid-template-columns:minmax(0,1fr)}.ptcPlusSourceToggle{padding-bottom:6px}.ptcPlusSourceActions{justify-content:flex-end}.ptcPlusExecutionToolbar{gap:6px;padding:8px}.ptcPlusExecutionActions{gap:4px}.ptcPlusSourceFilename{display:none}}
|
|
30544
|
-
.ptcPlusBindingsModal.ptcPlusBindingsModal{width:min(1200px,calc(100vw - 32px));max-width:none;max-height:calc(100dvh - 40px);border-radius:8px}.ptcPlusBindingsDialog{box-sizing:border-box;max-height:calc(100dvh - 40px);overflow:auto;padding:24px}.ptcPlusBindingsDialogHead{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px}.ptcPlusBindingsDialogHead h2{margin:0;font-size:17px;line-height:24px}.ptcPlusDialogClose{display:flex;flex:none;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer}.ptcPlusDialogClose:hover{background:var(--dsw-alias-interactive-bg-hover)}.ptcPlusConsole button:focus-visible,.ptcPlusBindingsDialog button:focus-visible{outline:2px solid var(--dsw-alias-interactive-primary);outline-offset:-2px}
|
|
30545
|
-
@container(max-width:780px){.ptcPlusObservationGrid{grid-template-columns:minmax(0,1fr);gap:16px}.ptcPlusBindingInspector{max-height:none;padding:12px 0 0;border-left:0;border-top:1px solid var(--dsw-alias-border-l2)}.ptcPlusObservations{height:200px}.ptcPlusBindingsSurface .ptcPlusBindingsGrid{grid-template-columns:minmax(0,1fr);gap:18px}.ptcPlusBindingsSurface .ptcPlusBindingList{max-height:180px}.ptcPlusBindingsSurface .ptcPlusBindingFields,.ptcPlusBindingsSurface .ptcPlusBindingDebugBody{grid-template-columns:minmax(0,1fr)}.ptcPlusObservationTable th:first-child{width:35%}.ptcPlusObservationTable th:nth-child(2){width:64px}.ptcPlusObservationTable th:nth-child(3){width:64px}}
|
|
30546
|
-
@media(max-width:560px){.ptcPlusConsole{padding:14px 12px}.ptcPlusBindingsModal.ptcPlusBindingsModal{width:calc(100vw - 16px);max-height:calc(100dvh - 16px)}.ptcPlusBindingsDialog{padding:16px;max-height:calc(100dvh - 16px)}.ptcPlusObservationFilters>.ptcPlusSelect{width:105px}.ptcPlusObservationTable th,.ptcPlusObservationTable td{padding:0 6px}.ptcPlusObservationValue{gap:3px}.ptcPlusObservationState{font-size:10px}.ptcPlusEditorHead{align-items:flex-start}.ptcPlusEditorHead>.ptcPlusBindingLifecycle{margin-left:auto}.ptcPlusSourceBody .cm-editor{height:300px}}
|
|
30547
|
-
.ptcPlusReplIdentity{grid-column:1}.ptcPlusReplReuse{flex:none;padding:0 5px;border-radius:999px;background:var(--dsw-alias-bg-layer-2,rgba(38,49,72,.06));color:var(--dsw-alias-label-tertiary,#74777d);font:500 10px/15px system-ui,sans-serif;white-space:nowrap}
|
|
30548
|
-
.ptcPlusObservationReuseTotal{font-size:13px;color:var(--dsw-alias-label-tertiary)}.ptcPlusObservationReuse{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-variant-numeric:tabular-nums}
|
|
30549
|
-
`;
|
|
30550
|
-
function installStyles() {
|
|
30551
|
-
if (document.getElementById(CLIENT_STYLE_ID) !== null) return () => {
|
|
30552
|
-
};
|
|
30553
|
-
const style = document.createElement("style");
|
|
30554
|
-
style.id = CLIENT_STYLE_ID;
|
|
30555
|
-
style.textContent = `${CLIENT_CSS}${BINDING_WORKBENCH_CSS}${REPL_CONSOLE_CSS}`;
|
|
30556
|
-
document.head.append(style);
|
|
30557
|
-
return () => style.remove();
|
|
30558
|
-
}
|
|
30559
|
-
|
|
30560
30867
|
// src/client-catalog.js
|
|
30561
30868
|
function createCatalogOwner({ callUserBindings }) {
|
|
30562
30869
|
const sources = /* @__PURE__ */ new Set();
|
|
@@ -31145,7 +31452,7 @@
|
|
|
31145
31452
|
"details",
|
|
31146
31453
|
{ className: "ptcPlusBindingSection ptcPlusBindingSourcePreview", open: true },
|
|
31147
31454
|
h("summary", { className: "ptcPlusBindingFieldLabel" }, t2("bindings.declaration")),
|
|
31148
|
-
state.declaration === "" ? h("p", { className: "ptcPlusMessage" }, t2("bindings.unvalidated")) :
|
|
31455
|
+
state.declaration === "" ? h("p", { className: "ptcPlusMessage" }, t2("bindings.unvalidated")) : isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
31149
31456
|
code: state.declaration,
|
|
31150
31457
|
lang: "typescript",
|
|
31151
31458
|
className: "ptcPlusCodeBlock",
|
|
@@ -31217,7 +31524,7 @@
|
|
|
31217
31524
|
disabled: state.busy,
|
|
31218
31525
|
label: t2("bindings.source"),
|
|
31219
31526
|
onChange: (value) => edit("source", value)
|
|
31220
|
-
}) : state.sourceOpen &&
|
|
31527
|
+
}) : state.sourceOpen && isHostComponent(CodeBlock) ? h(CodeBlock, {
|
|
31221
31528
|
code: state.draft.source,
|
|
31222
31529
|
lang: "typescript",
|
|
31223
31530
|
className: "ptcPlusSourceCode",
|
|
@@ -31321,10 +31628,12 @@
|
|
|
31321
31628
|
const content2 = React.useRef(null);
|
|
31322
31629
|
const localReturnFocus = React.useRef(null);
|
|
31323
31630
|
const returnFocus = returnFocusRef ?? localReturnFocus;
|
|
31324
|
-
React.
|
|
31631
|
+
const attachContent = React.useCallback((element) => {
|
|
31632
|
+
content2.current = element;
|
|
31633
|
+
if (element === null) return;
|
|
31325
31634
|
const previous = document.activeElement;
|
|
31326
|
-
if (!
|
|
31327
|
-
|
|
31635
|
+
if (!element.contains(previous) && canReturnFocus(previous)) returnFocus.current = previous;
|
|
31636
|
+
element.querySelector("button")?.focus();
|
|
31328
31637
|
}, [returnFocus]);
|
|
31329
31638
|
const close = () => {
|
|
31330
31639
|
const target = canReturnFocus(returnFocus.current) ? returnFocus.current : getReturnFocus?.();
|
|
@@ -31347,7 +31656,7 @@
|
|
|
31347
31656
|
{ open: true, onClose: close, title: t2("bindings.title"), headless: true, className: "ptcPlusBindingsModal" },
|
|
31348
31657
|
h(
|
|
31349
31658
|
"div",
|
|
31350
|
-
{ className: "ptcPlusBindingsDialog", ref:
|
|
31659
|
+
{ className: "ptcPlusBindingsDialog", ref: attachContent, onKeyDown: trapFocus },
|
|
31351
31660
|
h(
|
|
31352
31661
|
"div",
|
|
31353
31662
|
{ className: "ptcPlusBindingsDialogHead" },
|
|
@@ -31530,22 +31839,350 @@
|
|
|
31530
31839
|
});
|
|
31531
31840
|
}
|
|
31532
31841
|
|
|
31842
|
+
// src/client-primitives.js
|
|
31843
|
+
function menuEntry(React, item, onSelect) {
|
|
31844
|
+
const h = React.createElement;
|
|
31845
|
+
const content2 = item.label ?? item.text ?? null;
|
|
31846
|
+
if (item.type === "separator") {
|
|
31847
|
+
return h("div", { key: item.id, className: "ptcPlusFallbackMenuSeparator", role: "separator" });
|
|
31848
|
+
}
|
|
31849
|
+
if (item.type === "label") {
|
|
31850
|
+
return h("div", { key: item.id, className: "ptcPlusFallbackMenuLabel" }, content2);
|
|
31851
|
+
}
|
|
31852
|
+
return h("button", {
|
|
31853
|
+
key: item.id,
|
|
31854
|
+
type: "button",
|
|
31855
|
+
role: "menuitem",
|
|
31856
|
+
className: "ptcPlusFallbackMenuItem",
|
|
31857
|
+
disabled: item.disabled === true,
|
|
31858
|
+
onClick: () => onSelect?.(item.id)
|
|
31859
|
+
}, content2);
|
|
31860
|
+
}
|
|
31861
|
+
function useCompositionGuard(React, open) {
|
|
31862
|
+
const composing = React.useRef(false);
|
|
31863
|
+
const ended = React.useRef(false);
|
|
31864
|
+
React.useEffect(() => {
|
|
31865
|
+
composing.current = false;
|
|
31866
|
+
ended.current = false;
|
|
31867
|
+
if (!open) return void 0;
|
|
31868
|
+
const start = () => {
|
|
31869
|
+
composing.current = true;
|
|
31870
|
+
};
|
|
31871
|
+
const end = () => {
|
|
31872
|
+
composing.current = false;
|
|
31873
|
+
ended.current = true;
|
|
31874
|
+
};
|
|
31875
|
+
const release = () => {
|
|
31876
|
+
ended.current = false;
|
|
31877
|
+
};
|
|
31878
|
+
const blur = () => {
|
|
31879
|
+
composing.current = false;
|
|
31880
|
+
ended.current = false;
|
|
31881
|
+
};
|
|
31882
|
+
document.addEventListener("compositionstart", start, true);
|
|
31883
|
+
document.addEventListener("compositionend", end, true);
|
|
31884
|
+
document.addEventListener("keyup", release, true);
|
|
31885
|
+
window.addEventListener("blur", blur);
|
|
31886
|
+
return () => {
|
|
31887
|
+
document.removeEventListener("compositionstart", start, true);
|
|
31888
|
+
document.removeEventListener("compositionend", end, true);
|
|
31889
|
+
document.removeEventListener("keyup", release, true);
|
|
31890
|
+
window.removeEventListener("blur", blur);
|
|
31891
|
+
composing.current = false;
|
|
31892
|
+
ended.current = false;
|
|
31893
|
+
};
|
|
31894
|
+
}, [open]);
|
|
31895
|
+
return (event) => {
|
|
31896
|
+
const guarded = composing.current || ended.current || event.isComposing === true || event.keyCode === 229;
|
|
31897
|
+
ended.current = false;
|
|
31898
|
+
return guarded;
|
|
31899
|
+
};
|
|
31900
|
+
}
|
|
31901
|
+
function createFallbackMenu(React, createPortal = (content2) => content2) {
|
|
31902
|
+
const h = React.createElement;
|
|
31903
|
+
return function FallbackMenu({
|
|
31904
|
+
open,
|
|
31905
|
+
items = [],
|
|
31906
|
+
children,
|
|
31907
|
+
footer,
|
|
31908
|
+
className,
|
|
31909
|
+
listClassName,
|
|
31910
|
+
autoFocus,
|
|
31911
|
+
anchor,
|
|
31912
|
+
onClose,
|
|
31913
|
+
onSelect,
|
|
31914
|
+
portal = false,
|
|
31915
|
+
side = "bottom",
|
|
31916
|
+
align = "start",
|
|
31917
|
+
getAnchorRect,
|
|
31918
|
+
closeOnPointerLeave = false
|
|
31919
|
+
}) {
|
|
31920
|
+
const root = React.useRef(null);
|
|
31921
|
+
const list = React.useRef(null);
|
|
31922
|
+
const closeTimer = React.useRef(null);
|
|
31923
|
+
const close = React.useRef(onClose);
|
|
31924
|
+
close.current = onClose;
|
|
31925
|
+
const isComposing = useCompositionGuard(React, open);
|
|
31926
|
+
const cancelClose = () => {
|
|
31927
|
+
clearTimeout(closeTimer.current);
|
|
31928
|
+
closeTimer.current = null;
|
|
31929
|
+
};
|
|
31930
|
+
const scheduleClose = () => {
|
|
31931
|
+
if (!closeOnPointerLeave) return;
|
|
31932
|
+
cancelClose();
|
|
31933
|
+
closeTimer.current = setTimeout(() => close.current?.(), 180);
|
|
31934
|
+
};
|
|
31935
|
+
React.useEffect(() => cancelClose, [open]);
|
|
31936
|
+
React.useLayoutEffect(() => {
|
|
31937
|
+
if (!open) return void 0;
|
|
31938
|
+
const place = () => {
|
|
31939
|
+
const rect = getAnchorRect?.() ?? root.current?.getBoundingClientRect();
|
|
31940
|
+
const surface2 = list.current;
|
|
31941
|
+
if (!rect || !surface2) return;
|
|
31942
|
+
const viewport = window.visualViewport;
|
|
31943
|
+
const viewportTop = viewport?.offsetTop ?? 0;
|
|
31944
|
+
const viewportLeft = viewport?.offsetLeft ?? 0;
|
|
31945
|
+
const viewportHeight = viewport?.height ?? window.innerHeight;
|
|
31946
|
+
const viewportWidth = viewport?.width ?? window.innerWidth;
|
|
31947
|
+
const available = Math.max(0, side === "top" ? rect.top - viewportTop - 12 : viewportTop + viewportHeight - rect.bottom - 12);
|
|
31948
|
+
surface2.style.maxHeight = `${available}px`;
|
|
31949
|
+
const measured = surface2.getBoundingClientRect();
|
|
31950
|
+
const left = align === "end" ? rect.right - measured.width : rect.left;
|
|
31951
|
+
surface2.style.left = `${Math.max(viewportLeft + 8, Math.min(left, viewportLeft + viewportWidth - measured.width - 8))}px`;
|
|
31952
|
+
surface2.style.top = `${side === "top" ? Math.max(viewportTop + 8, rect.top - measured.height - 4) : rect.bottom + 4}px`;
|
|
31953
|
+
};
|
|
31954
|
+
place();
|
|
31955
|
+
window.addEventListener("resize", place);
|
|
31956
|
+
window.addEventListener("scroll", place, true);
|
|
31957
|
+
window.visualViewport?.addEventListener("resize", place);
|
|
31958
|
+
window.visualViewport?.addEventListener("scroll", place);
|
|
31959
|
+
return () => {
|
|
31960
|
+
window.removeEventListener("resize", place);
|
|
31961
|
+
window.removeEventListener("scroll", place, true);
|
|
31962
|
+
window.visualViewport?.removeEventListener("resize", place);
|
|
31963
|
+
window.visualViewport?.removeEventListener("scroll", place);
|
|
31964
|
+
};
|
|
31965
|
+
}, [open, side, align, getAnchorRect, children, items, footer]);
|
|
31966
|
+
React.useEffect(() => {
|
|
31967
|
+
if (!open) return void 0;
|
|
31968
|
+
if (autoFocus) list.current?.querySelector("button:not(:disabled)")?.focus();
|
|
31969
|
+
const onKeyDown = (event) => {
|
|
31970
|
+
if (event.defaultPrevented || isComposing(event)) return;
|
|
31971
|
+
if (event.key === "Escape") {
|
|
31972
|
+
event.preventDefault();
|
|
31973
|
+
event.stopPropagation();
|
|
31974
|
+
if (!event.repeat) close.current?.();
|
|
31975
|
+
return;
|
|
31976
|
+
}
|
|
31977
|
+
if (!root.current?.contains(event.target) && !list.current?.contains(event.target)) return;
|
|
31978
|
+
if (!["ArrowDown", "ArrowUp", "Home", "End"].includes(event.key)) return;
|
|
31979
|
+
const controls = [...list.current.querySelectorAll("button:not(:disabled)")];
|
|
31980
|
+
if (controls.length === 0) return;
|
|
31981
|
+
const current = controls.indexOf(document.activeElement);
|
|
31982
|
+
const next = event.key === "Home" ? 0 : event.key === "End" ? controls.length - 1 : (current + (event.key === "ArrowDown" ? 1 : -1) + controls.length) % controls.length;
|
|
31983
|
+
event.preventDefault();
|
|
31984
|
+
controls[next].focus();
|
|
31985
|
+
};
|
|
31986
|
+
const onPointerDown = (event) => {
|
|
31987
|
+
if (root.current?.contains(event.target) || list.current?.contains(event.target)) return;
|
|
31988
|
+
close.current?.();
|
|
31989
|
+
};
|
|
31990
|
+
document.addEventListener("keydown", onKeyDown);
|
|
31991
|
+
document.addEventListener("pointerdown", onPointerDown, true);
|
|
31992
|
+
return () => {
|
|
31993
|
+
document.removeEventListener("keydown", onKeyDown);
|
|
31994
|
+
document.removeEventListener("pointerdown", onPointerDown, true);
|
|
31995
|
+
};
|
|
31996
|
+
}, [open, autoFocus]);
|
|
31997
|
+
const rows = (list2) => list2.map((item) => menuEntry(React, item, onSelect));
|
|
31998
|
+
const surface = open ? h(
|
|
31999
|
+
"div",
|
|
32000
|
+
{
|
|
32001
|
+
ref: list,
|
|
32002
|
+
className: ["ptcPlusFallbackMenuList", listClassName].filter(Boolean).join(" "),
|
|
32003
|
+
role: "menu",
|
|
32004
|
+
onPointerEnter: cancelClose,
|
|
32005
|
+
onPointerLeave: scheduleClose
|
|
32006
|
+
},
|
|
32007
|
+
...rows(items),
|
|
32008
|
+
...Array.isArray(footer) ? rows(footer) : [],
|
|
32009
|
+
children ?? null
|
|
32010
|
+
) : null;
|
|
32011
|
+
return h(
|
|
32012
|
+
"span",
|
|
32013
|
+
{
|
|
32014
|
+
ref: root,
|
|
32015
|
+
className: ["ptcPlusFallbackMenu", className].filter(Boolean).join(" "),
|
|
32016
|
+
onPointerEnter: cancelClose,
|
|
32017
|
+
onPointerLeave: scheduleClose
|
|
32018
|
+
},
|
|
32019
|
+
anchor ?? null,
|
|
32020
|
+
portal && surface !== null ? createPortal(surface, document.body) : surface
|
|
32021
|
+
);
|
|
32022
|
+
};
|
|
32023
|
+
}
|
|
32024
|
+
function createFallbackModal(React, createPortal = (content2) => content2) {
|
|
32025
|
+
const h = React.createElement;
|
|
32026
|
+
const modalStack = [];
|
|
32027
|
+
return function FallbackModal({ open, onClose, title, closeLabel, description, className, contentClassName, headless, children }) {
|
|
32028
|
+
const root = React.useRef(null);
|
|
32029
|
+
const close = React.useRef(onClose);
|
|
32030
|
+
close.current = onClose;
|
|
32031
|
+
const isComposing = useCompositionGuard(React, open);
|
|
32032
|
+
const focusable = 'button:not(:disabled),input:not(:disabled),textarea:not(:disabled),select:not(:disabled),[href],[tabindex]:not([tabindex="-1"])';
|
|
32033
|
+
React.useLayoutEffect(() => {
|
|
32034
|
+
if (!open) return void 0;
|
|
32035
|
+
const previous = document.activeElement;
|
|
32036
|
+
const surface2 = root.current;
|
|
32037
|
+
const target = surface2?.querySelector("[data-modal-autofocus]:not(:disabled)") ?? surface2?.querySelector(focusable) ?? surface2;
|
|
32038
|
+
target?.focus({ preventScroll: true });
|
|
32039
|
+
modalStack.push(surface2);
|
|
32040
|
+
const onDocumentKeyDown = (event) => {
|
|
32041
|
+
if (modalStack.at(-1) === surface2) onKeyDown(event);
|
|
32042
|
+
};
|
|
32043
|
+
document.addEventListener("keydown", onDocumentKeyDown);
|
|
32044
|
+
return () => {
|
|
32045
|
+
document.removeEventListener("keydown", onDocumentKeyDown);
|
|
32046
|
+
modalStack.splice(modalStack.indexOf(surface2), 1);
|
|
32047
|
+
if (document.activeElement === document.body || surface2?.contains(document.activeElement)) previous?.focus?.({ preventScroll: true });
|
|
32048
|
+
};
|
|
32049
|
+
}, [open]);
|
|
32050
|
+
const onKeyDown = (event) => {
|
|
32051
|
+
if (event.defaultPrevented || isComposing(event)) return;
|
|
32052
|
+
if (event.key === "Escape") {
|
|
32053
|
+
event.preventDefault();
|
|
32054
|
+
event.stopPropagation();
|
|
32055
|
+
if (!event.repeat) close.current?.();
|
|
32056
|
+
} else if (event.key === "Tab") {
|
|
32057
|
+
const controls = [...root.current.querySelectorAll(focusable)].filter((control) => control.getClientRects().length > 0);
|
|
32058
|
+
const target = event.shiftKey ? controls.at(-1) : controls[0];
|
|
32059
|
+
const boundary = event.shiftKey ? controls[0] : controls.at(-1);
|
|
32060
|
+
if (controls.length === 0 || document.activeElement === boundary || !root.current.contains(document.activeElement)) {
|
|
32061
|
+
event.preventDefault();
|
|
32062
|
+
(target ?? root.current).focus({ preventScroll: true });
|
|
32063
|
+
}
|
|
32064
|
+
}
|
|
32065
|
+
};
|
|
32066
|
+
if (!open) return null;
|
|
32067
|
+
const body = h("div", { className: contentClassName ?? "ptcPlusFallbackModalBody" }, children);
|
|
32068
|
+
const surface = ["ptcPlusFallbackModal", className].filter(Boolean).join(" ");
|
|
32069
|
+
return createPortal(h("div", {
|
|
32070
|
+
className: "ptcPlusFallbackModalBackdrop",
|
|
32071
|
+
onPointerDown: (event) => {
|
|
32072
|
+
if (event.target === event.currentTarget) onClose?.();
|
|
32073
|
+
}
|
|
32074
|
+
}, h(
|
|
32075
|
+
"div",
|
|
32076
|
+
{ ref: root, tabIndex: -1, className: surface, role: "dialog", "aria-modal": "true", "aria-label": title },
|
|
32077
|
+
headless === true ? null : h(
|
|
32078
|
+
"div",
|
|
32079
|
+
{ className: "ptcPlusFallbackModalHead" },
|
|
32080
|
+
h("h2", null, title),
|
|
32081
|
+
h(
|
|
32082
|
+
"button",
|
|
32083
|
+
{ type: "button", className: "ptcPlusDialogClose", "aria-label": closeLabel ?? title, onClick: () => onClose?.() },
|
|
32084
|
+
closeLabel ?? "\xD7"
|
|
32085
|
+
)
|
|
32086
|
+
),
|
|
32087
|
+
headless === true || description === void 0 ? null : h("p", { className: "ptcPlusDetail" }, description),
|
|
32088
|
+
headless === true ? children : body
|
|
32089
|
+
)), document.body);
|
|
32090
|
+
};
|
|
32091
|
+
}
|
|
32092
|
+
function resolvePrimitives(primitives, React, createPortal) {
|
|
32093
|
+
return Object.freeze({
|
|
32094
|
+
Button: primitives.Button,
|
|
32095
|
+
CodeBlock: primitives.CodeBlock,
|
|
32096
|
+
DisclosureRow: primitives.DisclosureRow,
|
|
32097
|
+
Menu: isHostComponent(primitives.Menu) ? primitives.Menu : createFallbackMenu(React, createPortal),
|
|
32098
|
+
MenuFallback: createFallbackMenu(React, createPortal),
|
|
32099
|
+
Modal: isHostComponent(primitives.Modal) ? primitives.Modal : createFallbackModal(React, createPortal),
|
|
32100
|
+
Toast: primitives.Toast,
|
|
32101
|
+
Tooltip: primitives.Tooltip
|
|
32102
|
+
});
|
|
32103
|
+
}
|
|
32104
|
+
function createActionButton(React, Button) {
|
|
32105
|
+
const h = React.createElement;
|
|
32106
|
+
return function ActionButton({ className = "", "data-kind": kind, ...props }) {
|
|
32107
|
+
const classes = className.split(/\s+/).filter((name2) => name2 !== "" && name2 !== "ptcPlusButton");
|
|
32108
|
+
return isHostComponent(Button) ? h(Button, {
|
|
32109
|
+
type: "button",
|
|
32110
|
+
...props,
|
|
32111
|
+
size: "sm",
|
|
32112
|
+
variant: kind === "primary" ? "primary" : kind === "ghost" ? "ghost" : "outline",
|
|
32113
|
+
className: classes.join(" ")
|
|
32114
|
+
}) : h("button", { type: "button", ...props, className: ["ptcPlusButton", ...classes].join(" "), "data-kind": kind });
|
|
32115
|
+
};
|
|
32116
|
+
}
|
|
32117
|
+
|
|
31533
32118
|
// src/client.js
|
|
32119
|
+
var UNAVAILABLE_PREFERENCE = Object.freeze({
|
|
32120
|
+
status: "unavailable",
|
|
32121
|
+
writable: false,
|
|
32122
|
+
value: CONFIG_DEFAULTS
|
|
32123
|
+
});
|
|
32124
|
+
function createPreferenceScope(ctx) {
|
|
32125
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
32126
|
+
const registrations = /* @__PURE__ */ new Map();
|
|
32127
|
+
let bound;
|
|
32128
|
+
const notify = () => {
|
|
32129
|
+
for (const listener of [...listeners]) listener();
|
|
32130
|
+
};
|
|
32131
|
+
const sync = () => {
|
|
32132
|
+
const next = registrations.get("configForms") ?? registrations.get("settingsScope");
|
|
32133
|
+
if (bound === next) return;
|
|
32134
|
+
bound = next;
|
|
32135
|
+
notify();
|
|
32136
|
+
};
|
|
32137
|
+
const adopt = (name2, scope) => {
|
|
32138
|
+
if (scope === void 0 || scope === null) return void 0;
|
|
32139
|
+
const registration = { scope };
|
|
32140
|
+
const unsubscribe = typeof scope.subscribe === "function" ? scope.subscribe(() => {
|
|
32141
|
+
if (bound === registration) notify();
|
|
32142
|
+
}) : void 0;
|
|
32143
|
+
registrations.set(name2, registration);
|
|
32144
|
+
sync();
|
|
32145
|
+
return () => {
|
|
32146
|
+
unsubscribe?.();
|
|
32147
|
+
if (registrations.get(name2) !== registration) return;
|
|
32148
|
+
registrations.delete(name2);
|
|
32149
|
+
sync();
|
|
32150
|
+
};
|
|
32151
|
+
};
|
|
32152
|
+
ctx.inject(["configForms"], (scope) => adopt("configForms", scope.configForms.get(SETTINGS_NAMESPACE)));
|
|
32153
|
+
ctx.inject(["settingsScope"], (scope) => adopt("settingsScope", scope.settingsScope.bind({ namespace: SETTINGS_NAMESPACE })));
|
|
32154
|
+
return Object.freeze({
|
|
32155
|
+
getSnapshot: () => bound?.scope.getSnapshot() ?? UNAVAILABLE_PREFERENCE,
|
|
32156
|
+
subscribe(listener) {
|
|
32157
|
+
listeners.add(listener);
|
|
32158
|
+
return () => listeners.delete(listener);
|
|
32159
|
+
},
|
|
32160
|
+
set: (key, value) => bound?.scope.set(key, value),
|
|
32161
|
+
mutate: (patch) => bound?.scope.mutate(patch)
|
|
32162
|
+
});
|
|
32163
|
+
}
|
|
31534
32164
|
window.__ModuleLoader__.load({
|
|
31535
32165
|
// Replaced by the bundle entry with the package name from package.json.
|
|
31536
32166
|
id: "dsh-ptc-plus",
|
|
31537
32167
|
factory: (require2) => {
|
|
31538
32168
|
const React = require2("react");
|
|
31539
|
-
const
|
|
32169
|
+
const { createPortal } = require2("react-dom");
|
|
32170
|
+
let primitives;
|
|
32171
|
+
try {
|
|
32172
|
+
primitives = require2("@deepseek-ai/dsh-client-ui-primitives") ?? {};
|
|
32173
|
+
} catch {
|
|
32174
|
+
primitives = {};
|
|
32175
|
+
}
|
|
31540
32176
|
const {
|
|
31541
32177
|
Button,
|
|
31542
32178
|
CodeBlock,
|
|
31543
32179
|
DisclosureRow,
|
|
31544
32180
|
Menu,
|
|
32181
|
+
MenuFallback,
|
|
31545
32182
|
Modal,
|
|
31546
32183
|
Toast,
|
|
31547
32184
|
Tooltip
|
|
31548
|
-
} = primitives;
|
|
32185
|
+
} = resolvePrimitives(primitives, React, createPortal);
|
|
31549
32186
|
const {
|
|
31550
32187
|
check: IconCheckOutline14,
|
|
31551
32188
|
chevron: IconChevronDownOutline14,
|
|
@@ -31571,16 +32208,9 @@
|
|
|
31571
32208
|
"aria-label": label,
|
|
31572
32209
|
title: label
|
|
31573
32210
|
}, isHostIconComponent(Icon) ? h(Icon, { size: 16 }) : label);
|
|
31574
|
-
return
|
|
31575
|
-
}
|
|
31576
|
-
function ActionButton({ className = "", "data-kind": kind, ...props }) {
|
|
31577
|
-
return typeof Button === "function" ? h(Button, {
|
|
31578
|
-
...props,
|
|
31579
|
-
size: "sm",
|
|
31580
|
-
variant: kind === "primary" ? "primary" : kind === "ghost" ? "ghost" : "outline",
|
|
31581
|
-
className: className.split(" ").filter((name2) => name2 !== "ptcPlusButton").join(" ")
|
|
31582
|
-
}) : h("button", { ...props, className, "data-kind": kind });
|
|
32211
|
+
return isHostComponent(Tooltip) ? h(Tooltip, { label, delayMs: 400 }, button) : button;
|
|
31583
32212
|
}
|
|
32213
|
+
const ActionButton = createActionButton(React, Button);
|
|
31584
32214
|
const BindingConsole = createBindingConsole(React, {
|
|
31585
32215
|
TypeScriptEditor,
|
|
31586
32216
|
IconButton,
|
|
@@ -31592,31 +32222,9 @@
|
|
|
31592
32222
|
DisclosureRow,
|
|
31593
32223
|
icons: { chevron: IconChevronDownOutline14, check: IconCheckOutline14, inspect: IconInspectOutline12 }
|
|
31594
32224
|
});
|
|
31595
|
-
function settingsPreferenceScope(ctx) {
|
|
31596
|
-
return new Promise((resolve2, reject) => {
|
|
31597
|
-
let settled = false;
|
|
31598
|
-
let configFormsWatcher;
|
|
31599
|
-
let settingsScopeWatcher;
|
|
31600
|
-
const take = (name2, scope) => {
|
|
31601
|
-
if (settled) return;
|
|
31602
|
-
settled = true;
|
|
31603
|
-
if (name2 !== "configForms" && typeof configFormsWatcher === "function") configFormsWatcher();
|
|
31604
|
-
if (name2 !== "settingsScope" && typeof settingsScopeWatcher === "function") settingsScopeWatcher();
|
|
31605
|
-
resolve2(name2 === "configForms" ? scope.configForms.get(SETTINGS_NAMESPACE) : scope.settingsScope.bind({ namespace: SETTINGS_NAMESPACE }));
|
|
31606
|
-
};
|
|
31607
|
-
try {
|
|
31608
|
-
configFormsWatcher = ctx.inject(["configForms"], (scope) => take("configForms", scope));
|
|
31609
|
-
if (!settled) {
|
|
31610
|
-
settingsScopeWatcher = ctx.inject(["settingsScope"], (scope) => take("settingsScope", scope));
|
|
31611
|
-
}
|
|
31612
|
-
} catch (error) {
|
|
31613
|
-
reject(error);
|
|
31614
|
-
}
|
|
31615
|
-
});
|
|
31616
|
-
}
|
|
31617
32225
|
async function apply(ctx) {
|
|
31618
32226
|
const rpc = await createClientRpc(ctx);
|
|
31619
|
-
const preferenceScope =
|
|
32227
|
+
const preferenceScope = createPreferenceScope(ctx);
|
|
31620
32228
|
ctx.effect(() => ctx.locale.register(LOCALE_NS, SETTINGS_COPY), "ptc-plus: settings dictionaries");
|
|
31621
32229
|
ctx.effect(installStyles, "ptc-plus: client styles");
|
|
31622
32230
|
async function callUserBindings(endpoint, payload = {}, signal = void 0) {
|
|
@@ -31766,9 +32374,12 @@
|
|
|
31766
32374
|
ActionButton,
|
|
31767
32375
|
IconButton,
|
|
31768
32376
|
Menu,
|
|
32377
|
+
MenuFallback,
|
|
31769
32378
|
Toast,
|
|
31770
32379
|
Tooltip,
|
|
31771
32380
|
CodeBlock,
|
|
32381
|
+
Modal,
|
|
32382
|
+
createPortal,
|
|
31772
32383
|
BindingsDialog,
|
|
31773
32384
|
PTCPlusSettingsDialog,
|
|
31774
32385
|
useWorkbenchController,
|
|
@@ -31814,7 +32425,7 @@
|
|
|
31814
32425
|
ctx.slots.inject("conversation.input.dock", () => ctx.slots.inject("conversation.input.left", () => registerGated(ctx, settingsGate("bindings", () => ctx.slots.register({
|
|
31815
32426
|
name: "conversation.input.dock",
|
|
31816
32427
|
id: "ptc-plus-binding-review",
|
|
31817
|
-
order: 30,
|
|
32428
|
+
order: -30,
|
|
31818
32429
|
locale: LOCALE_NS
|
|
31819
32430
|
}, (props) => typeof props.useProjection === "function" && props.sessionId !== void 0 ? h(BindingReviewDock, { ...props, key: props.sessionId }) : null)))));
|
|
31820
32431
|
const availability = createBindingCommandAvailability(ctx);
|
|
@@ -31853,3 +32464,16 @@
|
|
|
31853
32464
|
}
|
|
31854
32465
|
});
|
|
31855
32466
|
})();
|
|
32467
|
+
/*! Bundled license information:
|
|
32468
|
+
|
|
32469
|
+
react-is/cjs/react-is.development.js:
|
|
32470
|
+
(**
|
|
32471
|
+
* @license React
|
|
32472
|
+
* react-is.development.js
|
|
32473
|
+
*
|
|
32474
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
32475
|
+
*
|
|
32476
|
+
* This source code is licensed under the MIT license found in the
|
|
32477
|
+
* LICENSE file in the root directory of this source tree.
|
|
32478
|
+
*)
|
|
32479
|
+
*/
|