@ethlete/cli 3.0.0-next.25 → 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 +417 -0
- package/build-info.json +1 -0
- package/design/define-call.ts +99 -31
- package/design/define-part.ts +50 -3
- package/design/icon-sheet.ts +1 -1
- package/design/interaction-rows.ts +13 -6
- package/design/logo-sheet.ts +52 -0
- package/design/mark-part.ts +51 -1
- package/design/motion-drive.ts +215 -0
- package/design/motion-runtime.ts +14 -2
- package/design/motion-tokens.ts +177 -0
- package/design/token-sheet.ts +1 -1
- package/design/web/frame-fill.ts +4 -0
- package/design/web/frame-fit.ts +7 -0
- package/design/web/frame-scheme.ts +44 -0
- package/design/web/frame-surfaces.ts +294 -0
- package/design/web/frame.ts +162 -43
- 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/calls-tsconfig.d.ts +2 -0
- package/src/lib/design/calls-tsconfig.js +10 -3
- package/src/lib/design/calls-tsconfig.js.map +1 -1
- package/src/lib/design/check.d.ts +1 -0
- package/src/lib/design/check.js +195 -13
- 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/contact-sheet.d.ts +9 -0
- package/src/lib/design/contact-sheet.js +38 -4
- package/src/lib/design/contact-sheet.js.map +1 -1
- package/src/lib/design/design-command.d.ts +2 -0
- package/src/lib/design/design-command.js +183 -15
- package/src/lib/design/design-command.js.map +1 -1
- package/src/lib/design/draw-ledger.d.ts +36 -0
- package/src/lib/design/draw-ledger.js +52 -0
- package/src/lib/design/draw-ledger.js.map +1 -0
- 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 +28 -3
- package/src/lib/design/mcp-command.js +134 -21
- 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 +10 -16
- 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 +42 -0
- package/src/lib/design/paths.js +50 -1
- 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 +9 -17
- package/src/lib/design/render-packages.js +25 -63
- package/src/lib/design/render-packages.js.map +1 -1
- package/src/lib/design/render-worker.js +2 -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 +23 -3
- package/src/lib/design/serve.js +288 -35
- 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 +30 -6
- package/src/lib/design/shot-command.js +144 -56
- package/src/lib/design/shot-command.js.map +1 -1
- package/src/lib/design/shot-store.d.ts +24 -0
- package/src/lib/design/shot-store.js +120 -0
- package/src/lib/design/shot-store.js.map +1 -0
- package/src/lib/design/shot.d.ts +71 -1
- package/src/lib/design/shot.js +253 -40
- 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 +452 -136
- package/src/lib/design/sketch-command.js.map +1 -1
- package/src/lib/design/ssr-shims.d.ts +2 -0
- package/src/lib/design/ssr-shims.js +12 -1
- package/src/lib/design/ssr-shims.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 +35 -4
- package/src/lib/design/studio-api.js +312 -41
- 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 +62 -3
- package/src/lib/design/system/check-system.js +527 -34
- package/src/lib/design/system/check-system.js.map +1 -1
- package/src/lib/design/system/colour.d.ts +4 -1
- package/src/lib/design/system/colour.js +54 -2
- package/src/lib/design/system/colour.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 +7 -3
- package/src/lib/design/system/complete-command.js.map +1 -1
- package/src/lib/design/system/complete.d.ts +99 -3
- package/src/lib/design/system/complete.js +358 -88
- 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 +6 -1
- package/src/lib/design/system/contrast-check.js +179 -13
- 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 +38 -0
- package/src/lib/design/system/drawn-open-points.js +94 -0
- package/src/lib/design/system/drawn-open-points.js.map +1 -0
- 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 +8 -1
- package/src/lib/design/system/list-system.js +13 -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 +119 -0
- package/src/lib/design/system/open-points.js +185 -0
- package/src/lib/design/system/open-points.js.map +1 -0
- 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 +90 -0
- package/src/lib/design/system/part-ready.js +172 -0
- package/src/lib/design/system/part-ready.js.map +1 -0
- 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 +33 -0
- package/src/lib/design/system/read-open-points.js +110 -0
- package/src/lib/design/system/read-open-points.js.map +1 -0
- package/src/lib/design/system/ready-command.d.ts +11 -0
- package/src/lib/design/system/ready-command.js +82 -0
- package/src/lib/design/system/ready-command.js.map +1 -0
- package/src/lib/design/system/render-check.d.ts +52 -0
- package/src/lib/design/system/render-check.js +479 -60
- package/src/lib/design/system/render-check.js.map +1 -1
- package/src/lib/design/system/resolve-product.d.ts +2 -1
- package/src/lib/design/system/resolve-product.js +25 -3
- 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 +8 -0
- package/src/lib/design/system/rules/implements.js +48 -0
- package/src/lib/design/system/rules/implements.js.map +1 -0
- 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 +2 -0
- package/src/lib/design/system/rules/motion.js +35 -2
- 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/option-values.d.ts +15 -0
- package/src/lib/design/system/rules/option-values.js +145 -0
- package/src/lib/design/system/rules/option-values.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 +45 -3
- 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 +29 -2
- package/src/lib/design/system/sketch/baseline.js +33 -9
- package/src/lib/design/system/sketch/baseline.js.map +1 -1
- package/src/lib/design/system/sketch/check-sketches.d.ts +11 -0
- package/src/lib/design/system/sketch/check-sketches.js +54 -6
- 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 +122 -17
- 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 +41 -11
- package/src/lib/design/system/sketch/merged-parts.js +113 -50
- 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 +56 -0
- package/src/lib/design/system/sketch/part-definition.js +129 -13
- 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 +78 -2
- package/src/lib/design/system/sketch/sketch.js +247 -54
- 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 +36 -1
- package/src/lib/design/system/sketch/unchanged-states.js +60 -17
- package/src/lib/design/system/sketch/unchanged-states.js.map +1 -1
- package/src/lib/design/system/sketch/unused-closure.js +26 -4
- package/src/lib/design/system/sketch/unused-closure.js.map +1 -1
- package/src/lib/design/system/sketch/unused-files.d.ts +1 -1
- package/src/lib/design/system/sketch/unused-files.js +6 -3
- package/src/lib/design/system/sketch/unused-files.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/system-tsconfig.js +2 -2
- package/src/lib/design/system/system-tsconfig.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 +5 -0
- package/src/lib/design/system/ts-source.js +35 -4
- 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 +50 -6
- package/src/lib/design/thumb.js +154 -54
- 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
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { SteppedMotion } from './motion-runtime';
|
|
2
|
+
|
|
3
|
+
/** What the Studio timeline posts into a live frame to drive a motion of its part. */
|
|
4
|
+
export type MotionDriveMessage =
|
|
5
|
+
| { type: 'design-explore:motion-start'; motion: string; reduced: boolean }
|
|
6
|
+
| { type: 'design-explore:motion-seek'; ms: number; rate: number }
|
|
7
|
+
| { type: 'design-explore:motion-play'; ms: number; rate: number }
|
|
8
|
+
| { type: 'design-explore:motion-stop' };
|
|
9
|
+
|
|
10
|
+
/** What a live frame posts back once a motion started, or failed to. */
|
|
11
|
+
export type MotionDriveReply =
|
|
12
|
+
| { type: 'design-explore:motion-ready'; motion: string }
|
|
13
|
+
| { type: 'design-explore:motion-failed'; motion: string; error: string };
|
|
14
|
+
|
|
15
|
+
const TAIL_MS = 30000;
|
|
16
|
+
|
|
17
|
+
const isTime = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
18
|
+
|
|
19
|
+
const isRate = (value: unknown): value is number => typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
20
|
+
|
|
21
|
+
/** The drive message `data` holds, or `null` for any other message. */
|
|
22
|
+
export const motionDriveMessageOf = (data: unknown): MotionDriveMessage | null => {
|
|
23
|
+
if (typeof data !== 'object' || data === null) return null;
|
|
24
|
+
|
|
25
|
+
const message = data as Record<string, unknown>;
|
|
26
|
+
|
|
27
|
+
switch (message['type']) {
|
|
28
|
+
case 'design-explore:motion-start':
|
|
29
|
+
return typeof message['motion'] === 'string'
|
|
30
|
+
? { type: message['type'], motion: message['motion'], reduced: message['reduced'] === true }
|
|
31
|
+
: null;
|
|
32
|
+
case 'design-explore:motion-seek':
|
|
33
|
+
case 'design-explore:motion-play':
|
|
34
|
+
return isTime(message['ms']) && isRate(message['rate'])
|
|
35
|
+
? { type: message['type'], ms: message['ms'], rate: message['rate'] }
|
|
36
|
+
: null;
|
|
37
|
+
case 'design-explore:motion-stop':
|
|
38
|
+
return { type: message['type'] };
|
|
39
|
+
default:
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const REDUCED_FEATURE = /\(\s*prefers-reduced-motion\s*(?::\s*(reduce|no-preference)\s*)?\)/g;
|
|
45
|
+
const ALWAYS = '(min-width: 0px)';
|
|
46
|
+
const NEVER = '(max-width: -1px)';
|
|
47
|
+
|
|
48
|
+
type MediaHolder = CSSRule & { media: MediaList };
|
|
49
|
+
|
|
50
|
+
const mediaRulesOf = (rules: CSSRuleList): MediaHolder[] =>
|
|
51
|
+
[...rules].flatMap((rule) =>
|
|
52
|
+
'cssRules' in rule
|
|
53
|
+
? [...('media' in rule ? [rule as MediaHolder] : []), ...mediaRulesOf((rule as CSSGroupingRule).cssRules)]
|
|
54
|
+
: [],
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const sheetRulesOf = (sheet: CSSStyleSheet) => {
|
|
58
|
+
try {
|
|
59
|
+
return mediaRulesOf(sheet.cssRules);
|
|
60
|
+
} catch {
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Makes every `prefers-reduced-motion` media rule of `document` match as if the user asked for `reduced` motion, and
|
|
67
|
+
* returns a function that puts the rules back. Scripts that call `matchMedia` still see the real preference.
|
|
68
|
+
*/
|
|
69
|
+
export const emulateReducedMotion = (document: Document, reduced: boolean) => {
|
|
70
|
+
const changed = [...document.styleSheets].flatMap(sheetRulesOf).flatMap((rule) => {
|
|
71
|
+
const original = rule.media.mediaText;
|
|
72
|
+
const emulated = original.replace(REDUCED_FEATURE, (_, value?: string) =>
|
|
73
|
+
(value === 'no-preference' ? !reduced : reduced) ? ALWAYS : NEVER,
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
if (emulated === original) return [];
|
|
77
|
+
|
|
78
|
+
rule.media.mediaText = emulated;
|
|
79
|
+
|
|
80
|
+
return [{ rule, original }];
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return () => {
|
|
84
|
+
for (const { rule, original } of changed) rule.media.mediaText = original;
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Drives a motion in a live frame from drive messages: `start` (re)starts the motion from its `from` state, a seek
|
|
90
|
+
* pauses every animation of the document at that time, play runs the motion's clock and animations at `rate`, and
|
|
91
|
+
* stop resumes every animation at 1x. `released` hears each stop.
|
|
92
|
+
*/
|
|
93
|
+
export const createMotionDriver = (options: {
|
|
94
|
+
document: Document;
|
|
95
|
+
start: (motion: string, reduced: boolean) => Promise<SteppedMotion>;
|
|
96
|
+
reply: (reply: MotionDriveReply) => void;
|
|
97
|
+
released?: () => void;
|
|
98
|
+
frame?: (step: (time: number) => void) => unknown;
|
|
99
|
+
}) => {
|
|
100
|
+
const { document, reply } = options;
|
|
101
|
+
const frame = options.frame ?? ((step: (time: number) => void) => requestAnimationFrame(step));
|
|
102
|
+
let started: { motion: string; reduced: boolean } | null = null;
|
|
103
|
+
let stepped: SteppedMotion | null = null;
|
|
104
|
+
let loop = 0;
|
|
105
|
+
let queue: Promise<void> = Promise.resolve();
|
|
106
|
+
|
|
107
|
+
const holdAll = (rate: number) => {
|
|
108
|
+
for (const animation of document.getAnimations()) {
|
|
109
|
+
animation.pause();
|
|
110
|
+
animation.playbackRate = rate;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const resumeAll = () => {
|
|
115
|
+
for (const animation of document.getAnimations()) {
|
|
116
|
+
const end = animation.effect?.getComputedTiming().endTime;
|
|
117
|
+
|
|
118
|
+
animation.playbackRate = 1;
|
|
119
|
+
|
|
120
|
+
if (typeof end === 'number' && Number.isFinite(end) && Number(animation.currentTime ?? 0) >= end)
|
|
121
|
+
animation.finish();
|
|
122
|
+
else animation.play();
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const run = (play: { motion: SteppedMotion; from: number; rate: number; step: () => void }) => {
|
|
127
|
+
const { motion, rate, step } = play;
|
|
128
|
+
const id = ++loop;
|
|
129
|
+
let time = play.from;
|
|
130
|
+
let last: number | null = null;
|
|
131
|
+
|
|
132
|
+
const tick = (now: number) => {
|
|
133
|
+
if (id !== loop) return;
|
|
134
|
+
|
|
135
|
+
time += (now - (last ?? now)) * rate;
|
|
136
|
+
last = now;
|
|
137
|
+
motion.seek(Math.min(time, TAIL_MS));
|
|
138
|
+
step();
|
|
139
|
+
|
|
140
|
+
if (time < TAIL_MS) frame(tick);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
frame(tick);
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const moveTo = (ms: number): Promise<SteppedMotion | null> => {
|
|
147
|
+
if (!stepped || !started) return Promise.resolve(null);
|
|
148
|
+
if (ms >= stepped.now()) {
|
|
149
|
+
stepped.seek(ms);
|
|
150
|
+
|
|
151
|
+
return Promise.resolve(stepped);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return options.start(started.motion, started.reduced).then((restarted) => {
|
|
155
|
+
stepped = restarted;
|
|
156
|
+
restarted.seek(ms);
|
|
157
|
+
|
|
158
|
+
return restarted;
|
|
159
|
+
});
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
const handled = (message: MotionDriveMessage): Promise<void> => {
|
|
163
|
+
loop++;
|
|
164
|
+
|
|
165
|
+
switch (message.type) {
|
|
166
|
+
case 'design-explore:motion-start':
|
|
167
|
+
started = { motion: message.motion, reduced: message.reduced };
|
|
168
|
+
stepped = null;
|
|
169
|
+
|
|
170
|
+
return options.start(message.motion, message.reduced).then(
|
|
171
|
+
(motion) => {
|
|
172
|
+
stepped = motion;
|
|
173
|
+
reply({ type: 'design-explore:motion-ready', motion: message.motion });
|
|
174
|
+
},
|
|
175
|
+
(error: unknown) =>
|
|
176
|
+
reply({
|
|
177
|
+
type: 'design-explore:motion-failed',
|
|
178
|
+
motion: message.motion,
|
|
179
|
+
error: error instanceof Error ? error.message : String(error),
|
|
180
|
+
}),
|
|
181
|
+
);
|
|
182
|
+
case 'design-explore:motion-seek':
|
|
183
|
+
return moveTo(message.ms).then((motion) => {
|
|
184
|
+
if (motion) holdAll(message.rate);
|
|
185
|
+
});
|
|
186
|
+
case 'design-explore:motion-play':
|
|
187
|
+
return moveTo(message.ms).then((motion) => {
|
|
188
|
+
if (!motion) return;
|
|
189
|
+
|
|
190
|
+
holdAll(message.rate);
|
|
191
|
+
run({ motion, from: message.ms, rate: message.rate, step: () => holdAll(message.rate) });
|
|
192
|
+
});
|
|
193
|
+
case 'design-explore:motion-stop': {
|
|
194
|
+
const motion = stepped;
|
|
195
|
+
|
|
196
|
+
if (!motion) return Promise.resolve();
|
|
197
|
+
|
|
198
|
+
motion.release();
|
|
199
|
+
resumeAll();
|
|
200
|
+
options.released?.();
|
|
201
|
+
run({ motion, from: motion.now(), rate: 1, step: () => undefined });
|
|
202
|
+
|
|
203
|
+
return Promise.resolve();
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
return {
|
|
209
|
+
handle: (message: MotionDriveMessage) => {
|
|
210
|
+
queue = queue.then(() => handled(message)).catch(() => undefined);
|
|
211
|
+
|
|
212
|
+
return queue;
|
|
213
|
+
},
|
|
214
|
+
};
|
|
215
|
+
};
|
package/design/motion-runtime.ts
CHANGED
|
@@ -162,9 +162,14 @@ export type MotionTrack = {
|
|
|
162
162
|
end: number | null;
|
|
163
163
|
};
|
|
164
164
|
|
|
165
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* A motion paused at its start: `seek` moves it forward to a time in ms, `tracks` lists what ran so far. `release`
|
|
167
|
+
* stops pausing and posing its animations, so a later `seek` only runs its `ctx.at` steps.
|
|
168
|
+
*/
|
|
166
169
|
export type SteppedMotion = {
|
|
167
170
|
seek: (ms: number) => void;
|
|
171
|
+
now: () => number;
|
|
172
|
+
release: () => void;
|
|
168
173
|
tracks: () => MotionTrack[];
|
|
169
174
|
end: () => number;
|
|
170
175
|
bounds: () => MotionBox;
|
|
@@ -238,6 +243,7 @@ export const stepMotion = (options: {
|
|
|
238
243
|
const cut = new Set<Animation>();
|
|
239
244
|
const interrupt = motion.interrupt;
|
|
240
245
|
let interrupted = false;
|
|
246
|
+
let released = false;
|
|
241
247
|
let lastTask = 0;
|
|
242
248
|
let ready: Promise<unknown> = Promise.resolve();
|
|
243
249
|
|
|
@@ -257,12 +263,14 @@ export const stepMotion = (options: {
|
|
|
257
263
|
for (const animation of document.getAnimations()) {
|
|
258
264
|
if (started.has(animation)) continue;
|
|
259
265
|
|
|
260
|
-
animation.pause();
|
|
266
|
+
if (!released) animation.pause();
|
|
261
267
|
started.set(animation, trackOf(animation, start));
|
|
262
268
|
}
|
|
263
269
|
};
|
|
264
270
|
|
|
265
271
|
const pose = (ms: number) => {
|
|
272
|
+
if (released) return;
|
|
273
|
+
|
|
266
274
|
for (const [animation, track] of started)
|
|
267
275
|
if (!cut.has(animation)) animation.currentTime = Math.max(0, ms - track.start);
|
|
268
276
|
};
|
|
@@ -318,6 +326,10 @@ export const stepMotion = (options: {
|
|
|
318
326
|
|
|
319
327
|
pose(ms);
|
|
320
328
|
},
|
|
329
|
+
now: () => clock.now(),
|
|
330
|
+
release: () => {
|
|
331
|
+
released = true;
|
|
332
|
+
},
|
|
321
333
|
tracks: () => [...started.values()],
|
|
322
334
|
end: () => Math.max(lastTask, ...[...started.values()].map((track) => track.end ?? 0)),
|
|
323
335
|
bounds: () => {
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { MotionTrack } from './motion-runtime';
|
|
2
|
+
|
|
3
|
+
/** A CSS custom property declared on `:root`, with its computed value. */
|
|
4
|
+
export type MotionToken = { name: string; value: string };
|
|
5
|
+
|
|
6
|
+
/** A track with the names of the tokens whose value equals its duration or easing, in declaration order. */
|
|
7
|
+
export type NamedMotionTrack = MotionTrack & { durationTokens?: string[]; easingTokens?: string[] };
|
|
8
|
+
|
|
9
|
+
const KEYWORD_EASINGS: Record<string, string> = {
|
|
10
|
+
ease: 'cubic-bezier(0.25,0.1,0.25,1)',
|
|
11
|
+
'ease-in': 'cubic-bezier(0.42,0,1,1)',
|
|
12
|
+
'ease-out': 'cubic-bezier(0,0,0.58,1)',
|
|
13
|
+
'ease-in-out': 'cubic-bezier(0.42,0,0.58,1)',
|
|
14
|
+
'step-start': 'steps(1,jump-start)',
|
|
15
|
+
'step-end': 'steps(1,jump-end)',
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const TIME = /^(-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?)(ms|s)$/u;
|
|
19
|
+
const EASING_FUNCTION = /^(cubic-bezier|linear|steps)\((.*)\)$/u;
|
|
20
|
+
|
|
21
|
+
const roundedOf = (value: number) => String(Math.round(value * 10000) / 10000);
|
|
22
|
+
|
|
23
|
+
const msOf = (value: string) => {
|
|
24
|
+
const match = TIME.exec(value.trim().toLowerCase());
|
|
25
|
+
|
|
26
|
+
return match ? Number(match[1]) * (match[2] === 's' ? 1000 : 1) : null;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const linearOf = (body: string) => {
|
|
30
|
+
const points: { output: number; input: number | null }[] = [];
|
|
31
|
+
|
|
32
|
+
for (const stop of body.split(',')) {
|
|
33
|
+
const [output = '', ...inputs] = stop.trim().split(/\s+/u);
|
|
34
|
+
const value = Number(output);
|
|
35
|
+
|
|
36
|
+
if (output === '' || !Number.isFinite(value) || inputs.length > 2) return null;
|
|
37
|
+
|
|
38
|
+
const percents = inputs.map((input) => (input.endsWith('%') ? Number(input.slice(0, -1)) : Number.NaN));
|
|
39
|
+
|
|
40
|
+
if (percents.some((percent) => !Number.isFinite(percent))) return null;
|
|
41
|
+
|
|
42
|
+
if (percents.length === 0) points.push({ output: value, input: null });
|
|
43
|
+
for (const percent of percents) points.push({ output: value, input: percent });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if (points.length < 2) return null;
|
|
47
|
+
|
|
48
|
+
const first = points[0];
|
|
49
|
+
const last = points[points.length - 1];
|
|
50
|
+
|
|
51
|
+
if (first && first.input === null) first.input = 0;
|
|
52
|
+
if (last && last.input === null) last.input = Math.max(100, ...points.map((point) => point.input ?? 0));
|
|
53
|
+
|
|
54
|
+
let highest = 0;
|
|
55
|
+
|
|
56
|
+
for (const point of points) {
|
|
57
|
+
if (point.input !== null) point.input = Math.max(point.input, highest);
|
|
58
|
+
highest = point.input ?? highest;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
for (let index = 1; index < points.length; index++) {
|
|
62
|
+
if (points[index]?.input !== null) continue;
|
|
63
|
+
|
|
64
|
+
const before = index - 1;
|
|
65
|
+
let after = index;
|
|
66
|
+
|
|
67
|
+
while (points[after]?.input === null) after++;
|
|
68
|
+
|
|
69
|
+
const from = points[before]?.input ?? 0;
|
|
70
|
+
const to = points[after]?.input ?? 100;
|
|
71
|
+
|
|
72
|
+
for (let gap = index; gap < after; gap++) {
|
|
73
|
+
const point = points[gap];
|
|
74
|
+
|
|
75
|
+
if (point) point.input = from + ((to - from) * (gap - before)) / (after - before);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return `linear(${points.map((point) => `${roundedOf(point.output)} ${roundedOf(point.input ?? 0)}%`).join(',')})`;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/** An easing in one spelling, so `ease` equals `cubic-bezier(.25, .1, .25, 1)`; `null` when it is not an easing. */
|
|
83
|
+
export const normalisedEasingOf = (value: string): string | null => {
|
|
84
|
+
const easing = value.trim().toLowerCase().replace(/\s+/gu, ' ');
|
|
85
|
+
|
|
86
|
+
if (easing === 'linear') return 'linear';
|
|
87
|
+
if (KEYWORD_EASINGS[easing]) return KEYWORD_EASINGS[easing];
|
|
88
|
+
|
|
89
|
+
const match = EASING_FUNCTION.exec(easing);
|
|
90
|
+
|
|
91
|
+
if (!match) return null;
|
|
92
|
+
|
|
93
|
+
const [, kind = '', body = ''] = match;
|
|
94
|
+
|
|
95
|
+
if (kind === 'linear') return linearOf(body);
|
|
96
|
+
|
|
97
|
+
const args = body.split(',').map((arg) => arg.trim());
|
|
98
|
+
|
|
99
|
+
if (kind === 'steps') return args.length === 1 || args.length === 2 ? `steps(${args[0]},${args[1] ?? 'end'})` : null;
|
|
100
|
+
|
|
101
|
+
const numbers = args.map(Number);
|
|
102
|
+
|
|
103
|
+
return numbers.length === 4 && numbers.every(Number.isFinite)
|
|
104
|
+
? `cubic-bezier(${numbers.map(roundedOf).join(',')})`
|
|
105
|
+
: null;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
/** What a token stands for: a time, an easing, or both as a `spring()` token stores them (`<duration>ms linear(...)`). */
|
|
109
|
+
const meaningOf = (value: string) => {
|
|
110
|
+
const trimmed = value.trim();
|
|
111
|
+
const ms = msOf(trimmed);
|
|
112
|
+
|
|
113
|
+
if (ms !== null) return { ms, easing: null };
|
|
114
|
+
|
|
115
|
+
const [head = '', ...rest] = trimmed.split(/\s+/u);
|
|
116
|
+
const leading = msOf(head);
|
|
117
|
+
|
|
118
|
+
if (leading !== null) {
|
|
119
|
+
const easing = normalisedEasingOf(rest.join(' '));
|
|
120
|
+
|
|
121
|
+
return easing ? { ms: leading, easing } : null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const easing = normalisedEasingOf(trimmed);
|
|
125
|
+
|
|
126
|
+
return easing ? { ms: null, easing } : null;
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Adds the names of the `tokens` whose value equals a track's duration (`durationTokens`) or easing (`easingTokens`),
|
|
131
|
+
* in the order of `tokens`; a field without a match is left out.
|
|
132
|
+
*/
|
|
133
|
+
export const withTokenNames = (track: MotionTrack, tokens: readonly MotionToken[]): NamedMotionTrack => {
|
|
134
|
+
const easing = normalisedEasingOf(track.easing);
|
|
135
|
+
const durationTokens: string[] = [];
|
|
136
|
+
const easingTokens: string[] = [];
|
|
137
|
+
|
|
138
|
+
for (const token of tokens) {
|
|
139
|
+
const meaning = meaningOf(token.value);
|
|
140
|
+
|
|
141
|
+
if (!meaning) continue;
|
|
142
|
+
if (meaning.ms !== null && Math.abs(meaning.ms - track.duration) < 0.001) durationTokens.push(token.name);
|
|
143
|
+
if (meaning.easing !== null && easing !== null && meaning.easing === easing) easingTokens.push(token.name);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return {
|
|
147
|
+
...track,
|
|
148
|
+
...(durationTokens.length ? { durationTokens } : {}),
|
|
149
|
+
...(easingTokens.length ? { easingTokens } : {}),
|
|
150
|
+
};
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const rootNamesOf = (rules: CSSRuleList, names: Set<string>) => {
|
|
154
|
+
for (const rule of [...rules]) {
|
|
155
|
+
if (rule instanceof CSSStyleRule && /^(:root|html)$/u.test(rule.selectorText.trim()))
|
|
156
|
+
for (const property of [...rule.style]) if (property.startsWith('--')) names.add(property);
|
|
157
|
+
|
|
158
|
+
if ('cssRules' in rule && rule.cssRules instanceof CSSRuleList) rootNamesOf(rule.cssRules, names);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
/** The custom properties declared on `:root` in the stylesheets of `document`, in declaration order, as computed there. */
|
|
163
|
+
export const rootTokensOf = (document: Document): MotionToken[] => {
|
|
164
|
+
const names = new Set<string>();
|
|
165
|
+
|
|
166
|
+
for (const sheet of [...document.styleSheets]) {
|
|
167
|
+
try {
|
|
168
|
+
rootNamesOf(sheet.cssRules, names);
|
|
169
|
+
} catch {
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const computed = getComputedStyle(document.documentElement);
|
|
175
|
+
|
|
176
|
+
return [...names].map((name) => ({ name, value: computed.getPropertyValue(name).trim() }));
|
|
177
|
+
};
|
package/design/token-sheet.ts
CHANGED
|
@@ -18,7 +18,7 @@ const SHEET_STYLES = `
|
|
|
18
18
|
.ts-root { position: relative; display: flex; flex-direction: column; gap: var(--space-4, 1.6rem); width: 960px; padding: var(--space-6, 2.4rem); box-sizing: border-box; background: var(--surface, oklch(0.17 0 0)); color: var(--text, oklch(0.94 0 0)); font-family: var(--font-ui, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif); font-size: var(--text-md, 1.3rem); line-height: var(--text-md-line, 1.8rem); }
|
|
19
19
|
.ts-title { margin: 0; font-size: var(--text-xl, 1.7rem); line-height: var(--text-xl-line, 2.2rem); font-weight: var(--weight-strong, 600); }
|
|
20
20
|
.ts-note { margin: 0; max-width: 64rem; color: var(--text-muted, oklch(0.72 0 0)); }
|
|
21
|
-
.ts-panel { margin: 0; padding: var(--space-4, 1.6rem);
|
|
21
|
+
.ts-panel { margin: 0; padding: var(--space-4, 1.6rem); border: 1px solid var(--surface-border, oklch(0.34 0 0)); border-radius: var(--radius-control-lg, 1rem); }
|
|
22
22
|
.ts-list { list-style: none; display: flex; flex-direction: column; gap: var(--space-1, 0.4rem); }
|
|
23
23
|
.ts-row { display: grid; grid-template-columns: 200px 240px 1fr; align-items: center; gap: var(--space-3, 1.2rem); min-height: var(--row, 2.4rem); }
|
|
24
24
|
.ts-name { font-family: var(--font-code, ui-monospace, "SF Mono", Menlo, Consolas, monospace); font-size: var(--text-sm, 1.15rem); line-height: var(--text-sm-line, 1.6rem); color: var(--text-muted, oklch(0.72 0 0)); }
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Paints `body` with the token `--<fill>` over the product's page colour, which shows when the product has no such token. */
|
|
2
|
+
export const paintFill = (body: HTMLElement, fill: string) => {
|
|
3
|
+
body.style.backgroundImage = `linear-gradient(var(--${fill}), var(--${fill}))`;
|
|
4
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Sizes the frame root to its content; `padded` keeps a 16 px margin around it, which a bare compare shot leaves out. */
|
|
2
|
+
export const fitRoot = (root: HTMLElement, options: { padded: boolean }) => {
|
|
3
|
+
root.ownerDocument.documentElement.style.overflow = 'hidden';
|
|
4
|
+
root.style.width = 'max-content';
|
|
5
|
+
|
|
6
|
+
if (options.padded) root.style.padding = '16px';
|
|
7
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type ColorScheme = 'light' | 'dark';
|
|
2
|
+
|
|
3
|
+
const SCHEME_FEATURE = /\(\s*prefers-color-scheme\s*:\s*(light|dark)\s*\)/giu;
|
|
4
|
+
|
|
5
|
+
/** `media` with each `prefers-color-scheme` feature replaced by one that always or never matches, as `scheme` decides. */
|
|
6
|
+
export const pinnedMediaText = (media: string, scheme: ColorScheme) =>
|
|
7
|
+
media.replace(SCHEME_FEATURE, (_, wanted: string) =>
|
|
8
|
+
wanted.toLowerCase() === scheme ? '(width >= 0)' : '(width < 0)',
|
|
9
|
+
);
|
|
10
|
+
|
|
11
|
+
const pinRules = (rules: CSSRuleList, scheme: ColorScheme) => {
|
|
12
|
+
for (const rule of Array.from(rules)) {
|
|
13
|
+
if (rule instanceof CSSMediaRule) {
|
|
14
|
+
const pinned = pinnedMediaText(rule.media.mediaText, scheme);
|
|
15
|
+
|
|
16
|
+
if (pinned !== rule.media.mediaText) rule.media.mediaText = pinned;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if ('cssRules' in rule) pinRules((rule as CSSGroupingRule).cssRules, scheme);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const pinSheets = (document: Document, scheme: ColorScheme) => {
|
|
24
|
+
for (const sheet of Array.from(document.styleSheets)) {
|
|
25
|
+
try {
|
|
26
|
+
pinRules(sheet.cssRules, scheme);
|
|
27
|
+
} catch {
|
|
28
|
+
// A cross-origin sheet hides its rules.
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export const pinScheme = (document: Document, scheme: ColorScheme) => {
|
|
34
|
+
document.documentElement.style.colorScheme = scheme;
|
|
35
|
+
pinSheets(document, scheme);
|
|
36
|
+
|
|
37
|
+
new MutationObserver((records) => {
|
|
38
|
+
pinSheets(document, scheme);
|
|
39
|
+
|
|
40
|
+
for (const record of records)
|
|
41
|
+
for (const node of Array.from(record.addedNodes))
|
|
42
|
+
if (node instanceof HTMLLinkElement) node.addEventListener('load', () => pinSheets(document, scheme));
|
|
43
|
+
}).observe(document.head, { childList: true, subtree: true, characterData: true });
|
|
44
|
+
};
|