@ethlete/cli 3.0.0-next.26 → 3.0.0-next.27
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 +328 -0
- package/build-info.json +1 -0
- package/design/define-call.ts +72 -30
- package/design/define-part.ts +37 -4
- package/design/icon-sheet.ts +1 -1
- package/design/interaction-rows.ts +13 -6
- package/design/mark-part.ts +51 -1
- package/design/token-sheet.ts +1 -1
- package/design/web/frame-fit.ts +7 -0
- package/design/web/frame-surfaces.ts +294 -0
- package/design/web/frame.ts +41 -15
- package/design/web/surface-interactive.css +42 -0
- package/design/with-action.ts +29 -0
- package/package.json +3 -1
- package/src/index.js +9 -1
- package/src/index.js.map +1 -1
- package/src/lib/design/asset-shot.js +2 -2
- package/src/lib/design/asset-shot.js.map +1 -1
- package/src/lib/design/build-watch.d.ts +26 -0
- package/src/lib/design/build-watch.js +138 -0
- package/src/lib/design/build-watch.js.map +1 -0
- package/src/lib/design/check.js +142 -16
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/commit-hunks.d.ts +22 -0
- package/src/lib/design/commit-hunks.js +173 -0
- package/src/lib/design/commit-hunks.js.map +1 -0
- package/src/lib/design/design-command.d.ts +2 -0
- package/src/lib/design/design-command.js +160 -11
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/force-interactions.d.ts +1 -1
- package/src/lib/design/force-interactions.js +4 -2
- package/src/lib/design/force-interactions.js.map +1 -1
- package/src/lib/design/inbox-command.js +9 -5
- package/src/lib/design/inbox-command.js.map +1 -1
- package/src/lib/design/mcp-command.d.ts +5 -1
- package/src/lib/design/mcp-command.js +29 -11
- package/src/lib/design/mcp-command.js.map +1 -1
- package/src/lib/design/merge-compare.d.ts +10 -2
- package/src/lib/design/merge-compare.js +63 -11
- package/src/lib/design/merge-compare.js.map +1 -1
- package/src/lib/design/motion-command.js +1 -1
- package/src/lib/design/motion-command.js.map +1 -1
- package/src/lib/design/motion-shot.js +3 -2
- package/src/lib/design/motion-shot.js.map +1 -1
- package/src/lib/design/new-call.js +19 -10
- package/src/lib/design/new-call.js.map +1 -1
- package/src/lib/design/part-marks.d.ts +3 -2
- package/src/lib/design/part-marks.js +13 -5
- package/src/lib/design/part-marks.js.map +1 -1
- package/src/lib/design/paths.d.ts +28 -0
- package/src/lib/design/paths.js.map +1 -1
- package/src/lib/design/product-command.d.ts +1 -1
- package/src/lib/design/product-command.js +12 -14
- package/src/lib/design/product-command.js.map +1 -1
- package/src/lib/design/ready-shots.d.ts +29 -3
- package/src/lib/design/ready-shots.js +105 -5
- package/src/lib/design/ready-shots.js.map +1 -1
- package/src/lib/design/render-packages.d.ts +4 -17
- package/src/lib/design/render-packages.js +20 -63
- package/src/lib/design/render-packages.js.map +1 -1
- package/src/lib/design/render-worker.js +1 -3
- package/src/lib/design/render-worker.js.map +1 -1
- package/src/lib/design/render.d.ts +2 -0
- package/src/lib/design/render.js +32 -7
- package/src/lib/design/render.js.map +1 -1
- package/src/lib/design/serve.d.ts +21 -1
- package/src/lib/design/serve.js +133 -19
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/server-identity.d.ts +36 -0
- package/src/lib/design/server-identity.js +68 -0
- package/src/lib/design/server-identity.js.map +1 -0
- package/src/lib/design/settle-frames.d.ts +4 -0
- package/src/lib/design/settle-frames.js +22 -0
- package/src/lib/design/settle-frames.js.map +1 -0
- package/src/lib/design/shot-command.d.ts +25 -4
- package/src/lib/design/shot-command.js +132 -46
- package/src/lib/design/shot-command.js.map +1 -1
- package/src/lib/design/shot.d.ts +50 -0
- package/src/lib/design/shot.js +143 -17
- package/src/lib/design/shot.js.map +1 -1
- package/src/lib/design/sketch-command.d.ts +6 -1
- package/src/lib/design/sketch-command.js +358 -126
- package/src/lib/design/sketch-command.js.map +1 -1
- package/src/lib/design/stale-cli-dist.d.ts +11 -0
- package/src/lib/design/stale-cli-dist.js +56 -0
- package/src/lib/design/stale-cli-dist.js.map +1 -0
- package/src/lib/design/stamp.d.ts +18 -1
- package/src/lib/design/stamp.js +53 -7
- package/src/lib/design/stamp.js.map +1 -1
- package/src/lib/design/started-by-studio.d.ts +1 -0
- package/src/lib/design/started-by-studio.js +6 -0
- package/src/lib/design/started-by-studio.js.map +1 -0
- package/src/lib/design/studio-api.d.ts +27 -8
- package/src/lib/design/studio-api.js +263 -58
- package/src/lib/design/studio-api.js.map +1 -1
- package/src/lib/design/system/accept-command.d.ts +39 -5
- package/src/lib/design/system/accept-command.js +109 -25
- package/src/lib/design/system/accept-command.js.map +1 -1
- package/src/lib/design/system/accepted-pictures.d.ts +83 -0
- package/src/lib/design/system/accepted-pictures.js +324 -0
- package/src/lib/design/system/accepted-pictures.js.map +1 -0
- package/src/lib/design/system/action-lost.d.ts +59 -0
- package/src/lib/design/system/action-lost.js +120 -0
- package/src/lib/design/system/action-lost.js.map +1 -0
- package/src/lib/design/system/action-press.d.ts +23 -0
- package/src/lib/design/system/action-press.js +76 -0
- package/src/lib/design/system/action-press.js.map +1 -0
- package/src/lib/design/system/action-undeclared.d.ts +34 -0
- package/src/lib/design/system/action-undeclared.js +81 -0
- package/src/lib/design/system/action-undeclared.js.map +1 -0
- package/src/lib/design/system/actions-command.d.ts +101 -0
- package/src/lib/design/system/actions-command.js +695 -0
- package/src/lib/design/system/actions-command.js.map +1 -0
- package/src/lib/design/system/actions.d.ts +158 -0
- package/src/lib/design/system/actions.js +295 -0
- package/src/lib/design/system/actions.js.map +1 -0
- package/src/lib/design/system/app-files.d.ts +10 -0
- package/src/lib/design/system/app-files.js +159 -0
- package/src/lib/design/system/app-files.js.map +1 -0
- package/src/lib/design/system/bespoke-controls.d.ts +30 -0
- package/src/lib/design/system/bespoke-controls.js +147 -0
- package/src/lib/design/system/bespoke-controls.js.map +1 -0
- package/src/lib/design/system/build-ready-contract.d.ts +27 -0
- package/src/lib/design/system/build-ready-contract.js +12 -0
- package/src/lib/design/system/build-ready-contract.js.map +1 -0
- package/src/lib/design/system/check-rules.d.ts +1 -0
- package/src/lib/design/system/check-rules.js +82 -0
- package/src/lib/design/system/check-rules.js.map +1 -0
- package/src/lib/design/system/check-system.d.ts +61 -6
- package/src/lib/design/system/check-system.js +479 -68
- package/src/lib/design/system/check-system.js.map +1 -1
- package/src/lib/design/system/comments/comment.d.ts +4 -1
- package/src/lib/design/system/comments/comment.js +13 -4
- package/src/lib/design/system/comments/comment.js.map +1 -1
- package/src/lib/design/system/comments/inbox.js +2 -2
- package/src/lib/design/system/comments/inbox.js.map +1 -1
- package/src/lib/design/system/compare-command.d.ts +119 -0
- package/src/lib/design/system/compare-command.js +558 -0
- package/src/lib/design/system/compare-command.js.map +1 -0
- package/src/lib/design/system/complete-command.js +1 -1
- package/src/lib/design/system/complete-command.js.map +1 -1
- package/src/lib/design/system/complete.d.ts +32 -1
- package/src/lib/design/system/complete.js +144 -48
- package/src/lib/design/system/complete.js.map +1 -1
- package/src/lib/design/system/component-outputs.d.ts +20 -0
- package/src/lib/design/system/component-outputs.js +86 -0
- package/src/lib/design/system/component-outputs.js.map +1 -0
- package/src/lib/design/system/contrast-check.d.ts +1 -1
- package/src/lib/design/system/contrast-check.js +14 -3
- package/src/lib/design/system/contrast-check.js.map +1 -1
- package/src/lib/design/system/demo-backdrop.d.ts +11 -0
- package/src/lib/design/system/demo-backdrop.js +41 -0
- package/src/lib/design/system/demo-backdrop.js.map +1 -0
- package/src/lib/design/system/design-hash.d.ts +31 -0
- package/src/lib/design/system/design-hash.js +73 -0
- package/src/lib/design/system/design-hash.js.map +1 -0
- package/src/lib/design/system/disabled-interaction.d.ts +8 -0
- package/src/lib/design/system/disabled-interaction.js +37 -0
- package/src/lib/design/system/disabled-interaction.js.map +1 -0
- package/src/lib/design/system/dom-command.d.ts +36 -0
- package/src/lib/design/system/dom-command.js +175 -0
- package/src/lib/design/system/dom-command.js.map +1 -0
- package/src/lib/design/system/drawn-open-points.d.ts +25 -3
- package/src/lib/design/system/drawn-open-points.js +65 -14
- package/src/lib/design/system/drawn-open-points.js.map +1 -1
- package/src/lib/design/system/dropped-props.d.ts +25 -0
- package/src/lib/design/system/dropped-props.js +159 -0
- package/src/lib/design/system/dropped-props.js.map +1 -0
- package/src/lib/design/system/embedded-actions.d.ts +21 -0
- package/src/lib/design/system/embedded-actions.js +37 -0
- package/src/lib/design/system/embedded-actions.js.map +1 -0
- package/src/lib/design/system/exceptions.js +2 -1
- package/src/lib/design/system/exceptions.js.map +1 -1
- package/src/lib/design/system/flows/flow.js +2 -1
- package/src/lib/design/system/flows/flow.js.map +1 -1
- package/src/lib/design/system/frozen-animations.d.ts +13 -0
- package/src/lib/design/system/frozen-animations.js +51 -0
- package/src/lib/design/system/frozen-animations.js.map +1 -0
- package/src/lib/design/system/go-batch.d.ts +24 -0
- package/src/lib/design/system/go-batch.js +110 -0
- package/src/lib/design/system/go-batch.js.map +1 -0
- package/src/lib/design/system/go-command.d.ts +4 -0
- package/src/lib/design/system/go-command.js +64 -0
- package/src/lib/design/system/go-command.js.map +1 -0
- package/src/lib/design/system/go-guard.d.ts +26 -0
- package/src/lib/design/system/go-guard.js +70 -0
- package/src/lib/design/system/go-guard.js.map +1 -0
- package/src/lib/design/system/go-step.d.ts +13 -0
- package/src/lib/design/system/go-step.js +84 -0
- package/src/lib/design/system/go-step.js.map +1 -0
- package/src/lib/design/system/handoff.js +2 -1
- package/src/lib/design/system/handoff.js.map +1 -1
- package/src/lib/design/system/harness-build-cache.d.ts +35 -0
- package/src/lib/design/system/harness-build-cache.js +175 -0
- package/src/lib/design/system/harness-build-cache.js.map +1 -0
- package/src/lib/design/system/harness-command.d.ts +7 -0
- package/src/lib/design/system/harness-command.js +51 -0
- package/src/lib/design/system/harness-command.js.map +1 -0
- package/src/lib/design/system/harness-config.d.ts +9 -0
- package/src/lib/design/system/harness-config.js +65 -0
- package/src/lib/design/system/harness-config.js.map +1 -0
- package/src/lib/design/system/harness-map.d.ts +44 -0
- package/src/lib/design/system/harness-map.js +126 -0
- package/src/lib/design/system/harness-map.js.map +1 -0
- package/src/lib/design/system/harness-samples.d.ts +20 -0
- package/src/lib/design/system/harness-samples.js +92 -0
- package/src/lib/design/system/harness-samples.js.map +1 -0
- package/src/lib/design/system/harness-server.d.ts +40 -0
- package/src/lib/design/system/harness-server.js +296 -0
- package/src/lib/design/system/harness-server.js.map +1 -0
- package/src/lib/design/system/imports.js +14 -1
- package/src/lib/design/system/imports.js.map +1 -1
- package/src/lib/design/system/in-order-at-once.d.ts +6 -0
- package/src/lib/design/system/in-order-at-once.js +28 -0
- package/src/lib/design/system/in-order-at-once.js.map +1 -0
- package/src/lib/design/system/inventory-approval.js +2 -1
- package/src/lib/design/system/inventory-approval.js.map +1 -1
- package/src/lib/design/system/inventory.d.ts +13 -4
- package/src/lib/design/system/inventory.js +36 -7
- package/src/lib/design/system/inventory.js.map +1 -1
- package/src/lib/design/system/list-system.d.ts +4 -0
- package/src/lib/design/system/list-system.js +12 -3
- package/src/lib/design/system/list-system.js.map +1 -1
- package/src/lib/design/system/live-actions.d.ts +121 -0
- package/src/lib/design/system/live-actions.js +665 -0
- package/src/lib/design/system/live-actions.js.map +1 -0
- package/src/lib/design/system/live-compare.d.ts +136 -0
- package/src/lib/design/system/live-compare.js +441 -0
- package/src/lib/design/system/live-compare.js.map +1 -0
- package/src/lib/design/system/live-uncovered.d.ts +40 -0
- package/src/lib/design/system/live-uncovered.js +123 -0
- package/src/lib/design/system/live-uncovered.js.map +1 -0
- package/src/lib/design/system/nested-scroll.d.ts +7 -0
- package/src/lib/design/system/nested-scroll.js +25 -0
- package/src/lib/design/system/nested-scroll.js.map +1 -0
- package/src/lib/design/system/notes/note.js +2 -1
- package/src/lib/design/system/notes/note.js.map +1 -1
- package/src/lib/design/system/occluded.d.ts +13 -0
- package/src/lib/design/system/occluded.js +111 -0
- package/src/lib/design/system/occluded.js.map +1 -0
- package/src/lib/design/system/open-points.d.ts +24 -6
- package/src/lib/design/system/open-points.js +59 -30
- package/src/lib/design/system/open-points.js.map +1 -1
- package/src/lib/design/system/part-build-ready.d.ts +39 -0
- package/src/lib/design/system/part-build-ready.js +107 -0
- package/src/lib/design/system/part-build-ready.js.map +1 -0
- package/src/lib/design/system/part-command.js +2 -9
- package/src/lib/design/system/part-command.js.map +1 -1
- package/src/lib/design/system/part-compare.d.ts +123 -0
- package/src/lib/design/system/part-compare.js +396 -0
- package/src/lib/design/system/part-compare.js.map +1 -0
- package/src/lib/design/system/part-go.d.ts +70 -0
- package/src/lib/design/system/part-go.js +94 -0
- package/src/lib/design/system/part-go.js.map +1 -0
- package/src/lib/design/system/part-ready.d.ts +44 -6
- package/src/lib/design/system/part-ready.js +88 -17
- package/src/lib/design/system/part-ready.js.map +1 -1
- package/src/lib/design/system/part-task.d.ts +147 -0
- package/src/lib/design/system/part-task.js +285 -0
- package/src/lib/design/system/part-task.js.map +1 -0
- package/src/lib/design/system/pointer-focus.d.ts +81 -0
- package/src/lib/design/system/pointer-focus.js +152 -0
- package/src/lib/design/system/pointer-focus.js.map +1 -0
- package/src/lib/design/system/prettier.d.ts +10 -0
- package/src/lib/design/system/prettier.js +36 -0
- package/src/lib/design/system/prettier.js.map +1 -0
- package/src/lib/design/system/reach.d.ts +12 -0
- package/src/lib/design/system/reach.js +186 -0
- package/src/lib/design/system/reach.js.map +1 -0
- package/src/lib/design/system/reachable-controls.d.ts +6 -0
- package/src/lib/design/system/reachable-controls.js +19 -0
- package/src/lib/design/system/reachable-controls.js.map +1 -0
- package/src/lib/design/system/reachable-files.d.ts +14 -0
- package/src/lib/design/system/reachable-files.js +101 -0
- package/src/lib/design/system/reachable-files.js.map +1 -0
- package/src/lib/design/system/reached-state.d.ts +23 -0
- package/src/lib/design/system/reached-state.js +53 -0
- package/src/lib/design/system/reached-state.js.map +1 -0
- package/src/lib/design/system/read-open-points.d.ts +9 -3
- package/src/lib/design/system/read-open-points.js +38 -9
- package/src/lib/design/system/read-open-points.js.map +1 -1
- package/src/lib/design/system/ready-command.d.ts +6 -2
- package/src/lib/design/system/ready-command.js +32 -15
- package/src/lib/design/system/ready-command.js.map +1 -1
- package/src/lib/design/system/render-check.d.ts +50 -0
- package/src/lib/design/system/render-check.js +341 -88
- package/src/lib/design/system/render-check.js.map +1 -1
- package/src/lib/design/system/resolve-product.js +5 -0
- package/src/lib/design/system/resolve-product.js.map +1 -1
- package/src/lib/design/system/rules/app-spec.d.ts +30 -0
- package/src/lib/design/system/rules/app-spec.js +87 -0
- package/src/lib/design/system/rules/app-spec.js.map +1 -0
- package/src/lib/design/system/rules/canonical-class.d.ts +2 -0
- package/src/lib/design/system/rules/canonical-class.js +36 -110
- package/src/lib/design/system/rules/canonical-class.js.map +1 -1
- package/src/lib/design/system/rules/capability-place.d.ts +44 -0
- package/src/lib/design/system/rules/capability-place.js +116 -0
- package/src/lib/design/system/rules/capability-place.js.map +1 -0
- package/src/lib/design/system/rules/denied-class.d.ts +9 -0
- package/src/lib/design/system/rules/denied-class.js +121 -0
- package/src/lib/design/system/rules/denied-class.js.map +1 -0
- package/src/lib/design/system/rules/exemptions.d.ts +18 -0
- package/src/lib/design/system/rules/exemptions.js +18 -0
- package/src/lib/design/system/rules/exemptions.js.map +1 -0
- package/src/lib/design/system/rules/flow.js +1 -1
- package/src/lib/design/system/rules/flow.js.map +1 -1
- package/src/lib/design/system/rules/glued-interpolation.d.ts +8 -0
- package/src/lib/design/system/rules/glued-interpolation.js +61 -0
- package/src/lib/design/system/rules/glued-interpolation.js.map +1 -0
- package/src/lib/design/system/rules/hard-coded-colour.js +2 -1
- package/src/lib/design/system/rules/hard-coded-colour.js.map +1 -1
- package/src/lib/design/system/rules/implemented-components.d.ts +22 -0
- package/src/lib/design/system/rules/implemented-components.js +45 -0
- package/src/lib/design/system/rules/implemented-components.js.map +1 -0
- package/src/lib/design/system/rules/implements.d.ts +2 -1
- package/src/lib/design/system/rules/implements.js +26 -21
- package/src/lib/design/system/rules/implements.js.map +1 -1
- package/src/lib/design/system/rules/inline-svg.js +4 -1
- package/src/lib/design/system/rules/inline-svg.js.map +1 -1
- package/src/lib/design/system/rules/inline-ui-in-page-open.d.ts +13 -0
- package/src/lib/design/system/rules/inline-ui-in-page-open.js +5 -0
- package/src/lib/design/system/rules/inline-ui-in-page-open.js.map +1 -0
- package/src/lib/design/system/rules/inline-ui-in-page.d.ts +18 -0
- package/src/lib/design/system/rules/inline-ui-in-page.js +123 -0
- package/src/lib/design/system/rules/inline-ui-in-page.js.map +1 -0
- package/src/lib/design/system/rules/inline-ui.d.ts +16 -0
- package/src/lib/design/system/rules/inline-ui.js +100 -0
- package/src/lib/design/system/rules/inline-ui.js.map +1 -0
- package/src/lib/design/system/rules/motion.d.ts +1 -1
- package/src/lib/design/system/rules/motion.js +25 -17
- package/src/lib/design/system/rules/motion.js.map +1 -1
- package/src/lib/design/system/rules/native-title.d.ts +7 -0
- package/src/lib/design/system/rules/native-title.js +64 -0
- package/src/lib/design/system/rules/native-title.js.map +1 -0
- package/src/lib/design/system/rules/orphan-endpoint-known.d.ts +12 -0
- package/src/lib/design/system/rules/orphan-endpoint-known.js +20 -0
- package/src/lib/design/system/rules/orphan-endpoint-known.js.map +1 -0
- package/src/lib/design/system/rules/orphan-endpoint.d.ts +23 -0
- package/src/lib/design/system/rules/orphan-endpoint.js +166 -0
- package/src/lib/design/system/rules/orphan-endpoint.js.map +1 -0
- package/src/lib/design/system/rules/part-rewrite.d.ts +13 -0
- package/src/lib/design/system/rules/part-rewrite.js +125 -0
- package/src/lib/design/system/rules/part-rewrite.js.map +1 -0
- package/src/lib/design/system/rules/sample-default-known.d.ts +5 -0
- package/src/lib/design/system/rules/sample-default-known.js +17 -0
- package/src/lib/design/system/rules/sample-default-known.js.map +1 -0
- package/src/lib/design/system/rules/sample-default.d.ts +22 -0
- package/src/lib/design/system/rules/sample-default.js +92 -0
- package/src/lib/design/system/rules/sample-default.js.map +1 -0
- package/src/lib/design/system/rules/stale-replace.js +4 -0
- package/src/lib/design/system/rules/stale-replace.js.map +1 -1
- package/src/lib/design/system/rules/state-in-component.d.ts +16 -0
- package/src/lib/design/system/rules/state-in-component.js +101 -0
- package/src/lib/design/system/rules/state-in-component.js.map +1 -0
- package/src/lib/design/system/rules/tailwind-classes.d.ts +51 -0
- package/src/lib/design/system/rules/tailwind-classes.js +232 -0
- package/src/lib/design/system/rules/tailwind-classes.js.map +1 -0
- package/src/lib/design/system/rules/top-level-await.d.ts +9 -0
- package/src/lib/design/system/rules/top-level-await.js +62 -0
- package/src/lib/design/system/rules/top-level-await.js.map +1 -0
- package/src/lib/design/system/rules/unbound-input-known.d.ts +5 -0
- package/src/lib/design/system/rules/unbound-input-known.js +47 -0
- package/src/lib/design/system/rules/unbound-input-known.js.map +1 -0
- package/src/lib/design/system/rules/unbound-input.d.ts +22 -0
- package/src/lib/design/system/rules/unbound-input.js +61 -0
- package/src/lib/design/system/rules/unbound-input.js.map +1 -0
- package/src/lib/design/system/rules/uncovered-region.d.ts +13 -0
- package/src/lib/design/system/rules/uncovered-region.js +36 -0
- package/src/lib/design/system/rules/uncovered-region.js.map +1 -0
- package/src/lib/design/system/rules/undefined-class.d.ts +9 -0
- package/src/lib/design/system/rules/undefined-class.js +32 -0
- package/src/lib/design/system/rules/undefined-class.js.map +1 -0
- package/src/lib/design/system/rules/undefined-token.d.ts +1 -1
- package/src/lib/design/system/rules/undefined-token.js +7 -61
- package/src/lib/design/system/rules/undefined-token.js.map +1 -1
- package/src/lib/design/system/rules/utility-css.d.ts +2 -1
- package/src/lib/design/system/rules/utility-css.js +29 -14
- package/src/lib/design/system/rules/utility-css.js.map +1 -1
- package/src/lib/design/system/rules/view-coverage.d.ts +8 -0
- package/src/lib/design/system/rules/view-coverage.js +51 -0
- package/src/lib/design/system/rules/view-coverage.js.map +1 -0
- package/src/lib/design/system/rules/visible-change.d.ts +20 -0
- package/src/lib/design/system/rules/visible-change.js +48 -0
- package/src/lib/design/system/rules/visible-change.js.map +1 -0
- package/src/lib/design/system/sdk-errors.d.ts +14 -0
- package/src/lib/design/system/sdk-errors.js +38 -0
- package/src/lib/design/system/sdk-errors.js.map +1 -0
- package/src/lib/design/system/see-through.d.ts +12 -0
- package/src/lib/design/system/see-through.js +112 -0
- package/src/lib/design/system/see-through.js.map +1 -0
- package/src/lib/design/system/settled-panes.d.ts +18 -0
- package/src/lib/design/system/settled-panes.js +70 -0
- package/src/lib/design/system/settled-panes.js.map +1 -0
- package/src/lib/design/system/sketch/after-merge.d.ts +11 -0
- package/src/lib/design/system/sketch/after-merge.js +51 -0
- package/src/lib/design/system/sketch/after-merge.js.map +1 -0
- package/src/lib/design/system/sketch/aktuell-placeholders.d.ts +30 -0
- package/src/lib/design/system/sketch/aktuell-placeholders.js +87 -0
- package/src/lib/design/system/sketch/aktuell-placeholders.js.map +1 -0
- package/src/lib/design/system/sketch/baseline.d.ts +19 -1
- package/src/lib/design/system/sketch/baseline.js +29 -7
- package/src/lib/design/system/sketch/baseline.js.map +1 -1
- package/src/lib/design/system/sketch/check-sketches.d.ts +10 -0
- package/src/lib/design/system/sketch/check-sketches.js +50 -4
- package/src/lib/design/system/sketch/check-sketches.js.map +1 -1
- package/src/lib/design/system/sketch/cli-args.d.ts +12 -2
- package/src/lib/design/system/sketch/cli-args.js +18 -3
- package/src/lib/design/system/sketch/cli-args.js.map +1 -1
- package/src/lib/design/system/sketch/edit-sketch.d.ts +21 -0
- package/src/lib/design/system/sketch/edit-sketch.js +117 -0
- package/src/lib/design/system/sketch/edit-sketch.js.map +1 -0
- package/src/lib/design/system/sketch/frame-budget.d.ts +24 -0
- package/src/lib/design/system/sketch/frame-budget.js +23 -0
- package/src/lib/design/system/sketch/frame-budget.js.map +1 -0
- package/src/lib/design/system/sketch/identical-renders.d.ts +31 -0
- package/src/lib/design/system/sketch/identical-renders.js +137 -0
- package/src/lib/design/system/sketch/identical-renders.js.map +1 -0
- package/src/lib/design/system/sketch/merge-shared.d.ts +2 -0
- package/src/lib/design/system/sketch/merge-shared.js +7 -10
- package/src/lib/design/system/sketch/merge-shared.js.map +1 -1
- package/src/lib/design/system/sketch/merge-step.d.ts +35 -0
- package/src/lib/design/system/sketch/merge-step.js +98 -0
- package/src/lib/design/system/sketch/merge-step.js.map +1 -0
- package/src/lib/design/system/sketch/merge.d.ts +10 -3
- package/src/lib/design/system/sketch/merge.js +103 -30
- package/src/lib/design/system/sketch/merge.js.map +1 -1
- package/src/lib/design/system/sketch/merged-layout.d.ts +17 -0
- package/src/lib/design/system/sketch/merged-layout.js +57 -0
- package/src/lib/design/system/sketch/merged-layout.js.map +1 -0
- package/src/lib/design/system/sketch/merged-parts.d.ts +40 -10
- package/src/lib/design/system/sketch/merged-parts.js +112 -49
- package/src/lib/design/system/sketch/merged-parts.js.map +1 -1
- package/src/lib/design/system/sketch/no-visible-change.d.ts +10 -0
- package/src/lib/design/system/sketch/no-visible-change.js +16 -6
- package/src/lib/design/system/sketch/no-visible-change.js.map +1 -1
- package/src/lib/design/system/sketch/part-definition.d.ts +21 -1
- package/src/lib/design/system/sketch/part-definition.js +79 -17
- package/src/lib/design/system/sketch/part-definition.js.map +1 -1
- package/src/lib/design/system/sketch/rebase-port.d.ts +24 -0
- package/src/lib/design/system/sketch/rebase-port.js +170 -0
- package/src/lib/design/system/sketch/rebase-port.js.map +1 -0
- package/src/lib/design/system/sketch/sample-mark-drift.d.ts +33 -0
- package/src/lib/design/system/sketch/sample-mark-drift.js +88 -0
- package/src/lib/design/system/sketch/sample-mark-drift.js.map +1 -0
- package/src/lib/design/system/sketch/sketch-check-worker.d.ts +1 -0
- package/src/lib/design/system/sketch/sketch-check-worker.js +27 -0
- package/src/lib/design/system/sketch/sketch-check-worker.js.map +1 -0
- package/src/lib/design/system/sketch/sketch-checker.d.ts +27 -0
- package/src/lib/design/system/sketch/sketch-checker.js +99 -0
- package/src/lib/design/system/sketch/sketch-checker.js.map +1 -0
- package/src/lib/design/system/sketch/sketch.d.ts +63 -2
- package/src/lib/design/system/sketch/sketch.js +185 -30
- package/src/lib/design/system/sketch/sketch.js.map +1 -1
- package/src/lib/design/system/sketch/stale-base.d.ts +22 -0
- package/src/lib/design/system/sketch/stale-base.js +56 -0
- package/src/lib/design/system/sketch/stale-base.js.map +1 -0
- package/src/lib/design/system/sketch/unchanged-states.d.ts +32 -0
- package/src/lib/design/system/sketch/unchanged-states.js +52 -13
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
- package/src/lib/design/system/sketch/unused-closure.js +16 -4
- package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
- package/src/lib/design/system/sketch/viewed-shots.d.ts +24 -0
- package/src/lib/design/system/sketch/viewed-shots.js +61 -0
- package/src/lib/design/system/sketch/viewed-shots.js.map +1 -0
- package/src/lib/design/system/slow-checks.d.ts +40 -0
- package/src/lib/design/system/slow-checks.js +197 -0
- package/src/lib/design/system/slow-checks.js.map +1 -0
- package/src/lib/design/system/slow-run.d.ts +57 -0
- package/src/lib/design/system/slow-run.js +253 -0
- package/src/lib/design/system/slow-run.js.map +1 -0
- package/src/lib/design/system/stale-design-mocks.d.ts +20 -0
- package/src/lib/design/system/stale-design-mocks.js +59 -0
- package/src/lib/design/system/stale-design-mocks.js.map +1 -0
- package/src/lib/design/system/stale-dist.d.ts +25 -0
- package/src/lib/design/system/stale-dist.js +91 -0
- package/src/lib/design/system/stale-dist.js.map +1 -0
- package/src/lib/design/system/stale-parts.d.ts +30 -0
- package/src/lib/design/system/stale-parts.js +106 -0
- package/src/lib/design/system/stale-parts.js.map +1 -0
- package/src/lib/design/system/surface-nesting.d.ts +11 -0
- package/src/lib/design/system/surface-nesting.js +86 -0
- package/src/lib/design/system/surface-nesting.js.map +1 -0
- package/src/lib/design/system/system-command.js +8 -6
- package/src/lib/design/system/system-command.js.map +1 -1
- package/src/lib/design/system/system-modules.d.ts +16 -1
- package/src/lib/design/system/system-modules.js +18 -2
- package/src/lib/design/system/system-modules.js.map +1 -1
- package/src/lib/design/system/task-command.d.ts +51 -0
- package/src/lib/design/system/task-command.js +233 -0
- package/src/lib/design/system/task-command.js.map +1 -0
- package/src/lib/design/system/theming-text.d.ts +2 -0
- package/src/lib/design/system/theming-text.js +6 -0
- package/src/lib/design/system/theming-text.js.map +1 -0
- package/src/lib/design/system/tom-confirm.d.ts +40 -0
- package/src/lib/design/system/tom-confirm.js +55 -0
- package/src/lib/design/system/tom-confirm.js.map +1 -0
- package/src/lib/design/system/touched-parts.d.ts +16 -0
- package/src/lib/design/system/touched-parts.js +122 -0
- package/src/lib/design/system/touched-parts.js.map +1 -0
- package/src/lib/design/system/ts-source.d.ts +2 -0
- package/src/lib/design/system/ts-source.js +15 -1
- package/src/lib/design/system/ts-source.js.map +1 -1
- package/src/lib/design/system/unchanged-rows.d.ts +15 -0
- package/src/lib/design/system/unchanged-rows.js +134 -0
- package/src/lib/design/system/unchanged-rows.js.map +1 -0
- package/src/lib/design/system/uncommitted-decisions.d.ts +6 -0
- package/src/lib/design/system/uncommitted-decisions.js +38 -0
- package/src/lib/design/system/uncommitted-decisions.js.map +1 -0
- package/src/lib/design/system/uncovered-regions.d.ts +61 -0
- package/src/lib/design/system/uncovered-regions.js +171 -0
- package/src/lib/design/system/uncovered-regions.js.map +1 -0
- package/src/lib/design/system/unused-base-parts.d.ts +7 -0
- package/src/lib/design/system/unused-base-parts.js +76 -0
- package/src/lib/design/system/unused-base-parts.js.map +1 -0
- package/src/lib/design/system/visible-change-command.d.ts +48 -0
- package/src/lib/design/system/visible-change-command.js +308 -0
- package/src/lib/design/system/visible-change-command.js.map +1 -0
- package/src/lib/design/system/visible-change-parts.d.ts +28 -0
- package/src/lib/design/system/visible-change-parts.js +96 -0
- package/src/lib/design/system/visible-change-parts.js.map +1 -0
- package/src/lib/design/system/visible-change.d.ts +82 -0
- package/src/lib/design/system/visible-change.js +149 -0
- package/src/lib/design/system/visible-change.js.map +1 -0
- package/src/lib/design/thumb.d.ts +19 -2
- package/src/lib/design/thumb.js +50 -15
- package/src/lib/design/thumb.js.map +1 -1
- package/src/lib/design/typecheck.d.ts +1 -1
- package/src/lib/design/typecheck.js +3 -3
- package/src/lib/design/typecheck.js.map +1 -1
- package/src/lib/design/unstable-cells.d.ts +23 -0
- package/src/lib/design/unstable-cells.js +40 -0
- package/src/lib/design/unstable-cells.js.map +1 -0
- package/src/lib/design/variant-diff.js +1 -1
- package/src/lib/design/variant-diff.js.map +1 -1
- package/src/lib/design/wait.d.ts +15 -0
- package/src/lib/design/wait.js +30 -0
- package/src/lib/design/wait.js.map +1 -0
- package/src/lib/json-file.d.ts +11 -0
- package/src/lib/json-file.js +21 -0
- package/src/lib/json-file.js.map +1 -0
- package/src/lib/source-hash.d.ts +7 -0
- package/src/lib/source-hash.js +62 -0
- package/src/lib/source-hash.js.map +1 -0
- package/src/lib/update/agent-setup.js +2 -1
- package/src/lib/update/agent-setup.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +12 -0
- package/src/lib/update/migration-manifest.js +13 -0
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.js +2 -1
- package/src/lib/update/migration-record.js.map +1 -1
- package/src/lib/update/pending.js +2 -1
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +3 -2
- package/src/lib/update/run-migrations.js +38 -5
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/tasks.js +2 -1
- package/src/lib/update/tasks.js.map +1 -1
|
@@ -22,16 +22,21 @@ export type FrameBox = {
|
|
|
22
22
|
* An element of a drawn frame that looks interactive. `control` is a native control, an interactive role or a known
|
|
23
23
|
* SDK control; `unclassified` has a pointer cursor or a matched `:hover` rule and sits in no control. `marked` is the
|
|
24
24
|
* `data-et-control` that declares it, `within` every `data-et-control` around it, nearest first. `owner` is the
|
|
25
|
-
* embedded part whose `data-et-part` root draws it, or `null` for the frame's own part.
|
|
25
|
+
* embedded part whose `data-et-part` root draws it, or `null` for the frame's own part. `label` is its accessible name
|
|
26
|
+
* or text, which tells apart two controls at the same path.
|
|
26
27
|
*/
|
|
27
28
|
export type FoundControl = {
|
|
28
29
|
kind: 'control' | 'unclassified';
|
|
29
30
|
what: string;
|
|
30
31
|
path: string;
|
|
32
|
+
label?: string | null;
|
|
31
33
|
marked: string | null;
|
|
32
34
|
within: string[];
|
|
33
35
|
owner?: string | null;
|
|
34
36
|
box?: FrameBox | null;
|
|
37
|
+
covered?: boolean;
|
|
38
|
+
/** The element's `data-et-action`, or `undefined` for an element the action check does not press. */
|
|
39
|
+
action?: string | null;
|
|
35
40
|
};
|
|
36
41
|
/** A rule of the part's own stylesheet that sets `properties` on `path`, an element the embedded part `owner` draws. */
|
|
37
42
|
export type FoundOverride = {
|
|
@@ -74,6 +79,7 @@ export type SeenFrame = {
|
|
|
74
79
|
look?: string;
|
|
75
80
|
keyboard?: boolean;
|
|
76
81
|
box?: FrameBox | null;
|
|
82
|
+
covered?: boolean;
|
|
77
83
|
}[];
|
|
78
84
|
surfaces: {
|
|
79
85
|
id: string;
|
|
@@ -82,6 +88,10 @@ export type SeenFrame = {
|
|
|
82
88
|
}[];
|
|
83
89
|
found?: FoundControl[];
|
|
84
90
|
overrides?: FoundOverride[];
|
|
91
|
+
backdrop?: {
|
|
92
|
+
path: string;
|
|
93
|
+
fill: string;
|
|
94
|
+
} | null;
|
|
85
95
|
};
|
|
86
96
|
export type DeclaredControl = {
|
|
87
97
|
kind: string;
|
|
@@ -113,6 +123,20 @@ export declare const controlStateGapsOf: (options: {
|
|
|
113
123
|
controls: unknown;
|
|
114
124
|
states: string[];
|
|
115
125
|
}) => CompletenessGap[];
|
|
126
|
+
/**
|
|
127
|
+
* The `CONTROL-STATE` gaps render check fails a part on. Only a sketch variant fails, and only on interaction states
|
|
128
|
+
* its base part, `base`, does not already draw as a gap: product check leaves those gaps to `design complete`.
|
|
129
|
+
*/
|
|
130
|
+
export declare const introducedControlStateGapsOf: (options: {
|
|
131
|
+
part: string;
|
|
132
|
+
controls: unknown;
|
|
133
|
+
states: string[];
|
|
134
|
+
sketch: boolean;
|
|
135
|
+
base: {
|
|
136
|
+
controls: unknown;
|
|
137
|
+
states: string[];
|
|
138
|
+
} | null;
|
|
139
|
+
}) => CompletenessGap[];
|
|
116
140
|
/** How much of its frame one rest state changes against `base`, the first state of its part, from 0 to 1. */
|
|
117
141
|
export type StateChange = {
|
|
118
142
|
state: string;
|
|
@@ -150,6 +174,13 @@ export declare const completenessGapLineOf: (gap: CompletenessGap) => string;
|
|
|
150
174
|
export declare const isMissingStateGap: (gap: CompletenessGap) => boolean;
|
|
151
175
|
export declare const SDK_CONTROLS: string[];
|
|
152
176
|
export declare const PLAIN_CONTROL_SELECTOR: string;
|
|
177
|
+
export declare const seeFrame: (options: {
|
|
178
|
+
discover: boolean;
|
|
179
|
+
part: string;
|
|
180
|
+
ownCss: string[];
|
|
181
|
+
controlParts: Record<string, string>;
|
|
182
|
+
clip: boolean;
|
|
183
|
+
}) => string;
|
|
153
184
|
/** Where a rest frame of a part is drawn: its state at a preset, or at a width, as `/__design/shot` takes it. */
|
|
154
185
|
export type FrameAddress = {
|
|
155
186
|
state: string;
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.partsCompletenessOf = exports.completenessOf = exports.inventoryIdsOf = exports.seePart = exports.PLAIN_CONTROL_SELECTOR = exports.SDK_CONTROLS = exports.isMissingStateGap = exports.completenessGapLineOf = exports.completenessGapsOf = exports.findingKeyOf = exports.isFindingOf = exports.smallChangeHintsOf = exports.controlStateGapsOf = exports.isControlPart = exports.isInteractionState = exports.declaredControlsOf = void 0;
|
|
12
|
+
exports.partsCompletenessOf = exports.completenessOf = exports.inventoryIdsOf = exports.seePart = exports.seeFrame = exports.PLAIN_CONTROL_SELECTOR = exports.SDK_CONTROLS = exports.isMissingStateGap = exports.completenessGapLineOf = exports.completenessGapsOf = exports.findingKeyOf = exports.isFindingOf = exports.smallChangeHintsOf = exports.introducedControlStateGapsOf = exports.controlStateGapsOf = exports.isControlPart = exports.isInteractionState = exports.declaredControlsOf = void 0;
|
|
13
13
|
const fs_1 = require("fs");
|
|
14
14
|
const path_1 = require("path");
|
|
15
15
|
const browser_1 = require("../browser");
|
|
@@ -17,6 +17,7 @@ const force_interactions_1 = require("../force-interactions");
|
|
|
17
17
|
const serve_1 = require("../serve");
|
|
18
18
|
const shot_1 = require("../shot");
|
|
19
19
|
const thumb_1 = require("../thumb");
|
|
20
|
+
const actions_1 = require("./actions");
|
|
20
21
|
const resolve_product_1 = require("./resolve-product");
|
|
21
22
|
const contact_sheet_1 = require("../contact-sheet");
|
|
22
23
|
const baseline_1 = require("./sketch/baseline");
|
|
@@ -25,6 +26,7 @@ const system_modules_1 = require("./system-modules");
|
|
|
25
26
|
const exceptions_1 = require("./exceptions");
|
|
26
27
|
const inventory_approval_1 = require("./inventory-approval");
|
|
27
28
|
const option_values_1 = require("./rules/option-values");
|
|
29
|
+
const demo_backdrop_1 = require("./demo-backdrop");
|
|
28
30
|
const KINDS = {
|
|
29
31
|
disclosure: { surface: 'body', closed: 'collapsed' },
|
|
30
32
|
button: { adds: ['active'] },
|
|
@@ -54,7 +56,7 @@ const requiredInteractionsOf = (control) => {
|
|
|
54
56
|
];
|
|
55
57
|
};
|
|
56
58
|
const gridGapOf = (options) => {
|
|
57
|
-
const { grid, states, interactions } = options;
|
|
59
|
+
const { grid, states, interactions, disabledStates = new Set() } = options;
|
|
58
60
|
const fix = `draw its states with interactionRows, which gives the grid a column per interaction (${interactions.join(', ')})`;
|
|
59
61
|
if (!isRecord(grid) || !Array.isArray(grid['columns']) || !isRecord(grid['rows']))
|
|
60
62
|
return `the part has no grid - ${fix}`;
|
|
@@ -62,12 +64,14 @@ const gridGapOf = (options) => {
|
|
|
62
64
|
const missing = interactions.filter((interaction) => !columns.includes(interaction));
|
|
63
65
|
if (missing.length > 0)
|
|
64
66
|
return `its grid has no column ${missing.join(', ')} - ${fix}`;
|
|
65
|
-
const holes = Object.entries(grid['rows']).flatMap(([row, cells]) =>
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
const holes = Object.entries(grid['rows']).flatMap(([row, cells]) => isRecord(cells) && typeof cells['rest'] === 'string' && disabledStates.has(cells['rest'])
|
|
68
|
+
? []
|
|
69
|
+
: interactions
|
|
70
|
+
.filter((interaction) => {
|
|
71
|
+
const state = isRecord(cells) ? cells[interaction] : undefined;
|
|
72
|
+
return typeof state !== 'string' || !states.includes(state);
|
|
73
|
+
})
|
|
74
|
+
.map((interaction) => `${row} ${interaction}`));
|
|
71
75
|
return holes.length > 0 ? `its grid draws no state in ${holes.join(', ')} - ${fix}` : null;
|
|
72
76
|
};
|
|
73
77
|
const declaredControlsOf = (value) => isRecord(value)
|
|
@@ -147,6 +151,18 @@ const controlStateGapsOf = (options) => {
|
|
|
147
151
|
}));
|
|
148
152
|
};
|
|
149
153
|
exports.controlStateGapsOf = controlStateGapsOf;
|
|
154
|
+
/**
|
|
155
|
+
* The `CONTROL-STATE` gaps render check fails a part on. Only a sketch variant fails, and only on interaction states
|
|
156
|
+
* its base part, `base`, does not already draw as a gap: product check leaves those gaps to `design complete`.
|
|
157
|
+
*/
|
|
158
|
+
const introducedControlStateGapsOf = (options) => {
|
|
159
|
+
const { part, controls, states, sketch, base } = options;
|
|
160
|
+
if (!sketch)
|
|
161
|
+
return [];
|
|
162
|
+
const inherited = new Set(base && !(0, exports.isControlPart)({ part, controls: base.controls }) ? base.states.filter(exports.isInteractionState) : []);
|
|
163
|
+
return (0, exports.controlStateGapsOf)({ part, controls, states: states.filter((state) => !inherited.has(state)) });
|
|
164
|
+
};
|
|
165
|
+
exports.introducedControlStateGapsOf = introducedControlStateGapsOf;
|
|
150
166
|
const SMALL_CHANGE = 0.1;
|
|
151
167
|
/**
|
|
152
168
|
* One hint per state of an element or component that is no control part whose pixels differ from its first state in
|
|
@@ -166,7 +182,7 @@ const isFindingOf = (declared) => (found) => {
|
|
|
166
182
|
!(found.kind === 'control' && found.marked !== null);
|
|
167
183
|
};
|
|
168
184
|
exports.isFindingOf = isFindingOf;
|
|
169
|
-
const findingKeyOf = (found) => `${found.kind} ${found.what} ${found.path}`;
|
|
185
|
+
const findingKeyOf = (found) => { var _a; return `${found.kind} ${found.what} ${found.path} ${(_a = found.label) !== null && _a !== void 0 ? _a : ''}`; };
|
|
170
186
|
exports.findingKeyOf = findingKeyOf;
|
|
171
187
|
const NATIVE_CONTROLS = ['button', 'a[href]', 'input:not([type="hidden"])', 'select', 'textarea', 'summary'];
|
|
172
188
|
const discoveryGapsOf = (options) => {
|
|
@@ -207,6 +223,28 @@ const discoveryGapsOf = (options) => {
|
|
|
207
223
|
};
|
|
208
224
|
});
|
|
209
225
|
};
|
|
226
|
+
const actionGapsOf = (options) => {
|
|
227
|
+
var _a, _b, _c;
|
|
228
|
+
const { part, declared, frames } = options;
|
|
229
|
+
const groups = new Map();
|
|
230
|
+
for (const frame of frames.filter((seen) => seen.interaction === null))
|
|
231
|
+
for (const found of (_a = frame.found) !== null && _a !== void 0 ? _a : []) {
|
|
232
|
+
if (found.action !== null ||
|
|
233
|
+
((_b = found.owner) !== null && _b !== void 0 ? _b : null) !== null ||
|
|
234
|
+
found.within.some((id) => { var _a, _b; return ((_b = (_a = declared[id]) === null || _a === void 0 ? void 0 : _a.part) !== null && _b !== void 0 ? _b : null) !== null; }))
|
|
235
|
+
continue;
|
|
236
|
+
const key = (0, exports.findingKeyOf)(found);
|
|
237
|
+
const group = (_c = groups.get(key)) !== null && _c !== void 0 ? _c : { found, states: [] };
|
|
238
|
+
if (!group.states.includes(frame.state))
|
|
239
|
+
group.states.push(frame.state);
|
|
240
|
+
groups.set(key, group);
|
|
241
|
+
}
|
|
242
|
+
return [...groups.values()].map(({ found, states }) => ({
|
|
243
|
+
code: 'ACTION-UNDECLARED',
|
|
244
|
+
target: part,
|
|
245
|
+
detail: `${found.what}${found.label ? ` "${found.label}"` : ''} at ${found.path} in ${statesShownOf(states)} - declare what it does: data-et-action="<state>" or "emit:<output>"`,
|
|
246
|
+
}));
|
|
247
|
+
};
|
|
210
248
|
const isUndeclaredControlGap = (gap) => gap.code === 'CONTROL-UNDECLARED';
|
|
211
249
|
const statesShownOf = (states) => states.length > 4 ? `${states.slice(0, 3).join(', ')} and ${states.length - 3} more` : states.join(', ');
|
|
212
250
|
const overrideGapsOf = (options) => {
|
|
@@ -499,7 +537,10 @@ const completenessGapsOf = (options) => {
|
|
|
499
537
|
detail: `${control.part} is not design complete: ${used.length} gap(s) - run design complete ${control.part}`,
|
|
500
538
|
});
|
|
501
539
|
const interactions = control.part === null && !part.startsWith('pages/') ? requiredInteractionsOf(control) : [];
|
|
502
|
-
const
|
|
540
|
+
const disabledStates = new Set(frames
|
|
541
|
+
.filter((frame) => frame.interaction === null && frame.controls.some((seen) => seen.id === id && seen.disabled))
|
|
542
|
+
.map((frame) => frame.state));
|
|
543
|
+
const gridGap = interactions.length > 0 ? gridGapOf({ grid, states, interactions, disabledStates }) : null;
|
|
503
544
|
if (gridGap)
|
|
504
545
|
gaps.push({ code: 'CONTROL-GRID-MISSING', target: `${part}.${id}`, detail: gridGap });
|
|
505
546
|
if (!seenIds.has(id)) {
|
|
@@ -517,6 +558,7 @@ const completenessGapsOf = (options) => {
|
|
|
517
558
|
return [
|
|
518
559
|
...gaps,
|
|
519
560
|
...discoveryGapsOf({ part, declared, frames }).filter((gap) => !isUndeclaredControlGap(gap)),
|
|
561
|
+
...actionGapsOf({ part, declared, frames }),
|
|
520
562
|
...ownerGapsOf({ part, declared, frames, referenced }),
|
|
521
563
|
...overrideGapsOf({ part, frames }),
|
|
522
564
|
...inventoryGapsOf({ part, inventory }),
|
|
@@ -682,10 +724,11 @@ const LIKELY_CONTROLS = [...exports.SDK_CONTROLS, ...PLAIN_CONTROLS];
|
|
|
682
724
|
const LOOK_PROPERTIES = [...COLOUR_PROPERTIES, 'opacity', 'box-shadow', 'font-weight', 'text-decoration-line'];
|
|
683
725
|
const OPTION_SELECTOR = '[role="option"], [role^="menuitem"], [data-et-option]';
|
|
684
726
|
const COMPOSITE_ROLES = ['grid', 'listbox', 'menu', 'menubar', 'radiogroup', 'tablist', 'tree', 'treegrid'];
|
|
685
|
-
const
|
|
686
|
-
|
|
687
|
-
`[role="${role}"][aria-activedescendant]
|
|
688
|
-
|
|
727
|
+
const DIALOG_ROLES = ['dialog', 'alertdialog'];
|
|
728
|
+
const FOCUS_CONTAINER = [
|
|
729
|
+
...COMPOSITE_ROLES.flatMap((role) => [`[role="${role}"][tabindex="-1"]`, `[role="${role}"][aria-activedescendant]`]),
|
|
730
|
+
...DIALOG_ROLES.map((role) => `[role="${role}"][tabindex="-1"]`),
|
|
731
|
+
].join(', ');
|
|
689
732
|
exports.PLAIN_CONTROL_SELECTOR = `:is(${PLAIN_CONTROLS.join(', ')}):not(${FOCUS_CONTAINER})`;
|
|
690
733
|
const discoverControls = `((root) => {
|
|
691
734
|
const LIKELY = ${JSON.stringify(LIKELY_CONTROLS)};
|
|
@@ -695,7 +738,7 @@ const discoverControls = `((root) => {
|
|
|
695
738
|
const sdk = ${JSON.stringify(exports.SDK_CONTROLS.join(', '))};
|
|
696
739
|
const rendered = (element) => element.getClientRects().length > 0;
|
|
697
740
|
const HOVER = /(?<!\\\\):hover(?![\\w-])/g;
|
|
698
|
-
const FORCED_HOVER = /:is\\(:hover,\\s*\\[data-et-force~="?hover"?\\]
|
|
741
|
+
const FORCED_HOVER = /:is\\(:hover,\\s*\\[data-et-force~="?hover"?\\](?:,\\s*\\[data-et-force~="?active"?\\])?\\)/g;
|
|
699
742
|
const hoveredOf = (written) => {
|
|
700
743
|
const selector = written.replace(FORCED_HOVER, ':hover');
|
|
701
744
|
const match = new RegExp(HOVER.source).exec(selector);
|
|
@@ -756,6 +799,8 @@ const discoverControls = `((root) => {
|
|
|
756
799
|
}
|
|
757
800
|
return null;
|
|
758
801
|
};
|
|
802
|
+
const labelOf = (element) =>
|
|
803
|
+
(element.getAttribute('aria-label') ?? element.innerText ?? element.textContent ?? '').replace(/\\s+/g, ' ').trim().slice(0, 60) || null;
|
|
759
804
|
const found = [];
|
|
760
805
|
for (const element of root.querySelectorAll('*')) {
|
|
761
806
|
if (!rendered(element)) continue;
|
|
@@ -763,7 +808,7 @@ const discoverControls = `((root) => {
|
|
|
763
808
|
if (what) {
|
|
764
809
|
const inSdk = element.parentElement.closest(sdk);
|
|
765
810
|
if (inSdk !== null && root.contains(inSdk)) continue;
|
|
766
|
-
found.push({ kind: 'control', what: what.startsWith('[') ? element.tagName.toLowerCase() + what : what, path: pathOf(element), marked: markedOf(element), within: withinOf(element), owner: ownerOf(element)?.key ?? null, box: frameBoxOf(element) });
|
|
811
|
+
found.push({ kind: 'control', what: what.startsWith('[') ? element.tagName.toLowerCase() + what : what, path: pathOf(element), label: labelOf(element), marked: markedOf(element), within: withinOf(element), owner: ownerOf(element)?.key ?? null, box: frameBoxOf(element), covered: isCovered(element), ...(element.matches(${JSON.stringify(actions_1.INTERACTIVE_SELECTOR)}) ? { action: element.getAttribute('data-et-action') } : {}) });
|
|
767
812
|
continue;
|
|
768
813
|
}
|
|
769
814
|
const cursor = getComputedStyle(element).cursor;
|
|
@@ -773,7 +818,7 @@ const discoverControls = `((root) => {
|
|
|
773
818
|
for (let at = element; at && !inControl; at = at.parentElement) inControl = at.hasAttribute('data-et-control') || isLikely(at);
|
|
774
819
|
if (inControl) continue;
|
|
775
820
|
const reason = [pointer ? 'cursor: pointer' : '', hovered.has(element) ? ':hover rule' : ''].filter(Boolean).join(' and ');
|
|
776
|
-
found.push({ kind: 'unclassified', what: nameOf(element) + ' with ' + reason, path: pathOf(element), marked: null, within: [], owner: ownerOf(element)?.key ?? null, box: frameBoxOf(element) });
|
|
821
|
+
found.push({ kind: 'unclassified', what: nameOf(element) + ' with ' + reason, path: pathOf(element), label: labelOf(element), marked: null, within: [], owner: ownerOf(element)?.key ?? null, box: frameBoxOf(element), covered: isCovered(element) });
|
|
777
822
|
}
|
|
778
823
|
return found;
|
|
779
824
|
})`;
|
|
@@ -857,7 +902,31 @@ const seeFrame = (options) => `(() => {
|
|
|
857
902
|
? { x: Math.round(box.left - ORIGIN.left), y: Math.round(box.top - ORIGIN.top), width: Math.round(box.width), height: Math.round(box.height) }
|
|
858
903
|
: null;
|
|
859
904
|
};
|
|
905
|
+
const isCovered = (element) => {
|
|
906
|
+
const box = element.getBoundingClientRect();
|
|
907
|
+
if (box.width <= 0 || box.height <= 0) return false;
|
|
908
|
+
const x = [box.left + 1, box.left + box.width / 2, box.right - 1];
|
|
909
|
+
const y = [box.top + 1, box.top + box.height / 2, box.bottom - 1];
|
|
910
|
+
const points = [[x[1], y[1]], [x[0], y[0]], [x[2], y[0]], [x[0], y[2]], [x[2], y[2]]];
|
|
911
|
+
let hit = false;
|
|
912
|
+
const inline = element.style.getPropertyValue('pointer-events');
|
|
913
|
+
const priority = element.style.getPropertyPriority('pointer-events');
|
|
914
|
+
element.style.setProperty('pointer-events', 'auto', 'important');
|
|
915
|
+
try {
|
|
916
|
+
for (const [px, py] of points) {
|
|
917
|
+
const top = document.elementFromPoint(px, py);
|
|
918
|
+
if (top === null) return false;
|
|
919
|
+
if (element.contains(top)) return false;
|
|
920
|
+
hit = true;
|
|
921
|
+
}
|
|
922
|
+
} finally {
|
|
923
|
+
if (inline) element.style.setProperty('pointer-events', inline, priority);
|
|
924
|
+
else element.style.removeProperty('pointer-events');
|
|
925
|
+
}
|
|
926
|
+
return hit;
|
|
927
|
+
};
|
|
860
928
|
const OWN = ${JSON.stringify(options.part)};
|
|
929
|
+
const CONTROL_PARTS = ${JSON.stringify(options.controlParts)};
|
|
861
930
|
const tokensOf = (element, name) => (element.getAttribute(name) ?? '').split(' ').filter(Boolean);
|
|
862
931
|
const ownerOf = (element) => {
|
|
863
932
|
const slotted = tokensOf(element, 'data-et-slot');
|
|
@@ -936,15 +1005,21 @@ const seeFrame = (options) => `(() => {
|
|
|
936
1005
|
const box = element.getBoundingClientRect();
|
|
937
1006
|
const x = Math.max(0, box.x + scrollX - ${PAD});
|
|
938
1007
|
const y = Math.max(0, box.y + scrollY - ${PAD});
|
|
1008
|
+
const width = Math.min(box.x + scrollX + box.width + ${PAD}, document.documentElement.scrollWidth) - x;
|
|
1009
|
+
const height = Math.min(box.y + scrollY + box.height + ${PAD}, document.documentElement.scrollHeight) - y;
|
|
939
1010
|
return {
|
|
940
1011
|
at,
|
|
941
1012
|
forced: tokensOf(element, 'data-et-force'),
|
|
942
|
-
box: box.width > 0 && box.height > 0 ? { x, y, width
|
|
1013
|
+
box: box.width > 0 && box.height > 0 && width > 0 && height > 0 ? { x, y, width, height } : null,
|
|
943
1014
|
selected: isSelected(element),
|
|
944
1015
|
look: lookOf(element),
|
|
945
1016
|
};
|
|
946
1017
|
};
|
|
947
|
-
const
|
|
1018
|
+
const isOwnControl = (element) => {
|
|
1019
|
+
const owner = ownerOf(element);
|
|
1020
|
+
return owner === null || CONTROL_PARTS[element.getAttribute('data-et-control')] === owner.key;
|
|
1021
|
+
};
|
|
1022
|
+
const controls = [...root.querySelectorAll('[data-et-control]')].filter(isOwnControl).map((element) => {
|
|
948
1023
|
const parts = ${controlPartsOf}(element);
|
|
949
1024
|
const forced = new Set(parts.flatMap((part) => tokensOf(part, 'data-et-force')));
|
|
950
1025
|
for (const part of parts) if (forced.size > 0) part.setAttribute('data-et-force', [...forced].join(' '));
|
|
@@ -953,10 +1028,12 @@ const seeFrame = (options) => `(() => {
|
|
|
953
1028
|
disabled: parts.some(isDisabled),
|
|
954
1029
|
keyboard: parts.some(isKeyboard),
|
|
955
1030
|
frameBox: frameBoxOf(element),
|
|
1031
|
+
covered: isCovered(element),
|
|
956
1032
|
...tagged(element),
|
|
957
1033
|
};
|
|
958
1034
|
});
|
|
959
|
-
const
|
|
1035
|
+
const partRoot = [root, ...root.querySelectorAll('[data-et-part]')].find((element) => (element.getAttribute('data-et-part') ?? '').split(' ').includes(${JSON.stringify(options.part)}));
|
|
1036
|
+
const surfaces = [...root.querySelectorAll('[data-et-surface]')].filter((element) => ownerOf(element) === null && !(element === partRoot && element.getAttribute('data-et-surface') === '')).map((element) => ({
|
|
960
1037
|
id: element.getAttribute('data-et-surface'),
|
|
961
1038
|
shown: shown(element),
|
|
962
1039
|
options: [...element.querySelectorAll(${JSON.stringify(OPTION_SELECTOR)})].filter((option) => ownerOf(option) === null && shown(option)).map((option) => ({ ...tagged(option), named: option.id !== '' && named.has(option.id), keyboard: isKeyboard(option) })),
|
|
@@ -967,8 +1044,10 @@ const seeFrame = (options) => `(() => {
|
|
|
967
1044
|
surfaces,
|
|
968
1045
|
found: discover ? ${discoverControls}(root) : [],
|
|
969
1046
|
overrides: discover ? ${findOverrides}(${JSON.stringify(options.ownCss)}) : [],
|
|
1047
|
+
backdrop: discover ? ${(0, demo_backdrop_1.findDemoBackdrop)(options.part)}(root) : null,
|
|
970
1048
|
};
|
|
971
1049
|
})()`;
|
|
1050
|
+
exports.seeFrame = seeFrame;
|
|
972
1051
|
const forceOn = ({ at, interaction, on, }) => `((at, interaction, on) => {
|
|
973
1052
|
const found = document.querySelector('[data-et-complete="' + at + '"]');
|
|
974
1053
|
for (const element of found.hasAttribute('data-et-control') ? ${controlPartsOf}(found) : [found]) {
|
|
@@ -981,22 +1060,22 @@ const forceOn = ({ at, interaction, on, }) => `((at, interaction, on) => {
|
|
|
981
1060
|
})(${JSON.stringify(at)}, ${JSON.stringify(interaction)}, ${JSON.stringify(on)})`;
|
|
982
1061
|
const FORCEABLE = new Set(['hover', 'focus-visible', 'active']);
|
|
983
1062
|
const seeFrames = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
984
|
-
const { browser, base, frames, part, ownCss } = options;
|
|
1063
|
+
const { browser, base, frames, part, ownCss, controlParts } = options;
|
|
985
1064
|
const context = yield browser.newContext();
|
|
986
1065
|
const seen = [];
|
|
987
1066
|
const refused = [];
|
|
988
1067
|
const shots = [];
|
|
989
1068
|
try {
|
|
990
1069
|
const page = yield context.newPage();
|
|
991
|
-
|
|
1070
|
+
const seeOne = (frame) => __awaiter(void 0, void 0, void 0, function* () {
|
|
992
1071
|
yield page.setViewportSize((0, shot_1.viewportOf)(frame.size));
|
|
993
1072
|
yield (0, thumb_1.openFrame)(page, `${base}/frame.html?${frame.search}`);
|
|
994
1073
|
yield page.addStyleTag({ content: NO_MOTION });
|
|
995
|
-
yield
|
|
996
|
-
const found = (yield page.evaluate(seeFrame({ discover: frame.interaction === null, part, ownCss, clip: frame.clip })));
|
|
1074
|
+
yield (0, thumb_1.awaitSettled)(page);
|
|
1075
|
+
const found = (yield page.evaluate((0, exports.seeFrame)({ discover: frame.interaction === null, part, ownCss, controlParts, clip: frame.clip })));
|
|
997
1076
|
if ('refused' in found) {
|
|
998
1077
|
refused.push(`${frame.state}: ${found.refused}`);
|
|
999
|
-
|
|
1078
|
+
return;
|
|
1000
1079
|
}
|
|
1001
1080
|
if (frame.interaction === null) {
|
|
1002
1081
|
const box = frame.clip ? yield page.locator('#root').boundingBox() : null;
|
|
@@ -1016,7 +1095,7 @@ const seeFrames = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
1016
1095
|
const drawn = yield shot();
|
|
1017
1096
|
const drawnColours = (yield page.evaluate(colourSnapshot(element.at)));
|
|
1018
1097
|
yield page.evaluate(forceOn({ at: element.at, interaction, on: false }));
|
|
1019
|
-
yield
|
|
1098
|
+
yield (0, thumb_1.awaitSettled)(page);
|
|
1020
1099
|
const rest = yield shot();
|
|
1021
1100
|
const restColours = (yield page.evaluate(colourSnapshot(element.at)));
|
|
1022
1101
|
yield page.evaluate(forceOn({ at: element.at, interaction, on: true }));
|
|
@@ -1032,7 +1111,7 @@ const seeFrames = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
1032
1111
|
const controls = [];
|
|
1033
1112
|
const surfaces = [];
|
|
1034
1113
|
for (const control of found.controls)
|
|
1035
|
-
controls.push(Object.assign(Object.assign({ id: control.id, forced: yield forcedOf(control), selected: control.selected, disabled: control.disabled, look: control.look }, (control.keyboard ? { keyboard: true } : {})), { box: control.frameBox }));
|
|
1114
|
+
controls.push(Object.assign(Object.assign(Object.assign({ id: control.id, forced: yield forcedOf(control), selected: control.selected, disabled: control.disabled, look: control.look }, (control.keyboard ? { keyboard: true } : {})), { box: control.frameBox }), (control.covered ? { covered: true } : {})));
|
|
1036
1115
|
for (const surface of found.surfaces) {
|
|
1037
1116
|
const options = [];
|
|
1038
1117
|
for (const option of surface.options)
|
|
@@ -1046,7 +1125,16 @@ const seeFrames = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
1046
1125
|
surfaces,
|
|
1047
1126
|
found: found.found,
|
|
1048
1127
|
overrides: found.overrides,
|
|
1128
|
+
backdrop: found.backdrop,
|
|
1049
1129
|
});
|
|
1130
|
+
});
|
|
1131
|
+
for (const frame of frames) {
|
|
1132
|
+
try {
|
|
1133
|
+
yield seeOne(frame);
|
|
1134
|
+
}
|
|
1135
|
+
catch (error) {
|
|
1136
|
+
refused.push(`${frame.state}: design check could not draw this frame (${error instanceof Error ? error.message.split('\n')[0] : String(error)})`);
|
|
1137
|
+
}
|
|
1050
1138
|
}
|
|
1051
1139
|
}
|
|
1052
1140
|
finally {
|
|
@@ -1072,7 +1160,7 @@ const seeFrames = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
1072
1160
|
* once at its first preset or width, and answers what each frame showed, or why its module did not load as a string.
|
|
1073
1161
|
*/
|
|
1074
1162
|
const seePart = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
1075
|
-
var _a, _b, _c, _d, _e;
|
|
1163
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1076
1164
|
const { product, part, system, base, load, draw, restOnly = false, sketch = null } = options;
|
|
1077
1165
|
const key = (0, resolve_product_1.partKeyOf)(part);
|
|
1078
1166
|
const loaded = yield load((0, system_modules_1.productModuleIdOf)({ file: part.file, product: product.name, sketch }))
|
|
@@ -1118,7 +1206,8 @@ const seePart = (options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
1118
1206
|
.filter((file) => file.endsWith('.css'))
|
|
1119
1207
|
.sort()
|
|
1120
1208
|
.map((file) => (0, fs_1.readFileSync)((0, path_1.join)(dir, file), 'utf8'));
|
|
1121
|
-
const
|
|
1209
|
+
const controlParts = Object.fromEntries(Object.entries((_f = (0, exports.declaredControlsOf)(definition === null || definition === void 0 ? void 0 : definition.controls)) !== null && _f !== void 0 ? _f : {}).flatMap(([id, control]) => control.part === null ? [] : [[id, control.part]]));
|
|
1210
|
+
const { seen, refused, changes } = yield draw((browser) => seeFrames({ browser, base, frames, part: key, ownCss, controlParts }));
|
|
1122
1211
|
const owner = (0, inventory_approval_1.partOwnerOf)({ product, part });
|
|
1123
1212
|
return {
|
|
1124
1213
|
definition,
|
|
@@ -1219,13 +1308,17 @@ const partsCompletenessOf = (options) => __awaiter(void 0, void 0, void 0, funct
|
|
|
1219
1308
|
const optionProblems = optionValuesOf(resolved, definition !== null && definition !== void 0 ? definition : {});
|
|
1220
1309
|
hints.set(key, [
|
|
1221
1310
|
...(0, exports.smallChangeHintsOf)({ part: key, controls: definition === null || definition === void 0 ? void 0 : definition.controls, changes }),
|
|
1222
|
-
...
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1311
|
+
...[
|
|
1312
|
+
...(0, exports.controlStateGapsOf)({ part: key, controls: definition === null || definition === void 0 ? void 0 : definition.controls, states }),
|
|
1313
|
+
...discoveryGapsOf({
|
|
1314
|
+
part: key,
|
|
1315
|
+
declared: (_b = (0, exports.declaredControlsOf)(definition === null || definition === void 0 ? void 0 : definition.controls)) !== null && _b !== void 0 ? _b : {},
|
|
1316
|
+
frames: seen,
|
|
1317
|
+
}).filter(isUndeclaredControlGap),
|
|
1318
|
+
...optionProblems
|
|
1319
|
+
.filter((gap) => gap.code === 'OPTION-VALUE-MISSING')
|
|
1320
|
+
.map((gap) => (Object.assign(Object.assign({}, gap), { target: key }))),
|
|
1321
|
+
].map((gap) => `HINT ${(0, exports.completenessGapLineOf)(gap)}`),
|
|
1229
1322
|
]);
|
|
1230
1323
|
const sketched = ((_c = product.parts.find((candidate) => (0, resolve_product_1.partKeyOf)(candidate) === key)) === null || _c === void 0 ? void 0 : _c.file) !== resolved.file;
|
|
1231
1324
|
const reviewed = sketched || (0, merged_parts_1.readMerged)(owner.dir)[key] === hash;
|
|
@@ -1242,18 +1335,21 @@ const partsCompletenessOf = (options) => __awaiter(void 0, void 0, void 0, funct
|
|
|
1242
1335
|
part: key,
|
|
1243
1336
|
exceptions: (0, exceptions_1.readExceptions)(owner.dir),
|
|
1244
1337
|
hash,
|
|
1245
|
-
gaps:
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1338
|
+
gaps: [
|
|
1339
|
+
...(0, exports.completenessGapsOf)({
|
|
1340
|
+
part: key,
|
|
1341
|
+
controls: definition === null || definition === void 0 ? void 0 : definition.controls,
|
|
1342
|
+
states,
|
|
1343
|
+
frames: seen,
|
|
1344
|
+
reviewed,
|
|
1345
|
+
grid: definition === null || definition === void 0 ? void 0 : definition.grid,
|
|
1346
|
+
referenced,
|
|
1347
|
+
inventory: resolved.layer === 'pages'
|
|
1348
|
+
? (0, inventory_approval_1.inventoryStateOf)({ approval: (0, inventory_approval_1.readInventory)(owner.dir)[key], ids: (0, exports.inventoryIdsOf)(seen), hash })
|
|
1349
|
+
: undefined,
|
|
1350
|
+
}),
|
|
1351
|
+
...(resolved.layer === 'pages' ? [] : (0, demo_backdrop_1.demoBackdropGapsOf)({ part: key, frames: seen })),
|
|
1352
|
+
],
|
|
1257
1353
|
});
|
|
1258
1354
|
exceptions.push(...excepted.listed);
|
|
1259
1355
|
return [
|