@nuanu-ai/agentbrowse 0.2.21 → 0.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -9
- package/dist/commands/act.d.ts.map +1 -1
- package/dist/commands/act.js +100 -73
- package/dist/commands/action-acceptance.d.ts +4 -1
- package/dist/commands/action-acceptance.d.ts.map +1 -1
- package/dist/commands/action-acceptance.js +127 -37
- package/dist/commands/action-executor-helpers.d.ts.map +1 -1
- package/dist/commands/action-executor-helpers.js +12 -4
- package/dist/commands/action-fallbacks.d.ts.map +1 -1
- package/dist/commands/action-result-resolution.d.ts.map +1 -1
- package/dist/commands/action-result-resolution.js +1 -1
- package/dist/commands/action-value-projection.d.ts.map +1 -1
- package/dist/commands/datepicker-action-executor.d.ts.map +1 -1
- package/dist/commands/datepicker-action-executor.js +1 -1
- package/dist/commands/descriptor-validation.d.ts.map +1 -1
- package/dist/commands/descriptor-validation.js +13 -172
- package/dist/commands/extract-scoped-dialog-text.d.ts.map +1 -1
- package/dist/commands/extract-scoped-dialog-text.js +1 -4
- package/dist/commands/extract-snapshot-sanitizer.d.ts.map +1 -1
- package/dist/commands/extract-stagehand-executor.d.ts.map +1 -1
- package/dist/commands/extract.d.ts.map +1 -1
- package/dist/commands/extract.js +23 -4
- package/dist/commands/observe-accessibility.d.ts +22 -0
- package/dist/commands/observe-accessibility.d.ts.map +1 -0
- package/dist/commands/observe-accessibility.js +497 -0
- package/dist/commands/observe-display-label.d.ts +4 -0
- package/dist/commands/observe-display-label.d.ts.map +1 -0
- package/dist/commands/observe-display-label.js +26 -0
- package/dist/commands/observe-dom-label-contract.d.ts +2 -0
- package/dist/commands/observe-dom-label-contract.d.ts.map +1 -0
- package/dist/commands/observe-dom-label-contract.js +521 -0
- package/dist/commands/observe-fallback-semantics.d.ts +6 -0
- package/dist/commands/observe-fallback-semantics.d.ts.map +1 -0
- package/dist/commands/observe-fallback-semantics.js +86 -0
- package/dist/commands/observe-inventory.d.ts +23 -18
- package/dist/commands/observe-inventory.d.ts.map +1 -1
- package/dist/commands/observe-inventory.js +172 -719
- package/dist/commands/observe-label-policy.d.ts +8 -0
- package/dist/commands/observe-label-policy.d.ts.map +1 -0
- package/dist/commands/observe-label-policy.js +21 -0
- package/dist/commands/observe-page-state.d.ts +1 -1
- package/dist/commands/observe-page-state.d.ts.map +1 -1
- package/dist/commands/observe-persistence.d.ts.map +1 -1
- package/dist/commands/observe-persistence.js +10 -3
- package/dist/commands/observe-projection.d.ts +2 -1
- package/dist/commands/observe-projection.d.ts.map +1 -1
- package/dist/commands/observe-projection.js +5 -2
- package/dist/commands/observe-semantics.d.ts.map +1 -1
- package/dist/commands/observe-semantics.js +18 -1
- package/dist/commands/observe-signals.d.ts +48 -0
- package/dist/commands/observe-signals.d.ts.map +1 -0
- package/dist/commands/observe-signals.js +461 -0
- package/dist/commands/observe-stagehand.d.ts.map +1 -1
- package/dist/commands/observe-stagehand.js +5 -18
- package/dist/commands/observe-surfaces.d.ts.map +1 -1
- package/dist/commands/observe-surfaces.js +5 -4
- package/dist/commands/observe.d.ts +0 -6
- package/dist/commands/observe.d.ts.map +1 -1
- package/dist/commands/observe.js +30 -6
- package/dist/commands/observe.test-harness.d.ts +0 -6
- package/dist/commands/observe.test-harness.d.ts.map +1 -1
- package/dist/commands/screenshot.d.ts.map +1 -1
- package/dist/commands/select-action-executor.d.ts.map +1 -1
- package/dist/commands/select-action-executor.js +1 -1
- package/dist/commands/semantic-observe.d.ts.map +1 -1
- package/dist/commands/semantic-observe.js +1 -4
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/text-input-action-executor.d.ts.map +1 -1
- package/dist/commands/text-input-action-executor.js +1 -1
- package/dist/control-semantics.d.ts.map +1 -1
- package/dist/control-semantics.js +2 -6
- package/dist/playwright-runtime.d.ts.map +1 -1
- package/dist/playwright-runtime.js +3 -4
- package/dist/runtime-state.d.ts +3 -0
- package/dist/runtime-state.d.ts.map +1 -1
- package/dist/runtime-state.js +3 -0
- package/dist/secrets/catalog-applicability.d.ts.map +1 -1
- package/dist/secrets/form-matcher.d.ts.map +1 -1
- package/dist/secrets/form-matcher.js +2 -1
- package/dist/secrets/mock-agentpay-backend.d.ts +1 -1
- package/dist/secrets/mock-agentpay-backend.d.ts.map +1 -1
- package/dist/secrets/mock-agentpay-backend.js +2 -4
- package/dist/secrets/mock-agentpay-cabinet.d.ts.map +1 -1
- package/dist/secrets/mock-agentpay-cabinet.js +6 -1
- package/dist/secrets/protected-field-values.d.ts.map +1 -1
- package/dist/secrets/protected-field-values.js +1 -1
- package/dist/secrets/protected-fill.d.ts.map +1 -1
- package/dist/secrets/protected-fill.js +16 -4
- package/dist/solver/captcha-detector.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { getSurface, getTarget } from '../runtime-state.js';
|
|
2
2
|
import { inferComparableValueTypeFromFacts, } from '../control-semantics.js';
|
|
3
3
|
import { buildLocator, resolveLocatorRoot } from './action-fallbacks.js';
|
|
4
|
+
import { OBSERVE_DOM_LABEL_CONTRACT_HELPER_SCRIPT } from './observe-dom-label-contract.js';
|
|
4
5
|
import { resolveSurfaceScopeRoot } from './target-resolution.js';
|
|
5
6
|
import { isLocatorUserActionable } from './user-actionable.js';
|
|
6
7
|
const ACTION_CANDIDATE_PRIORITY = {
|
|
@@ -78,7 +79,7 @@ const PAGE_OBSERVATION_SCRIPT = String.raw `(() => {
|
|
|
78
79
|
}
|
|
79
80
|
|
|
80
81
|
const style = element.ownerDocument?.defaultView?.getComputedStyle(element);
|
|
81
|
-
if (!style || style.display === 'none' || style.visibility
|
|
82
|
+
if (!style || style.display === 'none' || style.visibility !== 'visible') {
|
|
82
83
|
return false;
|
|
83
84
|
}
|
|
84
85
|
|
|
@@ -474,7 +475,7 @@ const NO_PROGRESS_PAGE_SIGNALS_SCRIPT = String.raw `(() => {
|
|
|
474
475
|
}
|
|
475
476
|
|
|
476
477
|
const style = element.ownerDocument?.defaultView?.getComputedStyle(element);
|
|
477
|
-
if (!style || style.display === 'none' || style.visibility
|
|
478
|
+
if (!style || style.display === 'none' || style.visibility !== 'visible') {
|
|
478
479
|
return false;
|
|
479
480
|
}
|
|
480
481
|
|
|
@@ -698,6 +699,9 @@ export function shouldVerifyObservableProgress(target, action) {
|
|
|
698
699
|
if (action === 'fill' || action === 'type') {
|
|
699
700
|
return false;
|
|
700
701
|
}
|
|
702
|
+
if (action === 'press' && isEditableLikeTarget(target)) {
|
|
703
|
+
return false;
|
|
704
|
+
}
|
|
701
705
|
return action === 'click' || action === 'press' || action === 'select';
|
|
702
706
|
}
|
|
703
707
|
function isEditableLikeTarget(target) {
|
|
@@ -724,6 +728,9 @@ function isSelectableChoiceTarget(target) {
|
|
|
724
728
|
target.structure?.family === 'structured-grid');
|
|
725
729
|
}
|
|
726
730
|
function acceptancePolicyForAction(target, action) {
|
|
731
|
+
if (action === 'press' && isEditableLikeTarget(target)) {
|
|
732
|
+
return undefined;
|
|
733
|
+
}
|
|
727
734
|
if (action === 'select') {
|
|
728
735
|
if (target.controlFamily === 'datepicker') {
|
|
729
736
|
return 'date-selection';
|
|
@@ -770,9 +777,7 @@ function trackedStateKeys(target, action, policy) {
|
|
|
770
777
|
}
|
|
771
778
|
export async function capturePageObservation(page) {
|
|
772
779
|
const snapshot = typeof page.evaluate === 'function'
|
|
773
|
-
? await page
|
|
774
|
-
.evaluate(PAGE_OBSERVATION_SCRIPT)
|
|
775
|
-
.catch(() => '')
|
|
780
|
+
? await Promise.resolve(page.evaluate(PAGE_OBSERVATION_SCRIPT)).catch(() => '')
|
|
776
781
|
: '';
|
|
777
782
|
const contentSnapshot = typeof snapshot === 'string' ? snapshot : (snapshot?.content ?? '');
|
|
778
783
|
const structureSnapshot = typeof snapshot === 'string' ? '' : (snapshot?.structure ?? '');
|
|
@@ -823,7 +828,10 @@ export async function captureLocatorContextHash(locator) {
|
|
|
823
828
|
'@role="tabpanel" or @role="dialog" or @role="listbox" or @role="menu" or @role="grid" or ' +
|
|
824
829
|
'self::article or self::li or self::tr or self::td or self::section or self::form' +
|
|
825
830
|
'][1]');
|
|
826
|
-
|
|
831
|
+
const ancestorCount = await ancestorContext.count().catch(() => 0);
|
|
832
|
+
if (ancestorCount > 0) {
|
|
833
|
+
candidates.push(typeof ancestorContext.first === 'function' ? ancestorContext.first() : ancestorContext);
|
|
834
|
+
}
|
|
827
835
|
}
|
|
828
836
|
candidates.push(typeof locator.first === 'function' ? locator.first() : locator);
|
|
829
837
|
for (const candidate of candidates) {
|
|
@@ -834,17 +842,49 @@ export async function captureLocatorContextHash(locator) {
|
|
|
834
842
|
}
|
|
835
843
|
return null;
|
|
836
844
|
}
|
|
845
|
+
async function shouldProbePopupCurrentValue(locator) {
|
|
846
|
+
const readAttribute = async (name) => {
|
|
847
|
+
if (typeof locator.getAttribute !== 'function') {
|
|
848
|
+
return null;
|
|
849
|
+
}
|
|
850
|
+
return locator.getAttribute(name).catch(() => null);
|
|
851
|
+
};
|
|
852
|
+
const [role, ariaHasPopup, ariaControls, ariaExpanded] = await Promise.all([
|
|
853
|
+
readAttribute('role'),
|
|
854
|
+
readAttribute('aria-haspopup'),
|
|
855
|
+
readAttribute('aria-controls'),
|
|
856
|
+
readAttribute('aria-expanded'),
|
|
857
|
+
]);
|
|
858
|
+
return (Boolean((ariaControls || '').trim()) ||
|
|
859
|
+
['listbox', 'menu'].includes((ariaHasPopup || '').toLowerCase()) ||
|
|
860
|
+
(role || '').toLowerCase() === 'combobox' ||
|
|
861
|
+
ariaExpanded !== null);
|
|
862
|
+
}
|
|
837
863
|
async function captureLocatorValue(locator) {
|
|
838
864
|
const count = await locator.count().catch(() => 0);
|
|
839
865
|
if (count === 0) {
|
|
840
866
|
return null;
|
|
841
867
|
}
|
|
842
|
-
const inputValue = typeof locator.inputValue === 'function'
|
|
843
|
-
? await locator.inputValue().catch(() => '')
|
|
844
|
-
: '';
|
|
868
|
+
const inputValue = typeof locator.inputValue === 'function' ? await locator.inputValue().catch(() => '') : '';
|
|
845
869
|
if (inputValue) {
|
|
846
870
|
return inputValue;
|
|
847
871
|
}
|
|
872
|
+
if (!(await shouldProbePopupCurrentValue(locator))) {
|
|
873
|
+
return readLocatorText(locator);
|
|
874
|
+
}
|
|
875
|
+
const popupCurrentValue = await locator
|
|
876
|
+
.evaluate((element, source) => {
|
|
877
|
+
const read = Function('element', `${source}
|
|
878
|
+
if (!(element instanceof HTMLElement)) {
|
|
879
|
+
return null;
|
|
880
|
+
}
|
|
881
|
+
return observedPopupCurrentValueOf(element) || null;`);
|
|
882
|
+
return read(element);
|
|
883
|
+
}, OBSERVE_DOM_LABEL_CONTRACT_HELPER_SCRIPT)
|
|
884
|
+
.catch(() => null);
|
|
885
|
+
if (popupCurrentValue) {
|
|
886
|
+
return popupCurrentValue;
|
|
887
|
+
}
|
|
848
888
|
return readLocatorText(locator);
|
|
849
889
|
}
|
|
850
890
|
async function captureLocatorValueFromCandidates(locators) {
|
|
@@ -968,16 +1008,37 @@ function normalizeComparableValue(value, comparableValueType) {
|
|
|
968
1008
|
}
|
|
969
1009
|
return raw.toLowerCase();
|
|
970
1010
|
}
|
|
971
|
-
function valuesMatchExpected(expected, actual, comparableValueType) {
|
|
1011
|
+
function valuesMatchExpected(expected, actual, comparableValueType, options) {
|
|
972
1012
|
const normalizedExpected = normalizeComparableValue(expected, comparableValueType);
|
|
973
1013
|
const normalizedActual = normalizeComparableValue(actual, comparableValueType);
|
|
974
1014
|
if (!normalizedExpected || !normalizedActual) {
|
|
975
1015
|
return false;
|
|
976
1016
|
}
|
|
977
|
-
|
|
1017
|
+
if (normalizedActual === normalizedExpected || normalizedActual.includes(normalizedExpected)) {
|
|
1018
|
+
return true;
|
|
1019
|
+
}
|
|
1020
|
+
if (options?.allowCompactActualSequence !== true) {
|
|
1021
|
+
return false;
|
|
1022
|
+
}
|
|
1023
|
+
const expectedTokens = normalizedExpected.split(/\s+/).filter(Boolean);
|
|
1024
|
+
const actualTokens = normalizedActual.split(/\s+/).filter(Boolean);
|
|
1025
|
+
if (actualTokens.length === 0 || actualTokens.length > expectedTokens.length) {
|
|
1026
|
+
return false;
|
|
1027
|
+
}
|
|
1028
|
+
const compactActualLooksCodeLike = actualTokens.every((token) => token.length <= 3 || /[\d+]/.test(token));
|
|
1029
|
+
if (!compactActualLooksCodeLike) {
|
|
1030
|
+
return false;
|
|
1031
|
+
}
|
|
1032
|
+
for (let index = 0; index <= expectedTokens.length - actualTokens.length; index += 1) {
|
|
1033
|
+
const matches = actualTokens.every((token, tokenIndex) => expectedTokens[index + tokenIndex] === token);
|
|
1034
|
+
if (matches) {
|
|
1035
|
+
return true;
|
|
1036
|
+
}
|
|
1037
|
+
}
|
|
1038
|
+
return false;
|
|
978
1039
|
}
|
|
979
|
-
function valuesMatchAnyExpected(expected, actualValues, comparableValueType) {
|
|
980
|
-
return actualValues.some((actualValue) => valuesMatchExpected(expected, actualValue, comparableValueType));
|
|
1040
|
+
function valuesMatchAnyExpected(expected, actualValues, comparableValueType, options) {
|
|
1041
|
+
return actualValues.some((actualValue) => valuesMatchExpected(expected, actualValue, comparableValueType, options));
|
|
981
1042
|
}
|
|
982
1043
|
function expectedValueForAcceptance(action, actionValue) {
|
|
983
1044
|
if (action === 'fill' || action === 'type' || action === 'select') {
|
|
@@ -1057,6 +1118,12 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1057
1118
|
return { current: 'missing' };
|
|
1058
1119
|
}
|
|
1059
1120
|
const state = {};
|
|
1121
|
+
const readAttribute = async (name) => {
|
|
1122
|
+
if (typeof locator.getAttribute !== 'function') {
|
|
1123
|
+
return null;
|
|
1124
|
+
}
|
|
1125
|
+
return locator.getAttribute(name).catch(() => null);
|
|
1126
|
+
};
|
|
1060
1127
|
const heuristicFlags = await locator
|
|
1061
1128
|
.evaluate((element) => {
|
|
1062
1129
|
if (!(element instanceof HTMLElement)) {
|
|
@@ -1090,7 +1157,7 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1090
1157
|
break;
|
|
1091
1158
|
}
|
|
1092
1159
|
}
|
|
1093
|
-
const ariaChecked = await
|
|
1160
|
+
const ariaChecked = await readAttribute('aria-checked');
|
|
1094
1161
|
if (ariaChecked === 'true')
|
|
1095
1162
|
state.checked = true;
|
|
1096
1163
|
else if (ariaChecked === 'false')
|
|
@@ -1100,7 +1167,7 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1100
1167
|
break;
|
|
1101
1168
|
}
|
|
1102
1169
|
case 'selected': {
|
|
1103
|
-
const value = await
|
|
1170
|
+
const value = await readAttribute('aria-selected');
|
|
1104
1171
|
if (value === 'true')
|
|
1105
1172
|
state.selected = true;
|
|
1106
1173
|
else if (value === 'false')
|
|
@@ -1110,7 +1177,7 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1110
1177
|
break;
|
|
1111
1178
|
}
|
|
1112
1179
|
case 'expanded': {
|
|
1113
|
-
const value = await
|
|
1180
|
+
const value = await readAttribute('aria-expanded');
|
|
1114
1181
|
if (value === 'true')
|
|
1115
1182
|
state.expanded = true;
|
|
1116
1183
|
else if (value === 'false')
|
|
@@ -1118,7 +1185,7 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1118
1185
|
break;
|
|
1119
1186
|
}
|
|
1120
1187
|
case 'pressed': {
|
|
1121
|
-
const value = await
|
|
1188
|
+
const value = await readAttribute('aria-pressed');
|
|
1122
1189
|
if (value === 'true')
|
|
1123
1190
|
state.pressed = true;
|
|
1124
1191
|
else if (value === 'false')
|
|
@@ -1128,7 +1195,7 @@ export async function captureLocatorState(locator, keys) {
|
|
|
1128
1195
|
break;
|
|
1129
1196
|
}
|
|
1130
1197
|
case 'current': {
|
|
1131
|
-
const value = await
|
|
1198
|
+
const value = await readAttribute('aria-current');
|
|
1132
1199
|
if (value === 'true')
|
|
1133
1200
|
state.current = true;
|
|
1134
1201
|
else if (typeof value === 'string' && value.length > 0)
|
|
@@ -1184,18 +1251,40 @@ export function pageObservationChanged(before, after) {
|
|
|
1184
1251
|
}
|
|
1185
1252
|
return false;
|
|
1186
1253
|
}
|
|
1187
|
-
export function
|
|
1254
|
+
export function genericClickObservationChanged(before, after) {
|
|
1188
1255
|
if (!before || !after) {
|
|
1189
1256
|
return false;
|
|
1190
1257
|
}
|
|
1191
1258
|
if (before.url !== after.url || before.title !== after.title) {
|
|
1192
1259
|
return true;
|
|
1193
1260
|
}
|
|
1194
|
-
if (before.structureHash &&
|
|
1195
|
-
after.structureHash &&
|
|
1261
|
+
if ((before.structureHash || after.structureHash) &&
|
|
1196
1262
|
before.structureHash !== after.structureHash) {
|
|
1197
1263
|
return true;
|
|
1198
1264
|
}
|
|
1265
|
+
if ((before.submitSignalHash || after.submitSignalHash) &&
|
|
1266
|
+
before.submitSignalHash !== after.submitSignalHash) {
|
|
1267
|
+
return true;
|
|
1268
|
+
}
|
|
1269
|
+
if ((before.resultSignalHash || after.resultSignalHash) &&
|
|
1270
|
+
before.resultSignalHash !== after.resultSignalHash) {
|
|
1271
|
+
return true;
|
|
1272
|
+
}
|
|
1273
|
+
if (before.validationBlockerCount > after.validationBlockerCount) {
|
|
1274
|
+
return true;
|
|
1275
|
+
}
|
|
1276
|
+
return false;
|
|
1277
|
+
}
|
|
1278
|
+
export function submitObservationChanged(before, after) {
|
|
1279
|
+
if (!before || !after) {
|
|
1280
|
+
return false;
|
|
1281
|
+
}
|
|
1282
|
+
if (before.url !== after.url || before.title !== after.title) {
|
|
1283
|
+
return true;
|
|
1284
|
+
}
|
|
1285
|
+
if (before.structureHash && after.structureHash && before.structureHash !== after.structureHash) {
|
|
1286
|
+
return true;
|
|
1287
|
+
}
|
|
1199
1288
|
if (before.validationBlockerCount > 0 && after.validationBlockerCount === 0) {
|
|
1200
1289
|
return true;
|
|
1201
1290
|
}
|
|
@@ -1232,9 +1321,7 @@ export async function diagnoseNoObservableProgress(page, locator) {
|
|
|
1232
1321
|
};
|
|
1233
1322
|
})
|
|
1234
1323
|
.catch(() => ({}));
|
|
1235
|
-
const pageSignals = await page
|
|
1236
|
-
.evaluate(NO_PROGRESS_PAGE_SIGNALS_SCRIPT)
|
|
1237
|
-
.catch(() => null);
|
|
1324
|
+
const pageSignals = await Promise.resolve(page.evaluate(NO_PROGRESS_PAGE_SIGNALS_SCRIPT)).catch(() => null);
|
|
1238
1325
|
if (!pageSignals || typeof pageSignals !== 'object' || Array.isArray(pageSignals)) {
|
|
1239
1326
|
return null;
|
|
1240
1327
|
}
|
|
@@ -1247,9 +1334,7 @@ export async function diagnoseNoObservableProgress(page, locator) {
|
|
|
1247
1334
|
const blockingOverlays = Array.isArray(pageSignals.blockingOverlays)
|
|
1248
1335
|
? pageSignals.blockingOverlays.filter((value) => typeof value === 'string')
|
|
1249
1336
|
: [];
|
|
1250
|
-
const rawTargetState = targetState &&
|
|
1251
|
-
typeof targetState === 'object' &&
|
|
1252
|
-
!Array.isArray(targetState)
|
|
1337
|
+
const rawTargetState = targetState && typeof targetState === 'object' && !Array.isArray(targetState)
|
|
1253
1338
|
? targetState
|
|
1254
1339
|
: undefined;
|
|
1255
1340
|
const normalizedTargetState = rawTargetState
|
|
@@ -1345,7 +1430,9 @@ export async function createAcceptanceProbe(args) {
|
|
|
1345
1430
|
trackedStates.push('focused');
|
|
1346
1431
|
}
|
|
1347
1432
|
const beforeLocatorObservation = trackedStates.length > 0 ? await captureLocatorState(locator, trackedStates) : null;
|
|
1348
|
-
const beforeContextHash = policy === 'value-change' || policy === 'submit'
|
|
1433
|
+
const beforeContextHash = policy === 'value-change' || policy === 'submit'
|
|
1434
|
+
? null
|
|
1435
|
+
: await captureLocatorContextHash(locator);
|
|
1349
1436
|
const surface = target.surfaceRef ? getSurface(session, target.surfaceRef) : null;
|
|
1350
1437
|
const surfaceLocator = surface ? await resolveSurfaceScopeRoot(page, surface) : null;
|
|
1351
1438
|
const pageReadLocator = await resolveTargetLocatorForRead(page, target, surface, action);
|
|
@@ -1405,11 +1492,11 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1405
1492
|
? [probe.locator, liveReadLocator]
|
|
1406
1493
|
: [probe.locator];
|
|
1407
1494
|
const liveOwnerLocator = probe.ownerTarget
|
|
1408
|
-
? (await resolveTargetLocatorForRead(probe.page, probe.ownerTarget, probe.ownerSurface, probe.action).catch(() => null)) ?? probe.ownerLocator
|
|
1495
|
+
? ((await resolveTargetLocatorForRead(probe.page, probe.ownerTarget, probe.ownerSurface, probe.action).catch(() => null)) ?? probe.ownerLocator)
|
|
1409
1496
|
: null;
|
|
1410
1497
|
const liveSurfaceLocator = probe.target.structure?.family === 'structured-grid' && probe.surface
|
|
1411
|
-
? (await resolveSurfaceScopeRoot(probe.page, probe.surface).catch(() => null)) ??
|
|
1412
|
-
probe.surfaceLocator
|
|
1498
|
+
? ((await resolveSurfaceScopeRoot(probe.page, probe.surface).catch(() => null)) ??
|
|
1499
|
+
probe.surfaceLocator)
|
|
1413
1500
|
: probe.surfaceLocator;
|
|
1414
1501
|
const afterLocatorObservation = probe.trackedStateKeys.length > 0
|
|
1415
1502
|
? await captureLocatorState(probe.locator, probe.trackedStateKeys)
|
|
@@ -1431,7 +1518,8 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1431
1518
|
? await captureLocatorContextHash(liveSurfaceLocator)
|
|
1432
1519
|
: probe.beforeSurfaceContextHash;
|
|
1433
1520
|
const targetValueChanged = probe.expectedValue === null && valueMeaningfullyChanged(probe.beforeValue, afterValue);
|
|
1434
|
-
const ownerValueChanged = probe.expectedValue === null &&
|
|
1521
|
+
const ownerValueChanged = probe.expectedValue === null &&
|
|
1522
|
+
valueMeaningfullyChanged(probe.beforeOwnerValue, afterOwnerValue);
|
|
1435
1523
|
const surfaceContextChanged = probe.expectedValue === null &&
|
|
1436
1524
|
probe.beforeSurfaceContextHash !== null &&
|
|
1437
1525
|
afterSurfaceContextHash !== null &&
|
|
@@ -1439,14 +1527,14 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1439
1527
|
switch (probe.policy) {
|
|
1440
1528
|
case 'value-change':
|
|
1441
1529
|
return valuesMatchExpected(probe.expectedValue, afterValue, probe.comparableValueType);
|
|
1442
|
-
case 'selection':
|
|
1530
|
+
case 'selection': {
|
|
1443
1531
|
const afterComparableValues = await captureLocatorComparableValuesFromCandidates(liveReadLocators);
|
|
1444
1532
|
const afterOwnerComparableValues = liveOwnerLocator
|
|
1445
1533
|
? await captureLocatorComparableValuesFromCandidates([liveOwnerLocator])
|
|
1446
1534
|
: [];
|
|
1447
1535
|
if (probe.expectedValue !== null) {
|
|
1448
|
-
return (valuesMatchAnyExpected(probe.expectedValue, afterComparableValues, probe.comparableValueType) ||
|
|
1449
|
-
valuesMatchAnyExpected(probe.expectedValue, afterOwnerComparableValues, probe.comparableValueType));
|
|
1536
|
+
return (valuesMatchAnyExpected(probe.expectedValue, afterComparableValues, probe.comparableValueType, { allowCompactActualSequence: true }) ||
|
|
1537
|
+
valuesMatchAnyExpected(probe.expectedValue, afterOwnerComparableValues, probe.comparableValueType, { allowCompactActualSequence: true }));
|
|
1450
1538
|
}
|
|
1451
1539
|
return (targetValueChanged ||
|
|
1452
1540
|
ownerValueChanged ||
|
|
@@ -1455,6 +1543,7 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1455
1543
|
locatorStateChanged(probe.beforeReadLocator, afterReadLocatorObservation) ||
|
|
1456
1544
|
probe.beforeContextHash !== afterContextHash ||
|
|
1457
1545
|
probe.beforeReadContextHash !== afterReadContextHash);
|
|
1546
|
+
}
|
|
1458
1547
|
case 'toggle':
|
|
1459
1548
|
return (locatorStateChanged(probe.beforeLocator, afterLocatorObservation) ||
|
|
1460
1549
|
locatorStateChanged(probe.beforeReadLocator, afterReadLocatorObservation));
|
|
@@ -1464,7 +1553,7 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1464
1553
|
locatorStateChanged(probe.beforeReadLocator, afterReadLocatorObservation) ||
|
|
1465
1554
|
probe.beforeContextHash !== afterContextHash ||
|
|
1466
1555
|
probe.beforeReadContextHash !== afterReadContextHash);
|
|
1467
|
-
case 'date-selection':
|
|
1556
|
+
case 'date-selection': {
|
|
1468
1557
|
const afterDateComparableValues = await captureLocatorComparableValuesFromCandidates(liveReadLocators);
|
|
1469
1558
|
const afterDateOwnerComparableValues = liveOwnerLocator
|
|
1470
1559
|
? await captureLocatorComparableValuesFromCandidates([liveOwnerLocator])
|
|
@@ -1481,6 +1570,7 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1481
1570
|
(probe.expectedValue === null &&
|
|
1482
1571
|
(probe.beforeContextHash !== afterContextHash ||
|
|
1483
1572
|
probe.beforeReadContextHash !== afterReadContextHash)));
|
|
1573
|
+
}
|
|
1484
1574
|
case 'submit':
|
|
1485
1575
|
return submitObservationChanged(probe.beforePage, afterPageObservation);
|
|
1486
1576
|
case 'navigation':
|
|
@@ -1494,7 +1584,7 @@ export async function evaluateAcceptanceProbe(probe, afterPageObservation) {
|
|
|
1494
1584
|
locatorStateChanged(probe.beforeReadLocator, afterReadLocatorObservation) ||
|
|
1495
1585
|
probe.beforeContextHash !== afterContextHash ||
|
|
1496
1586
|
probe.beforeReadContextHash !== afterReadContextHash ||
|
|
1497
|
-
|
|
1587
|
+
genericClickObservationChanged(probe.beforePage, afterPageObservation));
|
|
1498
1588
|
}
|
|
1499
1589
|
return false;
|
|
1500
1590
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-executor-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/action-executor-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAerD,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAkB7C,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWpE;AAED,wBAAsB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"action-executor-helpers.d.ts","sourceRoot":"","sources":["../../src/commands/action-executor-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAerD,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAkB7C,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAWpE;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAqB7F;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAsCf;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,MAAM,CAAC,CAOjB;AAkGD,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/E;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC;IACT,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC,CAqBD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,GAAG,IAAI,EACjC,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAkBR;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAarF"}
|
|
@@ -133,9 +133,13 @@ async function readTextEntryMetadata(locator) {
|
|
|
133
133
|
typeof locator.inputValue === 'function' ? locator.inputValue().catch(() => '') : '',
|
|
134
134
|
]);
|
|
135
135
|
const normalizedType = (type || '').toLowerCase();
|
|
136
|
-
const
|
|
137
|
-
|
|
138
|
-
|
|
136
|
+
const normalizedAutocomplete = (autocomplete || '').toLowerCase();
|
|
137
|
+
const normalizedName = (name || '').toLowerCase();
|
|
138
|
+
const cardAutocomplete = normalizedAutocomplete.startsWith('cc-');
|
|
139
|
+
const phoneLike = !cardAutocomplete &&
|
|
140
|
+
(normalizedType === 'tel' ||
|
|
141
|
+
normalizedAutocomplete.includes('tel') ||
|
|
142
|
+
normalizedName.includes('phone'));
|
|
139
143
|
const dateHintBlob = [type, autocomplete, name, placeholder, id]
|
|
140
144
|
.filter((value) => typeof value === 'string' && value.trim().length > 0)
|
|
141
145
|
.join(' ');
|
|
@@ -193,7 +197,11 @@ export async function planTextFillStrategy(locator, value, attempts) {
|
|
|
193
197
|
return {
|
|
194
198
|
normalizedValue: normalizeDateLikeValue(value, metadata),
|
|
195
199
|
preferSequential: metadata.phoneLike || metadata.popupBackedTextEntry || metadata.maskedDateLike,
|
|
196
|
-
settleMs: metadata.phoneLike
|
|
200
|
+
settleMs: metadata.phoneLike
|
|
201
|
+
? 120
|
|
202
|
+
: metadata.popupBackedTextEntry || metadata.maskedDateLike
|
|
203
|
+
? 80
|
|
204
|
+
: 0,
|
|
197
205
|
initialPhonePrefix: metadata.currentPhonePrefix,
|
|
198
206
|
blurAfterFill: metadata.maskedDateLike,
|
|
199
207
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-fallbacks.d.ts","sourceRoot":"","sources":["../../src/commands/action-fallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"action-fallbacks.d.ts","sourceRoot":"","sources":["../../src/commands/action-fallbacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,CAAC;AAcxD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,WAAW,CAU7F;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,GAAG,OAAO,GAAG,IAAI,CAsB3F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-result-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/action-result-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"action-result-resolution.d.ts","sourceRoot":"","sources":["../../src/commands/action-result-resolution.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,MAAM,qBAAqB,GAC7B,aAAa,GACb,cAAc,GACd,uBAAuB,GACvB,cAAc,CAAC;AAEnB,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IAC7C,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,cAAc,EAAE,iBAAiB,EAAE,CAAC;IACpC,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,GACvC,IAAI,CAAC,sBAAsB,EAAE,QAAQ,GAAG,kBAAkB,CAAC,CAqB7D;AAmBD,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,eAAe,EACtB,oBAAoB,EAAE,eAAe,GAAG,IAAI,GAC3C,OAAO,CAAC,sBAAsB,CAAC,CAsEjC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { captureLocatorContextHash } from './action-acceptance.js';
|
|
1
|
+
import { captureLocatorContextHash, } from './action-acceptance.js';
|
|
2
2
|
import { resolveSurfaceScopeRoot } from './target-resolution.js';
|
|
3
3
|
export function reduceSubmitResultClaims(claims) {
|
|
4
4
|
const hardBlockers = claims.filter((claim) => claim.kind === 'hard_blocker');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-value-projection.d.ts","sourceRoot":"","sources":["../../src/commands/action-value-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAC7B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEN,KAAK,sBAAsB,GAAG;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAoHF,iBAAS,mCAAmC,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"action-value-projection.d.ts","sourceRoot":"","sources":["../../src/commands/action-value-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAC7B;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEN,KAAK,sBAAsB,GAAG;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAoHF,iBAAS,mCAAmC,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,GAAG,IAAI,CAK5F;AAaD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAsCxC;AAED,eAAO,MAAM,2BAA2B;;;CAGvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datepicker-action-executor.d.ts","sourceRoot":"","sources":["../../src/commands/datepicker-action-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,
|
|
1
|
+
{"version":3,"file":"datepicker-action-executor.d.ts","sourceRoot":"","sources":["../../src/commands/datepicker-action-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAmBnG,KAAK,uBAAuB,GAAG;IAC7B,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7F,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF,0BAA0B,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpF,wBAAwB,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjG,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC;AAkKF,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAyElB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor-validation.d.ts","sourceRoot":"","sources":["../../src/commands/descriptor-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"descriptor-validation.d.ts","sourceRoot":"","sources":["../../src/commands/descriptor-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO1D;AAED,eAAO,MAAM,4BAA4B,QAaxC,CAAC;AAEF,iBAAS,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAEzE;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwBF,wBAAsB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWtF;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAWxC;AAOD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,sBAAsB,GAAG,IAAI,GACtC,OAAO,CAoCT;AAED,eAAO,MAAM,0BAA0B;;;;;CAKtC,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6EnF"}
|