@ethlete/cli 3.0.0-next.21 → 3.0.0-next.23
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/CHANGELOG.md +198 -0
- package/design/assets.d.ts +9 -0
- package/design/define-call.ts +20 -11
- package/design/define-part.ts +102 -0
- package/design/embed-page.ts +70 -0
- package/design/interaction-rows.ts +32 -0
- package/design/mark-part.ts +66 -0
- package/design/svg-asset.ts +36 -0
- package/design/systems/config.json +10 -0
- package/design/systems/ethlete-components/components/button/button.ts +18 -0
- package/design/web/env.d.ts +20 -0
- package/design/web/frame.ts +173 -41
- package/design/wireframe-kit.ts +386 -0
- package/package.json +4 -2
- package/playwright/failure-reporter.d.ts +2 -0
- package/playwright/failure-reporter.js +1 -0
- package/src/index.js.map +1 -1
- package/src/lib/api/api-command.js.map +1 -1
- package/src/lib/api/api-context.js.map +1 -1
- package/src/lib/api/api-state.js.map +1 -1
- package/src/lib/api/auth-hint.js.map +1 -1
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/clone.js.map +1 -1
- package/src/lib/api/compose.js.map +1 -1
- package/src/lib/api/definition.js.map +1 -1
- package/src/lib/api/doctor.js.map +1 -1
- package/src/lib/api/fingerprint.js.map +1 -1
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/help.js.map +1 -1
- package/src/lib/api/index.js.map +1 -1
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/lock.js.map +1 -1
- package/src/lib/api/parse-argv.js.map +1 -1
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/resolve-checkout.js.map +1 -1
- package/src/lib/api/run-locked.js.map +1 -1
- package/src/lib/api/run-ready.js.map +1 -1
- package/src/lib/api/run-snapshot.js.map +1 -1
- package/src/lib/api/run-status.js.map +1 -1
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/seeds.js.map +1 -1
- package/src/lib/api/setup.js.map +1 -1
- package/src/lib/api/snapshot.js.map +1 -1
- package/src/lib/api/state.js.map +1 -1
- package/src/lib/api/suggest.js.map +1 -1
- package/src/lib/api/validate-definition.js.map +1 -1
- package/src/lib/auth/auth-command.js.map +1 -1
- package/src/lib/auth/composer-auth.js.map +1 -1
- package/src/lib/auth/composer-repositories.js.map +1 -1
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/auth/index.js.map +1 -1
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/index.js.map +1 -1
- package/src/lib/config/local-config.js.map +1 -1
- package/src/lib/design/asset-shot.d.ts +26 -0
- package/src/lib/design/asset-shot.js +191 -0
- package/src/lib/design/asset-shot.js.map +1 -0
- package/src/lib/design/browser.js.map +1 -1
- package/src/lib/design/calls-tsconfig.d.ts +14 -1
- package/src/lib/design/calls-tsconfig.js +23 -18
- package/src/lib/design/calls-tsconfig.js.map +1 -1
- package/src/lib/design/calls.d.ts +28 -0
- package/src/lib/design/calls.js +58 -0
- package/src/lib/design/calls.js.map +1 -0
- package/src/lib/design/changed-parts.d.ts +51 -0
- package/src/lib/design/changed-parts.js +103 -0
- package/src/lib/design/changed-parts.js.map +1 -0
- package/src/lib/design/check.js +53 -54
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/contact-sheet.d.ts +86 -0
- package/src/lib/design/contact-sheet.js +197 -0
- package/src/lib/design/contact-sheet.js.map +1 -0
- package/src/lib/design/design-command.js +167 -6
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/force-interactions.d.ts +13 -0
- package/src/lib/design/force-interactions.js +75 -0
- package/src/lib/design/force-interactions.js.map +1 -0
- package/src/lib/design/inbox-command.d.ts +21 -0
- package/src/lib/design/inbox-command.js +156 -0
- package/src/lib/design/inbox-command.js.map +1 -0
- package/src/lib/design/index.js.map +1 -1
- package/src/lib/design/json-layout.d.ts +5 -0
- package/src/lib/design/json-layout.js +41 -0
- package/src/lib/design/json-layout.js.map +1 -0
- package/src/lib/design/legacy.d.ts +7 -0
- package/src/lib/design/legacy.js +23 -8
- package/src/lib/design/legacy.js.map +1 -1
- package/src/lib/design/merge-compare.d.ts +57 -0
- package/src/lib/design/merge-compare.js +80 -0
- package/src/lib/design/merge-compare.js.map +1 -0
- package/src/lib/design/missing-package.js.map +1 -1
- package/src/lib/design/new-call.js.map +1 -1
- package/src/lib/design/part-marks.d.ts +12 -0
- package/src/lib/design/part-marks.js +38 -0
- package/src/lib/design/part-marks.js.map +1 -0
- package/src/lib/design/paths.d.ts +35 -2
- package/src/lib/design/paths.js +62 -4
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/product-command.d.ts +38 -0
- package/src/lib/design/product-command.js +158 -0
- package/src/lib/design/product-command.js.map +1 -0
- package/src/lib/design/ready-shots.d.ts +13 -0
- package/src/lib/design/ready-shots.js +55 -0
- package/src/lib/design/ready-shots.js.map +1 -0
- package/src/lib/design/render-fields.js.map +1 -1
- package/src/lib/design/render-packages.js.map +1 -1
- package/src/lib/design/render-worker.js.map +1 -1
- package/src/lib/design/render.d.ts +11 -2
- package/src/lib/design/render.js +60 -15
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.d.ts +17 -0
- package/src/lib/design/serve.js +487 -103
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/shot-command.d.ts +100 -0
- package/src/lib/design/shot-command.js +453 -0
- package/src/lib/design/shot-command.js.map +1 -0
- package/src/lib/design/shot.d.ts +97 -0
- package/src/lib/design/shot.js +346 -0
- package/src/lib/design/shot.js.map +1 -0
- package/src/lib/design/sketch-at.d.ts +16 -0
- package/src/lib/design/sketch-at.js +34 -0
- package/src/lib/design/sketch-at.js.map +1 -0
- package/src/lib/design/sketch-command.d.ts +15 -0
- package/src/lib/design/sketch-command.js +618 -0
- package/src/lib/design/sketch-command.js.map +1 -0
- package/src/lib/design/ssr-shims.js.map +1 -1
- package/src/lib/design/stamp.js.map +1 -1
- package/src/lib/design/status.d.ts +2 -2
- package/src/lib/design/status.js +2 -2
- package/src/lib/design/status.js.map +1 -1
- package/src/lib/design/studio-api.d.ts +112 -0
- package/src/lib/design/studio-api.js +489 -0
- package/src/lib/design/studio-api.js.map +1 -0
- package/src/lib/design/system/accept-command.d.ts +7 -0
- package/src/lib/design/system/accept-command.js +55 -0
- package/src/lib/design/system/accept-command.js.map +1 -0
- package/src/lib/design/system/assets.d.ts +34 -0
- package/src/lib/design/system/assets.js +64 -0
- package/src/lib/design/system/assets.js.map +1 -0
- package/src/lib/design/system/base.d.ts +33 -0
- package/src/lib/design/system/base.js +49 -0
- package/src/lib/design/system/base.js.map +1 -0
- package/src/lib/design/system/check-system.d.ts +23 -0
- package/src/lib/design/system/check-system.js +151 -0
- package/src/lib/design/system/check-system.js.map +1 -0
- package/src/lib/design/system/colour.d.ts +2 -0
- package/src/lib/design/system/colour.js +9 -0
- package/src/lib/design/system/colour.js.map +1 -0
- package/src/lib/design/system/comments/comment.d.ts +196 -0
- package/src/lib/design/system/comments/comment.js +332 -0
- package/src/lib/design/system/comments/comment.js.map +1 -0
- package/src/lib/design/system/comments/complete.d.ts +15 -0
- package/src/lib/design/system/comments/complete.js +63 -0
- package/src/lib/design/system/comments/complete.js.map +1 -0
- package/src/lib/design/system/comments/inbox.d.ts +49 -0
- package/src/lib/design/system/comments/inbox.js +100 -0
- package/src/lib/design/system/comments/inbox.js.map +1 -0
- package/src/lib/design/system/css-source.d.ts +12 -0
- package/src/lib/design/system/css-source.js +39 -0
- package/src/lib/design/system/css-source.js.map +1 -0
- package/src/lib/design/system/flows/flow.d.ts +66 -0
- package/src/lib/design/system/flows/flow.js +157 -0
- package/src/lib/design/system/flows/flow.js.map +1 -0
- package/src/lib/design/system/imports.d.ts +70 -0
- package/src/lib/design/system/imports.js +159 -0
- package/src/lib/design/system/imports.js.map +1 -0
- package/src/lib/design/system/kit.d.ts +4 -0
- package/src/lib/design/system/kit.js +51 -0
- package/src/lib/design/system/kit.js.map +1 -0
- package/src/lib/design/system/layers.d.ts +9 -0
- package/src/lib/design/system/layers.js +16 -0
- package/src/lib/design/system/layers.js.map +1 -0
- package/src/lib/design/system/list-system.d.ts +104 -0
- package/src/lib/design/system/list-system.js +212 -0
- package/src/lib/design/system/list-system.js.map +1 -0
- package/src/lib/design/system/notes/note.d.ts +53 -0
- package/src/lib/design/system/notes/note.js +116 -0
- package/src/lib/design/system/notes/note.js.map +1 -0
- package/src/lib/design/system/part-command.d.ts +7 -0
- package/src/lib/design/system/part-command.js +134 -0
- package/src/lib/design/system/part-command.js.map +1 -0
- package/src/lib/design/system/problem.d.ts +5 -0
- package/src/lib/design/system/problem.js +3 -0
- package/src/lib/design/system/problem.js.map +1 -0
- package/src/lib/design/system/product.d.ts +18 -0
- package/src/lib/design/system/product.js +35 -0
- package/src/lib/design/system/product.js.map +1 -0
- package/src/lib/design/system/render-check.d.ts +45 -0
- package/src/lib/design/system/render-check.js +427 -0
- package/src/lib/design/system/render-check.js.map +1 -0
- package/src/lib/design/system/resolve-product.d.ts +32 -0
- package/src/lib/design/system/resolve-product.js +62 -0
- package/src/lib/design/system/resolve-product.js.map +1 -0
- package/src/lib/design/system/rules/component-copy.d.ts +7 -0
- package/src/lib/design/system/rules/component-copy.js +53 -0
- package/src/lib/design/system/rules/component-copy.js.map +1 -0
- package/src/lib/design/system/rules/flow.d.ts +8 -0
- package/src/lib/design/system/rules/flow.js +60 -0
- package/src/lib/design/system/rules/flow.js.map +1 -0
- package/src/lib/design/system/rules/hard-coded-colour.d.ts +7 -0
- package/src/lib/design/system/rules/hard-coded-colour.js +27 -0
- package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -0
- package/src/lib/design/system/rules/interactions.d.ts +4 -0
- package/src/lib/design/system/rules/interactions.js +16 -0
- package/src/lib/design/system/rules/interactions.js.map +1 -0
- package/src/lib/design/system/rules/kit-outside-pages.d.ts +4 -0
- package/src/lib/design/system/rules/kit-outside-pages.js +14 -0
- package/src/lib/design/system/rules/kit-outside-pages.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +4 -0
- package/src/lib/design/system/rules/motion.js +13 -0
- package/src/lib/design/system/rules/motion.js.map +1 -0
- package/src/lib/design/system/rules/stale-comment.d.ts +8 -0
- package/src/lib/design/system/rules/stale-comment.js +51 -0
- package/src/lib/design/system/rules/stale-comment.js.map +1 -0
- package/src/lib/design/system/rules/stale-replace.d.ts +4 -0
- package/src/lib/design/system/rules/stale-replace.js +65 -0
- package/src/lib/design/system/rules/stale-replace.js.map +1 -0
- package/src/lib/design/system/rules/svg-asset.d.ts +6 -0
- package/src/lib/design/system/rules/svg-asset.js +30 -0
- package/src/lib/design/system/rules/svg-asset.js.map +1 -0
- package/src/lib/design/system/rules/token-selectors.d.ts +3 -0
- package/src/lib/design/system/rules/token-selectors.js +87 -0
- package/src/lib/design/system/rules/token-selectors.js.map +1 -0
- package/src/lib/design/system/rules/undefined-token.d.ts +8 -0
- package/src/lib/design/system/rules/undefined-token.js +103 -0
- package/src/lib/design/system/rules/undefined-token.js.map +1 -0
- package/src/lib/design/system/rules/unused-shared-export.d.ts +18 -0
- package/src/lib/design/system/rules/unused-shared-export.js +60 -0
- package/src/lib/design/system/rules/unused-shared-export.js.map +1 -0
- package/src/lib/design/system/rules/upward-dependency.d.ts +4 -0
- package/src/lib/design/system/rules/upward-dependency.js +17 -0
- package/src/lib/design/system/rules/upward-dependency.js.map +1 -0
- package/src/lib/design/system/rules/widths.d.ts +4 -0
- package/src/lib/design/system/rules/widths.js +14 -0
- package/src/lib/design/system/rules/widths.js.map +1 -0
- package/src/lib/design/system/sketch/baseline.d.ts +38 -0
- package/src/lib/design/system/sketch/baseline.js +66 -0
- package/src/lib/design/system/sketch/baseline.js.map +1 -0
- package/src/lib/design/system/sketch/check-format.d.ts +17 -0
- package/src/lib/design/system/sketch/check-format.js +56 -0
- package/src/lib/design/system/sketch/check-format.js.map +1 -0
- package/src/lib/design/system/sketch/check-sketches.d.ts +38 -0
- package/src/lib/design/system/sketch/check-sketches.js +104 -0
- package/src/lib/design/system/sketch/check-sketches.js.map +1 -0
- package/src/lib/design/system/sketch/cli-args.d.ts +26 -0
- package/src/lib/design/system/sketch/cli-args.js +63 -0
- package/src/lib/design/system/sketch/cli-args.js.map +1 -0
- package/src/lib/design/system/sketch/duplicate-class.d.ts +14 -0
- package/src/lib/design/system/sketch/duplicate-class.js +57 -0
- package/src/lib/design/system/sketch/duplicate-class.js.map +1 -0
- package/src/lib/design/system/sketch/merge-preview.d.ts +15 -0
- package/src/lib/design/system/sketch/merge-preview.js +43 -0
- package/src/lib/design/system/sketch/merge-preview.js.map +1 -0
- package/src/lib/design/system/sketch/merge-shared.d.ts +25 -0
- package/src/lib/design/system/sketch/merge-shared.js +53 -0
- package/src/lib/design/system/sketch/merge-shared.js.map +1 -0
- package/src/lib/design/system/sketch/merge.d.ts +31 -0
- package/src/lib/design/system/sketch/merge.js +148 -0
- package/src/lib/design/system/sketch/merge.js.map +1 -0
- package/src/lib/design/system/sketch/merged-parts.d.ts +59 -0
- package/src/lib/design/system/sketch/merged-parts.js +134 -0
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -0
- package/src/lib/design/system/sketch/no-visible-change.d.ts +15 -0
- package/src/lib/design/system/sketch/no-visible-change.js +70 -0
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -0
- package/src/lib/design/system/sketch/overlay.d.ts +20 -0
- package/src/lib/design/system/sketch/overlay.js +38 -0
- package/src/lib/design/system/sketch/overlay.js.map +1 -0
- package/src/lib/design/system/sketch/part-definition.d.ts +31 -0
- package/src/lib/design/system/sketch/part-definition.js +157 -0
- package/src/lib/design/system/sketch/part-definition.js.map +1 -0
- package/src/lib/design/system/sketch/shared-class.d.ts +9 -0
- package/src/lib/design/system/sketch/shared-class.js +65 -0
- package/src/lib/design/system/sketch/shared-class.js.map +1 -0
- package/src/lib/design/system/sketch/sketch.d.ts +267 -0
- package/src/lib/design/system/sketch/sketch.js +568 -0
- package/src/lib/design/system/sketch/sketch.js.map +1 -0
- package/src/lib/design/system/sketch/unchanged-states.d.ts +23 -0
- package/src/lib/design/system/sketch/unchanged-states.js +144 -0
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -0
- package/src/lib/design/system/sketch/unused-files.d.ts +10 -0
- package/src/lib/design/system/sketch/unused-files.js +56 -0
- package/src/lib/design/system/sketch/unused-files.js.map +1 -0
- package/src/lib/design/system/system-command.d.ts +9 -0
- package/src/lib/design/system/system-command.js +56 -0
- package/src/lib/design/system/system-command.js.map +1 -0
- package/src/lib/design/system/system-modules.d.ts +58 -0
- package/src/lib/design/system/system-modules.js +189 -0
- package/src/lib/design/system/system-modules.js.map +1 -0
- package/src/lib/design/system/system-tsconfig.d.ts +26 -0
- package/src/lib/design/system/system-tsconfig.js +68 -0
- package/src/lib/design/system/system-tsconfig.js.map +1 -0
- package/src/lib/design/system/ts-source.d.ts +13 -0
- package/src/lib/design/system/ts-source.js +108 -0
- package/src/lib/design/system/ts-source.js.map +1 -0
- package/src/lib/design/system-use.js.map +1 -1
- package/src/lib/design/thumb.d.ts +48 -4
- package/src/lib/design/thumb.js +127 -37
- package/src/lib/design/thumb.js.map +1 -1
- package/src/lib/design/typecheck.d.ts +29 -0
- package/src/lib/design/typecheck.js +77 -0
- package/src/lib/design/typecheck.js.map +1 -0
- package/src/lib/design/variant-diff.d.ts +64 -0
- package/src/lib/design/variant-diff.js +92 -0
- package/src/lib/design/variant-diff.js.map +1 -0
- package/src/lib/design/vite-paths.d.ts +2 -0
- package/src/lib/design/vite-paths.js +10 -1
- package/src/lib/design/vite-paths.js.map +1 -1
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/doctor/index.js.map +1 -1
- package/src/lib/index.js.map +1 -1
- package/src/lib/invocation.js +6 -2
- package/src/lib/invocation.js.map +1 -1
- package/src/lib/playwright/failure-reporter.d.ts +35 -0
- package/src/lib/playwright/failure-reporter.js +66 -0
- package/src/lib/playwright/failure-reporter.js.map +1 -0
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-rules-sync.js.map +1 -1
- package/src/lib/update/agent-setup.js.map +1 -1
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/args.js.map +1 -1
- package/src/lib/update/available-migrations.js.map +1 -1
- package/src/lib/update/commits.js.map +1 -1
- package/src/lib/update/gitignore.js.map +1 -1
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.js.map +1 -1
- package/src/lib/update/migrations-command.js.map +1 -1
- package/src/lib/update/package-manager.d.ts +1 -1
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/packages.js.map +1 -1
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/plan.js.map +1 -1
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/scan.js.map +1 -1
- package/src/lib/update/semver.js.map +1 -1
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.js.map +1 -1
- package/src/lib/utils.js.map +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { definePart, drawing, ng } from '@design-system';
|
|
2
|
+
|
|
3
|
+
type ButtonProps = { label: string; disabled: boolean };
|
|
4
|
+
|
|
5
|
+
export default definePart<ButtonProps>({
|
|
6
|
+
note: 'The SDK button, rendered by ng() and never redrawn.',
|
|
7
|
+
states: {
|
|
8
|
+
default: { label: 'Save', disabled: false },
|
|
9
|
+
disabled: { label: 'Save', disabled: true },
|
|
10
|
+
},
|
|
11
|
+
render: async ({ label, disabled }) =>
|
|
12
|
+
drawing({
|
|
13
|
+
body: await ng(`<button et-button${disabled ? ' disabled' : ''}>${label}</button>`, {
|
|
14
|
+
imports: ['ButtonComponent'],
|
|
15
|
+
}),
|
|
16
|
+
styles: '',
|
|
17
|
+
}),
|
|
18
|
+
});
|
package/design/web/env.d.ts
CHANGED
|
@@ -9,4 +9,24 @@ declare module 'virtual:design-explore/env' {
|
|
|
9
9
|
export const loadEnv: (project: string) => Promise<unknown>;
|
|
10
10
|
/** The theme names the config declares for the project. The first of each list is the default. */
|
|
11
11
|
export const themesOf: (project: string) => { surface: string[]; color: string[] };
|
|
12
|
+
/** Loads the stylesheet a product draws under, which its base parts draw under too. */
|
|
13
|
+
export const loadProductEnv: (product: string) => Promise<unknown>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
declare module 'virtual:design-explore/system' {
|
|
17
|
+
import type { Drawing } from '@design-explore';
|
|
18
|
+
|
|
19
|
+
type Part = { states: Record<string, unknown>; render: (props: unknown) => Drawing | Promise<Drawing> };
|
|
20
|
+
|
|
21
|
+
/** Each product's parts by `<layer>/<name>`, each resolved as that product draws it. */
|
|
22
|
+
export const parts: Record<string, Record<string, () => Promise<{ default: Part }>>>;
|
|
23
|
+
/** Each product's parts by sketch target, variant and `<layer>/<name>`, each resolved as that variant draws it. */
|
|
24
|
+
export const sketchParts: Record<
|
|
25
|
+
string,
|
|
26
|
+
Record<string, Record<string, Record<string, () => Promise<{ default: Part }>>>>
|
|
27
|
+
>;
|
|
28
|
+
/** The tokens stylesheet each product draws under, for the products that have one. */
|
|
29
|
+
export const tokens: Record<string, () => Promise<{ default: string }>>;
|
|
30
|
+
/** The tokens stylesheet each sketch variant draws under, by product, sketch target and variant. */
|
|
31
|
+
export const sketchTokens: Record<string, Record<string, Record<string, () => Promise<{ default: string }>>>>;
|
|
12
32
|
}
|
package/design/web/frame.ts
CHANGED
|
@@ -1,22 +1,56 @@
|
|
|
1
|
-
import { mountDrawing, placeOverlays } from '
|
|
1
|
+
import { CallVariant, Drawing, mountDrawing, placeOverlays } from '../define-call';
|
|
2
|
+
import { fitEmbed } from '../embed-page';
|
|
2
3
|
import { calls } from 'virtual:design-explore';
|
|
3
|
-
import { loadEnv } from 'virtual:design-explore/env';
|
|
4
|
+
import { loadEnv, loadProductEnv } from 'virtual:design-explore/env';
|
|
5
|
+
import { parts, sketchParts, sketchTokens, tokens } from 'virtual:design-explore/system';
|
|
4
6
|
|
|
5
7
|
const params = new URLSearchParams(location.search);
|
|
6
8
|
const slug = params.get('call') ?? '';
|
|
7
|
-
const
|
|
9
|
+
const product = params.get('product');
|
|
10
|
+
const partKey = params.get('part') ?? '';
|
|
11
|
+
const key = (product ? params.get('state') : params.get('variant')) ?? '';
|
|
12
|
+
const sketch = product ? params.get('sketch') : null;
|
|
13
|
+
const sketchVariant = params.get('variant') ?? '';
|
|
14
|
+
const fit = product !== null && params.has('fit');
|
|
15
|
+
const interaction = product ? params.get('interaction') : null;
|
|
16
|
+
const propsSketch = product ? params.get('props') : null;
|
|
17
|
+
const propsVariant = params.get('props-variant') ?? '';
|
|
18
|
+
|
|
19
|
+
// Listens before the drawing loads, so an error it throws while loading counts; `report` exists only once `reporting` is set.
|
|
20
|
+
let errored = false;
|
|
21
|
+
let reporting = false;
|
|
22
|
+
|
|
23
|
+
const reportError = () => {
|
|
24
|
+
errored = true;
|
|
25
|
+
if (reporting) report();
|
|
26
|
+
};
|
|
8
27
|
|
|
9
|
-
|
|
28
|
+
addEventListener('error', reportError);
|
|
29
|
+
addEventListener('unhandledrejection', reportError);
|
|
10
30
|
|
|
11
31
|
const root = document.querySelector('#root') as HTMLElement;
|
|
12
32
|
const surface = params.get('surface');
|
|
13
33
|
const color = params.get('color');
|
|
34
|
+
const fill = params.get('fill');
|
|
14
35
|
|
|
15
36
|
// On <html> a theme class ties with the `:root` defaults of the theme CSS, which come later and win.
|
|
16
37
|
if (surface) root.classList.add(`et-surface--${surface}`);
|
|
17
38
|
if (color) root.classList.add(`et-color--${color}`);
|
|
39
|
+
if (fill) document.body.style.background = `var(--${fill})`;
|
|
40
|
+
if (fit) {
|
|
41
|
+
document.documentElement.style.overflow = 'hidden';
|
|
42
|
+
root.style.width = 'max-content';
|
|
43
|
+
root.style.padding = '16px';
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const markFailed = (message: string) => {
|
|
47
|
+
errored = true;
|
|
48
|
+
document.documentElement.setAttribute('data-et-error', message);
|
|
49
|
+
};
|
|
18
50
|
|
|
19
51
|
const fail = (message: string) => {
|
|
52
|
+
markFailed(message);
|
|
53
|
+
|
|
20
54
|
const text = document.createElement('pre');
|
|
21
55
|
|
|
22
56
|
text.textContent = message;
|
|
@@ -24,9 +58,13 @@ const fail = (message: string) => {
|
|
|
24
58
|
text.style.whiteSpace = 'pre-wrap';
|
|
25
59
|
root.replaceChildren(text);
|
|
26
60
|
root.setAttribute('style', 'padding:16px;font:14px monospace;color:#f0a0a0;background:#1a1414');
|
|
61
|
+
|
|
62
|
+
return null;
|
|
27
63
|
};
|
|
28
64
|
|
|
29
65
|
const showSetupError = (message: string) => {
|
|
66
|
+
markFailed(message);
|
|
67
|
+
|
|
30
68
|
const banner = document.createElement('pre');
|
|
31
69
|
|
|
32
70
|
banner.textContent = message;
|
|
@@ -37,53 +75,147 @@ const showSetupError = (message: string) => {
|
|
|
37
75
|
document.body.append(banner);
|
|
38
76
|
};
|
|
39
77
|
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
if (!
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
78
|
+
const messageOf = (error: unknown) => (error instanceof Error ? error.message : String(error));
|
|
79
|
+
|
|
80
|
+
const drawCall = async (): Promise<Drawing | null> => {
|
|
81
|
+
const call = calls[slug];
|
|
82
|
+
if (!call) return fail(`design-explore: no call "${slug}"`);
|
|
83
|
+
|
|
84
|
+
const variant: CallVariant | undefined = (await call()).default.variants.find((o) => o.key === key);
|
|
85
|
+
if (!variant) return fail(`design-explore: call "${slug}" has no variant "${key}"`);
|
|
86
|
+
|
|
87
|
+
return variant.load().then(
|
|
88
|
+
(module) => module.default,
|
|
89
|
+
(error: unknown) => fail(`design-explore: variant "${key}" failed\n${messageOf(error)}`),
|
|
90
|
+
);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const drawPart = async (name: string): Promise<Drawing | null> => {
|
|
94
|
+
const load = sketch ? sketchParts[name]?.[sketch]?.[sketchVariant]?.[partKey] : parts[name]?.[partKey];
|
|
95
|
+
if (!load)
|
|
96
|
+
return fail(
|
|
97
|
+
sketch
|
|
98
|
+
? `design-explore: variant "${sketchVariant}" of the sketch on ${sketch} in product "${name}" has no part "${partKey}"`
|
|
99
|
+
: `design-explore: product "${name}" has no part "${partKey}"`,
|
|
53
100
|
);
|
|
54
101
|
|
|
55
|
-
|
|
56
|
-
|
|
102
|
+
const loadProps = propsSketch ? sketchParts[name]?.[propsSketch]?.[propsVariant]?.[partKey] : load;
|
|
103
|
+
if (!loadProps)
|
|
104
|
+
return fail(
|
|
105
|
+
`design-explore: variant "${propsVariant}" of the sketch on ${propsSketch} in product "${name}" has no part "${partKey}"`,
|
|
106
|
+
);
|
|
57
107
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const error = mountDrawing(root, loaded);
|
|
108
|
+
try {
|
|
109
|
+
const [{ default: part }, { default: holder }] = await Promise.all([load(), loadProps()]);
|
|
61
110
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
111
|
+
if (!(key in holder.states)) return fail(`design-explore: part "${partKey}" has no state "${key}"`);
|
|
112
|
+
|
|
113
|
+
return await part.render(holder.states[key]);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return fail(`design-explore: state "${key}" of "${partKey}" failed\n${messageOf(error)}`);
|
|
68
116
|
}
|
|
69
|
-
}
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const tokensOf = async (name: string) => {
|
|
120
|
+
const load = sketch ? sketchTokens[name]?.[sketch]?.[sketchVariant] : tokens[name];
|
|
121
|
+
|
|
122
|
+
return load ? (await load()).default : null;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
const partRootOf = (container: HTMLElement) =>
|
|
126
|
+
[...container.children].find((child) => !['STYLE', 'SCRIPT', 'LINK'].includes(child.tagName)) ?? null;
|
|
70
127
|
|
|
71
|
-
const
|
|
128
|
+
const force = (element: Element, name: string) => {
|
|
129
|
+
if (name === 'disabled') {
|
|
130
|
+
element.setAttribute('disabled', '');
|
|
131
|
+
element.setAttribute('aria-disabled', 'true');
|
|
132
|
+
} else {
|
|
133
|
+
element.setAttribute('data-et-force', name);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
const forced = async (css: string) => {
|
|
138
|
+
if (!/:(?:hover|focus-visible|active)/iu.test(css)) return css;
|
|
72
139
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
140
|
+
const response = await fetch('/__design/force', { method: 'POST', body: css }).catch(() => null);
|
|
141
|
+
|
|
142
|
+
return response?.ok ? response.text() : css;
|
|
143
|
+
};
|
|
76
144
|
|
|
77
145
|
const report = () => {
|
|
78
146
|
const height = Math.ceil(document.documentElement.getBoundingClientRect().height);
|
|
79
|
-
|
|
147
|
+
const width = fit ? { width: Math.ceil(root.getBoundingClientRect().width) } : {};
|
|
148
|
+
|
|
149
|
+
fitEmbed(frameElement, height);
|
|
150
|
+
|
|
151
|
+
parent.postMessage(
|
|
152
|
+
{
|
|
153
|
+
type: 'design-explore:height',
|
|
154
|
+
variant: key,
|
|
155
|
+
height,
|
|
156
|
+
...width,
|
|
157
|
+
viewport: { width: innerWidth, height: innerHeight },
|
|
158
|
+
href: location.href,
|
|
159
|
+
...(errored ? { errored: true } : {}),
|
|
160
|
+
},
|
|
161
|
+
'*',
|
|
162
|
+
);
|
|
80
163
|
};
|
|
81
164
|
|
|
82
|
-
|
|
83
|
-
|
|
165
|
+
// macOS WebKit can loop in module evaluation when a frame with top-level await is removed.
|
|
166
|
+
const drawFrame = async () => {
|
|
167
|
+
parent.postMessage({ type: 'design-explore:loading' }, '*');
|
|
168
|
+
await (product ? loadProductEnv(product) : loadEnv(slug.split('/')[0] ?? ''));
|
|
169
|
+
const tokenStyles = product ? await tokensOf(product) : null;
|
|
170
|
+
const loaded = await (product ? drawPart(product) : drawCall());
|
|
171
|
+
|
|
172
|
+
if (loaded) {
|
|
173
|
+
if (tokenStyles !== null) {
|
|
174
|
+
const style = document.createElement('style');
|
|
175
|
+
|
|
176
|
+
style.textContent = tokenStyles;
|
|
177
|
+
document.head.append(style);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const style = document.createElement('style');
|
|
181
|
+
|
|
182
|
+
style.textContent = await forced(loaded.styles ?? '');
|
|
183
|
+
document.head.append(style);
|
|
184
|
+
const error = mountDrawing(root, loaded);
|
|
185
|
+
const partRoot = partRootOf(root);
|
|
186
|
+
|
|
187
|
+
if (interaction && partRoot) force(partRoot, interaction);
|
|
188
|
+
|
|
189
|
+
if (error)
|
|
190
|
+
showSetupError(`design-explore: setup of ${product ? 'state' : 'variant'} "${key}" failed\n${messageOf(error)}`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const place = () => placeOverlays(root);
|
|
194
|
+
|
|
195
|
+
new MutationObserver(place).observe(root, { childList: true, subtree: true });
|
|
196
|
+
new ResizeObserver(place).observe(root);
|
|
197
|
+
place();
|
|
198
|
+
|
|
199
|
+
const reported = new ResizeObserver(report);
|
|
200
|
+
|
|
201
|
+
reported.observe(document.documentElement);
|
|
202
|
+
if (fit) reported.observe(root);
|
|
203
|
+
reporting = true;
|
|
204
|
+
report();
|
|
205
|
+
|
|
206
|
+
addEventListener('keydown', (event) => {
|
|
207
|
+
if (event.key === 'Escape') parent.postMessage({ type: 'design-explore:escape', variant: key }, '*');
|
|
208
|
+
});
|
|
209
|
+
|
|
210
|
+
addEventListener(
|
|
211
|
+
'scroll',
|
|
212
|
+
() => parent.postMessage({ type: 'design-explore:scroll', variant: key, y: Math.round(scrollY) }, '*'),
|
|
213
|
+
{ passive: true },
|
|
214
|
+
);
|
|
215
|
+
};
|
|
84
216
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
);
|
|
217
|
+
void drawFrame().catch((error: unknown) => {
|
|
218
|
+
fail(`design-explore: frame failed\n${messageOf(error)}`);
|
|
219
|
+
reporting = true;
|
|
220
|
+
report();
|
|
221
|
+
});
|