@epic-web/workshop-app 4.5.0 → 4.5.1
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/build/client/assets/{_-CGn-2XfF.js → _-COWH0sBh.js} +2 -2
- package/build/client/assets/{_-CGn-2XfF.js.map → _-COWH0sBh.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber-D6YNCQoj.js → _exerciseNumber-jTT5JRgC.js} +2 -2
- package/build/client/assets/_exerciseNumber-jTT5JRgC.js.map +1 -0
- package/build/client/assets/{_exerciseNumber_._stepNumber-D00x64Vg.js → _exerciseNumber_._stepNumber-C37pli7_.js} +2 -2
- package/build/client/assets/{_exerciseNumber_._stepNumber-D00x64Vg.js.map → _exerciseNumber_._stepNumber-C37pli7_.js.map} +1 -1
- package/build/client/assets/{_exerciseNumber_.finished-DR3gQ1pK.js → _exerciseNumber_.finished-zgJKkJ7I.js} +2 -2
- package/build/client/assets/_exerciseNumber_.finished-zgJKkJ7I.js.map +1 -0
- package/build/client/assets/{_layout-DXegGcTM.js → _layout-CGUp6BkS.js} +2 -2
- package/build/client/assets/_layout-CGUp6BkS.js.map +1 -0
- package/build/client/assets/{_layout-Caqk73Ed.js → _layout-CNgYirUN.js} +2 -2
- package/build/client/assets/{_layout-Caqk73Ed.js.map → _layout-CNgYirUN.js.map} +1 -1
- package/build/client/assets/{_layout-MFX35ekR.js → _layout-D0zbQZjf.js} +2 -2
- package/build/client/assets/_layout-D0zbQZjf.js.map +1 -0
- package/build/client/assets/{account-Cp6A7SfU.js → account-DesvwOeg.js} +2 -2
- package/build/client/assets/{account-Cp6A7SfU.js.map → account-DesvwOeg.js.map} +1 -1
- package/build/client/assets/{diff-Ddyuc0-s.js → diff-DZFtsH-a.js} +2 -2
- package/build/client/assets/{diff-Ddyuc0-s.js.map → diff-DZFtsH-a.js.map} +1 -1
- package/build/client/assets/diff-tDYfSlOc.js +42 -0
- package/build/client/assets/diff-tDYfSlOc.js.map +1 -0
- package/build/client/assets/{discord-DZWTKMPn.js → discord-0kv66Q6F.js} +2 -2
- package/build/client/assets/{discord-DZWTKMPn.js.map → discord-0kv66Q6F.js.map} +1 -1
- package/build/client/assets/discord-Xp0X4-Fl.js +2 -0
- package/build/client/assets/discord-Xp0X4-Fl.js.map +1 -0
- package/build/client/assets/epic-video-BwtXsHGU.js +2988 -0
- package/build/client/assets/epic-video-BwtXsHGU.js.map +1 -0
- package/build/client/assets/{error-boundary-BUV7xD2e.js → error-boundary-Bcric_4t.js} +2 -2
- package/build/client/assets/{error-boundary-BUV7xD2e.js.map → error-boundary-Bcric_4t.js.map} +1 -1
- package/build/client/assets/{finished-gQ-B3k8j.js → finished-BSWdtBA4.js} +2 -2
- package/build/client/assets/finished-BSWdtBA4.js.map +1 -0
- package/build/client/assets/{index-CVJowtf6.js → index-BQRtqn3g.js} +2 -2
- package/build/client/assets/{index-CVJowtf6.js.map → index-BQRtqn3g.js.map} +1 -1
- package/build/client/assets/index-Bg9MMnnf.js +2 -0
- package/build/client/assets/index-Bg9MMnnf.js.map +1 -0
- package/build/client/assets/{login-BCM4kJTm.js → login-D8zyjBAb.js} +2 -2
- package/build/client/assets/{login-BCM4kJTm.js.map → login-D8zyjBAb.js.map} +1 -1
- package/build/client/assets/{manifest-0b01450d.js → manifest-03cfc48d.js} +1 -1
- package/build/client/assets/{mdx-BVZ4sNxQ.js → mdx-BYvGbvEr.js} +2 -2
- package/build/client/assets/{mdx-BVZ4sNxQ.js.map → mdx-BYvGbvEr.js.map} +1 -1
- package/build/client/assets/{misc-DBBsMyAP.js → misc-DNgC2Frq.js} +2 -2
- package/build/client/assets/{misc-DBBsMyAP.js.map → misc-DNgC2Frq.js.map} +1 -1
- package/build/client/assets/{nav-chevrons-DnG58Hov.js → nav-chevrons-DOYtx9XE.js} +2 -2
- package/build/client/assets/{nav-chevrons-DnG58Hov.js.map → nav-chevrons-DOYtx9XE.js.map} +1 -1
- package/build/client/assets/{onboarding-oSo74A5L.js → onboarding-euWyXpCL.js} +2 -2
- package/build/client/assets/{onboarding-oSo74A5L.js.map → onboarding-euWyXpCL.js.map} +1 -1
- package/build/client/assets/presence-BJPzwbUy.js.map +1 -1
- package/build/client/assets/progress-CF9Xwfxf.js +2 -0
- package/build/client/assets/progress-CF9Xwfxf.js.map +1 -0
- package/build/client/assets/{progress-bar-TRgQ8YZ8.js → progress-bar-7LK87ZMh.js} +2 -2
- package/build/client/assets/{progress-bar-TRgQ8YZ8.js.map → progress-bar-7LK87ZMh.js.map} +1 -1
- package/build/client/assets/{root-CxuwYUpK.js → root-BJrmef-V.js} +2 -2
- package/build/client/assets/{root-CxuwYUpK.js.map → root-BJrmef-V.js.map} +1 -1
- package/build/client/assets/support-DUAHYT3r.js.map +1 -1
- package/build/client/assets/tooltip-Kw0lYWBI.js +2 -0
- package/build/client/assets/tooltip-Kw0lYWBI.js.map +1 -0
- package/build/server/index.js +1016 -1037
- package/build/server/index.js.map +1 -1
- package/dist/server/index.js +0 -2
- package/node_modules/@babel/runtime/helpers/AwaitValue.js +2 -2
- package/node_modules/@babel/runtime/helpers/OverloadYield.js +2 -2
- package/node_modules/@babel/runtime/helpers/applyDecoratedDescriptor.js +7 -22
- package/node_modules/@babel/runtime/helpers/applyDecs2311.js +9 -9
- package/node_modules/@babel/runtime/helpers/arrayLikeToArray.js +4 -4
- package/node_modules/@babel/runtime/helpers/arrayWithHoles.js +2 -2
- package/node_modules/@babel/runtime/helpers/arrayWithoutHoles.js +2 -2
- package/node_modules/@babel/runtime/helpers/assertThisInitialized.js +3 -5
- package/node_modules/@babel/runtime/helpers/asyncToGenerator.js +16 -21
- package/node_modules/@babel/runtime/helpers/checkPrivateRedeclaration.js +2 -4
- package/node_modules/@babel/runtime/helpers/classApplyDescriptorDestructureSet.js +7 -15
- package/node_modules/@babel/runtime/helpers/classApplyDescriptorGet.js +2 -5
- package/node_modules/@babel/runtime/helpers/classApplyDescriptorSet.js +4 -8
- package/node_modules/@babel/runtime/helpers/classCallCheck.js +2 -4
- package/node_modules/@babel/runtime/helpers/classCheckPrivateStaticAccess.js +2 -2
- package/node_modules/@babel/runtime/helpers/classCheckPrivateStaticFieldDescriptor.js +2 -4
- package/node_modules/@babel/runtime/helpers/classExtractFieldDescriptor.js +2 -2
- package/node_modules/@babel/runtime/helpers/classNameTDZError.js +2 -2
- package/node_modules/@babel/runtime/helpers/classPrivateFieldDestructureSet.js +3 -3
- package/node_modules/@babel/runtime/helpers/classPrivateFieldGet.js +3 -3
- package/node_modules/@babel/runtime/helpers/classPrivateFieldInitSpec.js +2 -3
- package/node_modules/@babel/runtime/helpers/classPrivateFieldLooseBase.js +3 -5
- package/node_modules/@babel/runtime/helpers/classPrivateFieldLooseKey.js +2 -2
- package/node_modules/@babel/runtime/helpers/classPrivateFieldSet.js +3 -4
- package/node_modules/@babel/runtime/helpers/classPrivateMethodGet.js +2 -3
- package/node_modules/@babel/runtime/helpers/classPrivateMethodInitSpec.js +2 -3
- package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldDestructureSet.js +2 -4
- package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecGet.js +2 -4
- package/node_modules/@babel/runtime/helpers/classStaticPrivateFieldSpecSet.js +2 -5
- package/node_modules/@babel/runtime/helpers/classStaticPrivateMethodGet.js +2 -3
- package/node_modules/@babel/runtime/helpers/construct.js +1 -1
- package/node_modules/@babel/runtime/helpers/createClass.js +8 -14
- package/node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js +24 -27
- package/node_modules/@babel/runtime/helpers/createForOfIteratorHelperLoose.js +11 -12
- package/node_modules/@babel/runtime/helpers/createSuper.js +10 -12
- package/node_modules/@babel/runtime/helpers/decorate.js +185 -278
- package/node_modules/@babel/runtime/helpers/defaults.js +6 -9
- package/node_modules/@babel/runtime/helpers/defineEnumerableProperties.js +8 -16
- package/node_modules/@babel/runtime/helpers/defineProperty.js +7 -13
- package/node_modules/@babel/runtime/helpers/esm/AsyncGenerator.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/AwaitValue.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/OverloadYield.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/applyDecoratedDescriptor.js +9 -23
- package/node_modules/@babel/runtime/helpers/esm/applyDecs.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/applyDecs2203.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/applyDecs2203R.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/applyDecs2301.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/applyDecs2305.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/applyDecs2311.js +12 -11
- package/node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js +6 -5
- package/node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/assertClassBrand.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +5 -6
- package/node_modules/@babel/runtime/helpers/esm/asyncGeneratorDelegate.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/asyncIterator.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +18 -22
- package/node_modules/@babel/runtime/helpers/esm/awaitAsyncGenerator.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/callSuper.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/checkInRHS.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/checkPrivateRedeclaration.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorDestructureSet.js +9 -16
- package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorGet.js +4 -6
- package/node_modules/@babel/runtime/helpers/esm/classApplyDescriptorSet.js +6 -9
- package/node_modules/@babel/runtime/helpers/esm/classCallCheck.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticAccess.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/classCheckPrivateStaticFieldDescriptor.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/classExtractFieldDescriptor.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/classNameTDZError.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldDestructureSet.js +5 -4
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet.js +5 -4
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldGet2.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldInitSpec.js +4 -4
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseBase.js +5 -6
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldLooseKey.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet.js +5 -5
- package/node_modules/@babel/runtime/helpers/esm/classPrivateFieldSet2.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/classPrivateGetter.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodGet.js +4 -4
- package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodInitSpec.js +4 -4
- package/node_modules/@babel/runtime/helpers/esm/classPrivateMethodSet.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/classPrivateSetter.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldDestructureSet.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecGet.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateFieldSpecSet.js +4 -6
- package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodGet.js +4 -4
- package/node_modules/@babel/runtime/helpers/esm/classStaticPrivateMethodSet.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/construct.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/createClass.js +10 -15
- package/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelper.js +26 -28
- package/node_modules/@babel/runtime/helpers/esm/createForOfIteratorHelperLoose.js +13 -13
- package/node_modules/@babel/runtime/helpers/esm/createSuper.js +12 -13
- package/node_modules/@babel/runtime/helpers/esm/decorate.js +187 -279
- package/node_modules/@babel/runtime/helpers/esm/defaults.js +8 -10
- package/node_modules/@babel/runtime/helpers/esm/defineAccessor.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/defineEnumerableProperties.js +10 -17
- package/node_modules/@babel/runtime/helpers/esm/defineProperty.js +9 -14
- package/node_modules/@babel/runtime/helpers/esm/dispose.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/extends.js +9 -13
- package/node_modules/@babel/runtime/helpers/esm/get.js +10 -16
- package/node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js +6 -6
- package/node_modules/@babel/runtime/helpers/esm/identity.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/importDeferProxy.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/inherits.js +11 -14
- package/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/initializerDefineProperty.js +8 -8
- package/node_modules/@babel/runtime/helpers/esm/initializerWarningHelper.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/instanceof.js +4 -7
- package/node_modules/@babel/runtime/helpers/esm/interopRequireDefault.js +5 -4
- package/node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/isNativeFunction.js +6 -5
- package/node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/iterableToArray.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/iterableToArrayLimitLoose.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/jsx.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/maybeArrayLike.js +7 -6
- package/node_modules/@babel/runtime/helpers/esm/newArrowCheck.js +4 -5
- package/node_modules/@babel/runtime/helpers/esm/nonIterableRest.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/nullishReceiverError.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/objectDestructuringEmpty.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/objectSpread.js +11 -13
- package/node_modules/@babel/runtime/helpers/esm/objectSpread2.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/objectWithoutProperties.js +10 -13
- package/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +9 -10
- package/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js +6 -8
- package/node_modules/@babel/runtime/helpers/esm/readOnlyError.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/regeneratorRuntime.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/set.js +19 -37
- package/node_modules/@babel/runtime/helpers/esm/setFunctionName.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +6 -7
- package/node_modules/@babel/runtime/helpers/esm/skipFirstGeneratorNext.js +5 -5
- package/node_modules/@babel/runtime/helpers/esm/slicedToArray.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/slicedToArrayLoose.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/superPropBase.js +5 -7
- package/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteral.js +5 -7
- package/node_modules/@babel/runtime/helpers/esm/taggedTemplateLiteralLoose.js +4 -7
- package/node_modules/@babel/runtime/helpers/esm/tdz.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/temporalRef.js +6 -5
- package/node_modules/@babel/runtime/helpers/esm/temporalUndefined.js +2 -1
- package/node_modules/@babel/runtime/helpers/esm/toArray.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/toConsumableArray.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/toSetter.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/typeof.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js +8 -8
- package/node_modules/@babel/runtime/helpers/esm/using.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/usingCtx.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/wrapAsyncGenerator.js +4 -3
- package/node_modules/@babel/runtime/helpers/esm/wrapNativeSuper.js +17 -20
- package/node_modules/@babel/runtime/helpers/esm/wrapRegExp.js +3 -2
- package/node_modules/@babel/runtime/helpers/esm/writeOnlyError.js +4 -3
- package/node_modules/@babel/runtime/helpers/extends.js +6 -11
- package/node_modules/@babel/runtime/helpers/get.js +7 -14
- package/node_modules/@babel/runtime/helpers/getPrototypeOf.js +4 -5
- package/node_modules/@babel/runtime/helpers/identity.js +2 -2
- package/node_modules/@babel/runtime/helpers/inherits.js +9 -13
- package/node_modules/@babel/runtime/helpers/inheritsLoose.js +2 -4
- package/node_modules/@babel/runtime/helpers/initializerDefineProperty.js +6 -7
- package/node_modules/@babel/runtime/helpers/initializerWarningHelper.js +2 -2
- package/node_modules/@babel/runtime/helpers/instanceof.js +2 -6
- package/node_modules/@babel/runtime/helpers/interopRequireDefault.js +3 -3
- package/node_modules/@babel/runtime/helpers/isNativeFunction.js +4 -4
- package/node_modules/@babel/runtime/helpers/iterableToArray.js +2 -2
- package/node_modules/@babel/runtime/helpers/maybeArrayLike.js +5 -5
- package/node_modules/@babel/runtime/helpers/newArrowCheck.js +2 -4
- package/node_modules/@babel/runtime/helpers/objectDestructuringEmpty.js +2 -2
- package/node_modules/@babel/runtime/helpers/objectSpread.js +9 -12
- package/node_modules/@babel/runtime/helpers/objectWithoutProperties.js +8 -12
- package/node_modules/@babel/runtime/helpers/objectWithoutPropertiesLoose.js +7 -9
- package/node_modules/@babel/runtime/helpers/possibleConstructorReturn.js +4 -7
- package/node_modules/@babel/runtime/helpers/readOnlyError.js +2 -2
- package/node_modules/@babel/runtime/helpers/set.js +17 -36
- package/node_modules/@babel/runtime/helpers/setPrototypeOf.js +4 -6
- package/node_modules/@babel/runtime/helpers/skipFirstGeneratorNext.js +3 -4
- package/node_modules/@babel/runtime/helpers/slicedToArray.js +2 -2
- package/node_modules/@babel/runtime/helpers/slicedToArrayLoose.js +2 -2
- package/node_modules/@babel/runtime/helpers/superPropBase.js +3 -6
- package/node_modules/@babel/runtime/helpers/taggedTemplateLiteral.js +3 -6
- package/node_modules/@babel/runtime/helpers/taggedTemplateLiteralLoose.js +2 -6
- package/node_modules/@babel/runtime/helpers/tdz.js +2 -2
- package/node_modules/@babel/runtime/helpers/temporalRef.js +2 -2
- package/node_modules/@babel/runtime/helpers/toArray.js +2 -2
- package/node_modules/@babel/runtime/helpers/toConsumableArray.js +2 -2
- package/node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js +6 -7
- package/node_modules/@babel/runtime/helpers/wrapAsyncGenerator.js +2 -2
- package/node_modules/@babel/runtime/helpers/wrapNativeSuper.js +15 -19
- package/node_modules/@babel/runtime/helpers/writeOnlyError.js +2 -2
- package/node_modules/@babel/runtime/package.json +587 -587
- package/node_modules/@conform-to/dom/form.js +1 -1
- package/node_modules/@conform-to/dom/form.mjs +1 -1
- package/node_modules/@conform-to/dom/formdata.d.ts +2 -2
- package/node_modules/@conform-to/dom/formdata.js +12 -34
- package/node_modules/@conform-to/dom/formdata.mjs +12 -34
- package/node_modules/@conform-to/dom/intent.d.ts +82 -0
- package/node_modules/@conform-to/dom/intent.js +136 -0
- package/node_modules/@conform-to/dom/intent.mjs +126 -0
- package/node_modules/@conform-to/dom/package.json +58 -59
- package/node_modules/@conform-to/dom/parse.d.ts +30 -0
- package/node_modules/@conform-to/dom/parse.js +43 -0
- package/node_modules/@conform-to/dom/parse.mjs +37 -0
- package/node_modules/@conform-to/dom/submission.d.ts +2 -2
- package/node_modules/@conform-to/dom/submission.js +23 -21
- package/node_modules/@conform-to/dom/submission.mjs +23 -21
- package/node_modules/@conform-to/dom/types.d.ts +20 -0
- package/node_modules/@conform-to/react/helpers.js +1 -1
- package/node_modules/@conform-to/react/helpers.mjs +1 -1
- package/node_modules/@conform-to/react/package.json +68 -69
- package/node_modules/@conform-to/zod/package.json +60 -61
- package/node_modules/framer-motion/dist/cjs/{dom-entry-fJy-kji5.js → dom-entry-DSxBucW4.js} +115 -107
- package/node_modules/framer-motion/dist/cjs/dom-entry.js +1 -1
- package/node_modules/framer-motion/dist/cjs/index.js +43 -10
- package/node_modules/framer-motion/dist/dom-entry.d.ts +1 -1
- package/node_modules/framer-motion/dist/dom.js +1 -1
- package/node_modules/framer-motion/dist/es/animation/GroupPlaybackControls.mjs +2 -3
- package/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.mjs +4 -1
- package/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.mjs +2 -3
- package/node_modules/framer-motion/dist/es/animation/optimized-appear/get-appear-id.mjs +7 -0
- package/node_modules/framer-motion/dist/es/projection/node/create-projection-node.mjs +43 -9
- package/node_modules/framer-motion/dist/es/render/dom/DOMKeyframesResolver.mjs +11 -8
- package/node_modules/framer-motion/dist/es/render/utils/motion-values.mjs +1 -1
- package/node_modules/framer-motion/dist/es/value/index.mjs +1 -1
- package/node_modules/framer-motion/dist/framer-motion.dev.js +156 -116
- package/node_modules/framer-motion/dist/framer-motion.js +1 -1
- package/node_modules/framer-motion/dist/index.d.ts +2 -1
- package/node_modules/framer-motion/dist/projection.dev.js +163 -20
- package/node_modules/framer-motion/dist/three-entry.d.ts +1 -0
- package/node_modules/framer-motion/package.json +8 -8
- package/node_modules/remix-utils/node_modules/type-fest/package.json +1 -1
- package/node_modules/remix-utils/node_modules/type-fest/source/conditional-keys.d.ts +5 -3
- package/package.json +7 -6
- package/start.js +4 -2
- package/build/client/assets/_exerciseNumber-D6YNCQoj.js.map +0 -1
- package/build/client/assets/_exerciseNumber_.finished-DR3gQ1pK.js.map +0 -1
- package/build/client/assets/_layout-DXegGcTM.js.map +0 -1
- package/build/client/assets/_layout-MFX35ekR.js.map +0 -1
- package/build/client/assets/diff-ZJmYghvh.js +0 -42
- package/build/client/assets/diff-ZJmYghvh.js.map +0 -1
- package/build/client/assets/discord-fsySDDKv.js +0 -2
- package/build/client/assets/discord-fsySDDKv.js.map +0 -1
- package/build/client/assets/epic-video-BKzHxm70.js +0 -2985
- package/build/client/assets/epic-video-BKzHxm70.js.map +0 -1
- package/build/client/assets/finished-gQ-B3k8j.js.map +0 -1
- package/build/client/assets/index-Drecz7hr.js +0 -2
- package/build/client/assets/index-Drecz7hr.js.map +0 -1
- package/build/client/assets/progress-HmjERaPh.js +0 -2
- package/build/client/assets/progress-HmjERaPh.js.map +0 -1
- package/build/client/assets/tooltip-BdTNdCYE.js +0 -2
- package/build/client/assets/tooltip-BdTNdCYE.js.map +0 -1
|
@@ -1365,6 +1365,7 @@ interface IProjectionNode<I = unknown> {
|
|
|
1365
1365
|
setAnimationOrigin(delta: Delta): void;
|
|
1366
1366
|
startAnimation(transition: Transition$1): void;
|
|
1367
1367
|
finishAnimation(): void;
|
|
1368
|
+
hasCheckedOptimisedAppear: boolean;
|
|
1368
1369
|
isLead(): boolean;
|
|
1369
1370
|
promote(options?: {
|
|
1370
1371
|
needsReset?: boolean;
|
|
@@ -4203,7 +4204,7 @@ declare class GroupPlaybackControls implements AnimationPlaybackControls {
|
|
|
4203
4204
|
private runAll;
|
|
4204
4205
|
play(): void;
|
|
4205
4206
|
pause(): void;
|
|
4206
|
-
stop()
|
|
4207
|
+
stop: () => void;
|
|
4207
4208
|
cancel(): void;
|
|
4208
4209
|
complete(): void;
|
|
4209
4210
|
}
|
|
@@ -1013,7 +1013,7 @@
|
|
|
1013
1013
|
* This will be replaced by the build step with the latest version number.
|
|
1014
1014
|
* When MotionValues are provided to motion components, warn if versions are mixed.
|
|
1015
1015
|
*/
|
|
1016
|
-
this.version = "11.2.
|
|
1016
|
+
this.version = "11.2.9";
|
|
1017
1017
|
/**
|
|
1018
1018
|
* Tracks whether this value can output a velocity. Currently this is only true
|
|
1019
1019
|
* if the value is numerical, but we might be able to widen the scope here and support
|
|
@@ -1309,6 +1309,21 @@
|
|
|
1309
1309
|
|
|
1310
1310
|
const visualElementStore = new WeakMap();
|
|
1311
1311
|
|
|
1312
|
+
function observeTimeline(update, timeline) {
|
|
1313
|
+
let prevProgress;
|
|
1314
|
+
const onFrame = () => {
|
|
1315
|
+
const { currentTime } = timeline;
|
|
1316
|
+
const percentage = currentTime === null ? 0 : currentTime.value;
|
|
1317
|
+
const progress = percentage / 100;
|
|
1318
|
+
if (prevProgress !== progress) {
|
|
1319
|
+
update(progress);
|
|
1320
|
+
}
|
|
1321
|
+
prevProgress = progress;
|
|
1322
|
+
};
|
|
1323
|
+
frame.update(onFrame, true);
|
|
1324
|
+
return () => cancelFrame(onFrame);
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1312
1327
|
function memo(callback) {
|
|
1313
1328
|
let result;
|
|
1314
1329
|
return () => {
|
|
@@ -1318,6 +1333,84 @@
|
|
|
1318
1333
|
};
|
|
1319
1334
|
}
|
|
1320
1335
|
|
|
1336
|
+
const supportsScrollTimeline = memo(() => window.ScrollTimeline !== undefined);
|
|
1337
|
+
|
|
1338
|
+
class GroupPlaybackControls {
|
|
1339
|
+
constructor(animations) {
|
|
1340
|
+
// Bound to accomodate common `return animation.stop` pattern
|
|
1341
|
+
this.stop = () => this.runAll("stop");
|
|
1342
|
+
this.animations = animations.filter(Boolean);
|
|
1343
|
+
}
|
|
1344
|
+
then(onResolve, onReject) {
|
|
1345
|
+
return Promise.all(this.animations).then(onResolve).catch(onReject);
|
|
1346
|
+
}
|
|
1347
|
+
/**
|
|
1348
|
+
* TODO: Filter out cancelled or stopped animations before returning
|
|
1349
|
+
*/
|
|
1350
|
+
getAll(propName) {
|
|
1351
|
+
return this.animations[0][propName];
|
|
1352
|
+
}
|
|
1353
|
+
setAll(propName, newValue) {
|
|
1354
|
+
for (let i = 0; i < this.animations.length; i++) {
|
|
1355
|
+
this.animations[i][propName] = newValue;
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
attachTimeline(timeline) {
|
|
1359
|
+
const cancelAll = this.animations.map((animation) => {
|
|
1360
|
+
if (supportsScrollTimeline() && animation.attachTimeline) {
|
|
1361
|
+
animation.attachTimeline(timeline);
|
|
1362
|
+
}
|
|
1363
|
+
else {
|
|
1364
|
+
animation.pause();
|
|
1365
|
+
return observeTimeline((progress) => {
|
|
1366
|
+
animation.time = animation.duration * progress;
|
|
1367
|
+
}, timeline);
|
|
1368
|
+
}
|
|
1369
|
+
});
|
|
1370
|
+
return () => {
|
|
1371
|
+
cancelAll.forEach((cancelTimeline, i) => {
|
|
1372
|
+
if (cancelTimeline)
|
|
1373
|
+
cancelTimeline();
|
|
1374
|
+
this.animations[i].stop();
|
|
1375
|
+
});
|
|
1376
|
+
};
|
|
1377
|
+
}
|
|
1378
|
+
get time() {
|
|
1379
|
+
return this.getAll("time");
|
|
1380
|
+
}
|
|
1381
|
+
set time(time) {
|
|
1382
|
+
this.setAll("time", time);
|
|
1383
|
+
}
|
|
1384
|
+
get speed() {
|
|
1385
|
+
return this.getAll("speed");
|
|
1386
|
+
}
|
|
1387
|
+
set speed(speed) {
|
|
1388
|
+
this.setAll("speed", speed);
|
|
1389
|
+
}
|
|
1390
|
+
get duration() {
|
|
1391
|
+
let max = 0;
|
|
1392
|
+
for (let i = 0; i < this.animations.length; i++) {
|
|
1393
|
+
max = Math.max(max, this.animations[i].duration);
|
|
1394
|
+
}
|
|
1395
|
+
return max;
|
|
1396
|
+
}
|
|
1397
|
+
runAll(methodName) {
|
|
1398
|
+
this.animations.forEach((controls) => controls[methodName]());
|
|
1399
|
+
}
|
|
1400
|
+
play() {
|
|
1401
|
+
this.runAll("play");
|
|
1402
|
+
}
|
|
1403
|
+
pause() {
|
|
1404
|
+
this.runAll("pause");
|
|
1405
|
+
}
|
|
1406
|
+
cancel() {
|
|
1407
|
+
this.runAll("cancel");
|
|
1408
|
+
}
|
|
1409
|
+
complete() {
|
|
1410
|
+
this.runAll("complete");
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1321
1414
|
/**
|
|
1322
1415
|
* Generate a list of every possible transform key.
|
|
1323
1416
|
*/
|
|
@@ -2110,14 +2203,17 @@
|
|
|
2110
2203
|
* If any keyframe is a CSS variable, we need to find its value by sampling the element
|
|
2111
2204
|
*/
|
|
2112
2205
|
for (let i = 0; i < unresolvedKeyframes.length; i++) {
|
|
2113
|
-
|
|
2114
|
-
if (typeof keyframe === "string"
|
|
2115
|
-
|
|
2116
|
-
if (
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2206
|
+
let keyframe = unresolvedKeyframes[i];
|
|
2207
|
+
if (typeof keyframe === "string") {
|
|
2208
|
+
keyframe = keyframe.trim();
|
|
2209
|
+
if (isCSSVariableToken(keyframe)) {
|
|
2210
|
+
const resolved = getVariableValue(keyframe, element.current);
|
|
2211
|
+
if (resolved !== undefined) {
|
|
2212
|
+
unresolvedKeyframes[i] = resolved;
|
|
2213
|
+
}
|
|
2214
|
+
if (i === unresolvedKeyframes.length - 1) {
|
|
2215
|
+
this.finalKeyframe = keyframe;
|
|
2216
|
+
}
|
|
2121
2217
|
}
|
|
2122
2218
|
}
|
|
2123
2219
|
}
|
|
@@ -3882,7 +3978,9 @@
|
|
|
3882
3978
|
options.onUpdate(finalKeyframe);
|
|
3883
3979
|
options.onComplete();
|
|
3884
3980
|
});
|
|
3885
|
-
return
|
|
3981
|
+
// We still want to return some animation controls here rather
|
|
3982
|
+
// than returning undefined
|
|
3983
|
+
return new GroupPlaybackControls([]);
|
|
3886
3984
|
}
|
|
3887
3985
|
}
|
|
3888
3986
|
/**
|
|
@@ -3937,6 +4035,18 @@
|
|
|
3937
4035
|
return definition;
|
|
3938
4036
|
}
|
|
3939
4037
|
|
|
4038
|
+
/**
|
|
4039
|
+
* Convert camelCase to dash-case properties.
|
|
4040
|
+
*/
|
|
4041
|
+
const camelToDash = (str) => str.replace(/([a-z])([A-Z])/gu, "$1-$2").toLowerCase();
|
|
4042
|
+
|
|
4043
|
+
const optimizedAppearDataId = "framerAppearId";
|
|
4044
|
+
const optimizedAppearDataAttribute = "data-" + camelToDash(optimizedAppearDataId);
|
|
4045
|
+
|
|
4046
|
+
function getOptimisedAppearId(visualElement) {
|
|
4047
|
+
return visualElement.getProps()[optimizedAppearDataAttribute];
|
|
4048
|
+
}
|
|
4049
|
+
|
|
3940
4050
|
function isSVGElement(element) {
|
|
3941
4051
|
return element instanceof SVGElement && element.tagName !== "svg";
|
|
3942
4052
|
}
|
|
@@ -4042,7 +4152,7 @@
|
|
|
4042
4152
|
* and warn against mismatches.
|
|
4043
4153
|
*/
|
|
4044
4154
|
{
|
|
4045
|
-
warnOnce(nextValue.version === "11.2.
|
|
4155
|
+
warnOnce(nextValue.version === "11.2.9", `Attempting to mix Framer Motion versions ${nextValue.version} with 11.2.9 may not work as expected.`);
|
|
4046
4156
|
}
|
|
4047
4157
|
}
|
|
4048
4158
|
else if (isMotionValue(prevValue)) {
|
|
@@ -4904,6 +5014,25 @@
|
|
|
4904
5014
|
}
|
|
4905
5015
|
}
|
|
4906
5016
|
}
|
|
5017
|
+
function isOptimisedAppearTree(projectionNode) {
|
|
5018
|
+
projectionNode.hasCheckedOptimisedAppear = true;
|
|
5019
|
+
if (projectionNode.root === projectionNode)
|
|
5020
|
+
return false;
|
|
5021
|
+
const { visualElement } = projectionNode.options;
|
|
5022
|
+
if (!visualElement) {
|
|
5023
|
+
return false;
|
|
5024
|
+
}
|
|
5025
|
+
else if (getOptimisedAppearId(visualElement)) {
|
|
5026
|
+
return true;
|
|
5027
|
+
}
|
|
5028
|
+
else if (projectionNode.parent &&
|
|
5029
|
+
!projectionNode.parent.hasCheckedOptimisedAppear) {
|
|
5030
|
+
return isOptimisedAppearTree(projectionNode.parent);
|
|
5031
|
+
}
|
|
5032
|
+
else {
|
|
5033
|
+
return false;
|
|
5034
|
+
}
|
|
5035
|
+
}
|
|
4907
5036
|
function createProjectionNode({ attachResizeListener, defaultParent, measureScroll, checkIsScrollRoot, resetTransform, }) {
|
|
4908
5037
|
return class ProjectionNode {
|
|
4909
5038
|
constructor(latestValues = {}, parent = defaultParent === null || defaultParent === void 0 ? void 0 : defaultParent()) {
|
|
@@ -4979,6 +5108,13 @@
|
|
|
4979
5108
|
* Flags whether this node should have its transform reset prior to measuring.
|
|
4980
5109
|
*/
|
|
4981
5110
|
this.shouldResetTransform = false;
|
|
5111
|
+
/**
|
|
5112
|
+
* Store whether this node has been checked for optimised appear animations. As
|
|
5113
|
+
* effects fire bottom-up, and we want to look up the tree for appear animations,
|
|
5114
|
+
* this makes sure we only check each path once, stopping at nodes that
|
|
5115
|
+
* have already been checked.
|
|
5116
|
+
*/
|
|
5117
|
+
this.hasCheckedOptimisedAppear = false;
|
|
4982
5118
|
/**
|
|
4983
5119
|
* An object representing the calculated contextual/accumulated/tree scale.
|
|
4984
5120
|
* This will be used to scale calculcated projection transforms, as these are
|
|
@@ -5184,15 +5320,6 @@
|
|
|
5184
5320
|
if (this.isUpdateBlocked())
|
|
5185
5321
|
return;
|
|
5186
5322
|
this.isUpdating = true;
|
|
5187
|
-
/**
|
|
5188
|
-
* If we're running optimised appear animations then these must be
|
|
5189
|
-
* cancelled before measuring the DOM. This is so we can measure
|
|
5190
|
-
* the true layout of the element rather than the WAAPI animation
|
|
5191
|
-
* which will be unaffected by the resetSkewAndRotate step.
|
|
5192
|
-
*/
|
|
5193
|
-
if (window.HandoffCancelAllAnimations) {
|
|
5194
|
-
window.HandoffCancelAllAnimations();
|
|
5195
|
-
}
|
|
5196
5323
|
this.nodes && this.nodes.forEach(resetSkewAndRotation);
|
|
5197
5324
|
this.animationId++;
|
|
5198
5325
|
}
|
|
@@ -5206,6 +5333,22 @@
|
|
|
5206
5333
|
this.options.onExitComplete && this.options.onExitComplete();
|
|
5207
5334
|
return;
|
|
5208
5335
|
}
|
|
5336
|
+
/**
|
|
5337
|
+
* If we're running optimised appear animations then these must be
|
|
5338
|
+
* cancelled before measuring the DOM. This is so we can measure
|
|
5339
|
+
* the true layout of the element rather than the WAAPI animation
|
|
5340
|
+
* which will be unaffected by the resetSkewAndRotate step.
|
|
5341
|
+
*
|
|
5342
|
+
* Note: This is a DOM write. Worst case scenario is this is sandwiched
|
|
5343
|
+
* between other snapshot reads which will cause unnecessary style recalculations.
|
|
5344
|
+
* This has to happen here though, as we don't yet know which nodes will need
|
|
5345
|
+
* snapshots in startUpdate(), but we only want to cancel optimised animations
|
|
5346
|
+
* if a layout animation measurement is actually going to be affected by them.
|
|
5347
|
+
*/
|
|
5348
|
+
if (window.HandoffCancelAllAnimations &&
|
|
5349
|
+
isOptimisedAppearTree(this)) {
|
|
5350
|
+
window.HandoffCancelAllAnimations();
|
|
5351
|
+
}
|
|
5209
5352
|
!this.root.isUpdating && this.root.startUpdate();
|
|
5210
5353
|
if (this.isLayoutDirty)
|
|
5211
5354
|
return;
|
|
@@ -1081,6 +1081,7 @@ interface IProjectionNode<I = unknown> {
|
|
|
1081
1081
|
setAnimationOrigin(delta: Delta): void;
|
|
1082
1082
|
startAnimation(transition: Transition$1): void;
|
|
1083
1083
|
finishAnimation(): void;
|
|
1084
|
+
hasCheckedOptimisedAppear: boolean;
|
|
1084
1085
|
isLead(): boolean;
|
|
1085
1086
|
promote(options?: {
|
|
1086
1087
|
needsReset?: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "framer-motion",
|
|
3
|
-
"version": "11.2.
|
|
3
|
+
"version": "11.2.9",
|
|
4
4
|
"description": "A simple and powerful JavaScript animation library",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/es/index.mjs",
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
"bundlesize": [
|
|
88
88
|
{
|
|
89
89
|
"path": "./dist/size-rollup-motion.js",
|
|
90
|
-
"maxSize": "
|
|
90
|
+
"maxSize": "33.3 kB"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"path": "./dist/size-rollup-m.js",
|
|
@@ -95,15 +95,15 @@
|
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"path": "./dist/size-rollup-dom-animation.js",
|
|
98
|
-
"maxSize": "16.
|
|
98
|
+
"maxSize": "16.85 kB"
|
|
99
99
|
},
|
|
100
100
|
{
|
|
101
101
|
"path": "./dist/size-rollup-dom-max.js",
|
|
102
|
-
"maxSize": "28.
|
|
102
|
+
"maxSize": "28.6 kB"
|
|
103
103
|
},
|
|
104
104
|
{
|
|
105
105
|
"path": "./dist/size-rollup-animate.js",
|
|
106
|
-
"maxSize": "17.
|
|
106
|
+
"maxSize": "17.85 kB"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
"path": "./dist/size-webpack-m.js",
|
|
@@ -111,12 +111,12 @@
|
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"path": "./dist/size-webpack-dom-animation.js",
|
|
114
|
-
"maxSize": "21.
|
|
114
|
+
"maxSize": "21.9 kB"
|
|
115
115
|
},
|
|
116
116
|
{
|
|
117
117
|
"path": "./dist/size-webpack-dom-max.js",
|
|
118
|
-
"maxSize": "34.
|
|
118
|
+
"maxSize": "34.6 kB"
|
|
119
119
|
}
|
|
120
120
|
],
|
|
121
|
-
"gitHead": "
|
|
121
|
+
"gitHead": "a58d3e7db0a52d3e1747924b1d09e895731e891e"
|
|
122
122
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import type {IfNever} from './if-never';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
Extract the keys from a type where the value type of the key extends the given `Condition`.
|
|
3
5
|
|
|
@@ -36,10 +38,10 @@ export type ConditionalKeys<Base, Condition> =
|
|
|
36
38
|
[Key in keyof Base]-?:
|
|
37
39
|
// Pick only keys with types extending the given `Condition` type.
|
|
38
40
|
Base[Key] extends Condition
|
|
39
|
-
// Retain this key
|
|
40
|
-
|
|
41
|
+
// Retain this key
|
|
42
|
+
// If the value for the key extends never, only include it if `Condition` also extends never
|
|
43
|
+
? IfNever<Base[Key], IfNever<Condition, Key, never>, Key>
|
|
41
44
|
// Discard this key since the condition fails.
|
|
42
45
|
: never;
|
|
43
|
-
|
|
44
46
|
// Convert the produced object into a union type of the keys which passed the conditional test.
|
|
45
47
|
}[keyof Base];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@epic-web/workshop-app",
|
|
3
|
-
"version": "4.5.
|
|
3
|
+
"version": "4.5.1",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -16,7 +16,9 @@
|
|
|
16
16
|
],
|
|
17
17
|
"type": "module",
|
|
18
18
|
"imports": {
|
|
19
|
-
"
|
|
19
|
+
"#app/*": "./app/*",
|
|
20
|
+
"#tests/*": "./tests/*",
|
|
21
|
+
"#build/*": "./build/*"
|
|
20
22
|
},
|
|
21
23
|
"exports": {
|
|
22
24
|
"./start": {
|
|
@@ -42,8 +44,8 @@
|
|
|
42
44
|
"@epic-web/invariant": "^1.0.0",
|
|
43
45
|
"@epic-web/remember": "^1.0.2",
|
|
44
46
|
"@epic-web/restore-scroll": "^1.1.1",
|
|
45
|
-
"@epic-web/workshop-presence": "4.5.
|
|
46
|
-
"@epic-web/workshop-utils": "4.5.
|
|
47
|
+
"@epic-web/workshop-presence": "4.5.1",
|
|
48
|
+
"@epic-web/workshop-utils": "4.5.1",
|
|
47
49
|
"@mdx-js/mdx": "^3.0.1",
|
|
48
50
|
"@mux/mux-player-react": "^2.6.0",
|
|
49
51
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
@@ -127,7 +129,6 @@
|
|
|
127
129
|
"@total-typescript/ts-reset": "^0.5.1",
|
|
128
130
|
"@types/compression": "^1.7.5",
|
|
129
131
|
"@types/cross-spawn": "^6.0.6",
|
|
130
|
-
"@types/eslint": "^8.56.10",
|
|
131
132
|
"@types/etag": "^1.8.3",
|
|
132
133
|
"@types/express": "^4.17.21",
|
|
133
134
|
"@types/fs-extra": "^11.0.4",
|
|
@@ -145,7 +146,7 @@
|
|
|
145
146
|
"@types/wait-on": "^5.3.4",
|
|
146
147
|
"@types/ws": "^8.5.10",
|
|
147
148
|
"autoprefixer": "^10.4.19",
|
|
148
|
-
"eslint": "^
|
|
149
|
+
"eslint": "^9.3.0",
|
|
149
150
|
"mdast-util-mdx-jsx": "^3.1.2",
|
|
150
151
|
"npm-run-all": "^4.1.5",
|
|
151
152
|
"prettier": "^3.2.5",
|
package/start.js
CHANGED
|
@@ -15,8 +15,10 @@ try {
|
|
|
15
15
|
'utf8',
|
|
16
16
|
),
|
|
17
17
|
)
|
|
18
|
-
} catch
|
|
19
|
-
throw new Error(
|
|
18
|
+
} catch {
|
|
19
|
+
throw new Error(
|
|
20
|
+
`Could not find and parse package.json at ${EPICSHOP_CONTEXT_CWD}`,
|
|
21
|
+
)
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
if (packageJson.epicshop.githubRoot) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber-D6YNCQoj.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetExercises,\n\tgetWorkshopRoot,\n\tgetWorkshopTitle,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n\ttime,\n} from '@epic-web/workshop-utils/timing.server'\nimport {\n\ttype LoaderFunctionArgs,\n\ttype HeadersFunction,\n\ttype MetaFunction,\n\tdefer,\n} from '@remix-run/node'\nimport {\n\tLink,\n\tisRouteErrorResponse,\n\tuseLoaderData,\n\tuseRouteError,\n} from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { getErrorMessage } from '#app/utils/misc.tsx'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tif (!data) {\n\t\treturn [{ title: '📝 | Error' }]\n\t}\n\tconst number = data.exercise.exerciseNumber.toString().padStart(2, '0')\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\tconst rootData = matches.find(m => m.id === 'root')?.data\n\treturn [\n\t\t{\n\t\t\ttitle: `📝 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\t},\n\t]\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseNumberLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst [exercises, workshopTitle] = await Promise.all([\n\t\ttime(() => getExercises({ request, timings }), {\n\t\t\ttimings,\n\t\t\ttype: 'getExercises',\n\t\t\tdesc: 'getExercises in $exerciseNumber.tsx',\n\t\t}),\n\t\ttime(() => getWorkshopTitle(), {\n\t\t\ttimings,\n\t\t\ttype: 'getWorkshopTitle',\n\t\t\tdesc: 'getWorkshopTitle in $exerciseNumber.tsx',\n\t\t}),\n\t])\n\tconst exercise = exercises.find(\n\t\te => e.exerciseNumber === Number(params.exerciseNumber),\n\t)\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\n\tconst readmeFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'README.mdx',\n\t)\n\n\tconst firstStep = exercise.steps.find(Boolean)\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-instructions`\n\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\texercise,\n\t\t\texerciseNumber: exercise.exerciseNumber,\n\t\t\texerciseReadme: {\n\t\t\t\tfile: readmeFilepath,\n\t\t\t\trelativePath: `exercises/${exercise.dirName}`,\n\t\t\t},\n\t\t\texerciseTitle: exercise.title,\n\t\t\tfirstStep,\n\t\t\tfirstType: firstStep?.problem ? 'problem' : 'solution',\n\t\t\ttitle: workshopTitle,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.instructionsEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseNumberRoute() {\n\tconst data = useLoaderData<typeof loader>()\n\n\tconst firstStepNumber = String(data.firstStep?.stepNumber ?? '01')\n\tconst firstStepPath = `${firstStepNumber.padStart(2, '0')}/${data.firstType}`\n\treturn (\n\t\t<main className=\"relative flex h-full w-full max-w-5xl flex-col justify-between border-r md:w-3/4 xl:w-2/3\">\n\t\t\t<article\n\t\t\t\tid={data.articleId}\n\t\t\t\tkey={data.articleId}\n\t\t\t\tclassName=\"shadow-on-scrollbox flex w-full flex-1 flex-col gap-12 overflow-y-scroll px-3 py-4 pt-6 scrollbar-thin scrollbar-thumb-scrollbar md:px-10 md:py-12 md:pt-16\"\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<h1 className=\"text-[clamp(3rem,6vw,8.5rem)] font-extrabold leading-none\">\n\t\t\t\t\t\t{data.exercise.title}\n\t\t\t\t\t</h1>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t{data.exercise.instructionsCode ? (\n\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\tcode={data.exercise.instructionsCode}\n\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t'No instructions yet...'\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t</article>\n\t\t\t<ElementScrollRestoration\n\t\t\t\telementQuery={`#${data.articleId}`}\n\t\t\t\tkey={`scroll-${data.articleId}`}\n\t\t\t/>\n\t\t\t<ProgressToggle\n\t\t\t\ttype=\"instructions\"\n\t\t\t\texerciseNumber={data.exerciseNumber}\n\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t/>\n\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t<div />\n\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\tfile={data.exerciseReadme.file}\n\t\t\t\t\trelativePath={data.exerciseReadme.relativePath}\n\t\t\t\t/>\n\t\t\t\t<Link\n\t\t\t\t\tto={firstStepPath}\n\t\t\t\t\tprefetch=\"intent\"\n\t\t\t\t\tclassName=\"flex h-full items-center justify-center bg-foreground px-7 text-background\"\n\t\t\t\t>\n\t\t\t\t\tStart Learning\n\t\t\t\t</Link>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nexport function ErrorBoundary() {\n\tconst error = useRouteError()\n\n\tif (typeof document !== 'undefined') {\n\t\tconsole.error(error)\n\t}\n\n\treturn isRouteErrorResponse(error) ? (\n\t\terror.status === 404 ? (\n\t\t\t<p>Sorry, we couldn't find that step.</p>\n\t\t) : (\n\t\t\t<p>\n\t\t\t\t{error.status} {error.data}\n\t\t\t</p>\n\t\t)\n\t) : (\n\t\t<p>{getErrorMessage(error)}</p>\n\t)\n}\n"],"names":["meta","data","matches","title","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","workshopTitle","mdxComponents","h1","ExerciseNumberRoute","useLoaderData","firstStepPath","String","firstStep","stepNumber","firstType","jsxs","className","children","articleId","jsx","instructionsCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","EditFileOnGitHub","file","exerciseReadme","relativePath","Link","to","prefetch","ErrorBoundary","error","useRouteError","document","console","isRouteErrorResponse","status","getErrorMessage"],"mappings":"0hBAmCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACL,GAAI,CAACD,EACJ,MAAO,CAAC,CAAEE,MAAO,YAAa,CAAC,EAE1B,MAAAC,EAASH,EAAKI,SAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,EAEhEC,GAAWP,EAAAA,EAAQQ,QAAUC,EAAEC,KAAO,MAAM,IAAjCV,YAAAA,EAAoCD,KAC9C,MAAA,CACN,CACCE,cAAeC,CAAM,KAAKH,EAAKI,SAASF,KAAW,MAAAM,GAAAA,YAAAA,EAAUI,aAAa,EAC3E,CAAA,CAEF,EAuEMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAsB,OAC7C,MAAMf,EAAOgB,IAGPC,KADkBC,SAAOlB,EAAAA,EAAKmB,YAALnB,YAAAA,EAAgBoB,aAAc,IAAI,EACxBb,SAAS,EAAG,GAAG,CAAK,IAAAP,EAAKqB,SAAS,GAE1E,OAAAC,EAAAA,KAAC,OAAK,CAAAC,UAAU,4FACfC,SAAA,CAAAF,EAAA,KAAC,UAAA,CACAX,GAAIX,EAAKyB,UAETF,UAAU,8JAEVC,SAAA,CAACE,EAAA,IAAA,MAAA,CACAF,eAAC,KAAG,CAAAD,UAAU,4DACZC,SAAKxB,EAAAI,SAASF,MAChB,CACD,CAAA,EACCwB,EAAA,IAAA,MAAA,CACCF,SAAKxB,EAAAI,SAASuB,iBACdD,EAAAA,IAACE,EAAA,CACAC,sBAAuB7B,EAAK6B,sBAE5BL,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACI,EAAA,CACAC,KAAM/B,EAAKI,SAASuB,iBACpBK,WAAYnB,EACb,EACD,CACD,CAAA,EAEA,wBAEF,CAAA,CAAA,CAAA,EAvBKb,EAAKyB,SAwBX,EACAC,EAAAA,IAACO,EAAA,CACAC,aAAkB,IAAAlC,EAAKyB,SAAS,EAAA,EAC3B,UAAUzB,EAAKyB,SAAS,EAC9B,EACAC,EAAA,IAACS,EAAA,CACAC,KAAK,eACL/B,eAAgBL,EAAKK,eACrBkB,UAAU,oBAAA,CACX,EACAD,EAAA,KAAC,MAAI,CAAAC,UAAU,8DACdC,SAAA,CAAAE,EAAAA,IAAC,MAAI,CAAA,CAAA,EACLA,EAAA,IAACW,EAAA,CACAC,KAAMtC,EAAKuC,eAAeD,KAC1BE,aAAcxC,EAAKuC,eAAeC,YAAA,CACnC,EACAd,EAAA,IAACe,EAAA,CACAC,GAAIzB,EACJ0B,SAAS,SACTpB,UAAU,6EACVC,SAAA,gBAAA,CAED,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAEF,CAEO,SAASoB,GAAgB,CAC/B,MAAMC,EAAQC,IAEV,OAAA,OAAOC,SAAa,KACvBC,QAAQH,MAAMA,CAAK,EAGbI,EAAqBJ,CAAK,EAChCA,EAAMK,SAAW,IAChBxB,EAAA,IAAC,IAAE,CAAAF,SAAA,oCAAA,CAAkC,EAErCF,EAAA,KAAC,IACC,CAAAE,SAAA,CAAMqB,EAAAK,OAAO,IAAEL,EAAM7C,IAAA,CAAA,CACvB,EAGD0B,EAAA,IAAC,IAAG,CAAAF,SAAA2B,EAAgBN,CAAK,CAAE,CAAA,CAE7B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_exerciseNumber_.finished-DR3gQ1pK.js","sources":["../../../app/routes/_app+/_exercises+/$exerciseNumber_.finished.tsx"],"sourcesContent":["import path from 'path'\nimport { invariantResponse } from '@epic-web/invariant'\nimport { ElementScrollRestoration } from '@epic-web/restore-scroll'\nimport {\n\tgetAppPageRoute,\n\tgetApps,\n\tgetExercise,\n\tgetWorkshopRoot,\n\tgetWorkshopTitle,\n\tisExerciseStepApp,\n} from '@epic-web/workshop-utils/apps.server'\nimport {\n\tcombineServerTimings,\n\tgetServerTimeHeader,\n\tmakeTimings,\n} from '@epic-web/workshop-utils/timing.server'\nimport { getPkgProp } from '@epic-web/workshop-utils/utils.server'\nimport {\n\ttype LoaderFunctionArgs,\n\ttype HeadersFunction,\n\ttype MetaFunction,\n\tdefer,\n} from '@remix-run/node'\nimport { Link, useLoaderData } from '@remix-run/react'\nimport slugify from '@sindresorhus/slugify'\nimport * as React from 'react'\nimport { EpicVideoInfoProvider } from '#app/components/epic-video.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { NavChevrons } from '#app/components/nav-chevrons.tsx'\nimport { type loader as rootLoader } from '#app/root.tsx'\nimport { EditFileOnGitHub } from '#app/routes/launch-editor.tsx'\nimport { ProgressToggle } from '#app/routes/progress.tsx'\nimport { getEpicVideoInfos } from '#app/utils/epic-api.ts'\nimport { Mdx } from '#app/utils/mdx.tsx'\nimport { cn } from '#app/utils/misc.tsx'\n\nexport const meta: MetaFunction<typeof loader, { root: typeof rootLoader }> = ({\n\tdata,\n\tmatches,\n}) => {\n\tif (!data) {\n\t\treturn [{ title: '🦉 | Error' }]\n\t}\n\tconst number = data.exercise.exerciseNumber.toString().padStart(2, '0')\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\tconst rootData = matches.find(m => m.id === 'root')?.data\n\treturn [\n\t\t{\n\t\t\ttitle: `🦉 | ${number}. ${data.exercise.title} | ${rootData?.workshopTitle}`,\n\t\t},\n\t]\n}\n\nexport async function loader({ request, params }: LoaderFunctionArgs) {\n\tconst timings = makeTimings('exerciseFinishedLoader')\n\tinvariantResponse(params.exerciseNumber, 'exerciseNumber is required')\n\tconst exercise = await getExercise(params.exerciseNumber, {\n\t\ttimings,\n\t\trequest,\n\t})\n\tif (!exercise) {\n\t\tthrow new Response('Not found', { status: 404 })\n\t}\n\tconst workshopTitle = await getWorkshopTitle()\n\tconst workshopRoot = getWorkshopRoot()\n\tconst exerciseFormTemplate = await getPkgProp(\n\t\tworkshopRoot,\n\t\t'epicshop.forms.exercise',\n\t\t`https://docs.google.com/forms/d/e/1FAIpQLSf3o9xyjQepTlOTH5Z7ZwkeSTdXh6YWI_RGc9KiyD3oUN0p6w/viewform?hl=en&embedded=true&entry.1836176234={workshopTitle}&entry.428900931={exerciseTitle}`,\n\t)\n\tconst exerciseFormEmbedUrl = exerciseFormTemplate\n\t\t.replace('{workshopTitle}', encodeURIComponent(workshopTitle))\n\t\t.replace('{exerciseTitle}', encodeURIComponent(exercise.title))\n\tconst nextExercise = await getExercise(exercise.exerciseNumber + 1, {\n\t\ttimings,\n\t\trequest,\n\t})\n\n\tconst finishedFilepath = path.join(\n\t\tgetWorkshopRoot(),\n\t\t'exercises',\n\t\texercise.dirName,\n\t\t'FINISHED.mdx',\n\t)\n\n\tconst apps = await getApps({ request, timings })\n\tconst exerciseApps = apps\n\t\t.filter(isExerciseStepApp)\n\t\t.filter(app => app.exerciseNumber === exercise.exerciseNumber)\n\tconst prevApp = exerciseApps[exerciseApps.length - 1]\n\n\tconst articleId = `workshop-${slugify(workshopTitle)}-${\n\t\texercise.exerciseNumber\n\t}-finished`\n\n\treturn defer(\n\t\t{\n\t\t\tarticleId,\n\t\t\tworkshopTitle,\n\t\t\texercise,\n\t\t\texerciseFormEmbedUrl,\n\t\t\tepicVideoInfosPromise: getEpicVideoInfos(\n\t\t\t\texercise.finishedEpicVideoEmbeds,\n\t\t\t\t{ request },\n\t\t\t),\n\t\t\texerciseFinished: exercise.finishedCode\n\t\t\t\t? {\n\t\t\t\t\t\tfile: finishedFilepath,\n\t\t\t\t\t\trelativePath: `exercises/${exercise.dirName}/FINISHED.mdx`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tprevStepLink: prevApp\n\t\t\t\t? {\n\t\t\t\t\t\tto: getAppPageRoute(prevApp),\n\t\t\t\t\t\t'aria-label': `${prevApp.title} (${prevApp.type})`,\n\t\t\t\t\t}\n\t\t\t\t: null,\n\t\t\tnextStepLink: nextExercise\n\t\t\t\t? {\n\t\t\t\t\t\tto: `/${nextExercise.exerciseNumber.toString().padStart(2, '0')}`,\n\t\t\t\t\t\t'aria-label': `${nextExercise.title}`,\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\tto: '/finished',\n\t\t\t\t\t\t'aria-label': 'Finished! 🎉',\n\t\t\t\t\t},\n\t\t},\n\t\t{\n\t\t\theaders: {\n\t\t\t\t'Server-Timing': getServerTimeHeader(timings),\n\t\t\t},\n\t\t},\n\t)\n}\n\nexport const headers: HeadersFunction = ({ loaderHeaders, parentHeaders }) => {\n\tconst headers = {\n\t\t'Cache-Control': loaderHeaders.get('Cache-Control') ?? '',\n\t\t'Server-Timing': combineServerTimings(loaderHeaders, parentHeaders),\n\t}\n\treturn headers\n}\n\nconst mdxComponents = { h1: () => null }\nexport default function ExerciseFinished() {\n\tconst data = useLoaderData<typeof loader>()\n\tconst exerciseNumber = data.exercise.exerciseNumber\n\t\t.toString()\n\t\t.padStart(2, '0')\n\n\treturn (\n\t\t<div className=\"flex flex-grow flex-col\">\n\t\t\t<main className=\"grid h-full flex-grow grid-cols-1 grid-rows-2 lg:grid-cols-2 lg:grid-rows-1\">\n\t\t\t\t<div className=\"relative col-span-1 row-span-1 flex h-full flex-col lg:border-r\">\n\t\t\t\t\t<h1 className=\"h-14 border-b pl-10 pr-5 text-sm font-medium uppercase leading-none\">\n\t\t\t\t\t\t<div className=\"flex h-14 flex-wrap items-center justify-between gap-x-2 py-2\">\n\t\t\t\t\t\t\t<div className=\"flex items-center justify-start gap-x-2\">\n\t\t\t\t\t\t\t\t<Link to={`/${exerciseNumber}`} className=\"hover:underline\">\n\t\t\t\t\t\t\t\t\t{`${exerciseNumber}. ${data.exercise.title}`}\n\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t<span>/</span>\n\t\t\t\t\t\t\t\t<span>Elaboration</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</h1>\n\n\t\t\t\t\t<article\n\t\t\t\t\t\tclassName=\"shadow-on-scrollbox h-full w-full max-w-none flex-1 scroll-pt-6 space-y-6 overflow-y-auto p-10 pt-8 scrollbar-thin scrollbar-thumb-scrollbar\"\n\t\t\t\t\t\tid={data.articleId}\n\t\t\t\t\t>\n\t\t\t\t\t\t{data.exercise.finishedCode ? (\n\t\t\t\t\t\t\t<EpicVideoInfoProvider\n\t\t\t\t\t\t\t\tepicVideoInfosPromise={data.epicVideoInfosPromise}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"prose dark:prose-invert sm:prose-lg\">\n\t\t\t\t\t\t\t\t\t<Mdx\n\t\t\t\t\t\t\t\t\t\tcode={data.exercise.finishedCode}\n\t\t\t\t\t\t\t\t\t\tcomponents={mdxComponents}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</EpicVideoInfoProvider>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t// TODO: render a random dad joke...\n\t\t\t\t\t\t\t'No finished instructions yet...'\n\t\t\t\t\t\t)}\n\t\t\t\t\t</article>\n\t\t\t\t\t<ElementScrollRestoration elementQuery={`#${data.articleId}`} />\n\t\t\t\t\t<ProgressToggle\n\t\t\t\t\t\ttype=\"finished\"\n\t\t\t\t\t\texerciseNumber={data.exercise.exerciseNumber}\n\t\t\t\t\t\tclassName=\"h-14 border-t px-6\"\n\t\t\t\t\t/>\n\t\t\t\t\t<div className=\"flex h-16 justify-between border-b-4 border-t lg:border-b-0\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t{data.exerciseFinished ? (\n\t\t\t\t\t\t\t<EditFileOnGitHub\n\t\t\t\t\t\t\t\tfile={data.exerciseFinished.file}\n\t\t\t\t\t\t\t\trelativePath={data.exerciseFinished.relativePath}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t<NavChevrons prev={data.prevStepLink} next={data.nextStepLink} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Survey\n\t\t\t\t\texerciseFormEmbedUrl={data.exerciseFormEmbedUrl}\n\t\t\t\t\texerciseTitle={data.exercise.title}\n\t\t\t\t/>\n\t\t\t</main>\n\t\t</div>\n\t)\n}\n\nfunction Survey({\n\texerciseFormEmbedUrl,\n\texerciseTitle,\n}: {\n\texerciseFormEmbedUrl: string\n\texerciseTitle: string\n}) {\n\tconst [iframeLoaded, setIframeLoaded] = React.useState(false)\n\treturn (\n\t\t<div className=\"relative flex-shrink-0\">\n\t\t\t{!iframeLoaded ? (\n\t\t\t\t<div className=\"absolute inset-0 z-10 flex items-center justify-center\">\n\t\t\t\t\t<Loading>\n\t\t\t\t\t\t<span>Loading {exerciseTitle} Elaboration form</span>\n\t\t\t\t\t</Loading>\n\t\t\t\t</div>\n\t\t\t) : null}\n\t\t\t<iframe\n\t\t\t\tonLoad={() => setIframeLoaded(true)}\n\t\t\t\ttitle=\"Elaboration\"\n\t\t\t\tsrc={exerciseFormEmbedUrl}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t'absolute inset-0 flex h-full w-full transition-opacity duration-300',\n\t\t\t\t\tiframeLoaded ? 'opacity-100' : 'opacity-0',\n\t\t\t\t)}\n\t\t\t/>\n\t\t</div>\n\t)\n}\n"],"names":["meta","data","matches","title","number","exercise","exerciseNumber","toString","padStart","rootData","find","m","id","workshopTitle","mdxComponents","h1","ExerciseFinished","useLoaderData","className","children","jsxs","jsx","Link","to","articleId","finishedCode","EpicVideoInfoProvider","epicVideoInfosPromise","Mdx","code","components","ElementScrollRestoration","elementQuery","ProgressToggle","type","exerciseFinished","EditFileOnGitHub","file","relativePath","NavChevrons","prev","prevStepLink","next","nextStepLink","Survey","exerciseFormEmbedUrl","exerciseTitle","iframeLoaded","setIframeLoaded","React","Loading","onLoad","src","cn"],"mappings":"ykBAoCO,MAAMA,EAAiEA,CAAC,CAC9EC,KAAAA,EACAC,QAAAA,CACD,IAAM,OACL,GAAI,CAACD,EACJ,MAAO,CAAC,CAAEE,MAAO,YAAa,CAAC,EAE1B,MAAAC,EAASH,EAAKI,SAASC,eAAeC,WAAWC,SAAS,EAAG,GAAG,EAEhEC,GAAWP,EAAAA,EAAQQ,QAAUC,EAAEC,KAAO,MAAM,IAAjCV,YAAAA,EAAoCD,KAC9C,MAAA,CACN,CACCE,cAAeC,CAAM,KAAKH,EAAKI,SAASF,KAAW,MAAAM,GAAAA,YAAAA,EAAUI,aAAa,EAC3E,CAAA,CAEF,EA4FMC,EAAgB,CAAEC,GAAIA,IAAM,IAAK,EACvC,SAAwBC,GAAmB,CAC1C,MAAMf,EAAOgB,IACPX,EAAiBL,EAAKI,SAASC,eACnCC,WACAC,SAAS,EAAG,GAAG,EAEjB,aACE,MAAI,CAAAU,UAAU,0BACdC,SAACC,EAAA,KAAA,OAAA,CAAKF,UAAU,8EACfC,SAAA,CAACC,EAAA,KAAA,MAAA,CAAIF,UAAU,kEACdC,SAAA,CAACE,EAAA,IAAA,KAAA,CAAGH,UAAU,sEACbC,SAACE,EAAA,IAAA,MAAA,CAAIH,UAAU,gEACdC,SAAAC,EAAA,KAAC,MAAI,CAAAF,UAAU,0CACdC,SAAA,CAAAE,EAAA,IAACC,EAAK,CAAAC,GAAQ,IAAAjB,CAAkB,GAAAY,UAAU,kBACxCC,SAAA,GAAGb,CAAc,KAAKL,EAAKI,SAASF,KACtC,EAAA,CAAA,EACAkB,EAAA,IAAC,QAAKF,SAAC,GAAA,CAAA,EACPE,EAAA,IAAC,QAAKF,SAAW,aAAA,CAAA,CAAA,EAClB,EACD,CACD,CAAA,EAEAE,EAAA,IAAC,UAAA,CACAH,UAAU,+IACVN,GAAIX,EAAKuB,UAERL,SAAAlB,EAAKI,SAASoB,aACdJ,EAAAA,IAACK,EAAA,CACAC,sBAAuB1B,EAAK0B,sBAE5BR,SAAAE,EAAA,IAAC,MAAI,CAAAH,UAAU,sCACdC,SAAAE,EAAA,IAACO,EAAA,CACAC,KAAM5B,EAAKI,SAASoB,aACpBK,WAAYhB,EACb,EACD,CAAA,CACD,EAGA,iCAAA,CAEF,QACCiB,EAAyB,CAAAC,aAAkB,IAAA/B,EAAKuB,SAAa,EAAA,CAAA,EAC9DH,EAAA,IAACY,EAAA,CACAC,KAAK,WACL5B,eAAgBL,EAAKI,SAASC,eAC9BY,UAAU,oBAAA,CACX,EACAE,EAAA,KAAC,MAAI,CAAAF,UAAU,8DACdC,SAAA,CAAAE,EAAA,IAAC,MAAI,CAAA,CAAA,EACJpB,EAAKkC,iBACLd,EAAA,IAACe,EAAA,CACAC,KAAMpC,EAAKkC,iBAAiBE,KAC5BC,aAAcrC,EAAKkC,iBAAiBG,aACrC,EACG,WACHC,EAAY,CAAAC,KAAMvC,EAAKwC,aAAcC,KAAMzC,EAAK0C,YAAc,CAAA,CAAA,CAChE,CAAA,CAAA,CACD,CAAA,EACAtB,EAAA,IAACuB,EAAA,CACAC,qBAAsB5C,EAAK4C,qBAC3BC,cAAe7C,EAAKI,SAASF,KAAA,CAC9B,CAAA,EACD,CACD,CAAA,CAEF,CAEA,SAASyC,EAAO,CACfC,qBAAAA,EACAC,cAAAA,CACD,EAGG,CACF,KAAM,CAACC,EAAcC,CAAe,EAAIC,WAAe,EAAK,EAE3D,OAAA7B,EAAAA,KAAC,MAAI,CAAAF,UAAU,yBACbC,SAAA,CAAC4B,EAME,WALF,MAAI,CAAA7B,UAAU,yDACdC,SAACE,EAAA,IAAA6B,EAAA,CACA/B,gBAAC,OAAK,CAAAA,SAAA,CAAA,WAAS2B,EAAc,mBAAA,EAAiB,EAC/C,EACD,EAEDzB,EAAA,IAAC,SAAA,CACA8B,OAAQA,IAAMH,EAAgB,EAAI,EAClC7C,MAAM,cACNiD,IAAKP,EACL3B,UAAWmC,EACV,sEACAN,EAAe,cAAgB,WAChC,CAAA,CACD,CAAA,CACD,CAAA,CAEF"}
|