@noodleseed/one 0.89.1 → 0.91.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/auth-live-doctor.js +1 -1
- package/dist/commands/auth-live-doctor.js.map +1 -1
- package/dist/commands/billing-enforcement-activation-ops.js +1 -11
- package/dist/commands/billing-enforcement-activation-ops.js.map +1 -1
- package/dist/commands/billing-enforcement-ops.js +1 -11
- package/dist/commands/billing-enforcement-ops.js.map +1 -1
- package/dist/commands/billing-metering-ops.js +1 -11
- package/dist/commands/billing-metering-ops.js.map +1 -1
- package/dist/commands/billing-metering-validation-ops.js +1 -11
- package/dist/commands/billing-metering-validation-ops.js.map +1 -1
- package/dist/commands/billing-read-ops.js +1 -11
- package/dist/commands/billing-read-ops.js.map +1 -1
- package/dist/commands/billing-stripe-ops.js +1 -11
- package/dist/commands/billing-stripe-ops.js.map +1 -1
- package/dist/commands/catalog-data-local-authoring.d.ts.map +1 -1
- package/dist/commands/catalog-data-local-authoring.js +27 -0
- package/dist/commands/catalog-data-local-authoring.js.map +1 -1
- package/dist/commands/design.d.ts +7 -0
- package/dist/commands/design.d.ts.map +1 -0
- package/dist/commands/design.js +95 -0
- package/dist/commands/design.js.map +1 -0
- package/dist/commands/devtools.d.ts.map +1 -1
- package/dist/commands/devtools.js +5 -1
- package/dist/commands/devtools.js.map +1 -1
- package/dist/commands/org-admin.d.ts +6 -0
- package/dist/commands/org-admin.d.ts.map +1 -1
- package/dist/commands/org-admin.js +1 -29
- package/dist/commands/org-admin.js.map +1 -1
- package/dist/commands/org-domains.js +1 -22
- package/dist/commands/org-domains.js.map +1 -1
- package/dist/commands/org-member-args.d.ts +1 -1
- package/dist/commands/org-member-args.d.ts.map +1 -1
- package/dist/commands/org-member-args.js +1 -10
- package/dist/commands/org-member-args.js.map +1 -1
- package/dist/commands/org-openai-challenge.js +1 -22
- package/dist/commands/org-openai-challenge.js.map +1 -1
- package/dist/commands/platform-account-reset-args.d.ts.map +1 -1
- package/dist/commands/platform-account-reset-args.js +1 -6
- package/dist/commands/platform-account-reset-args.js.map +1 -1
- package/dist/commands/platform-account-reset-ops.js +1 -11
- package/dist/commands/platform-account-reset-ops.js.map +1 -1
- package/dist/commands/platform-auth-migration-args.d.ts +2 -0
- package/dist/commands/platform-auth-migration-args.d.ts.map +1 -1
- package/dist/commands/platform-auth-migration-args.js +2 -1
- package/dist/commands/platform-auth-migration-args.js.map +1 -1
- package/dist/commands/platform-auth-migration-ops.js +1 -11
- package/dist/commands/platform-auth-migration-ops.js.map +1 -1
- package/dist/commands/shared.d.ts +6 -0
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +34 -0
- package/dist/commands/shared.js.map +1 -1
- package/dist/deploy.d.ts +2 -0
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js +4 -4
- package/dist/deploy.js.map +1 -1
- package/dist/dev.d.ts.map +1 -1
- package/dist/dev.js +1 -7
- package/dist/dev.js.map +1 -1
- package/dist/devtools-brand.d.ts +14 -0
- package/dist/devtools-brand.d.ts.map +1 -0
- package/dist/devtools-brand.js +98 -0
- package/dist/devtools-brand.js.map +1 -0
- package/dist/devtools-chat-anthropic.d.ts +3 -0
- package/dist/devtools-chat-anthropic.d.ts.map +1 -0
- package/dist/devtools-chat-anthropic.js +75 -0
- package/dist/devtools-chat-anthropic.js.map +1 -0
- package/dist/devtools-chat-gemini.d.ts +3 -0
- package/dist/devtools-chat-gemini.d.ts.map +1 -0
- package/dist/devtools-chat-gemini.js +82 -0
- package/dist/devtools-chat-gemini.js.map +1 -0
- package/dist/devtools-chat-types.d.ts +64 -0
- package/dist/devtools-chat-types.d.ts.map +1 -0
- package/dist/devtools-chat-types.js +64 -0
- package/dist/devtools-chat-types.js.map +1 -0
- package/dist/devtools-chat.d.ts +7 -39
- package/dist/devtools-chat.d.ts.map +1 -1
- package/dist/devtools-chat.js +33 -48
- package/dist/devtools-chat.js.map +1 -1
- package/dist/devtools-copy-styles.d.ts +3 -0
- package/dist/devtools-copy-styles.d.ts.map +1 -0
- package/dist/devtools-copy-styles.js +54 -0
- package/dist/devtools-copy-styles.js.map +1 -0
- package/dist/devtools-design-brief.d.ts +10 -0
- package/dist/devtools-design-brief.d.ts.map +1 -0
- package/dist/devtools-design-brief.js +121 -0
- package/dist/devtools-design-brief.js.map +1 -0
- package/dist/devtools-design-contract.d.ts +74 -0
- package/dist/devtools-design-contract.d.ts.map +1 -0
- package/dist/devtools-design-contract.js +306 -0
- package/dist/devtools-design-contract.js.map +1 -0
- package/dist/devtools-design-element.d.ts +6 -0
- package/dist/devtools-design-element.d.ts.map +1 -0
- package/dist/devtools-design-element.js +233 -0
- package/dist/devtools-design-element.js.map +1 -0
- package/dist/devtools-design-preview.d.ts +6 -0
- package/dist/devtools-design-preview.d.ts.map +1 -0
- package/dist/devtools-design-preview.js +438 -0
- package/dist/devtools-design-preview.js.map +1 -0
- package/dist/devtools-design-routes.d.ts +14 -0
- package/dist/devtools-design-routes.d.ts.map +1 -0
- package/dist/devtools-design-routes.js +197 -0
- package/dist/devtools-design-routes.js.map +1 -0
- package/dist/devtools-design-store.d.ts +16 -0
- package/dist/devtools-design-store.d.ts.map +1 -0
- package/dist/devtools-design-store.js +209 -0
- package/dist/devtools-design-store.js.map +1 -0
- package/dist/devtools-design-styles.d.ts +3 -0
- package/dist/devtools-design-styles.d.ts.map +1 -0
- package/dist/devtools-design-styles.js +509 -0
- package/dist/devtools-design-styles.js.map +1 -0
- package/dist/devtools-design.d.ts +3 -0
- package/dist/devtools-design.d.ts.map +1 -0
- package/dist/devtools-design.js +455 -0
- package/dist/devtools-design.js.map +1 -0
- package/dist/devtools-harness.d.ts +2 -2
- package/dist/devtools-harness.d.ts.map +1 -1
- package/dist/devtools-harness.js +138 -221
- package/dist/devtools-harness.js.map +1 -1
- package/dist/devtools-json.d.ts +10 -0
- package/dist/devtools-json.d.ts.map +1 -0
- package/dist/devtools-json.js +23 -0
- package/dist/devtools-json.js.map +1 -0
- package/dist/devtools-preview-control-styles.d.ts +3 -0
- package/dist/devtools-preview-control-styles.d.ts.map +1 -0
- package/dist/devtools-preview-control-styles.js +207 -0
- package/dist/devtools-preview-control-styles.js.map +1 -0
- package/dist/devtools-preview.d.ts +10 -3
- package/dist/devtools-preview.d.ts.map +1 -1
- package/dist/devtools-preview.js +192 -43
- package/dist/devtools-preview.js.map +1 -1
- package/dist/devtools-provider-logos.d.ts +5 -0
- package/dist/devtools-provider-logos.d.ts.map +1 -0
- package/dist/devtools-provider-logos.js +5 -0
- package/dist/devtools-provider-logos.js.map +1 -0
- package/dist/devtools-responsive-styles.d.ts +3 -0
- package/dist/devtools-responsive-styles.d.ts.map +1 -0
- package/dist/devtools-responsive-styles.js +90 -0
- package/dist/devtools-responsive-styles.js.map +1 -0
- package/dist/devtools-styles.d.ts +3 -0
- package/dist/devtools-styles.d.ts.map +1 -0
- package/dist/devtools-styles.js +694 -0
- package/dist/devtools-styles.js.map +1 -0
- package/dist/local-target.d.ts.map +1 -1
- package/dist/local-target.js +1 -6
- package/dist/local-target.js.map +1 -1
- package/dist/plugin-mode/build-readiness-server.d.ts +4 -10
- package/dist/plugin-mode/build-readiness-server.d.ts.map +1 -1
- package/dist/plugin-mode/build-readiness-server.js +68 -67
- package/dist/plugin-mode/build-readiness-server.js.map +1 -1
- package/dist/plugin-mode/plugin-command-runner.d.ts +41 -0
- package/dist/plugin-mode/plugin-command-runner.d.ts.map +1 -0
- package/dist/plugin-mode/plugin-command-runner.js +122 -0
- package/dist/plugin-mode/plugin-command-runner.js.map +1 -0
- package/dist/plugin-mode/plugin-operation-contract.d.ts +237 -0
- package/dist/plugin-mode/plugin-operation-contract.d.ts.map +1 -0
- package/dist/plugin-mode/plugin-operation-contract.js +164 -0
- package/dist/plugin-mode/plugin-operation-contract.js.map +1 -0
- package/dist/plugin-mode/plugin-operation-tools.d.ts +20 -0
- package/dist/plugin-mode/plugin-operation-tools.d.ts.map +1 -0
- package/dist/plugin-mode/plugin-operation-tools.js +289 -0
- package/dist/plugin-mode/plugin-operation-tools.js.map +1 -0
- package/dist/preview-session.d.ts +5 -0
- package/dist/preview-session.d.ts.map +1 -1
- package/dist/preview-session.js +23 -5
- package/dist/preview-session.js.map +1 -1
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +1 -7
- package/dist/project.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/hook-notes.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js +16 -12
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-bundle.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/plugin-marketplace-docs.js +9 -9
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js +12 -0
- package/node_modules/@noodle-borg/agent-kit/dist/skill-design-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js +4 -4
- package/node_modules/@noodle-borg/agent-kit/dist/skill-feedback-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js +6 -3
- package/node_modules/@noodle-borg/agent-kit/dist/skill-router.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts +3 -1
- package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
- package/node_modules/@noodle-borg/auth/dist/verify.js +16 -4
- package/node_modules/@noodle-borg/auth/dist/verify.js.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts +0 -2
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.d.ts.map +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js +0 -76
- package/node_modules/@noodle-borg/compiler/dist/widget-ui-style.js.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-defs/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +2 -8
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +8 -237
- package/node_modules/@noodle-borg/connector-http/dist/http-connector.js.map +1 -1
- package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts +26 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-response.d.ts.map +1 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js +249 -0
- package/node_modules/@noodle-borg/connector-http/dist/http-response.js.map +1 -0
- package/node_modules/@noodle-borg/module-audit/dist/route.d.ts +0 -2
- package/node_modules/@noodle-borg/module-audit/dist/route.d.ts.map +1 -1
- package/node_modules/@noodle-borg/module-audit/dist/route.js +0 -4
- package/node_modules/@noodle-borg/module-audit/dist/route.js.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts +0 -2
- package/node_modules/@noodle-borg/protocol/dist/input-validation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/protocol/dist/input-validation.js +1 -5
- package/node_modules/@noodle-borg/protocol/dist/input-validation.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +0 -2
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +0 -7
- package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts +1 -3
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +1 -14
- package/node_modules/@noodle-borg/service/dist/credential-binding-index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js +8 -5
- package/node_modules/@noodle-borg/service/dist/customer-verifier.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +5 -5
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts +0 -2
- package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js +0 -6
- package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/oauth/console-url.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/console-url.js +4 -0
- package/node_modules/@noodle-borg/service/dist/oauth/console-url.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +2 -1
- package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts +1 -3
- package/node_modules/@noodle-borg/service/dist/registry-targets.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-targets.js +0 -17
- package/node_modules/@noodle-borg/service/dist/registry-targets.js.map +1 -1
- package/node_modules/@noodle-borg/service/package.json +0 -1
- package/package.json +1 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts +0 -2
- package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.d.ts.map +0 -1
- package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.js +0 -22
- package/node_modules/@noodle-borg/compiler/dist/widget-tailwind-tokens.js.map +0 -1
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
export const DESIGN_SESSION_VERSION = 1;
|
|
2
|
+
export const DESIGN_MAX_BODY_BYTES = 256 * 1024;
|
|
3
|
+
export const DESIGN_STYLE_PROPERTIES = [
|
|
4
|
+
'color',
|
|
5
|
+
'font-family',
|
|
6
|
+
'font-size',
|
|
7
|
+
'font-weight',
|
|
8
|
+
'line-height',
|
|
9
|
+
'letter-spacing',
|
|
10
|
+
'text-align',
|
|
11
|
+
'background-color',
|
|
12
|
+
'opacity',
|
|
13
|
+
'padding-top',
|
|
14
|
+
'padding-right',
|
|
15
|
+
'padding-bottom',
|
|
16
|
+
'padding-left',
|
|
17
|
+
'margin-top',
|
|
18
|
+
'margin-right',
|
|
19
|
+
'margin-bottom',
|
|
20
|
+
'margin-left',
|
|
21
|
+
'row-gap',
|
|
22
|
+
'column-gap',
|
|
23
|
+
'display',
|
|
24
|
+
'flex-direction',
|
|
25
|
+
'align-items',
|
|
26
|
+
'justify-content',
|
|
27
|
+
'width',
|
|
28
|
+
'min-width',
|
|
29
|
+
'max-width',
|
|
30
|
+
'height',
|
|
31
|
+
'min-height',
|
|
32
|
+
'max-height',
|
|
33
|
+
'border-color',
|
|
34
|
+
'border-width',
|
|
35
|
+
'border-style',
|
|
36
|
+
'border-radius',
|
|
37
|
+
];
|
|
38
|
+
const STYLE_PROPERTY_SET = new Set(DESIGN_STYLE_PROPERTIES);
|
|
39
|
+
const GENERATED_ID = /^(?::r\d+:|react[-_:]|radix[-_:]|headlessui[-_:]|[a-f0-9]{12,}|[A-Za-z_-]*\d{7,})$/i;
|
|
40
|
+
function object(value, path) {
|
|
41
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
42
|
+
throw new Error(`${path} must be an object`);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function only(value, allowed, path) {
|
|
47
|
+
const allowedSet = new Set(allowed);
|
|
48
|
+
const unknown = Object.keys(value).find((key) => !allowedSet.has(key));
|
|
49
|
+
if (unknown !== undefined)
|
|
50
|
+
throw new Error(`unknown ${path} field: ${unknown}`);
|
|
51
|
+
}
|
|
52
|
+
function text(value, path, max = 4000) {
|
|
53
|
+
if (typeof value !== 'string')
|
|
54
|
+
throw new Error(`${path} must be a string`);
|
|
55
|
+
if (value.length > max)
|
|
56
|
+
throw new Error(`${path} must contain at most ${max} characters`);
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
function optionalText(value, path, max = 4000) {
|
|
60
|
+
return value === undefined ? undefined : text(value, path, max);
|
|
61
|
+
}
|
|
62
|
+
function projectRelativePath(value, path) {
|
|
63
|
+
const parsed = text(value, path, 500);
|
|
64
|
+
const normalized = parsed.replaceAll('\\', '/');
|
|
65
|
+
if (normalized.length === 0 ||
|
|
66
|
+
normalized.startsWith('/') ||
|
|
67
|
+
/^[A-Za-z]:\//.test(normalized) ||
|
|
68
|
+
normalized.split('/').includes('..')) {
|
|
69
|
+
throw new Error(`${path} must be project-relative`);
|
|
70
|
+
}
|
|
71
|
+
return parsed;
|
|
72
|
+
}
|
|
73
|
+
function finite(value, path) {
|
|
74
|
+
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
75
|
+
throw new Error(`${path} must be a finite number`);
|
|
76
|
+
}
|
|
77
|
+
return value;
|
|
78
|
+
}
|
|
79
|
+
function integer(value, path, minimum = 0) {
|
|
80
|
+
const parsed = finite(value, path);
|
|
81
|
+
if (!Number.isInteger(parsed) || parsed < minimum) {
|
|
82
|
+
throw new Error(`${path} must be an integer greater than or equal to ${minimum}`);
|
|
83
|
+
}
|
|
84
|
+
return parsed;
|
|
85
|
+
}
|
|
86
|
+
function list(value, path, max) {
|
|
87
|
+
if (!Array.isArray(value))
|
|
88
|
+
throw new Error(`${path} must be an array`);
|
|
89
|
+
if (value.length > max)
|
|
90
|
+
throw new Error(`${path} must contain at most ${max} items`);
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
function stringList(value, path, max, itemMax = 500) {
|
|
94
|
+
return list(value, path, max).map((item, index) => text(item, `${path}[${index}]`, itemMax));
|
|
95
|
+
}
|
|
96
|
+
function enumValue(value, choices, path) {
|
|
97
|
+
if (typeof value !== 'string' || !choices.includes(value)) {
|
|
98
|
+
throw new Error(`${path} must be one of ${choices.join(', ')}`);
|
|
99
|
+
}
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
function timestamp(value, path) {
|
|
103
|
+
const parsed = text(value, path, 64);
|
|
104
|
+
const date = new Date(parsed);
|
|
105
|
+
if (Number.isNaN(date.valueOf()) || date.toISOString() !== parsed) {
|
|
106
|
+
throw new Error(`${path} must be an ISO timestamp`);
|
|
107
|
+
}
|
|
108
|
+
return parsed;
|
|
109
|
+
}
|
|
110
|
+
function stableId(value) {
|
|
111
|
+
if (typeof value !== 'string')
|
|
112
|
+
return undefined;
|
|
113
|
+
const normalized = sanitizeVisibleText(value);
|
|
114
|
+
if (normalized.length === 0 || normalized.length > 120 || GENERATED_ID.test(normalized)) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
117
|
+
return normalized;
|
|
118
|
+
}
|
|
119
|
+
function optionalSanitized(value, max = 160) {
|
|
120
|
+
if (typeof value !== 'string')
|
|
121
|
+
return undefined;
|
|
122
|
+
const normalized = sanitizeVisibleText(value).slice(0, max);
|
|
123
|
+
return normalized.length > 0 ? normalized : undefined;
|
|
124
|
+
}
|
|
125
|
+
function sanitizedClasses(value) {
|
|
126
|
+
if (!Array.isArray(value))
|
|
127
|
+
return [];
|
|
128
|
+
return value
|
|
129
|
+
.filter((item) => typeof item === 'string')
|
|
130
|
+
.map((item) => sanitizeVisibleText(item).slice(0, 120))
|
|
131
|
+
.filter(Boolean)
|
|
132
|
+
.sort()
|
|
133
|
+
.slice(0, 20);
|
|
134
|
+
}
|
|
135
|
+
function rect(value, path) {
|
|
136
|
+
const input = object(value, path);
|
|
137
|
+
only(input, ['x', 'y', 'width', 'height'], path);
|
|
138
|
+
return {
|
|
139
|
+
x: finite(input.x, `${path}.x`),
|
|
140
|
+
y: finite(input.y, `${path}.y`),
|
|
141
|
+
width: finite(input.width, `${path}.width`),
|
|
142
|
+
height: finite(input.height, `${path}.height`),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
function computedStyles(value, path) {
|
|
146
|
+
const input = object(value, path);
|
|
147
|
+
const result = {};
|
|
148
|
+
for (const [property, raw] of Object.entries(input)) {
|
|
149
|
+
if (!STYLE_PROPERTY_SET.has(property))
|
|
150
|
+
continue;
|
|
151
|
+
result[property] = text(raw, `${path}.${property}`, 500);
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
function resolution(value, path) {
|
|
156
|
+
const input = object(value, path);
|
|
157
|
+
only(input, ['confidence', 'evidence', 'status'], path);
|
|
158
|
+
const confidence = finite(input.confidence, `${path}.confidence`);
|
|
159
|
+
if (confidence < 0 || confidence > 100) {
|
|
160
|
+
throw new Error(`${path}.confidence must be between 0 and 100`);
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
confidence,
|
|
164
|
+
evidence: stringList(input.evidence, `${path}.evidence`, 20, 160),
|
|
165
|
+
status: enumValue(input.status, ['resolved', 'ambiguous', 'unresolved'], `${path}.status`),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function ancestry(value, path, strict) {
|
|
169
|
+
return list(value, path, strict ? 6 : Number.MAX_SAFE_INTEGER)
|
|
170
|
+
.slice(0, 6)
|
|
171
|
+
.map((item, index) => {
|
|
172
|
+
const segmentPath = `${path}[${index}]`;
|
|
173
|
+
const input = object(item, segmentPath);
|
|
174
|
+
if (strict) {
|
|
175
|
+
only(input, ['tagName', 'role', 'stableId', 'classNames', 'nthOfType'], segmentPath);
|
|
176
|
+
}
|
|
177
|
+
const id = stableId(input.stableId ?? input.id);
|
|
178
|
+
const role = optionalSanitized(input.role, 80);
|
|
179
|
+
return {
|
|
180
|
+
tagName: text(input.tagName, `${segmentPath}.tagName`, 40).toLowerCase(),
|
|
181
|
+
...(role ? { role } : {}),
|
|
182
|
+
...(id ? { stableId: id } : {}),
|
|
183
|
+
classNames: sanitizedClasses(input.classNames),
|
|
184
|
+
nthOfType: integer(input.nthOfType, `${segmentPath}.nthOfType`, 1),
|
|
185
|
+
};
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
export function sanitizeVisibleText(value) {
|
|
189
|
+
return value.replace(/\s+/g, ' ').trim().slice(0, 160);
|
|
190
|
+
}
|
|
191
|
+
function sanitizeElementEvidenceAt(value, path, strict = false) {
|
|
192
|
+
const input = object(value, path);
|
|
193
|
+
const attributes = input.attributes === undefined ? {} : object(input.attributes, `${path}.attributes`);
|
|
194
|
+
const providedHints = input.authorHints === undefined ? {} : object(input.authorHints, `${path}.authorHints`);
|
|
195
|
+
const id = stableId(input.stableId ?? input.id);
|
|
196
|
+
const testId = optionalSanitized(providedHints.testId ?? attributes['data-testid'], 120);
|
|
197
|
+
const test = optionalSanitized(providedHints.test ?? attributes['data-test'], 120);
|
|
198
|
+
const component = optionalSanitized(providedHints.component ?? attributes['data-component'], 120);
|
|
199
|
+
const authorHints = {
|
|
200
|
+
...(testId ? { testId } : {}),
|
|
201
|
+
...(test ? { test } : {}),
|
|
202
|
+
...(component ? { component } : {}),
|
|
203
|
+
};
|
|
204
|
+
const accessibleName = optionalSanitized(input.accessibleName);
|
|
205
|
+
const visibleText = optionalSanitized(input.visibleText);
|
|
206
|
+
const role = optionalSanitized(input.role, 80);
|
|
207
|
+
return {
|
|
208
|
+
tagName: text(input.tagName, `${path}.tagName`, 40).toLowerCase(),
|
|
209
|
+
...(role ? { role } : {}),
|
|
210
|
+
...(accessibleName ? { accessibleName } : {}),
|
|
211
|
+
...(visibleText ? { visibleText } : {}),
|
|
212
|
+
...(id ? { stableId: id } : {}),
|
|
213
|
+
classNames: sanitizedClasses(input.classNames),
|
|
214
|
+
authorHints,
|
|
215
|
+
ancestry: ancestry(input.ancestry, `${path}.ancestry`, strict),
|
|
216
|
+
siblingIndex: integer(input.siblingIndex, `${path}.siblingIndex`),
|
|
217
|
+
siblingCount: integer(input.siblingCount, `${path}.siblingCount`),
|
|
218
|
+
rect: rect(input.rect, `${path}.rect`),
|
|
219
|
+
computedStyles: computedStyles(input.computedStyles, `${path}.computedStyles`),
|
|
220
|
+
resolution: resolution(input.resolution, `${path}.resolution`),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function sanitizeElementEvidence(value) {
|
|
224
|
+
return sanitizeElementEvidenceAt(value, 'element');
|
|
225
|
+
}
|
|
226
|
+
function validateTarget(value, path) {
|
|
227
|
+
const input = object(value, path);
|
|
228
|
+
only(input, [
|
|
229
|
+
'tagName',
|
|
230
|
+
'role',
|
|
231
|
+
'accessibleName',
|
|
232
|
+
'visibleText',
|
|
233
|
+
'stableId',
|
|
234
|
+
'classNames',
|
|
235
|
+
'authorHints',
|
|
236
|
+
'ancestry',
|
|
237
|
+
'siblingIndex',
|
|
238
|
+
'siblingCount',
|
|
239
|
+
'rect',
|
|
240
|
+
'computedStyles',
|
|
241
|
+
'resolution',
|
|
242
|
+
], path);
|
|
243
|
+
const hints = object(input.authorHints, `${path}.authorHints`);
|
|
244
|
+
only(hints, ['testId', 'test', 'component'], `${path}.authorHints`);
|
|
245
|
+
const styles = object(input.computedStyles, `${path}.computedStyles`);
|
|
246
|
+
const unsupportedStyle = Object.keys(styles).find((property) => !STYLE_PROPERTY_SET.has(property));
|
|
247
|
+
if (unsupportedStyle)
|
|
248
|
+
throw new Error(`${path}.computedStyles.${unsupportedStyle} is unsupported`);
|
|
249
|
+
return sanitizeElementEvidenceAt(input, path, true);
|
|
250
|
+
}
|
|
251
|
+
function validateChange(value, path) {
|
|
252
|
+
const input = object(value, path);
|
|
253
|
+
only(input, ['property', 'from', 'to'], path);
|
|
254
|
+
if (typeof input.property !== 'string' || !STYLE_PROPERTY_SET.has(input.property)) {
|
|
255
|
+
throw new Error(`${path}.property is unsupported`);
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
property: input.property,
|
|
259
|
+
from: text(input.from, `${path}.from`, 500),
|
|
260
|
+
to: text(input.to, `${path}.to`, 500),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
function validateAnnotation(value, path) {
|
|
264
|
+
const input = object(value, path);
|
|
265
|
+
only(input, ['id', 'intent', 'target', 'changes', 'acceptanceCriteria', 'preserve'], path);
|
|
266
|
+
return {
|
|
267
|
+
id: text(input.id, `${path}.id`, 120),
|
|
268
|
+
intent: text(input.intent, `${path}.intent`, 4000),
|
|
269
|
+
target: validateTarget(input.target, `${path}.target`),
|
|
270
|
+
changes: list(input.changes, `${path}.changes`, 100).map((item, index) => validateChange(item, `${path}.changes[${index}]`)),
|
|
271
|
+
acceptanceCriteria: stringList(input.acceptanceCriteria, `${path}.acceptanceCriteria`, 50),
|
|
272
|
+
preserve: stringList(input.preserve, `${path}.preserve`, 50),
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
export function validateDesignSession(value) {
|
|
276
|
+
const input = object(value, 'Design Session');
|
|
277
|
+
only(input, ['version', 'id', 'status', 'project', 'viewport', 'createdAt', 'updatedAt', 'annotations'], 'Design Session');
|
|
278
|
+
if (input.version !== DESIGN_SESSION_VERSION) {
|
|
279
|
+
throw new Error('unsupported Design Session version');
|
|
280
|
+
}
|
|
281
|
+
const project = object(input.project, 'Design Session project');
|
|
282
|
+
only(project, ['entrypoint', 'toolName', 'resourceUri'], 'Design Session project');
|
|
283
|
+
const viewport = object(input.viewport, 'Design Session viewport');
|
|
284
|
+
only(viewport, ['width', 'height', 'device', 'theme'], 'Design Session viewport');
|
|
285
|
+
const resourceUri = optionalText(project.resourceUri, 'project.resourceUri', 500);
|
|
286
|
+
return {
|
|
287
|
+
version: DESIGN_SESSION_VERSION,
|
|
288
|
+
id: text(input.id, 'id', 120),
|
|
289
|
+
status: enumValue(input.status, ['draft', 'ready'], 'status'),
|
|
290
|
+
project: {
|
|
291
|
+
entrypoint: projectRelativePath(project.entrypoint, 'project.entrypoint'),
|
|
292
|
+
toolName: text(project.toolName, 'project.toolName', 200),
|
|
293
|
+
...(resourceUri ? { resourceUri } : {}),
|
|
294
|
+
},
|
|
295
|
+
viewport: {
|
|
296
|
+
width: finite(viewport.width, 'viewport.width'),
|
|
297
|
+
height: finite(viewport.height, 'viewport.height'),
|
|
298
|
+
device: enumValue(viewport.device, ['desktop', 'mobile'], 'viewport.device'),
|
|
299
|
+
theme: enumValue(viewport.theme, ['light', 'dark'], 'viewport.theme'),
|
|
300
|
+
},
|
|
301
|
+
createdAt: timestamp(input.createdAt, 'createdAt'),
|
|
302
|
+
updatedAt: timestamp(input.updatedAt, 'updatedAt'),
|
|
303
|
+
annotations: list(input.annotations, 'annotations', 100).map((item, index) => validateAnnotation(item, `annotations[${index}]`)),
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=devtools-design-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-design-contract.js","sourceRoot":"","sources":["../src/devtools-design-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Same-origin browser helper for capturing privacy-safe widget element evidence and resolving it after
|
|
3
|
+
* reload. Kept dependency-free so it can run inside the classic devtools harness and widget iframe.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEVTOOLS_DESIGN_ELEMENT_CLIENT_JS: string;
|
|
6
|
+
//# sourceMappingURL=devtools-design-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-design-element.d.ts","sourceRoot":"","sources":["../src/devtools-design-element.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QAkOxC,CAAC"}
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { DESIGN_STYLE_PROPERTIES } from './devtools-design-contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Same-origin browser helper for capturing privacy-safe widget element evidence and resolving it after
|
|
4
|
+
* reload. Kept dependency-free so it can run inside the classic devtools harness and widget iframe.
|
|
5
|
+
*/
|
|
6
|
+
export const DEVTOOLS_DESIGN_ELEMENT_CLIENT_JS = `
|
|
7
|
+
(function(){
|
|
8
|
+
var STYLE_PROPERTIES=${JSON.stringify(DESIGN_STYLE_PROPERTIES)};
|
|
9
|
+
var RESOLVE_THRESHOLD=55;
|
|
10
|
+
var GENERATED_ID=/^(?::r\\d+:|react[-_:]|radix[-_:]|headlessui[-_:]|[a-f0-9]{12,}|[A-Za-z_-]*\\d{7,})$/i;
|
|
11
|
+
var INTERACTIVE_TAGS={button:"button",a:"link",textarea:"textbox",select:"combobox"};
|
|
12
|
+
|
|
13
|
+
function clean(value,max){
|
|
14
|
+
if(typeof value!=="string") return "";
|
|
15
|
+
return value.replace(/\\s+/g," ").trim().slice(0,max||160);
|
|
16
|
+
}
|
|
17
|
+
function stableId(value){
|
|
18
|
+
var id=clean(value,120);
|
|
19
|
+
return id&&!GENERATED_ID.test(id)?id:undefined;
|
|
20
|
+
}
|
|
21
|
+
function visibleText(element){
|
|
22
|
+
var parts=[];
|
|
23
|
+
function visit(node){
|
|
24
|
+
if(node.nodeType===3){ parts.push(node.nodeValue||""); return; }
|
|
25
|
+
if(node.nodeType!==1) return;
|
|
26
|
+
var current=node;
|
|
27
|
+
var tag=(current.tagName||"").toLowerCase();
|
|
28
|
+
if(tag==="script"||tag==="style"||tag==="template"||current.hidden||current.getAttribute("aria-hidden")==="true") return;
|
|
29
|
+
var style=current.ownerDocument&¤t.ownerDocument.defaultView
|
|
30
|
+
? current.ownerDocument.defaultView.getComputedStyle(current)
|
|
31
|
+
: null;
|
|
32
|
+
if(style&&(style.display==="none"||style.visibility==="hidden")) return;
|
|
33
|
+
for(var i=0;i<current.childNodes.length;i++) visit(current.childNodes[i]);
|
|
34
|
+
}
|
|
35
|
+
visit(element);
|
|
36
|
+
return clean(parts.join(" "),160);
|
|
37
|
+
}
|
|
38
|
+
function roleFor(element){
|
|
39
|
+
var explicit=clean(element.getAttribute("role")||"",80);
|
|
40
|
+
if(explicit) return explicit;
|
|
41
|
+
var tag=(element.tagName||"").toLowerCase();
|
|
42
|
+
if(tag==="input"){
|
|
43
|
+
var type=(element.getAttribute("type")||"text").toLowerCase();
|
|
44
|
+
if(type==="button"||type==="submit"||type==="reset") return "button";
|
|
45
|
+
if(type==="checkbox") return "checkbox";
|
|
46
|
+
if(type==="radio") return "radio";
|
|
47
|
+
if(type==="range") return "slider";
|
|
48
|
+
return "textbox";
|
|
49
|
+
}
|
|
50
|
+
return INTERACTIVE_TAGS[tag];
|
|
51
|
+
}
|
|
52
|
+
function accessibleName(element){
|
|
53
|
+
var labelled=clean(element.getAttribute("aria-label")||"",160);
|
|
54
|
+
if(labelled) return labelled;
|
|
55
|
+
var labelledBy=element.getAttribute("aria-labelledby");
|
|
56
|
+
if(labelledBy&&element.ownerDocument){
|
|
57
|
+
var label=element.ownerDocument.getElementById(labelledBy);
|
|
58
|
+
var labelText=label?visibleText(label):"";
|
|
59
|
+
if(labelText) return labelText;
|
|
60
|
+
}
|
|
61
|
+
var text=visibleText(element);
|
|
62
|
+
return text||undefined;
|
|
63
|
+
}
|
|
64
|
+
function classNames(element){
|
|
65
|
+
return Array.prototype.slice.call(element.classList||[])
|
|
66
|
+
.map(function(item){return clean(item,120);})
|
|
67
|
+
.filter(Boolean)
|
|
68
|
+
.sort()
|
|
69
|
+
.slice(0,20);
|
|
70
|
+
}
|
|
71
|
+
function authorHints(element){
|
|
72
|
+
var result={};
|
|
73
|
+
var testId=clean(element.getAttribute("data-testid")||"",160);
|
|
74
|
+
var test=clean(element.getAttribute("data-test")||"",160);
|
|
75
|
+
var component=clean(element.getAttribute("data-component")||"",160);
|
|
76
|
+
if(testId) result.testId=testId;
|
|
77
|
+
if(test) result.test=test;
|
|
78
|
+
if(component) result.component=component;
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
function nthOfType(element){
|
|
82
|
+
var index=1;
|
|
83
|
+
var sibling=element.previousElementSibling;
|
|
84
|
+
while(sibling){
|
|
85
|
+
if(sibling.tagName===element.tagName) index++;
|
|
86
|
+
sibling=sibling.previousElementSibling;
|
|
87
|
+
}
|
|
88
|
+
return index;
|
|
89
|
+
}
|
|
90
|
+
function segment(element){
|
|
91
|
+
var result={
|
|
92
|
+
tagName:(element.tagName||"").toLowerCase(),
|
|
93
|
+
classNames:classNames(element),
|
|
94
|
+
nthOfType:nthOfType(element)
|
|
95
|
+
};
|
|
96
|
+
var role=roleFor(element);
|
|
97
|
+
var id=stableId(element.id);
|
|
98
|
+
if(role) result.role=role;
|
|
99
|
+
if(id) result.stableId=id;
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
function ancestry(element){
|
|
103
|
+
var result=[];
|
|
104
|
+
var current=element.parentElement;
|
|
105
|
+
while(current&&result.length<6&¤t!==element.ownerDocument.documentElement){
|
|
106
|
+
result.unshift(segment(current));
|
|
107
|
+
current=current.parentElement;
|
|
108
|
+
}
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
function computedStyles(element){
|
|
112
|
+
var result={};
|
|
113
|
+
var view=element.ownerDocument&&element.ownerDocument.defaultView;
|
|
114
|
+
var style=view?view.getComputedStyle(element):null;
|
|
115
|
+
for(var i=0;i<STYLE_PROPERTIES.length;i++){
|
|
116
|
+
var property=STYLE_PROPERTIES[i];
|
|
117
|
+
var value=style?style.getPropertyValue(property):"";
|
|
118
|
+
if(value) result[property]=clean(value,500);
|
|
119
|
+
}
|
|
120
|
+
return result;
|
|
121
|
+
}
|
|
122
|
+
function siblingIndex(element){
|
|
123
|
+
return element.parentElement
|
|
124
|
+
? Array.prototype.indexOf.call(element.parentElement.children,element)
|
|
125
|
+
: 0;
|
|
126
|
+
}
|
|
127
|
+
function capture(element){
|
|
128
|
+
var rect=element.getBoundingClientRect();
|
|
129
|
+
var result={
|
|
130
|
+
tagName:(element.tagName||"").toLowerCase(),
|
|
131
|
+
classNames:classNames(element),
|
|
132
|
+
authorHints:authorHints(element),
|
|
133
|
+
ancestry:ancestry(element),
|
|
134
|
+
siblingIndex:siblingIndex(element),
|
|
135
|
+
siblingCount:element.parentElement?element.parentElement.children.length:1,
|
|
136
|
+
rect:{x:rect.x,y:rect.y,width:rect.width,height:rect.height},
|
|
137
|
+
computedStyles:computedStyles(element),
|
|
138
|
+
resolution:{confidence:100,evidence:["captured in current widget"],status:"resolved"}
|
|
139
|
+
};
|
|
140
|
+
var role=roleFor(element);
|
|
141
|
+
var name=accessibleName(element);
|
|
142
|
+
var text=visibleText(element);
|
|
143
|
+
var id=stableId(element.id);
|
|
144
|
+
if(role) result.role=role;
|
|
145
|
+
if(name) result.accessibleName=name;
|
|
146
|
+
if(text) result.visibleText=text;
|
|
147
|
+
if(id) result.stableId=id;
|
|
148
|
+
return result;
|
|
149
|
+
}
|
|
150
|
+
function hintsMatch(element,hints){
|
|
151
|
+
if(!hints) return false;
|
|
152
|
+
return Boolean(
|
|
153
|
+
(hints.testId&&element.getAttribute("data-testid")===hints.testId)||
|
|
154
|
+
(hints.test&&element.getAttribute("data-test")===hints.test)||
|
|
155
|
+
(hints.component&&element.getAttribute("data-component")===hints.component)
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
function ancestryScore(element,expected){
|
|
159
|
+
if(!Array.isArray(expected)||expected.length===0) return 0;
|
|
160
|
+
var actual=ancestry(element);
|
|
161
|
+
var matches=0;
|
|
162
|
+
var limit=Math.min(actual.length,expected.length);
|
|
163
|
+
for(var i=1;i<=limit;i++){
|
|
164
|
+
var left=actual[actual.length-i];
|
|
165
|
+
var right=expected[expected.length-i];
|
|
166
|
+
if(!left||!right||left.tagName!==right.tagName) break;
|
|
167
|
+
matches++;
|
|
168
|
+
if(right.stableId&&left.stableId===right.stableId) matches++;
|
|
169
|
+
if(right.role&&left.role===right.role) matches++;
|
|
170
|
+
}
|
|
171
|
+
return Math.min(15,Math.round((matches/Math.max(1,expected.length))*15));
|
|
172
|
+
}
|
|
173
|
+
function scored(element,fingerprint){
|
|
174
|
+
var score=0,evidence=[];
|
|
175
|
+
if(fingerprint.stableId&&stableId(element.id)===fingerprint.stableId){
|
|
176
|
+
score+=40; evidence.push("stable id");
|
|
177
|
+
}
|
|
178
|
+
if(hintsMatch(element,fingerprint.authorHints)){
|
|
179
|
+
score+=30; evidence.push("author hint");
|
|
180
|
+
}
|
|
181
|
+
var role=roleFor(element);
|
|
182
|
+
var name=accessibleName(element);
|
|
183
|
+
if(fingerprint.role&&role===fingerprint.role&&fingerprint.accessibleName&&name===fingerprint.accessibleName){
|
|
184
|
+
score+=20; evidence.push("role and accessible name");
|
|
185
|
+
}else if(fingerprint.role&&role===fingerprint.role){
|
|
186
|
+
score+=8; evidence.push("semantic role");
|
|
187
|
+
}
|
|
188
|
+
var text=visibleText(element);
|
|
189
|
+
if(fingerprint.visibleText&&text===fingerprint.visibleText){
|
|
190
|
+
score+=15; evidence.push("visible text");
|
|
191
|
+
}
|
|
192
|
+
var tree=ancestryScore(element,fingerprint.ancestry);
|
|
193
|
+
if(tree){ score+=tree; evidence.push("ancestry"); }
|
|
194
|
+
if(Number(fingerprint.siblingIndex)===siblingIndex(element)){
|
|
195
|
+
score+=5; evidence.push("sibling position");
|
|
196
|
+
}
|
|
197
|
+
return {element:element,confidence:Math.min(100,score),evidence:evidence};
|
|
198
|
+
}
|
|
199
|
+
function candidates(doc,fingerprint){
|
|
200
|
+
var pool=[];
|
|
201
|
+
if(fingerprint&&fingerprint.stableId){
|
|
202
|
+
var escapeValue=doc.defaultView&&doc.defaultView.CSS&&doc.defaultView.CSS.escape
|
|
203
|
+
? doc.defaultView.CSS.escape(fingerprint.stableId)
|
|
204
|
+
: fingerprint.stableId.replace(/[^a-zA-Z0-9_-]/g,"\\\\$&");
|
|
205
|
+
try{
|
|
206
|
+
var exact=doc.querySelector("#"+escapeValue);
|
|
207
|
+
if(exact){
|
|
208
|
+
var exactScore=scored(exact,fingerprint||{});
|
|
209
|
+
if(exactScore.confidence>=RESOLVE_THRESHOLD) return [exactScore];
|
|
210
|
+
pool.push(exact);
|
|
211
|
+
}
|
|
212
|
+
}catch(error){}
|
|
213
|
+
}
|
|
214
|
+
var nodes=doc.querySelectorAll(fingerprint&&fingerprint.tagName?fingerprint.tagName:"*");
|
|
215
|
+
for(var i=0;i<nodes.length;i++) if(pool.indexOf(nodes[i])<0) pool.push(nodes[i]);
|
|
216
|
+
return pool.map(function(element){return scored(element,fingerprint||{});})
|
|
217
|
+
.sort(function(a,b){return b.confidence-a.confidence;});
|
|
218
|
+
}
|
|
219
|
+
function resolve(doc,fingerprint){
|
|
220
|
+
var ranked=candidates(doc,fingerprint);
|
|
221
|
+
var best=ranked[0];
|
|
222
|
+
var second=ranked[1];
|
|
223
|
+
if(!best||best.confidence<RESOLVE_THRESHOLD){
|
|
224
|
+
return {element:null,confidence:best?best.confidence:0,evidence:best?best.evidence:[],reason:"not_found"};
|
|
225
|
+
}
|
|
226
|
+
if(second&&best.confidence-second.confidence<10){
|
|
227
|
+
return {element:null,confidence:best.confidence,evidence:best.evidence,reason:"ambiguous"};
|
|
228
|
+
}
|
|
229
|
+
return best;
|
|
230
|
+
}
|
|
231
|
+
window.NoodleDesignElement={capture:capture,candidates:candidates,resolve:resolve};
|
|
232
|
+
})();`;
|
|
233
|
+
//# sourceMappingURL=devtools-design-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-design-element.js","sourceRoot":"","sources":["../src/devtools-design-element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;;yBAExB,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgO1D,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser state machine for local Design mode. It owns selection interception, reversible annotation
|
|
3
|
+
* history, preview-only CSS, debounced persistence, and ready-brief finalization.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEVTOOLS_DESIGN_PREVIEW_CLIENT_JS: string;
|
|
6
|
+
//# sourceMappingURL=devtools-design-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devtools-design-preview.d.ts","sourceRoot":"","sources":["../src/devtools-design-preview.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iCAAiC,QA+axC,CAAC"}
|