@epic-web/workshop-app 4.20.1 → 4.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/build/client/assets/{_-Dfo2h4rl.js → _-DbrWZazo.js} +2 -2
  2. package/build/client/assets/_-DbrWZazo.js.map +1 -0
  3. package/build/client/assets/_exerciseNumber-Cq0nozYz.js +2 -0
  4. package/build/client/assets/_exerciseNumber-Cq0nozYz.js.map +1 -0
  5. package/build/client/assets/{_exerciseNumber_._stepNumber-DpAxO0AM.js → _exerciseNumber_._stepNumber-B5pmJ29o.js} +2 -2
  6. package/build/client/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js.map +1 -0
  7. package/build/client/assets/{_exerciseNumber_.finished-czQBjiVF.js → _exerciseNumber_.finished-Q9qnPuZX.js} +2 -2
  8. package/build/client/assets/_exerciseNumber_.finished-Q9qnPuZX.js.map +1 -0
  9. package/build/client/assets/{_layout-IOROGN78.js → _layout-AgYGL72C.js} +2 -2
  10. package/build/client/assets/_layout-AgYGL72C.js.map +1 -0
  11. package/build/client/assets/_layout-BUs3av-e.js.map +1 -1
  12. package/build/client/assets/{_layout-BrGbNrqb.js → _layout-C8uU4Hwj.js} +2 -2
  13. package/build/client/assets/{_layout-BrGbNrqb.js.map → _layout-C8uU4Hwj.js.map} +1 -1
  14. package/build/client/assets/_layout-DLVrpOki.js +2 -0
  15. package/build/client/assets/_layout-DLVrpOki.js.map +1 -0
  16. package/build/client/assets/accordion-BroSqIct.js +2 -0
  17. package/build/client/assets/accordion-BroSqIct.js.map +1 -0
  18. package/build/client/assets/{account-CQNVYlpT.js → account-7o6O4ruO.js} +2 -2
  19. package/build/client/assets/{account-CQNVYlpT.js.map → account-7o6O4ruO.js.map} +1 -1
  20. package/build/client/assets/app-BiWJY58g.js +2 -0
  21. package/build/client/assets/app-BiWJY58g.js.map +1 -0
  22. package/build/client/assets/{button-DcWUKEqR.js → button-BklqyTPS.js} +2 -2
  23. package/build/client/assets/{button-DcWUKEqR.js.map → button-BklqyTPS.js.map} +1 -1
  24. package/build/client/assets/{client-hints-DWL_Mq1C.js → client-hints-DNUUFGmB.js} +2 -2
  25. package/build/client/assets/{client-hints-DWL_Mq1C.js.map → client-hints-DNUUFGmB.js.map} +1 -1
  26. package/build/client/assets/{components-C17zb3Us.js → components-CME-nGId.js} +2 -2
  27. package/build/client/assets/{components-C17zb3Us.js.map → components-CME-nGId.js.map} +1 -1
  28. package/build/client/assets/diff-CpFxuKA2.js +2 -0
  29. package/build/client/assets/diff-CpFxuKA2.js.map +1 -0
  30. package/build/client/assets/diff-Cw8ktQ1-.js +2 -0
  31. package/build/client/assets/{diff-DBQZWFaQ.js.map → diff-Cw8ktQ1-.js.map} +1 -1
  32. package/build/client/assets/discord-CHP4_JLJ.js +2 -0
  33. package/build/client/assets/discord-CHP4_JLJ.js.map +1 -0
  34. package/build/client/assets/{discord-CBGQw7I4.js → discord-Dq4e30wV.js} +2 -2
  35. package/build/client/assets/{discord-CBGQw7I4.js.map → discord-Dq4e30wV.js.map} +1 -1
  36. package/build/client/assets/{entry.client-C1yl0iQe.js → entry.client-3M2p-8I3.js} +2 -2
  37. package/build/client/assets/{entry.client-C1yl0iQe.js.map → entry.client-3M2p-8I3.js.map} +1 -1
  38. package/build/client/assets/{epic-video-DGVKtAan.js → epic-video-iluUs1-s.js} +2 -2
  39. package/build/client/assets/{epic-video-DGVKtAan.js.map → epic-video-iluUs1-s.js.map} +1 -1
  40. package/build/client/assets/{error-boundary-yAXgvsPR.js → error-boundary-DDTvdkB4.js} +2 -2
  41. package/build/client/assets/{error-boundary-yAXgvsPR.js.map → error-boundary-DDTvdkB4.js.map} +1 -1
  42. package/build/client/assets/{finished-DQ70NSmN.js → finished-Bm-bCUU2.js} +2 -2
  43. package/build/client/assets/{finished-DQ70NSmN.js.map → finished-Bm-bCUU2.js.map} +1 -1
  44. package/build/client/assets/{index-B9w5akmN.js → index-B-hHvmeV.js} +2 -2
  45. package/build/client/assets/{index-B9w5akmN.js.map → index-B-hHvmeV.js.map} +1 -1
  46. package/build/client/assets/{index-Dc-1lfub.js → index-BATSX33w.js} +2 -2
  47. package/build/client/assets/{index-Dc-1lfub.js.map → index-BATSX33w.js.map} +1 -1
  48. package/build/client/assets/{index-DC4pM5aW.js → index-BXWoOGxB.js} +4 -4
  49. package/build/client/assets/{index-DC4pM5aW.js.map → index-BXWoOGxB.js.map} +1 -1
  50. package/build/client/assets/index-Dm1ll1kT.js +2 -0
  51. package/build/client/assets/index-Dm1ll1kT.js.map +1 -0
  52. package/build/client/assets/{index-yQg0GLtS.js → index-Tfdnz1AB.js} +2 -2
  53. package/build/client/assets/{index-yQg0GLtS.js.map → index-Tfdnz1AB.js.map} +1 -1
  54. package/build/client/assets/index-hogig2HK.js +2 -0
  55. package/build/client/assets/index-hogig2HK.js.map +1 -0
  56. package/build/client/assets/{loading-C4Cc1EBG.js → loading-C5uX0jJw.js} +2 -2
  57. package/build/client/assets/{loading-C4Cc1EBG.js.map → loading-C5uX0jJw.js.map} +1 -1
  58. package/build/client/assets/{login-Bimq6Ilz.js → login-4cvVFzF8.js} +2 -2
  59. package/build/client/assets/{login-Bimq6Ilz.js.map → login-4cvVFzF8.js.map} +1 -1
  60. package/build/client/assets/manifest-746b2907.js +1 -0
  61. package/build/client/assets/{mdx-Cb7iYGhg.js → mdx-M0kcP-mP.js} +2 -2
  62. package/build/client/assets/{mdx-Cb7iYGhg.js.map → mdx-M0kcP-mP.js.map} +1 -1
  63. package/build/client/assets/{misc-Bt-_bj1O.js → misc-ENVX3CWf.js} +2 -2
  64. package/build/client/assets/{misc-Bt-_bj1O.js.map → misc-ENVX3CWf.js.map} +1 -1
  65. package/build/client/assets/{nav-chevrons-DIhkJv4W.js → nav-chevrons-B82nbdyj.js} +2 -2
  66. package/build/client/assets/{nav-chevrons-DIhkJv4W.js.map → nav-chevrons-B82nbdyj.js.map} +1 -1
  67. package/build/client/assets/{onboarding-CU7IWhDE.js → onboarding-Bib-wh6d.js} +2 -2
  68. package/build/client/assets/{onboarding-CU7IWhDE.js.map → onboarding-Bib-wh6d.js.map} +1 -1
  69. package/build/client/assets/presence-Cr--lRCr.js +28 -0
  70. package/build/client/assets/{presence-DgSzsRAv.js.map → presence-Cr--lRCr.js.map} +1 -1
  71. package/build/client/assets/preview-CqrRe2BV.js +2 -0
  72. package/build/client/assets/preview-CqrRe2BV.js.map +1 -0
  73. package/build/client/assets/{progress-C1WSMZl4.js → progress-BsY6hGPp.js} +2 -2
  74. package/build/client/assets/{progress-C1WSMZl4.js.map → progress-BsY6hGPp.js.map} +1 -1
  75. package/build/client/assets/{progress-bar-DMef_aq8.js → progress-bar-CSvo1ZXP.js} +2 -2
  76. package/build/client/assets/{progress-bar-DMef_aq8.js.map → progress-bar-CSvo1ZXP.js.map} +1 -1
  77. package/build/client/assets/{request-info-DU15ezmn.js → request-info-CEhUGODY.js} +2 -2
  78. package/build/client/assets/{request-info-DU15ezmn.js.map → request-info-CEhUGODY.js.map} +1 -1
  79. package/build/client/assets/{root-CX2PgcP9.js → root-Tcnfz99O.js} +3 -3
  80. package/build/client/assets/{root-CX2PgcP9.js.map → root-Tcnfz99O.js.map} +1 -1
  81. package/build/client/assets/set-playground-Cdy8VlVD.js +2 -0
  82. package/build/client/assets/set-playground-Cdy8VlVD.js.map +1 -0
  83. package/build/client/assets/{support-D6UIcaNu.js → support-hcqGIpir.js} +2 -2
  84. package/build/client/assets/{support-D6UIcaNu.js.map → support-hcqGIpir.js.map} +1 -1
  85. package/build/client/assets/tailwind-DTowOebn.css +1 -0
  86. package/build/client/assets/test-D9HsTvpe.js +2 -0
  87. package/build/client/assets/test-D9HsTvpe.js.map +1 -0
  88. package/build/client/assets/tests-CmNNBElK.js +4 -0
  89. package/build/client/assets/tests-CmNNBElK.js.map +1 -0
  90. package/build/client/assets/{tooltip-Cqh5cQvd.js → tooltip-BiHTe_7F.js} +2 -2
  91. package/build/client/assets/{tooltip-Cqh5cQvd.js.map → tooltip-BiHTe_7F.js.map} +1 -1
  92. package/build/client/assets/{user-MNzkRgJ3.js → user-D6tTg1yS.js} +2 -2
  93. package/build/client/assets/{user-MNzkRgJ3.js.map → user-D6tTg1yS.js.map} +1 -1
  94. package/build/client/icons.svg +1 -1
  95. package/build/server/index.js +6144 -5873
  96. package/build/server/index.js.map +1 -1
  97. package/package.json +3 -3
  98. package/build/client/assets/_-Dfo2h4rl.js.map +0 -1
  99. package/build/client/assets/_exerciseNumber-CfKoF9W0.js +0 -2
  100. package/build/client/assets/_exerciseNumber-CfKoF9W0.js.map +0 -1
  101. package/build/client/assets/_exerciseNumber_._stepNumber-DpAxO0AM.js.map +0 -1
  102. package/build/client/assets/_exerciseNumber_.finished-czQBjiVF.js.map +0 -1
  103. package/build/client/assets/_layout-DBCEqk3b.js +0 -4
  104. package/build/client/assets/_layout-DBCEqk3b.js.map +0 -1
  105. package/build/client/assets/_layout-IOROGN78.js.map +0 -1
  106. package/build/client/assets/diff-CCCucBoq.js +0 -2
  107. package/build/client/assets/diff-CCCucBoq.js.map +0 -1
  108. package/build/client/assets/diff-DBQZWFaQ.js +0 -2
  109. package/build/client/assets/discord-CULpXzAC.js +0 -2
  110. package/build/client/assets/discord-CULpXzAC.js.map +0 -1
  111. package/build/client/assets/manifest-8371b608.js +0 -1
  112. package/build/client/assets/presence-DgSzsRAv.js +0 -28
  113. package/build/client/assets/tailwind-BZciDTNv.css +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-hogig2HK.js","sources":["../../../../../node_modules/@radix-ui/number/dist/index.mjs","../../../../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../../../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../../../../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../../../../node_modules/@radix-ui/react-select/dist/index.mjs"],"sourcesContent":["// packages/core/number/src/number.ts\nfunction clamp(value, [min, max]) {\n return Math.min(max, Math.max(min, value));\n}\nexport {\n clamp\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/collection/src/Collection.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(Slot, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(Slot, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\nexport {\n createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/Direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-previous/src/usePrevious.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/select/src/Select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open = false, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? Boolean(trigger.closest(\"form\")) : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n BubbleSelect,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = () => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false) {\n handleOpen();\n context.triggerPointerDownPosRef.current = {\n x: Math.round(event.pageX),\n y: Math.round(event.pageY)\n };\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [CONTENT_MARGIN, rightEdge - contentWidth]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [CONTENT_MARGIN, leftEdge - contentWidth]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n overflow: \"auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, handleSelect),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n if (disabled) {\n contentContext.onItemLeave?.();\n } else {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nvar BubbleSelect = React.forwardRef(\n (props, forwardedRef) => {\n const { value, ...selectProps } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(VisuallyHidden, { asChild: true, children: /* @__PURE__ */ jsx(\"select\", { ...selectProps, ref: composedRefs, defaultValue: value }) });\n }\n);\nBubbleSelect.displayName = \"BubbleSelect\";\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"names":["clamp","value","min","max","createCollection","name","PROVIDER_NAME","createCollectionContext","createCollectionScope","createContextScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","props","scope","children","ref","React","itemMap","jsx","COLLECTION_SLOT_NAME","CollectionSlot","forwardedRef","context","composedRefs","useComposedRefs","Slot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","a","b","DirectionContext","React.createContext","useDirection","localDir","globalDir","React.useContext","usePrevious","React.useRef","React.useMemo","OPEN_KEYS","SELECTION_KEYS","SELECT_NAME","Collection","createSelectContext","createSelectScope","createPopperScope","usePopperScope","SelectProvider","useSelectContext","SelectNativeOptionsProvider","useSelectNativeOptionsContext","Select","__scopeSelect","openProp","defaultOpen","onOpenChange","valueProp","defaultValue","onValueChange","dir","autoComplete","disabled","required","popperScope","trigger","setTrigger","React.useState","valueNode","setValueNode","valueNodeHasChildren","setValueNodeHasChildren","direction","open","setOpen","useControllableState","setValue","triggerPointerDownPosRef","isFormControl","nativeOptionsSet","setNativeOptionsSet","nativeSelectKey","option","PopperPrimitive.Root","jsxs","useId","React.useCallback","prev","optionsSet","BubbleSelect","event","TRIGGER_NAME","SelectTrigger","React.forwardRef","triggerProps","isDisabled","getItems","searchRef","handleTypeaheadSearch","resetTypeahead","useTypeaheadSearch","search","enabledItems","item","currentItem","nextItem","findNextItem","handleOpen","PopperPrimitive.Anchor","Primitive","shouldShowPlaceholder","composeEventHandlers","target","isTypingAhead","VALUE_NAME","SelectValue","className","style","placeholder","valueProps","onValueNodeHasChildrenChange","hasChildren","useLayoutEffect","Fragment","ICON_NAME","SelectIcon","iconProps","PORTAL_NAME","SelectPortal","PortalPrimitive","CONTENT_NAME","SelectContent","fragment","setFragment","frag","ReactDOM.createPortal","SelectContentProvider","SelectContentImpl","CONTENT_MARGIN","useSelectContentContext","CONTENT_IMPL_NAME","position","onCloseAutoFocus","onEscapeKeyDown","onPointerDownOutside","side","sideOffset","align","alignOffset","arrowPadding","collisionBoundary","collisionPadding","sticky","hideWhenDetached","avoidCollisions","contentProps","content","setContent","viewport","setViewport","node","selectedItem","setSelectedItem","selectedItemText","setSelectedItemText","isPositioned","setIsPositioned","firstValidItemFoundRef","React.useEffect","hideOthers","useFocusGuards","focusFirst","candidates","firstItem","restItems","lastItem","PREVIOUSLY_FOCUSED_ELEMENT","candidate","focusSelectedItem","pointerMoveDelta","handlePointerMove","_a","_b","handlePointerUp","close","itemRefCallback","isFirstValidItem","handleItemLeave","itemTextRefCallback","SelectPosition","SelectPopperPosition","SelectItemAlignedPosition","popperContentProps","RemoveScroll","FocusScope","DismissableLayer","isModifierKey","candidateNodes","currentElement","currentIndex","ITEM_ALIGNED_POSITION_NAME","onPlaced","popperProps","contentContext","contentWrapper","setContentWrapper","shouldExpandOnScrollRef","shouldRepositionRef","triggerRect","contentRect","valueNodeRect","itemTextRect","itemTextOffset","left","leftDelta","minContentWidth","contentWidth","rightEdge","clampedLeft","right","rightDelta","leftEdge","clampedRight","items","availableHeight","itemsHeight","contentStyles","contentBorderTopWidth","contentPaddingTop","contentBorderBottomWidth","contentPaddingBottom","fullContentHeight","minContentHeight","viewportStyles","viewportPaddingTop","viewportPaddingBottom","topEdgeToTriggerMiddle","triggerMiddleToBottomEdge","selectedItemHalfHeight","itemOffsetMiddle","contentTopToItemMiddle","itemMiddleToContentBottom","isLastItem","viewportOffsetBottom","clampedTriggerMiddleToBottomEdge","height","isFirstItem","contentZIndex","setContentZIndex","handleScrollButtonChange","SelectViewportProvider","POPPER_POSITION_NAME","PopperPrimitive.Content","useSelectViewportContext","VIEWPORT_NAME","SelectViewport","nonce","viewportProps","viewportContext","prevScrollTopRef","scrolledBy","cssMinHeight","cssHeight","prevHeight","nextHeight","clampedNextHeight","heightDiff","GROUP_NAME","SelectGroupContextProvider","useSelectGroupContext","SelectGroup","groupProps","groupId","LABEL_NAME","SelectLabel","labelProps","groupContext","ITEM_NAME","SelectItemContextProvider","useSelectItemContext","SelectItem","textValueProp","itemProps","isSelected","textValue","setTextValue","isFocused","setIsFocused","textId","handleSelect","prevTextValue","ITEM_TEXT_NAME","SelectItemText","itemTextProps","itemContext","nativeOptionsContext","itemTextNode","setItemTextNode","textContent","nativeOption","onNativeOptionAdd","onNativeOptionRemove","ITEM_INDICATOR_NAME","SelectItemIndicator","itemIndicatorProps","SCROLL_UP_BUTTON_NAME","SelectScrollUpButton","canScrollUp","setCanScrollUp","handleScroll2","canScrollUp2","SelectScrollButtonImpl","SCROLL_DOWN_BUTTON_NAME","SelectScrollDownButton","canScrollDown","setCanScrollDown","maxScroll","canScrollDown2","onAutoScroll","scrollIndicatorProps","autoScrollTimerRef","clearAutoScrollTimer","activeItem","SEPARATOR_NAME","SelectSeparator","separatorProps","ARROW_NAME","SelectArrow","arrowProps","PopperPrimitive.Arrow","selectProps","prevValue","select","selectProto","VisuallyHidden","onSearchChange","handleSearchChange","useCallbackRef","timerRef","key","updateSearch","normalizedSearch","char","currentItemIndex","wrappedItems","wrapArray","v","array","startIndex","_","index","Root2","Trigger","Value","Icon","Portal","Content2","Viewport","Group","Label","Item","ItemText","ItemIndicator","ScrollUpButton","ScrollDownButton"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}
@@ -1,2 +1,2 @@
1
- import{j as r,r as n}from"./index-1cKOJFpX.js";import{u as d}from"./client-hints-DWL_Mq1C.js";function x({children:t="Loading"}){const{reducedMotion:e}=d();return e==="reduce"?r.jsx("div",{className:"animate-pulse",children:t}):r.jsxs("div",{className:"flex items-center gap-2 font-mono text-sm font-medium uppercase",role:"status",children:[r.jsx("div",{"aria-hidden":"true",children:r.jsx(u,{})}),t,r.jsx("div",{"aria-hidden":"true",children:r.jsx(u,{})})]})}const o="█<▓█ ▒░/▒░ █░>▒▓/ █▒▒ ▓▒▓/█<░▒ ▓/░>",i=()=>o[Math.floor(Math.random()*o.length)];function u(){const[t,e]=n.useState(o[0]),[s,c]=n.useState(o[1]);return f(()=>{e(i()),c(i())},80),r.jsxs("span",{children:[t,s]})}function f(t,e=1e3){const s=n.useRef(null);n.useEffect(()=>{s.current=t},[t]),n.useEffect(()=>{function c(){var a;(a=s.current)==null||a.call(s)}if(e!==null){const a=setInterval(c,e);return()=>clearInterval(a)}},[e])}export{x as L};
2
- //# sourceMappingURL=loading-C4Cc1EBG.js.map
1
+ import{j as r,r as n}from"./index-1cKOJFpX.js";import{u as d}from"./client-hints-DNUUFGmB.js";function x({children:t="Loading"}){const{reducedMotion:e}=d();return e==="reduce"?r.jsx("div",{className:"animate-pulse",children:t}):r.jsxs("div",{className:"flex items-center gap-2 font-mono text-sm font-medium uppercase",role:"status",children:[r.jsx("div",{"aria-hidden":"true",children:r.jsx(u,{})}),t,r.jsx("div",{"aria-hidden":"true",children:r.jsx(u,{})})]})}const o="█<▓█ ▒░/▒░ █░>▒▓/ █▒▒ ▓▒▓/█<░▒ ▓/░>",i=()=>o[Math.floor(Math.random()*o.length)];function u(){const[t,e]=n.useState(o[0]),[s,c]=n.useState(o[1]);return f(()=>{e(i()),c(i())},80),r.jsxs("span",{children:[t,s]})}function f(t,e=1e3){const s=n.useRef(null);n.useEffect(()=>{s.current=t},[t]),n.useEffect(()=>{function c(){var a;(a=s.current)==null||a.call(s)}if(e!==null){const a=setInterval(c,e);return()=>clearInterval(a)}},[e])}export{x as L};
2
+ //# sourceMappingURL=loading-C5uX0jJw.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loading-C4Cc1EBG.js","sources":["../../../app/components/loading.tsx"],"sourcesContent":["// originally this was based on baffle-react, but it was unnecessarily bloated\n// and very out-dated. I've replaced it with a simple Characters component that\n// does the same thing we were using baffle-react for\nimport { useEffect, useRef, useState } from 'react'\nimport { useHints } from '#app/utils/client-hints.tsx'\n\nexport function Loading({\n\tchildren = 'Loading',\n}: {\n\tchildren?: React.ReactNode\n}) {\n\tconst { reducedMotion } = useHints()\n\tif (reducedMotion === 'reduce') {\n\t\treturn <div className=\"animate-pulse\">{children}</div>\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex items-center gap-2 font-mono text-sm font-medium uppercase\"\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t<Characters />\n\t\t\t</div>\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t<Characters />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst characters = '█<▓█ ▒░/▒░ █░>▒▓/ █▒▒ ▓▒▓/█<░▒ ▓/░>'\nconst randomCharacter = () =>\n\tcharacters[Math.floor(Math.random() * characters.length)]\nexport function Characters() {\n\tconst [char1, setChar1] = useState(characters[0])\n\tconst [char2, setChar2] = useState(characters[1])\n\n\tuseInterval(() => {\n\t\tsetChar1(randomCharacter())\n\t\tsetChar2(randomCharacter())\n\t}, 80)\n\n\treturn (\n\t\t<span>\n\t\t\t{char1}\n\t\t\t{char2}\n\t\t</span>\n\t)\n}\n\nfunction useInterval(callback: () => void, delay: number | null = 1000) {\n\tconst savedCallback = useRef<() => void>(null)\n\n\t// Remember the latest function.\n\tuseEffect(() => {\n\t\tsavedCallback.current = callback\n\t}, [callback])\n\n\t// Set up the interval.\n\tuseEffect(() => {\n\t\tfunction tick() {\n\t\t\tsavedCallback.current?.()\n\t\t}\n\t\tif (delay !== null) {\n\t\t\tconst id = setInterval(tick, delay)\n\t\t\treturn () => clearInterval(id)\n\t\t}\n\t}, [delay])\n}\n"],"names":["Loading","children","reducedMotion","useHints","jsx","jsxs","Characters","characters","randomCharacter","char1","setChar1","useState","char2","setChar2","useInterval","callback","delay","savedCallback","useRef","useEffect","tick","_a","id"],"mappings":"8FAMO,SAASA,EAAQ,CACvB,SAAAC,EAAW,SACZ,EAEG,CACI,KAAA,CAAE,cAAAC,GAAkBC,IAC1B,OAAID,IAAkB,SACbE,EAAAA,IAAA,MAAA,CAAI,UAAU,gBAAiB,SAAAH,CAAS,CAAA,EAIhDI,EAAA,KAAC,MAAA,CACA,UAAU,kEACV,KAAK,SAEL,SAAA,CAAAD,MAAC,MAAI,CAAA,cAAY,OAChB,SAAAA,MAACE,GAAW,CAAA,EACb,EACCL,QACA,MAAI,CAAA,cAAY,OAChB,SAAAG,MAACE,GAAW,CAAA,EACb,CAAA,CAAA,CAAA,CAGH,CAEA,MAAMC,EAAa,sCACbC,EAAkB,IACvBD,EAAW,KAAK,MAAM,KAAK,SAAWA,EAAW,MAAM,CAAC,EAClD,SAASD,GAAa,CAC5B,KAAM,CAACG,EAAOC,CAAQ,EAAIC,EAAS,SAAAJ,EAAW,CAAC,CAAC,EAC1C,CAACK,EAAOC,CAAQ,EAAIF,EAAS,SAAAJ,EAAW,CAAC,CAAC,EAEhD,OAAAO,EAAY,IAAM,CACjBJ,EAASF,GAAiB,EAC1BK,EAASL,GAAiB,GACxB,EAAE,SAGH,OACC,CAAA,SAAA,CAAAC,EACAG,CACF,CAAA,CAAA,CAEF,CAEA,SAASE,EAAYC,EAAsBC,EAAuB,IAAM,CACjE,MAAAC,EAAgBC,SAAmB,IAAI,EAG7CC,EAAAA,UAAU,IAAM,CACfF,EAAc,QAAUF,CAAA,EACtB,CAACA,CAAQ,CAAC,EAGbI,EAAAA,UAAU,IAAM,CACf,SAASC,GAAO,QACfC,EAAAJ,EAAc,UAAd,MAAAI,EAAA,KAAAJ,EACD,CACA,GAAID,IAAU,KAAM,CACb,MAAAM,EAAK,YAAYF,EAAMJ,CAAK,EAC3B,MAAA,IAAM,cAAcM,CAAE,CAC9B,CAAA,EACE,CAACN,CAAK,CAAC,CACX"}
1
+ {"version":3,"file":"loading-C5uX0jJw.js","sources":["../../../app/components/loading.tsx"],"sourcesContent":["// originally this was based on baffle-react, but it was unnecessarily bloated\n// and very out-dated. I've replaced it with a simple Characters component that\n// does the same thing we were using baffle-react for\nimport { useEffect, useRef, useState } from 'react'\nimport { useHints } from '#app/utils/client-hints.tsx'\n\nexport function Loading({\n\tchildren = 'Loading',\n}: {\n\tchildren?: React.ReactNode\n}) {\n\tconst { reducedMotion } = useHints()\n\tif (reducedMotion === 'reduce') {\n\t\treturn <div className=\"animate-pulse\">{children}</div>\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName=\"flex items-center gap-2 font-mono text-sm font-medium uppercase\"\n\t\t\trole=\"status\"\n\t\t>\n\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t<Characters />\n\t\t\t</div>\n\t\t\t{children}\n\t\t\t<div aria-hidden=\"true\">\n\t\t\t\t<Characters />\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\nconst characters = '█<▓█ ▒░/▒░ █░>▒▓/ █▒▒ ▓▒▓/█<░▒ ▓/░>'\nconst randomCharacter = () =>\n\tcharacters[Math.floor(Math.random() * characters.length)]\nexport function Characters() {\n\tconst [char1, setChar1] = useState(characters[0])\n\tconst [char2, setChar2] = useState(characters[1])\n\n\tuseInterval(() => {\n\t\tsetChar1(randomCharacter())\n\t\tsetChar2(randomCharacter())\n\t}, 80)\n\n\treturn (\n\t\t<span>\n\t\t\t{char1}\n\t\t\t{char2}\n\t\t</span>\n\t)\n}\n\nfunction useInterval(callback: () => void, delay: number | null = 1000) {\n\tconst savedCallback = useRef<() => void>(null)\n\n\t// Remember the latest function.\n\tuseEffect(() => {\n\t\tsavedCallback.current = callback\n\t}, [callback])\n\n\t// Set up the interval.\n\tuseEffect(() => {\n\t\tfunction tick() {\n\t\t\tsavedCallback.current?.()\n\t\t}\n\t\tif (delay !== null) {\n\t\t\tconst id = setInterval(tick, delay)\n\t\t\treturn () => clearInterval(id)\n\t\t}\n\t}, [delay])\n}\n"],"names":["Loading","children","reducedMotion","useHints","jsx","jsxs","Characters","characters","randomCharacter","char1","setChar1","useState","char2","setChar2","useInterval","callback","delay","savedCallback","useRef","useEffect","tick","_a","id"],"mappings":"8FAMO,SAASA,EAAQ,CACvB,SAAAC,EAAW,SACZ,EAEG,CACI,KAAA,CAAE,cAAAC,GAAkBC,IAC1B,OAAID,IAAkB,SACbE,EAAAA,IAAA,MAAA,CAAI,UAAU,gBAAiB,SAAAH,CAAS,CAAA,EAIhDI,EAAA,KAAC,MAAA,CACA,UAAU,kEACV,KAAK,SAEL,SAAA,CAAAD,MAAC,MAAI,CAAA,cAAY,OAChB,SAAAA,MAACE,GAAW,CAAA,EACb,EACCL,QACA,MAAI,CAAA,cAAY,OAChB,SAAAG,MAACE,GAAW,CAAA,EACb,CAAA,CAAA,CAAA,CAGH,CAEA,MAAMC,EAAa,sCACbC,EAAkB,IACvBD,EAAW,KAAK,MAAM,KAAK,SAAWA,EAAW,MAAM,CAAC,EAClD,SAASD,GAAa,CAC5B,KAAM,CAACG,EAAOC,CAAQ,EAAIC,EAAS,SAAAJ,EAAW,CAAC,CAAC,EAC1C,CAACK,EAAOC,CAAQ,EAAIF,EAAS,SAAAJ,EAAW,CAAC,CAAC,EAEhD,OAAAO,EAAY,IAAM,CACjBJ,EAASF,GAAiB,EAC1BK,EAASL,GAAiB,GACxB,EAAE,SAGH,OACC,CAAA,SAAA,CAAAC,EACAG,CACF,CAAA,CAAA,CAEF,CAEA,SAASE,EAAYC,EAAsBC,EAAuB,IAAM,CACjE,MAAAC,EAAgBC,SAAmB,IAAI,EAG7CC,EAAAA,UAAU,IAAM,CACfF,EAAc,QAAUF,CAAA,EACtB,CAACA,CAAQ,CAAC,EAGbI,EAAAA,UAAU,IAAM,CACf,SAASC,GAAO,QACfC,EAAAJ,EAAc,UAAd,MAAAI,EAAA,KAAAJ,EACD,CACA,GAAID,IAAU,KAAM,CACb,MAAAM,EAAK,YAAYF,EAAMJ,CAAK,EAC3B,MAAA,IAAM,cAAcM,CAAE,CAC9B,CAAA,EACE,CAACN,CAAK,CAAC,CACX"}
@@ -1,2 +1,2 @@
1
- import{r as i,d as h,e as C,j as e}from"./index-1cKOJFpX.js";import{u as j}from"./use-event-source-A_0lEOPX.js";import{a as g,B as v}from"./button-DcWUKEqR.js";import{L as R}from"./loading-C4Cc1EBG.js";import{z as t}from"./request-info-DU15ezmn.js";import{a as L}from"./components-C17zb3Us.js";import"./clsx-B-dksMZM.js";import"./client-hints-DWL_Mq1C.js";const r={USER_CODE_RECEIVED:"USER_CODE_RECEIVED",AUTH_RESOLVED:"AUTH_RESOLVED",AUTH_REJECTED:"AUTH_REJECTED"},S=t.object({type:t.literal(r.USER_CODE_RECEIVED),code:t.string(),url:t.string()}),b=t.object({type:t.literal(r.AUTH_RESOLVED)}),w=t.object({type:t.literal(r.AUTH_REJECTED),error:t.string().optional().default("Unknown error")}),y=t.union([S,b,w]),F={getSitemapEntries:()=>null};function H(){var x;const s=L(),[u,E]=i.useState(!1),[o,m]=i.useState(null),[l,f]=i.useState(null),c=h(),d=C(),n=j("/login-sse");return i.useEffect(()=>{if(!n)return;const p=JSON.parse(n),a=y.safeParse(p);if(!a.success){console.error(a.error.flatten());return}switch(a.data.type){case r.USER_CODE_RECEIVED:{f(a.data);break}case r.AUTH_RESOLVED:{d.revalidate(),c("/");break}case r.AUTH_REJECTED:{m(a.data.error);break}}},[n,c,d]),e.jsx("main",{className:"flex h-full w-full flex-grow flex-col items-center justify-center p-10 text-center",children:e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx(_,{className:"h-16 w-16"}),e.jsx("h1",{className:"pt-5 text-2xl font-semibold md:text-3xl",children:"Authenticate with EpicWeb.dev"}),e.jsx("h2",{className:"max-w-sm pt-3 text-base text-gray-700 dark:text-gray-300",children:"If you have purchased Epic Web, you'll be able to watch videos, track progress, and more!"}),e.jsxs("div",{className:"flex w-full flex-col items-center pt-5",children:[l?e.jsxs("div",{className:"flex w-full flex-col items-center gap-3",children:[e.jsxs("div",{className:"my-2 flex w-full flex-col items-center gap-2",children:[e.jsx("p",{className:"text-lg",children:"Your verification code is: "}),e.jsx("div",{className:"mb-3 w-full bg-gray-100 px-5 py-3 text-lg font-bold dark:bg-black/40",children:e.jsx("code",{children:l.code})})]}),e.jsx(g,{varient:"primary",to:l.url,target:"_blank",rel:"noreferrer",onClick:()=>E(!0),children:"Continue"}),u?e.jsx("div",{className:"pt-5 opacity-60",children:e.jsx(R,{children:"Waiting for confirmation"})}):null]}):e.jsx(s.Form,{method:"POST",children:e.jsx(v,{varient:"primary",type:"submit",children:s.state==="idle"&&((x=s.data)==null?void 0:x.status)!=="pending"?"Retrieve Code":"Retrieving Code..."})}),o?e.jsxs("div",{className:"mt-4 text-red-500",children:["There was an error: ",e.jsx("pre",{children:o})]}):null]})]})})}function _({className:s=""}){return e.jsxs("svg",{className:s,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[e.jsx("path",{d:"M12.438 11.5677C12.0131 11.8026 11.5249 12.0534 10.9784 12.3047C8.80704 13.3031 5.70429 14.314 1.986 14.3555L1.55773 14.3603L1.48003 13.9391C1.36509 13.316 1.29793 12.6714 1.29793 12.006C1.29793 6.10441 6.09863 1.30372 12.0002 1.30372C13.6287 1.30372 15.1745 1.66961 16.5585 2.32369L17.9801 1.59897C16.2189 0.582162 14.1769 0 12.0002 0C5.38709 0 0 5.38709 0 12.0002C0 14.6402 0.858474 17.0847 2.31072 19.0692C4.79741 18.6457 6.35749 17.6495 6.35749 17.6495C6.35749 17.6495 5.36137 19.2075 4.93785 21.6946C6.92114 23.1439 9.36321 24.0005 12.0002 24.0005C18.6134 24.0005 24.0005 18.6134 24.0005 12.0002C24.0005 9.82732 23.4199 7.78762 22.4053 6.02738L21.6818 7.44613C22.3364 8.83057 22.7025 10.3769 22.7025 12.006C22.7025 17.9076 17.9018 22.7083 12.0002 22.7083C11.3345 22.7083 10.6959 22.6411 10.0681 22.5264L9.646 22.4493L9.65079 22.0203C9.6923 18.2991 10.7031 15.1964 11.7016 13.0257C11.9527 12.4797 12.2033 11.9921 12.438 11.5677Z",fill:"url(#epicGradient)"}),e.jsx("path",{d:"M18.2525 9.31052L15.4992 8.50683L14.6953 5.74778L23.8291 0.171387L18.2525 9.31052Z",fill:"currentColor"}),e.jsx("defs",{children:e.jsxs("linearGradient",{id:"epicGradient",x1:"16.9703",y1:"7.03022",x2:"7.05798",y2:"16.948",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{stopColor:"#4F75FF"}),e.jsx("stop",{offset:"1",stopColor:"#30AFFF"})]})})]})}export{H as default,F as handle};
2
- //# sourceMappingURL=login-Bimq6Ilz.js.map
1
+ import{r as i,d as h,e as C,j as e}from"./index-1cKOJFpX.js";import{u as j}from"./use-event-source-A_0lEOPX.js";import{a as g,B as v}from"./button-BklqyTPS.js";import{L as R}from"./loading-C5uX0jJw.js";import{z as t}from"./request-info-CEhUGODY.js";import{a as L}from"./components-CME-nGId.js";import"./clsx-B-dksMZM.js";import"./client-hints-DNUUFGmB.js";const r={USER_CODE_RECEIVED:"USER_CODE_RECEIVED",AUTH_RESOLVED:"AUTH_RESOLVED",AUTH_REJECTED:"AUTH_REJECTED"},S=t.object({type:t.literal(r.USER_CODE_RECEIVED),code:t.string(),url:t.string()}),b=t.object({type:t.literal(r.AUTH_RESOLVED)}),w=t.object({type:t.literal(r.AUTH_REJECTED),error:t.string().optional().default("Unknown error")}),y=t.union([S,b,w]),F={getSitemapEntries:()=>null};function H(){var x;const s=L(),[u,E]=i.useState(!1),[o,m]=i.useState(null),[l,f]=i.useState(null),c=h(),d=C(),n=j("/login-sse");return i.useEffect(()=>{if(!n)return;const p=JSON.parse(n),a=y.safeParse(p);if(!a.success){console.error(a.error.flatten());return}switch(a.data.type){case r.USER_CODE_RECEIVED:{f(a.data);break}case r.AUTH_RESOLVED:{d.revalidate(),c("/");break}case r.AUTH_REJECTED:{m(a.data.error);break}}},[n,c,d]),e.jsx("main",{className:"flex h-full w-full flex-grow flex-col items-center justify-center p-10 text-center",children:e.jsxs("div",{className:"flex flex-col items-center",children:[e.jsx(_,{className:"h-16 w-16"}),e.jsx("h1",{className:"pt-5 text-2xl font-semibold md:text-3xl",children:"Authenticate with EpicWeb.dev"}),e.jsx("h2",{className:"max-w-sm pt-3 text-base text-gray-700 dark:text-gray-300",children:"If you have purchased Epic Web, you'll be able to watch videos, track progress, and more!"}),e.jsxs("div",{className:"flex w-full flex-col items-center pt-5",children:[l?e.jsxs("div",{className:"flex w-full flex-col items-center gap-3",children:[e.jsxs("div",{className:"my-2 flex w-full flex-col items-center gap-2",children:[e.jsx("p",{className:"text-lg",children:"Your verification code is: "}),e.jsx("div",{className:"mb-3 w-full bg-gray-100 px-5 py-3 text-lg font-bold dark:bg-black/40",children:e.jsx("code",{children:l.code})})]}),e.jsx(g,{varient:"primary",to:l.url,target:"_blank",rel:"noreferrer",onClick:()=>E(!0),children:"Continue"}),u?e.jsx("div",{className:"pt-5 opacity-60",children:e.jsx(R,{children:"Waiting for confirmation"})}):null]}):e.jsx(s.Form,{method:"POST",children:e.jsx(v,{varient:"primary",type:"submit",children:s.state==="idle"&&((x=s.data)==null?void 0:x.status)!=="pending"?"Retrieve Code":"Retrieving Code..."})}),o?e.jsxs("div",{className:"mt-4 text-red-500",children:["There was an error: ",e.jsx("pre",{children:o})]}):null]})]})})}function _({className:s=""}){return e.jsxs("svg",{className:s,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[e.jsx("path",{d:"M12.438 11.5677C12.0131 11.8026 11.5249 12.0534 10.9784 12.3047C8.80704 13.3031 5.70429 14.314 1.986 14.3555L1.55773 14.3603L1.48003 13.9391C1.36509 13.316 1.29793 12.6714 1.29793 12.006C1.29793 6.10441 6.09863 1.30372 12.0002 1.30372C13.6287 1.30372 15.1745 1.66961 16.5585 2.32369L17.9801 1.59897C16.2189 0.582162 14.1769 0 12.0002 0C5.38709 0 0 5.38709 0 12.0002C0 14.6402 0.858474 17.0847 2.31072 19.0692C4.79741 18.6457 6.35749 17.6495 6.35749 17.6495C6.35749 17.6495 5.36137 19.2075 4.93785 21.6946C6.92114 23.1439 9.36321 24.0005 12.0002 24.0005C18.6134 24.0005 24.0005 18.6134 24.0005 12.0002C24.0005 9.82732 23.4199 7.78762 22.4053 6.02738L21.6818 7.44613C22.3364 8.83057 22.7025 10.3769 22.7025 12.006C22.7025 17.9076 17.9018 22.7083 12.0002 22.7083C11.3345 22.7083 10.6959 22.6411 10.0681 22.5264L9.646 22.4493L9.65079 22.0203C9.6923 18.2991 10.7031 15.1964 11.7016 13.0257C11.9527 12.4797 12.2033 11.9921 12.438 11.5677Z",fill:"url(#epicGradient)"}),e.jsx("path",{d:"M18.2525 9.31052L15.4992 8.50683L14.6953 5.74778L23.8291 0.171387L18.2525 9.31052Z",fill:"currentColor"}),e.jsx("defs",{children:e.jsxs("linearGradient",{id:"epicGradient",x1:"16.9703",y1:"7.03022",x2:"7.05798",y2:"16.948",gradientUnits:"userSpaceOnUse",children:[e.jsx("stop",{stopColor:"#4F75FF"}),e.jsx("stop",{offset:"1",stopColor:"#30AFFF"})]})})]})}export{H as default,F as handle};
2
+ //# sourceMappingURL=login-4cvVFzF8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login-Bimq6Ilz.js","sources":["../../../app/utils/auth-events.ts","../../../app/routes/login-sse.tsx","../../../app/routes/_app+/login.tsx"],"sourcesContent":["export const EVENTS = {\n\tUSER_CODE_RECEIVED: 'USER_CODE_RECEIVED',\n\tAUTH_RESOLVED: 'AUTH_RESOLVED',\n\tAUTH_REJECTED: 'AUTH_REJECTED',\n} as const\nexport type EventTypes = keyof typeof EVENTS\n","import { type LoaderFunctionArgs } from '@remix-run/node'\nimport { eventStream } from 'remix-utils/sse/server'\nimport { z } from 'zod'\nimport { EVENTS } from '#app/utils/auth-events.ts'\nimport { authEmitter } from '#app/utils/auth.server.ts'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\n\nconst CodeReceivedEventSchema = z.object({\n\ttype: z.literal(EVENTS.USER_CODE_RECEIVED),\n\tcode: z.string(),\n\turl: z.string(),\n})\nconst AuthResolvedEventSchema = z.object({\n\ttype: z.literal(EVENTS.AUTH_RESOLVED),\n})\nconst AuthRejectedEventSchema = z.object({\n\ttype: z.literal(EVENTS.AUTH_REJECTED),\n\terror: z.string().optional().default('Unknown error'),\n})\nexport const EventSchema = z.union([\n\tCodeReceivedEventSchema,\n\tAuthResolvedEventSchema,\n\tAuthRejectedEventSchema,\n])\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\treturn eventStream(request.signal, function setup(send) {\n\t\tfunction handleCodeReceived(data: any) {\n\t\t\tsend({\n\t\t\t\tdata: JSON.stringify(\n\t\t\t\t\tCodeReceivedEventSchema.parse({\n\t\t\t\t\t\ttype: EVENTS.USER_CODE_RECEIVED,\n\t\t\t\t\t\t...data,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t})\n\t\t}\n\t\tfunction handleAuthResolved() {\n\t\t\tsend({ data: JSON.stringify({ type: EVENTS.AUTH_RESOLVED }) })\n\t\t}\n\t\tfunction handleAuthRejected(data: any) {\n\t\t\tconst result = AuthRejectedEventSchema.safeParse(data)\n\t\t\tif (result.success) {\n\t\t\t\tsend({ data: JSON.stringify(result.data) })\n\t\t\t} else {\n\t\t\t\tconsole.error('Error parsing auth rejected event', result.error, data)\n\t\t\t}\n\t\t}\n\t\tauthEmitter.on(EVENTS.USER_CODE_RECEIVED, handleCodeReceived)\n\t\tauthEmitter.on(EVENTS.AUTH_RESOLVED, handleAuthResolved)\n\t\tauthEmitter.on(EVENTS.AUTH_REJECTED, handleAuthRejected)\n\t\treturn () => {\n\t\t\tauthEmitter.off(EVENTS.USER_CODE_RECEIVED, handleCodeReceived)\n\t\t\tauthEmitter.off(EVENTS.AUTH_RESOLVED, handleAuthResolved)\n\t\t\tauthEmitter.off(EVENTS.AUTH_REJECTED, handleAuthRejected)\n\t\t}\n\t})\n}\n","import { getAuthInfo } from '@epic-web/workshop-utils/db.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { json, redirect } from '@remix-run/node'\nimport { useFetcher, useNavigate, useRevalidator } from '@remix-run/react'\nimport { useEffect, useState } from 'react'\nimport { useEventSource } from 'remix-utils/sse/react'\nimport { Button, ButtonLink } from '#app/components/button.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { EVENTS } from '#app/utils/auth-events.ts'\nimport { registerDevice } from '#app/utils/auth.server.ts'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { EventSchema } from '../login-sse.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport async function loader() {\n\tensureUndeployed()\n\tconst isAuthenticated = Boolean(await getAuthInfo())\n\tif (isAuthenticated) throw redirect('/account')\n\treturn json({})\n}\n\nexport async function action() {\n\tensureUndeployed()\n\tvoid registerDevice()\n\treturn json({ status: 'pending' } as const)\n}\n\nexport default function Login() {\n\tconst loginFetcher = useFetcher<typeof action>()\n\tconst [clickedVerificationLink, setClickedVerificationLink] = useState(false)\n\tconst [authError, setAuthError] = useState<null | string>(null)\n\tconst [userCodeInfo, setUserCodeInfo] = useState<null | {\n\t\tcode: string\n\t\turl: string\n\t}>(null)\n\tconst navigate = useNavigate()\n\tconst revalidator = useRevalidator()\n\tconst lastMessage = useEventSource(`/login-sse`)\n\tuseEffect(() => {\n\t\tif (!lastMessage) return\n\n\t\tconst parsed = JSON.parse(lastMessage)\n\t\tconst result = EventSchema.safeParse(parsed)\n\t\tif (!result.success) {\n\t\t\tconsole.error(result.error.flatten())\n\t\t\treturn\n\t\t}\n\t\tswitch (result.data.type) {\n\t\t\tcase EVENTS.USER_CODE_RECEIVED: {\n\t\t\t\tsetUserCodeInfo(result.data)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase EVENTS.AUTH_RESOLVED: {\n\t\t\t\trevalidator.revalidate()\n\t\t\t\tnavigate('/')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase EVENTS.AUTH_REJECTED: {\n\t\t\t\tsetAuthError(result.data.error)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}, [lastMessage, navigate, revalidator])\n\n\treturn (\n\t\t<main className=\"flex h-full w-full flex-grow flex-col items-center justify-center p-10 text-center\">\n\t\t\t<div className=\"flex flex-col items-center\">\n\t\t\t\t<Logo className=\"h-16 w-16\" />\n\t\t\t\t<h1 className=\"pt-5 text-2xl font-semibold md:text-3xl\">\n\t\t\t\t\tAuthenticate with EpicWeb.dev\n\t\t\t\t</h1>\n\t\t\t\t<h2 className=\"max-w-sm pt-3 text-base text-gray-700 dark:text-gray-300\">\n\t\t\t\t\tIf you have purchased Epic Web, you'll be able to watch videos, track\n\t\t\t\t\tprogress, and more!\n\t\t\t\t</h2>\n\t\t\t\t<div className=\"flex w-full flex-col items-center pt-5\">\n\t\t\t\t\t{userCodeInfo ? (\n\t\t\t\t\t\t<div className=\"flex w-full flex-col items-center gap-3\">\n\t\t\t\t\t\t\t<div className=\"my-2 flex w-full flex-col items-center gap-2\">\n\t\t\t\t\t\t\t\t<p className=\"text-lg\">Your verification code is: </p>\n\t\t\t\t\t\t\t\t<div className=\"mb-3 w-full bg-gray-100 px-5 py-3 text-lg font-bold dark:bg-black/40\">\n\t\t\t\t\t\t\t\t\t<code>{userCodeInfo.code}</code>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ButtonLink\n\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\tto={userCodeInfo.url}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tonClick={() => setClickedVerificationLink(true)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tContinue\n\t\t\t\t\t\t\t</ButtonLink>\n\t\t\t\t\t\t\t{clickedVerificationLink ? (\n\t\t\t\t\t\t\t\t<div className=\"pt-5 opacity-60\">\n\t\t\t\t\t\t\t\t\t<Loading>Waiting for confirmation</Loading>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<loginFetcher.Form method=\"POST\">\n\t\t\t\t\t\t\t<Button varient=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t{loginFetcher.state === 'idle' &&\n\t\t\t\t\t\t\t\tloginFetcher.data?.status !== 'pending'\n\t\t\t\t\t\t\t\t\t? `Retrieve Code`\n\t\t\t\t\t\t\t\t\t: `Retrieving Code...`}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</loginFetcher.Form>\n\t\t\t\t\t)}\n\t\t\t\t\t{authError ? (\n\t\t\t\t\t\t<div className=\"mt-4 text-red-500\">\n\t\t\t\t\t\t\tThere was an error: <pre>{authError}</pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nfunction Logo({ className = '' }) {\n\t// svg sprites do not support gradients\n\treturn (\n\t\t<svg\n\t\t\tclassName={className}\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path\n\t\t\t\td=\"M12.438 11.5677C12.0131 11.8026 11.5249 12.0534 10.9784 12.3047C8.80704 13.3031 5.70429 14.314 1.986 14.3555L1.55773 14.3603L1.48003 13.9391C1.36509 13.316 1.29793 12.6714 1.29793 12.006C1.29793 6.10441 6.09863 1.30372 12.0002 1.30372C13.6287 1.30372 15.1745 1.66961 16.5585 2.32369L17.9801 1.59897C16.2189 0.582162 14.1769 0 12.0002 0C5.38709 0 0 5.38709 0 12.0002C0 14.6402 0.858474 17.0847 2.31072 19.0692C4.79741 18.6457 6.35749 17.6495 6.35749 17.6495C6.35749 17.6495 5.36137 19.2075 4.93785 21.6946C6.92114 23.1439 9.36321 24.0005 12.0002 24.0005C18.6134 24.0005 24.0005 18.6134 24.0005 12.0002C24.0005 9.82732 23.4199 7.78762 22.4053 6.02738L21.6818 7.44613C22.3364 8.83057 22.7025 10.3769 22.7025 12.006C22.7025 17.9076 17.9018 22.7083 12.0002 22.7083C11.3345 22.7083 10.6959 22.6411 10.0681 22.5264L9.646 22.4493L9.65079 22.0203C9.6923 18.2991 10.7031 15.1964 11.7016 13.0257C11.9527 12.4797 12.2033 11.9921 12.438 11.5677Z\"\n\t\t\t\tfill=\"url(#epicGradient)\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M18.2525 9.31052L15.4992 8.50683L14.6953 5.74778L23.8291 0.171387L18.2525 9.31052Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t\t<defs>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid=\"epicGradient\"\n\t\t\t\t\tx1=\"16.9703\"\n\t\t\t\t\ty1=\"7.03022\"\n\t\t\t\t\tx2=\"7.05798\"\n\t\t\t\t\ty2=\"16.948\"\n\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t>\n\t\t\t\t\t<stop stopColor=\"#4F75FF\" />\n\t\t\t\t\t<stop offset=\"1\" stopColor=\"#30AFFF\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t</svg>\n\t)\n}\n"],"names":["EVENTS","CodeReceivedEventSchema","z","object","type","literal","USER_CODE_RECEIVED","code","string","url","AuthResolvedEventSchema","AUTH_RESOLVED","AuthRejectedEventSchema","AUTH_REJECTED","error","optional","default","EventSchema","union","handle","getSitemapEntries","Login","loginFetcher","useFetcher","clickedVerificationLink","setClickedVerificationLink","useState","authError","setAuthError","userCodeInfo","setUserCodeInfo","navigate","useNavigate","revalidator","useRevalidator","lastMessage","useEventSource","useEffect","parsed","JSON","parse","result","safeParse","success","console","flatten","data","revalidate","className","children","jsxs","jsx","Logo","ButtonLink","varient","to","target","rel","onClick","Loading","Form","method","Button","state","status","viewBox","fill","xmlns","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset"],"mappings":"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"}
1
+ {"version":3,"file":"login-4cvVFzF8.js","sources":["../../../app/utils/auth-events.ts","../../../app/routes/login-sse.tsx","../../../app/routes/_app+/login.tsx"],"sourcesContent":["export const EVENTS = {\n\tUSER_CODE_RECEIVED: 'USER_CODE_RECEIVED',\n\tAUTH_RESOLVED: 'AUTH_RESOLVED',\n\tAUTH_REJECTED: 'AUTH_REJECTED',\n} as const\nexport type EventTypes = keyof typeof EVENTS\n","import { type LoaderFunctionArgs } from '@remix-run/node'\nimport { eventStream } from 'remix-utils/sse/server'\nimport { z } from 'zod'\nimport { EVENTS } from '#app/utils/auth-events.ts'\nimport { authEmitter } from '#app/utils/auth.server.ts'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\n\nconst CodeReceivedEventSchema = z.object({\n\ttype: z.literal(EVENTS.USER_CODE_RECEIVED),\n\tcode: z.string(),\n\turl: z.string(),\n})\nconst AuthResolvedEventSchema = z.object({\n\ttype: z.literal(EVENTS.AUTH_RESOLVED),\n})\nconst AuthRejectedEventSchema = z.object({\n\ttype: z.literal(EVENTS.AUTH_REJECTED),\n\terror: z.string().optional().default('Unknown error'),\n})\nexport const EventSchema = z.union([\n\tCodeReceivedEventSchema,\n\tAuthResolvedEventSchema,\n\tAuthRejectedEventSchema,\n])\n\nexport async function loader({ request }: LoaderFunctionArgs) {\n\tensureUndeployed()\n\treturn eventStream(request.signal, function setup(send) {\n\t\tfunction handleCodeReceived(data: any) {\n\t\t\tsend({\n\t\t\t\tdata: JSON.stringify(\n\t\t\t\t\tCodeReceivedEventSchema.parse({\n\t\t\t\t\t\ttype: EVENTS.USER_CODE_RECEIVED,\n\t\t\t\t\t\t...data,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t})\n\t\t}\n\t\tfunction handleAuthResolved() {\n\t\t\tsend({ data: JSON.stringify({ type: EVENTS.AUTH_RESOLVED }) })\n\t\t}\n\t\tfunction handleAuthRejected(data: any) {\n\t\t\tconst result = AuthRejectedEventSchema.safeParse(data)\n\t\t\tif (result.success) {\n\t\t\t\tsend({ data: JSON.stringify(result.data) })\n\t\t\t} else {\n\t\t\t\tconsole.error('Error parsing auth rejected event', result.error, data)\n\t\t\t}\n\t\t}\n\t\tauthEmitter.on(EVENTS.USER_CODE_RECEIVED, handleCodeReceived)\n\t\tauthEmitter.on(EVENTS.AUTH_RESOLVED, handleAuthResolved)\n\t\tauthEmitter.on(EVENTS.AUTH_REJECTED, handleAuthRejected)\n\t\treturn () => {\n\t\t\tauthEmitter.off(EVENTS.USER_CODE_RECEIVED, handleCodeReceived)\n\t\t\tauthEmitter.off(EVENTS.AUTH_RESOLVED, handleAuthResolved)\n\t\t\tauthEmitter.off(EVENTS.AUTH_REJECTED, handleAuthRejected)\n\t\t}\n\t})\n}\n","import { getAuthInfo } from '@epic-web/workshop-utils/db.server'\nimport { type SEOHandle } from '@nasa-gcn/remix-seo'\nimport { json, redirect } from '@remix-run/node'\nimport { useFetcher, useNavigate, useRevalidator } from '@remix-run/react'\nimport { useEffect, useState } from 'react'\nimport { useEventSource } from 'remix-utils/sse/react'\nimport { Button, ButtonLink } from '#app/components/button.tsx'\nimport { Loading } from '#app/components/loading.tsx'\nimport { EVENTS } from '#app/utils/auth-events.ts'\nimport { registerDevice } from '#app/utils/auth.server.ts'\nimport { ensureUndeployed } from '#app/utils/misc.tsx'\nimport { EventSchema } from '../login-sse.tsx'\n\nexport const handle: SEOHandle = {\n\tgetSitemapEntries: () => null,\n}\n\nexport async function loader() {\n\tensureUndeployed()\n\tconst isAuthenticated = Boolean(await getAuthInfo())\n\tif (isAuthenticated) throw redirect('/account')\n\treturn json({})\n}\n\nexport async function action() {\n\tensureUndeployed()\n\tvoid registerDevice()\n\treturn json({ status: 'pending' } as const)\n}\n\nexport default function Login() {\n\tconst loginFetcher = useFetcher<typeof action>()\n\tconst [clickedVerificationLink, setClickedVerificationLink] = useState(false)\n\tconst [authError, setAuthError] = useState<null | string>(null)\n\tconst [userCodeInfo, setUserCodeInfo] = useState<null | {\n\t\tcode: string\n\t\turl: string\n\t}>(null)\n\tconst navigate = useNavigate()\n\tconst revalidator = useRevalidator()\n\tconst lastMessage = useEventSource(`/login-sse`)\n\tuseEffect(() => {\n\t\tif (!lastMessage) return\n\n\t\tconst parsed = JSON.parse(lastMessage)\n\t\tconst result = EventSchema.safeParse(parsed)\n\t\tif (!result.success) {\n\t\t\tconsole.error(result.error.flatten())\n\t\t\treturn\n\t\t}\n\t\tswitch (result.data.type) {\n\t\t\tcase EVENTS.USER_CODE_RECEIVED: {\n\t\t\t\tsetUserCodeInfo(result.data)\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase EVENTS.AUTH_RESOLVED: {\n\t\t\t\trevalidator.revalidate()\n\t\t\t\tnavigate('/')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase EVENTS.AUTH_REJECTED: {\n\t\t\t\tsetAuthError(result.data.error)\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t}, [lastMessage, navigate, revalidator])\n\n\treturn (\n\t\t<main className=\"flex h-full w-full flex-grow flex-col items-center justify-center p-10 text-center\">\n\t\t\t<div className=\"flex flex-col items-center\">\n\t\t\t\t<Logo className=\"h-16 w-16\" />\n\t\t\t\t<h1 className=\"pt-5 text-2xl font-semibold md:text-3xl\">\n\t\t\t\t\tAuthenticate with EpicWeb.dev\n\t\t\t\t</h1>\n\t\t\t\t<h2 className=\"max-w-sm pt-3 text-base text-gray-700 dark:text-gray-300\">\n\t\t\t\t\tIf you have purchased Epic Web, you'll be able to watch videos, track\n\t\t\t\t\tprogress, and more!\n\t\t\t\t</h2>\n\t\t\t\t<div className=\"flex w-full flex-col items-center pt-5\">\n\t\t\t\t\t{userCodeInfo ? (\n\t\t\t\t\t\t<div className=\"flex w-full flex-col items-center gap-3\">\n\t\t\t\t\t\t\t<div className=\"my-2 flex w-full flex-col items-center gap-2\">\n\t\t\t\t\t\t\t\t<p className=\"text-lg\">Your verification code is: </p>\n\t\t\t\t\t\t\t\t<div className=\"mb-3 w-full bg-gray-100 px-5 py-3 text-lg font-bold dark:bg-black/40\">\n\t\t\t\t\t\t\t\t\t<code>{userCodeInfo.code}</code>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<ButtonLink\n\t\t\t\t\t\t\t\tvarient=\"primary\"\n\t\t\t\t\t\t\t\tto={userCodeInfo.url}\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t\tonClick={() => setClickedVerificationLink(true)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tContinue\n\t\t\t\t\t\t\t</ButtonLink>\n\t\t\t\t\t\t\t{clickedVerificationLink ? (\n\t\t\t\t\t\t\t\t<div className=\"pt-5 opacity-60\">\n\t\t\t\t\t\t\t\t\t<Loading>Waiting for confirmation</Loading>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t) : null}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<loginFetcher.Form method=\"POST\">\n\t\t\t\t\t\t\t<Button varient=\"primary\" type=\"submit\">\n\t\t\t\t\t\t\t\t{loginFetcher.state === 'idle' &&\n\t\t\t\t\t\t\t\tloginFetcher.data?.status !== 'pending'\n\t\t\t\t\t\t\t\t\t? `Retrieve Code`\n\t\t\t\t\t\t\t\t\t: `Retrieving Code...`}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</loginFetcher.Form>\n\t\t\t\t\t)}\n\t\t\t\t\t{authError ? (\n\t\t\t\t\t\t<div className=\"mt-4 text-red-500\">\n\t\t\t\t\t\t\tThere was an error: <pre>{authError}</pre>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : null}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</main>\n\t)\n}\n\nfunction Logo({ className = '' }) {\n\t// svg sprites do not support gradients\n\treturn (\n\t\t<svg\n\t\t\tclassName={className}\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\tfill=\"none\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\taria-hidden=\"true\"\n\t\t>\n\t\t\t<path\n\t\t\t\td=\"M12.438 11.5677C12.0131 11.8026 11.5249 12.0534 10.9784 12.3047C8.80704 13.3031 5.70429 14.314 1.986 14.3555L1.55773 14.3603L1.48003 13.9391C1.36509 13.316 1.29793 12.6714 1.29793 12.006C1.29793 6.10441 6.09863 1.30372 12.0002 1.30372C13.6287 1.30372 15.1745 1.66961 16.5585 2.32369L17.9801 1.59897C16.2189 0.582162 14.1769 0 12.0002 0C5.38709 0 0 5.38709 0 12.0002C0 14.6402 0.858474 17.0847 2.31072 19.0692C4.79741 18.6457 6.35749 17.6495 6.35749 17.6495C6.35749 17.6495 5.36137 19.2075 4.93785 21.6946C6.92114 23.1439 9.36321 24.0005 12.0002 24.0005C18.6134 24.0005 24.0005 18.6134 24.0005 12.0002C24.0005 9.82732 23.4199 7.78762 22.4053 6.02738L21.6818 7.44613C22.3364 8.83057 22.7025 10.3769 22.7025 12.006C22.7025 17.9076 17.9018 22.7083 12.0002 22.7083C11.3345 22.7083 10.6959 22.6411 10.0681 22.5264L9.646 22.4493L9.65079 22.0203C9.6923 18.2991 10.7031 15.1964 11.7016 13.0257C11.9527 12.4797 12.2033 11.9921 12.438 11.5677Z\"\n\t\t\t\tfill=\"url(#epicGradient)\"\n\t\t\t/>\n\t\t\t<path\n\t\t\t\td=\"M18.2525 9.31052L15.4992 8.50683L14.6953 5.74778L23.8291 0.171387L18.2525 9.31052Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t\t<defs>\n\t\t\t\t<linearGradient\n\t\t\t\t\tid=\"epicGradient\"\n\t\t\t\t\tx1=\"16.9703\"\n\t\t\t\t\ty1=\"7.03022\"\n\t\t\t\t\tx2=\"7.05798\"\n\t\t\t\t\ty2=\"16.948\"\n\t\t\t\t\tgradientUnits=\"userSpaceOnUse\"\n\t\t\t\t>\n\t\t\t\t\t<stop stopColor=\"#4F75FF\" />\n\t\t\t\t\t<stop offset=\"1\" stopColor=\"#30AFFF\" />\n\t\t\t\t</linearGradient>\n\t\t\t</defs>\n\t\t</svg>\n\t)\n}\n"],"names":["EVENTS","CodeReceivedEventSchema","z","object","type","literal","USER_CODE_RECEIVED","code","string","url","AuthResolvedEventSchema","AUTH_RESOLVED","AuthRejectedEventSchema","AUTH_REJECTED","error","optional","default","EventSchema","union","handle","getSitemapEntries","Login","loginFetcher","useFetcher","clickedVerificationLink","setClickedVerificationLink","useState","authError","setAuthError","userCodeInfo","setUserCodeInfo","navigate","useNavigate","revalidator","useRevalidator","lastMessage","useEventSource","useEffect","parsed","JSON","parse","result","safeParse","success","console","flatten","data","revalidate","className","children","jsxs","jsx","Logo","ButtonLink","varient","to","target","rel","onClick","Loading","Form","method","Button","state","status","viewBox","fill","xmlns","d","id","x1","y1","x2","y2","gradientUnits","stopColor","offset"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ window.__remixManifest={"entry":{"module":"/assets/entry.client-3M2p-8I3.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js"],"css":[]},"routes":{"root":{"id":"root","path":"","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/root-Tcnfz99O.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/use-hydrated-Citou692.js","/assets/error-boundary-DDTvdkB4.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-B-hHvmeV.js","/assets/index-BATSX33w.js","/assets/presence-Cr--lRCr.js","/assets/seo-pBpFCWsy.js"],"css":[]},"routes/$":{"id":"routes/$","parentId":"root","path":"*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_-DbrWZazo.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/error-boundary-DDTvdkB4.js"],"css":[]},"routes/_app+/_layout":{"id":"routes/_app+/_layout","parentId":"root","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-AgYGL72C.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/use-hydrated-Citou692.js","/assets/index-BXWoOGxB.js","/assets/user-D6tTg1yS.js","/assets/presence-Cr--lRCr.js","/assets/progress-BsY6hGPp.js","/assets/index-BATSX33w.js"],"css":[]},"routes/_app+/account":{"id":"routes/_app+/account","parentId":"routes/_app+/_layout","path":"account","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/account-7o6O4ruO.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/button-BklqyTPS.js","/assets/tooltip-BiHTe_7F.js","/assets/user-D6tTg1yS.js","/assets/presence-Cr--lRCr.js"],"css":[]},"routes/_app+/app.$appName+/$":{"id":"routes/_app+/app.$appName+/$","parentId":"routes/_app+/_layout","path":"app/:appName/*","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/api.$":{"id":"routes/_app+/app.$appName+/api.$","parentId":"routes/_app+/_layout","path":"app/:appName/api/*","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/api._-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/epic_ws[.js]":{"id":"routes/_app+/app.$appName+/epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/epic_ws.js","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/index":{"id":"routes/_app+/app.$appName+/index","parentId":"routes/_app+/_layout","path":"app/:appName/","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-K6Dvbx-E.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.$testName":{"id":"routes/_app+/app.$appName+/test.$testName","parentId":"routes/_app+/_layout","path":"app/:appName/test/:testName","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test._testName-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/app.$appName+/test.epic_ws[.js]":{"id":"routes/_app+/app.$appName+/test.epic_ws[.js]","parentId":"routes/_app+/_layout","path":"app/:appName/test/epic_ws.js","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test.epic_ws_.js_-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/discord":{"id":"routes/_app+/discord","parentId":"routes/_app+/_layout","path":"discord","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/discord-CHP4_JLJ.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/user-D6tTg1yS.js","/assets/discord-Dq4e30wV.js"],"css":[]},"routes/_app+/exercise+/_layout":{"id":"routes/_app+/exercise+/_layout","parentId":"routes/_app+/_layout","path":"exercise","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-BUs3av-e.js","imports":["/assets/index-1cKOJFpX.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber":{"id":"routes/_app+/exercise+/$exerciseNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber-Cq0nozYz.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/:stepNumber","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_exerciseNumber_._stepNumber-B5pmJ29o.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","path":":type","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/_layout-DLVrpOki.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/index-Dx5GmdYq.js","/assets/error-boundary-DDTvdkB4.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/set-playground-Cdy8VlVD.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/app","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"app","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/app-BiWJY58g.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/button-BklqyTPS.js","/assets/loading-C5uX0jJw.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-BATSX33w.js","/assets/preview-CqrRe2BV.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-Dm1ll1kT.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/mdx-M0kcP-mP.js","/assets/use-event-source-A_0lEOPX.js","/assets/set-playground-Cdy8VlVD.js","/assets/button-BklqyTPS.js","/assets/diff-CpFxuKA2.js","/assets/error-boundary-DDTvdkB4.js","/assets/discord-Dq4e30wV.js","/assets/index-B-hHvmeV.js","/assets/tests-CmNNBElK.js","/assets/preview-CqrRe2BV.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/test","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.$type+/_layout","path":"test","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-D9HsTvpe.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/index-BATSX33w.js","/assets/use-event-source-A_0lEOPX.js","/assets/set-playground-Cdy8VlVD.js","/assets/tests-CmNNBElK.js"],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index":{"id":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber.index","parentId":"routes/_app+/exercise+/$exerciseNumber_.$stepNumber","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_._stepNumber.index-l0sNRNKZ.js","imports":[],"css":[]},"routes/_app+/exercise+/$exerciseNumber_.finished":{"id":"routes/_app+/exercise+/$exerciseNumber_.finished","parentId":"routes/_app+/exercise+/_layout","path":":exerciseNumber/finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_exerciseNumber_.finished-Q9qnPuZX.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js","/assets/seo-pBpFCWsy.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/finished":{"id":"routes/_app+/finished","parentId":"routes/_app+/_layout","path":"finished","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/finished-Bm-bCUU2.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/nav-chevrons-B82nbdyj.js","/assets/mdx-M0kcP-mP.js","/assets/seo-pBpFCWsy.js","/assets/progress-BsY6hGPp.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/index":{"id":"routes/_app+/index","parentId":"routes/_app+/_layout","index":true,"hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":true,"module":"/assets/index-Tfdnz1AB.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js","/assets/clsx-B-dksMZM.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/index-Dx5GmdYq.js","/assets/error-boundary-DDTvdkB4.js","/assets/mdx-M0kcP-mP.js","/assets/progress-BsY6hGPp.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/_app+/login":{"id":"routes/_app+/login","parentId":"routes/_app+/_layout","path":"login","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-4cvVFzF8.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/use-event-source-A_0lEOPX.js","/assets/button-BklqyTPS.js","/assets/loading-C5uX0jJw.js"],"css":[]},"routes/_app+/support":{"id":"routes/_app+/support","parentId":"routes/_app+/_layout","path":"support","hasAction":false,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/support-hcqGIpir.js","imports":["/assets/index-1cKOJFpX.js","/assets/components-CME-nGId.js"],"css":[]},"routes/admin+/_layout":{"id":"routes/admin+/_layout","parentId":"root","path":"admin","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/_layout-C8uU4Hwj.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/progress-BsY6hGPp.js"],"css":[]},"routes/admin+/apps":{"id":"routes/admin+/apps","parentId":"routes/admin+/_layout","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-DP2rzg_V.js","imports":[],"css":[]},"routes/admin+/cache":{"id":"routes/admin+/cache","parentId":"routes/admin+/_layout","path":"cache","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/cache-l0sNRNKZ.js","imports":[],"css":[]},"routes/apps":{"id":"routes/apps","parentId":"root","path":"apps","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/apps-l0sNRNKZ.js","imports":[],"css":[]},"routes/diff":{"id":"routes/diff","parentId":"root","path":"diff","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/diff-Cw8ktQ1-.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/tooltip-BiHTe_7F.js","/assets/index-BXWoOGxB.js","/assets/index-hogig2HK.js","/assets/request-info-CEhUGODY.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/epic-video-iluUs1-s.js","/assets/progress-bar-CSvo1ZXP.js","/assets/accordion-BroSqIct.js","/assets/mdx-M0kcP-mP.js","/assets/diff-CpFxuKA2.js","/assets/nav-chevrons-B82nbdyj.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/discord.callback":{"id":"routes/discord.callback","parentId":"root","path":"discord/callback","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/discord.callback-l0sNRNKZ.js","imports":[],"css":[]},"routes/exercises":{"id":"routes/exercises","parentId":"root","path":"exercises","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/exercises-l0sNRNKZ.js","imports":[],"css":[]},"routes/launch-editor":{"id":"routes/launch-editor","parentId":"root","path":"launch-editor","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/launch-editor-l0sNRNKZ.js","imports":[],"css":[]},"routes/login-sse":{"id":"routes/login-sse","parentId":"root","path":"login-sse","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/login-sse-l0sNRNKZ.js","imports":[],"css":[]},"routes/og":{"id":"routes/og","parentId":"root","path":"og","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/og-l0sNRNKZ.js","imports":[],"css":[]},"routes/onboarding":{"id":"routes/onboarding","parentId":"root","path":"onboarding","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/onboarding-Bib-wh6d.js","imports":["/assets/index-1cKOJFpX.js","/assets/clsx-B-dksMZM.js","/assets/components-CME-nGId.js","/assets/misc-ENVX3CWf.js","/assets/request-info-CEhUGODY.js","/assets/tooltip-BiHTe_7F.js","/assets/client-hints-DNUUFGmB.js","/assets/index-BATSX33w.js","/assets/loading-C5uX0jJw.js","/assets/user-D6tTg1yS.js","/assets/button-BklqyTPS.js","/assets/epic-video-iluUs1-s.js"],"css":["/assets/epic-video-DUnRvy1A.css"]},"routes/processes":{"id":"routes/processes","parentId":"root","path":"processes","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/processes-l0sNRNKZ.js","imports":[],"css":[]},"routes/progress":{"id":"routes/progress","parentId":"root","path":"progress","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/progress-l0sNRNKZ.js","imports":[],"css":[]},"routes/robots[.]txt":{"id":"routes/robots[.]txt","parentId":"root","path":"robots.txt","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/robots_._txt-l0sNRNKZ.js","imports":[],"css":[]},"routes/set-playground":{"id":"routes/set-playground","parentId":"root","path":"set-playground","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/set-playground-l0sNRNKZ.js","imports":[],"css":[]},"routes/sitemap[.]xml":{"id":"routes/sitemap[.]xml","parentId":"root","path":"sitemap.xml","hasAction":false,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/sitemap_._xml-l0sNRNKZ.js","imports":[],"css":[]},"routes/start":{"id":"routes/start","parentId":"root","path":"start","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/start-l0sNRNKZ.js","imports":[],"css":[]},"routes/test":{"id":"routes/test","parentId":"root","path":"test","hasAction":true,"hasLoader":true,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/test-l0sNRNKZ.js","imports":[],"css":[]},"routes/theme/index":{"id":"routes/theme/index","parentId":"root","path":"theme","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-l0sNRNKZ.js","imports":[],"css":[]},"routes/update-mdx-cache":{"id":"routes/update-mdx-cache","parentId":"root","path":"update-mdx-cache","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/update-mdx-cache-l0sNRNKZ.js","imports":[],"css":[]},"routes/video-player/index":{"id":"routes/video-player/index","parentId":"root","path":"video-player","hasAction":true,"hasLoader":false,"hasClientAction":false,"hasClientLoader":false,"hasErrorBoundary":false,"module":"/assets/index-DP2rzg_V.js","imports":[],"css":[]}},"url":"/assets/manifest-746b2907.js","version":"746b2907"};
@@ -1,2 +1,2 @@
1
- var Qt=Object.defineProperty;var Lt=n=>{throw TypeError(n)};var te=(n,e,i)=>e in n?Qt(n,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[e]=i;var O=(n,e,i)=>te(n,typeof e!="symbol"?e+"":e,i),xt=(n,e,i)=>e.has(n)||Lt("Cannot "+i);var t=(n,e,i)=>(xt(n,e,"read from private field"),i?i.call(n):e.get(n)),b=(n,e,i)=>e.has(n)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,i),f=(n,e,i,s)=>(xt(n,e,"write to private field"),s?s.call(n,i):e.set(n,i),i),u=(n,e,i)=>(xt(n,e,"access private method"),i);var mt=(n,e,i,s)=>({set _(o){f(n,e,o,i)},get _(){return t(n,e,s)}});import{j as g,r as at}from"./index-1cKOJFpX.js";import{c as St}from"./clsx-B-dksMZM.js";import{d as ee,L as Ht,a as ie,r as se,u as ne}from"./components-C17zb3Us.js";import{V as re,D as oe}from"./epic-video-DGVKtAan.js";import{I as ae,c as he,H as ht,A as le}from"./misc-Bt-_bj1O.js";import{s as ce}from"./progress-bar-DMef_aq8.js";import{u as ue}from"./request-info-DU15ezmn.js";function fe(){const n=ee("root");if(!n)throw new Error("useApps requires a data object from the root loader");return n.apps}function Ut(n){const e=ie();return at.useEffect(()=>{e.state==="idle"&&e.data!=null&&(n==null||n("fetcher-done"))},[e,n]),e}function de({file:n,appFile:e,appName:i,syncTo:s,line:o,column:r,children:a,onUpdate:h}){var W;const c=Ut(h),m=typeof e=="string"?[e]:e,F=n?"file":e?"appFile":"",w=s!=null&&s.file?"file":s!=null&&s.appFile?"appFile":"";return g.jsxs(c.Form,{action:"/launch-editor",method:"POST",className:"flex items-center",children:[ce,g.jsx("input",{type:"hidden",name:"line",value:o}),g.jsx("input",{type:"hidden",name:"column",value:r}),g.jsx("input",{type:"hidden",name:"type",value:F}),g.jsx("input",{type:"hidden",name:"file",value:n}),g.jsx("input",{type:"hidden",name:"appName",value:i}),m==null?void 0:m.map(_=>g.jsx("input",{type:"hidden",name:"appFile",value:_},_)),s?g.jsxs(g.Fragment,{children:[g.jsx("input",{type:"hidden",name:"syncTo.type",value:w}),g.jsx("input",{type:"hidden",name:"syncTo.file",value:s.file}),g.jsx("input",{type:"hidden",name:"syncTo.appName",value:s.appName}),g.jsx("input",{type:"hidden",name:"syncTo.appFile",value:s.appFile})]}):null,g.jsx("button",{type:"submit",className:St("launch_button",c.state==="idle"?null:"cursor-progress",((W=c.data)==null?void 0:W.status)==="error"?"cursor-not-allowed":null),children:a})]})}function pe({file:n,appFile:e,appName:i,line:s,children:o}){const r=fe(),a=ue();if(Array.isArray(e))return g.jsx("div",{children:"Cannot open more than one file"});if(n){const m=F=>F.replace(/\\/g,"/");return g.jsx("a",{className:"launch_button !no-underline",href:m(n).replace(m(ENV.EPICSHOP_CONTEXT_CWD),ENV.EPICSHOP_GITHUB_ROOT)+(s?`#L${s}`:""),rel:"noreferrer",target:"_blank",children:o})}const h=r.find(m=>m.name===i),c=[...(h==null?void 0:h.relativePath.split(a.separator))??[],e+(s?`#L${s}`:"")].join("/");return g.jsx("a",{className:"launch_button !no-underline",href:`${ENV.EPICSHOP_GITHUB_ROOT}/${c}`,rel:"noreferrer",target:"_blank",children:o})}function Re({appFile:n="README.mdx",appName:e,file:i,relativePath:s}){const o=Ut(),r=h=>{if(!h.altKey||ENV.EPICSHOP_DEPLOYED)return;h.preventDefault();const c=new FormData,m=i?"file":"appFile";c.append(m,i??n),c.append("type",m),e&&c.append("appName",e),o.submit(c,{method:"POST",action:"/launch-editor"})},a=ENV.EPICSHOP_GITHUB_ROOT.replace(/\/tree\/|\/blob\//,"/edit/");return g.jsxs(Ht,{className:"self-center font-mono text-sm",onClick:r,target:"_blank",to:`${a}/${s}/${n}`.replace(/\\/g,"/"),children:[g.jsx("span",{className:"block md:hidden",children:"Edit on GitHub"}),g.jsx("span",{className:"hidden md:block",children:"Edit this page on GitHub"})]})}const Vt=ENV.EPICSHOP_DEPLOYED?pe:de,lt=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Bt=new Set,At=typeof process=="object"&&process?process:{},$t=(n,e,i,s)=>{typeof At.emitWarning=="function"?At.emitWarning(n,e,i,s):console.error(`[${i}] ${e}: ${n}`)};let yt=globalThis.AbortController,It=globalThis.AbortSignal;var Mt;if(typeof yt>"u"){It=class{constructor(){O(this,"onabort");O(this,"_onabort",[]);O(this,"reason");O(this,"aborted",!1)}addEventListener(s,o){this._onabort.push(o)}},yt=class{constructor(){O(this,"signal",new It);e()}abort(s){var o,r;if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=!0;for(const a of this.signal._onabort)a(s);(r=(o=this.signal).onabort)==null||r.call(o,s)}}};let n=((Mt=At.env)==null?void 0:Mt.LRU_CACHE_IGNORE_AC_WARNING)!=="1";const e=()=>{n&&(n=!1,$t("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}const ge=n=>!Bt.has(n),Q=n=>n&&n===Math.floor(n)&&n>0&&isFinite(n),qt=n=>Q(n)?n<=Math.pow(2,8)?Uint8Array:n<=Math.pow(2,16)?Uint16Array:n<=Math.pow(2,32)?Uint32Array:n<=Number.MAX_SAFE_INTEGER?bt:null:null;class bt extends Array{constructor(e){super(e),this.fill(0)}}var ct;const nt=class nt{constructor(e,i){O(this,"heap");O(this,"length");if(!t(nt,ct))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e),this.length=0}static create(e){const i=qt(e);if(!i)return[];f(nt,ct,!0);const s=new nt(e,i);return f(nt,ct,!1),s}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}};ct=new WeakMap,b(nt,ct,!1);let Ft=nt;var Gt,kt,U,I,V,B,ut,A,$,v,E,p,N,M,z,C,q,T,X,Y,G,K,it,R,l,Ct,rt,Z,pt,k,Xt,ot,ft,gt,tt,et,Tt,wt,_t,S,Dt,dt;const Nt=class Nt{constructor(e){b(this,l);b(this,U);b(this,I);b(this,V);b(this,B);b(this,ut);O(this,"ttl");O(this,"ttlResolution");O(this,"ttlAutopurge");O(this,"updateAgeOnGet");O(this,"updateAgeOnHas");O(this,"allowStale");O(this,"noDisposeOnSet");O(this,"noUpdateTTL");O(this,"maxEntrySize");O(this,"sizeCalculation");O(this,"noDeleteOnFetchRejection");O(this,"noDeleteOnStaleGet");O(this,"allowStaleOnFetchAbort");O(this,"allowStaleOnFetchRejection");O(this,"ignoreFetchAbort");b(this,A);b(this,$);b(this,v);b(this,E);b(this,p);b(this,N);b(this,M);b(this,z);b(this,C);b(this,q);b(this,T);b(this,X);b(this,Y);b(this,G);b(this,K);b(this,it);b(this,R);b(this,rt,()=>{});b(this,Z,()=>{});b(this,pt,()=>{});b(this,k,()=>!1);b(this,ot,e=>{});b(this,ft,(e,i,s)=>{});b(this,gt,(e,i,s,o)=>{if(s||o)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});O(this,Gt,"LRUCache");const{max:i=0,ttl:s,ttlResolution:o=1,ttlAutopurge:r,updateAgeOnGet:a,updateAgeOnHas:h,allowStale:c,dispose:m,disposeAfter:F,noDisposeOnSet:w,noUpdateTTL:W,maxSize:_=0,maxEntrySize:P=0,sizeCalculation:x,fetchMethod:j,noDeleteOnFetchRejection:d,noDeleteOnStaleGet:y,allowStaleOnFetchRejection:L,allowStaleOnFetchAbort:D,ignoreFetchAbort:H}=e;if(i!==0&&!Q(i))throw new TypeError("max option must be a nonnegative integer");const st=i?qt(i):Array;if(!st)throw new Error("invalid max value: "+i);if(f(this,U,i),f(this,I,_),this.maxEntrySize=P||t(this,I),this.sizeCalculation=x,this.sizeCalculation){if(!t(this,I)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(j!==void 0&&typeof j!="function")throw new TypeError("fetchMethod must be a function if specified");if(f(this,ut,j),f(this,it,!!j),f(this,v,new Map),f(this,E,new Array(i).fill(void 0)),f(this,p,new Array(i).fill(void 0)),f(this,N,new st(i)),f(this,M,new st(i)),f(this,z,0),f(this,C,0),f(this,q,Ft.create(i)),f(this,A,0),f(this,$,0),typeof m=="function"&&f(this,V,m),typeof F=="function"?(f(this,B,F),f(this,T,[])):(f(this,B,void 0),f(this,T,void 0)),f(this,K,!!t(this,V)),f(this,R,!!t(this,B)),this.noDisposeOnSet=!!w,this.noUpdateTTL=!!W,this.noDeleteOnFetchRejection=!!d,this.allowStaleOnFetchRejection=!!L,this.allowStaleOnFetchAbort=!!D,this.ignoreFetchAbort=!!H,this.maxEntrySize!==0){if(t(this,I)!==0&&!Q(t(this,I)))throw new TypeError("maxSize must be a positive integer if specified");if(!Q(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");u(this,l,Xt).call(this)}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!y,this.updateAgeOnGet=!!a,this.updateAgeOnHas=!!h,this.ttlResolution=Q(o)||o===0?o:1,this.ttlAutopurge=!!r,this.ttl=s||0,this.ttl){if(!Q(this.ttl))throw new TypeError("ttl must be a positive integer if specified");u(this,l,Ct).call(this)}if(t(this,U)===0&&this.ttl===0&&t(this,I)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!t(this,U)&&!t(this,I)){const J="LRU_CACHE_UNBOUNDED";ge(J)&&(Bt.add(J),$t("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",J,Nt))}}static unsafeExposeInternals(e){return{starts:t(e,Y),ttls:t(e,G),sizes:t(e,X),keyMap:t(e,v),keyList:t(e,E),valList:t(e,p),next:t(e,N),prev:t(e,M),get head(){return t(e,z)},get tail(){return t(e,C)},free:t(e,q),isBackgroundFetch:i=>{var s;return u(s=e,l,S).call(s,i)},backgroundFetch:(i,s,o,r)=>{var a;return u(a=e,l,_t).call(a,i,s,o,r)},moveToTail:i=>{var s;return u(s=e,l,dt).call(s,i)},indexes:i=>{var s;return u(s=e,l,tt).call(s,i)},rindexes:i=>{var s;return u(s=e,l,et).call(s,i)},isStale:i=>{var s;return t(s=e,k).call(s,i)}}}get max(){return t(this,U)}get maxSize(){return t(this,I)}get calculatedSize(){return t(this,$)}get size(){return t(this,A)}get fetchMethod(){return t(this,ut)}get dispose(){return t(this,V)}get disposeAfter(){return t(this,B)}getRemainingTTL(e){return t(this,v).has(e)?1/0:0}*entries(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*rentries(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*keys(){for(const e of u(this,l,tt).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*rkeys(){for(const e of u(this,l,et).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*values(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}*rvalues(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}[(kt=Symbol.iterator,Gt=Symbol.toStringTag,kt)](){return this.entries()}find(e,i={}){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r!==void 0&&e(r,t(this,E)[s],this))return this.get(t(this,E)[s],i)}}forEach(e,i=this){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}rforEach(e,i=this){for(const s of u(this,l,et).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}purgeStale(){let e=!1;for(const i of u(this,l,et).call(this,{allowStale:!0}))t(this,k).call(this,i)&&(this.delete(t(this,E)[i]),e=!0);return e}info(e){const i=t(this,v).get(e);if(i===void 0)return;const s=t(this,p)[i],o=u(this,l,S).call(this,s)?s.__staleWhileFetching:s;if(o===void 0)return;const r={value:o};if(t(this,G)&&t(this,Y)){const a=t(this,G)[i],h=t(this,Y)[i];if(a&&h){const c=a-(lt.now()-h);r.ttl=c,r.start=Date.now()}}return t(this,X)&&(r.size=t(this,X)[i]),r}dump(){const e=[];for(const i of u(this,l,tt).call(this,{allowStale:!0})){const s=t(this,E)[i],o=t(this,p)[i],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r===void 0||s===void 0)continue;const a={value:r};if(t(this,G)&&t(this,Y)){a.ttl=t(this,G)[i];const h=lt.now()-t(this,Y)[i];a.start=Math.floor(Date.now()-h)}t(this,X)&&(a.size=t(this,X)[i]),e.unshift([s,a])}return e}load(e){this.clear();for(const[i,s]of e){if(s.start){const o=Date.now()-s.start;s.start=lt.now()-o}this.set(i,s.value,s)}}set(e,i,s={}){var W,_,P,x,j;if(i===void 0)return this.delete(e),this;const{ttl:o=this.ttl,start:r,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:h=this.sizeCalculation,status:c}=s;let{noUpdateTTL:m=this.noUpdateTTL}=s;const F=t(this,gt).call(this,e,i,s.size||0,h);if(this.maxEntrySize&&F>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this.delete(e),this;let w=t(this,A)===0?void 0:t(this,v).get(e);if(w===void 0)w=t(this,A)===0?t(this,C):t(this,q).length!==0?t(this,q).pop():t(this,A)===t(this,U)?u(this,l,wt).call(this,!1):t(this,A),t(this,E)[w]=e,t(this,p)[w]=i,t(this,v).set(e,w),t(this,N)[t(this,C)]=w,t(this,M)[w]=t(this,C),f(this,C,w),mt(this,A)._++,t(this,ft).call(this,w,F,c),c&&(c.set="add"),m=!1;else{u(this,l,dt).call(this,w);const d=t(this,p)[w];if(i!==d){if(t(this,it)&&u(this,l,S).call(this,d)){d.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:y}=d;y!==void 0&&!a&&(t(this,K)&&((W=t(this,V))==null||W.call(this,y,e,"set")),t(this,R)&&((_=t(this,T))==null||_.push([y,e,"set"])))}else a||(t(this,K)&&((P=t(this,V))==null||P.call(this,d,e,"set")),t(this,R)&&((x=t(this,T))==null||x.push([d,e,"set"])));if(t(this,ot).call(this,w),t(this,ft).call(this,w,F,c),t(this,p)[w]=i,c){c.set="replace";const y=d&&u(this,l,S).call(this,d)?d.__staleWhileFetching:d;y!==void 0&&(c.oldValue=y)}}else c&&(c.set="update")}if(o!==0&&!t(this,G)&&u(this,l,Ct).call(this),t(this,G)&&(m||t(this,pt).call(this,w,o,r),c&&t(this,Z).call(this,c,w)),!a&&t(this,R)&&t(this,T)){const d=t(this,T);let y;for(;y=d==null?void 0:d.shift();)(j=t(this,B))==null||j.call(this,...y)}return this}pop(){var e;try{for(;t(this,A);){const i=t(this,p)[t(this,z)];if(u(this,l,wt).call(this,!0),u(this,l,S).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(t(this,R)&&t(this,T)){const i=t(this,T);let s;for(;s=i==null?void 0:i.shift();)(e=t(this,B))==null||e.call(this,...s)}}}has(e,i={}){const{updateAgeOnHas:s=this.updateAgeOnHas,status:o}=i,r=t(this,v).get(e);if(r!==void 0){const a=t(this,p)[r];if(u(this,l,S).call(this,a)&&a.__staleWhileFetching===void 0)return!1;if(t(this,k).call(this,r))o&&(o.has="stale",t(this,Z).call(this,o,r));else return s&&t(this,rt).call(this,r),o&&(o.has="hit",t(this,Z).call(this,o,r)),!0}else o&&(o.has="miss");return!1}peek(e,i={}){const{allowStale:s=this.allowStale}=i,o=t(this,v).get(e);if(o===void 0||!s&&t(this,k).call(this,o))return;const r=t(this,p)[o];return u(this,l,S).call(this,r)?r.__staleWhileFetching:r}async fetch(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:c=0,sizeCalculation:m=this.sizeCalculation,noUpdateTTL:F=this.noUpdateTTL,noDeleteOnFetchRejection:w=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:W=this.allowStaleOnFetchRejection,ignoreFetchAbort:_=this.ignoreFetchAbort,allowStaleOnFetchAbort:P=this.allowStaleOnFetchAbort,context:x,forceRefresh:j=!1,status:d,signal:y}=i;if(!t(this,it))return d&&(d.fetch="get"),this.get(e,{allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,status:d});const L={allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,ttl:a,noDisposeOnSet:h,size:c,sizeCalculation:m,noUpdateTTL:F,noDeleteOnFetchRejection:w,allowStaleOnFetchRejection:W,allowStaleOnFetchAbort:P,ignoreFetchAbort:_,status:d,signal:y};let D=t(this,v).get(e);if(D===void 0){d&&(d.fetch="miss");const H=u(this,l,_t).call(this,e,D,L,x);return H.__returned=H}else{const H=t(this,p)[D];if(u(this,l,S).call(this,H)){const Wt=s&&H.__staleWhileFetching!==void 0;return d&&(d.fetch="inflight",Wt&&(d.returnedStale=!0)),Wt?H.__staleWhileFetching:H.__returned=H}const st=t(this,k).call(this,D);if(!j&&!st)return d&&(d.fetch="hit"),u(this,l,dt).call(this,D),o&&t(this,rt).call(this,D),d&&t(this,Z).call(this,d,D),H;const J=u(this,l,_t).call(this,e,D,L,x),Rt=J.__staleWhileFetching!==void 0&&s;return d&&(d.fetch=st?"stale":"refresh",Rt&&st&&(d.returnedStale=!0)),Rt?J.__staleWhileFetching:J.__returned=J}}get(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:a}=i,h=t(this,v).get(e);if(h!==void 0){const c=t(this,p)[h],m=u(this,l,S).call(this,c);return a&&t(this,Z).call(this,a,h),t(this,k).call(this,h)?(a&&(a.get="stale"),m?(a&&s&&c.__staleWhileFetching!==void 0&&(a.returnedStale=!0),s?c.__staleWhileFetching:void 0):(r||this.delete(e),a&&s&&(a.returnedStale=!0),s?c:void 0)):(a&&(a.get="hit"),m?c.__staleWhileFetching:(u(this,l,dt).call(this,h),o&&t(this,rt).call(this,h),c))}else a&&(a.get="miss")}delete(e){var s,o,r,a;let i=!1;if(t(this,A)!==0){const h=t(this,v).get(e);if(h!==void 0)if(i=!0,t(this,A)===1)this.clear();else{t(this,ot).call(this,h);const c=t(this,p)[h];if(u(this,l,S).call(this,c)?c.__abortController.abort(new Error("deleted")):(t(this,K)||t(this,R))&&(t(this,K)&&((s=t(this,V))==null||s.call(this,c,e,"delete")),t(this,R)&&((o=t(this,T))==null||o.push([c,e,"delete"]))),t(this,v).delete(e),t(this,E)[h]=void 0,t(this,p)[h]=void 0,h===t(this,C))f(this,C,t(this,M)[h]);else if(h===t(this,z))f(this,z,t(this,N)[h]);else{const m=t(this,M)[h];t(this,N)[m]=t(this,N)[h];const F=t(this,N)[h];t(this,M)[F]=t(this,M)[h]}mt(this,A)._--,t(this,q).push(h)}}if(t(this,R)&&((r=t(this,T))!=null&&r.length)){const h=t(this,T);let c;for(;c=h==null?void 0:h.shift();)(a=t(this,B))==null||a.call(this,...c)}return i}clear(){var e,i,s;for(const o of u(this,l,et).call(this,{allowStale:!0})){const r=t(this,p)[o];if(u(this,l,S).call(this,r))r.__abortController.abort(new Error("deleted"));else{const a=t(this,E)[o];t(this,K)&&((e=t(this,V))==null||e.call(this,r,a,"delete")),t(this,R)&&((i=t(this,T))==null||i.push([r,a,"delete"]))}}if(t(this,v).clear(),t(this,p).fill(void 0),t(this,E).fill(void 0),t(this,G)&&t(this,Y)&&(t(this,G).fill(0),t(this,Y).fill(0)),t(this,X)&&t(this,X).fill(0),f(this,z,0),f(this,C,0),t(this,q).length=0,f(this,$,0),f(this,A,0),t(this,R)&&t(this,T)){const o=t(this,T);let r;for(;r=o==null?void 0:o.shift();)(s=t(this,B))==null||s.call(this,...r)}}};U=new WeakMap,I=new WeakMap,V=new WeakMap,B=new WeakMap,ut=new WeakMap,A=new WeakMap,$=new WeakMap,v=new WeakMap,E=new WeakMap,p=new WeakMap,N=new WeakMap,M=new WeakMap,z=new WeakMap,C=new WeakMap,q=new WeakMap,T=new WeakMap,X=new WeakMap,Y=new WeakMap,G=new WeakMap,K=new WeakMap,it=new WeakMap,R=new WeakMap,l=new WeakSet,Ct=function(){const e=new bt(t(this,U)),i=new bt(t(this,U));f(this,G,e),f(this,Y,i),f(this,pt,(r,a,h=lt.now())=>{if(i[r]=a!==0?h:0,e[r]=a,a!==0&&this.ttlAutopurge){const c=setTimeout(()=>{t(this,k).call(this,r)&&this.delete(t(this,E)[r])},a+1);c.unref&&c.unref()}}),f(this,rt,r=>{i[r]=e[r]!==0?lt.now():0}),f(this,Z,(r,a)=>{if(e[a]){const h=e[a],c=i[a];if(!h||!c)return;r.ttl=h,r.start=c,r.now=s||o();const m=r.now-c;r.remainingTTL=h-m}});let s=0;const o=()=>{const r=lt.now();if(this.ttlResolution>0){s=r;const a=setTimeout(()=>s=0,this.ttlResolution);a.unref&&a.unref()}return r};this.getRemainingTTL=r=>{const a=t(this,v).get(r);if(a===void 0)return 0;const h=e[a],c=i[a];if(!h||!c)return 1/0;const m=(s||o())-c;return h-m},f(this,k,r=>{const a=i[r],h=e[r];return!!h&&!!a&&(s||o())-a>h})},rt=new WeakMap,Z=new WeakMap,pt=new WeakMap,k=new WeakMap,Xt=function(){const e=new bt(t(this,U));f(this,$,0),f(this,X,e),f(this,ot,i=>{f(this,$,t(this,$)-e[i]),e[i]=0}),f(this,gt,(i,s,o,r)=>{if(u(this,l,S).call(this,s))return 0;if(!Q(o))if(r){if(typeof r!="function")throw new TypeError("sizeCalculation must be a function");if(o=r(s,i),!Q(o))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return o}),f(this,ft,(i,s,o)=>{if(e[i]=s,t(this,I)){const r=t(this,I)-e[i];for(;t(this,$)>r;)u(this,l,wt).call(this,!0)}f(this,$,t(this,$)+e[i]),o&&(o.entrySize=s,o.totalCalculatedSize=t(this,$))})},ot=new WeakMap,ft=new WeakMap,gt=new WeakMap,tt=function*({allowStale:e=this.allowStale}={}){if(t(this,A))for(let i=t(this,C);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,z)));)i=t(this,M)[i]},et=function*({allowStale:e=this.allowStale}={}){if(t(this,A))for(let i=t(this,z);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,C)));)i=t(this,N)[i]},Tt=function(e){return e!==void 0&&t(this,v).get(t(this,E)[e])===e},wt=function(e){var r,a;const i=t(this,z),s=t(this,E)[i],o=t(this,p)[i];return t(this,it)&&u(this,l,S).call(this,o)?o.__abortController.abort(new Error("evicted")):(t(this,K)||t(this,R))&&(t(this,K)&&((r=t(this,V))==null||r.call(this,o,s,"evict")),t(this,R)&&((a=t(this,T))==null||a.push([o,s,"evict"]))),t(this,ot).call(this,i),e&&(t(this,E)[i]=void 0,t(this,p)[i]=void 0,t(this,q).push(i)),t(this,A)===1?(f(this,z,f(this,C,0)),t(this,q).length=0):f(this,z,t(this,N)[i]),t(this,v).delete(s),mt(this,A)._--,i},_t=function(e,i,s,o){const r=i===void 0?void 0:t(this,p)[i];if(u(this,l,S).call(this,r))return r;const a=new yt,{signal:h}=s;h==null||h.addEventListener("abort",()=>a.abort(h.reason),{signal:a.signal});const c={signal:a.signal,options:s,context:o},m=(x,j=!1)=>{const{aborted:d}=a.signal,y=s.ignoreFetchAbort&&x!==void 0;if(s.status&&(d&&!j?(s.status.fetchAborted=!0,s.status.fetchError=a.signal.reason,y&&(s.status.fetchAbortIgnored=!0)):s.status.fetchResolved=!0),d&&!y&&!j)return w(a.signal.reason);const L=_;return t(this,p)[i]===_&&(x===void 0?L.__staleWhileFetching?t(this,p)[i]=L.__staleWhileFetching:this.delete(e):(s.status&&(s.status.fetchUpdated=!0),this.set(e,x,c.options))),x},F=x=>(s.status&&(s.status.fetchRejected=!0,s.status.fetchError=x),w(x)),w=x=>{const{aborted:j}=a.signal,d=j&&s.allowStaleOnFetchAbort,y=d||s.allowStaleOnFetchRejection,L=y||s.noDeleteOnFetchRejection,D=_;if(t(this,p)[i]===_&&(!L||D.__staleWhileFetching===void 0?this.delete(e):d||(t(this,p)[i]=D.__staleWhileFetching)),y)return s.status&&D.__staleWhileFetching!==void 0&&(s.status.returnedStale=!0),D.__staleWhileFetching;if(D.__returned===D)throw x},W=(x,j)=>{var y;const d=(y=t(this,ut))==null?void 0:y.call(this,e,r,c);d&&d instanceof Promise&&d.then(L=>x(L===void 0?void 0:L),j),a.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(x(void 0),s.allowStaleOnFetchAbort&&(x=L=>m(L,!0)))})};s.status&&(s.status.fetchDispatched=!0);const _=new Promise(W).then(m,F),P=Object.assign(_,{__abortController:a,__staleWhileFetching:r,__returned:void 0});return i===void 0?(this.set(e,P,{...c.options,status:void 0}),i=t(this,v).get(e)):t(this,p)[i]=P,P},S=function(e){if(!t(this,it))return!1;const i=e;return!!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof yt},Dt=function(e,i){t(this,M)[i]=e,t(this,N)[e]=i},dt=function(e){e!==t(this,C)&&(e===t(this,z)?f(this,z,t(this,N)[e]):u(this,l,Dt).call(this,t(this,M)[e],t(this,N)[e]),u(this,l,Dt).call(this,t(this,C),e),f(this,C,e))};let jt=Nt;var Et={};Object.defineProperty(Et,"__esModule",{value:!0});Et.getMDXComponent=_e;Et.getMDXExport=Kt;var me=Pt(at),be=Pt(g),we=Pt(se);function Yt(n){if(typeof WeakMap!="function")return null;var e=new WeakMap,i=new WeakMap;return(Yt=function(s){return s?i:e})(n)}function Pt(n,e){if(n&&n.__esModule)return n;if(n===null||typeof n!="object"&&typeof n!="function")return{default:n};var i=Yt(e);if(i&&i.has(n))return i.get(n);var s={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in n)if(r!=="default"&&{}.hasOwnProperty.call(n,r)){var a=o?Object.getOwnPropertyDescriptor(n,r):null;a&&(a.get||a.set)?Object.defineProperty(s,r,a):s[r]=n[r]}return s.default=n,i&&i.set(n,s),s}function _e(n,e){return Kt(n,e).default}function Kt(n,e){const i={React:me,ReactDOM:we,_jsx_runtime:be,...e};return new Function(...Object.keys(i),n)(...Object.values(i))}var ye=Et;const Ot=n=>n.replace(/\\/g,"/");function Zt(n,e,i){const[,s]=n.replace(/\\|\//g,e).split(`${i==="playground"?"example":"exercises"}${e}`);return s}const zt="border-border bg-[var(--shiki-background)] hover:bg-foreground/20 active:bg-foreground/30 box-content block rounded border-2 px-2 py-0.5 font-mono text-xs font-semibold outline-none transition duration-300 ease-in-out";function Se({"data-buttons":n,"data-filename":e,"data-fullpath":i,"data-sep":s="/","data-start":o,"data-type":r}){var W;const a=ne();if(r==="other"||!n||!e||!i)return null;const h=Ot(((W=a[a.type])==null?void 0:W.fullPath)??""),c=!i.startsWith(h),m=ENV.EPICSHOP_DEPLOYED?["problem","solution"]:["problem","solution","playground"],F=n.split(","),w=m.filter(_=>F.includes(_));return g.jsx(g.Fragment,{children:w.map(_=>{var d;const P=a[_];if(_==="playground"){const y=a.playground&&a.playground.appName!==((d=a.problem)==null?void 0:d.name);if(!P||y||c)return g.jsxs("button",{className:St(zt,"cursor-not-allowed"),title:y?"Playground is not set to the right app":c?"This file is from different app":"You must 'Set to Playground' before opening a file",children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]},_)}if(!P||!P.fullPath)return null;const x=[Ot(P.fullPath),Ot(e)].join(s),j=Zt(x,s,_);return g.jsx(Vt,{file:x,line:Number(o??1),children:g.jsxs("span",{title:j,className:zt,children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]})},_)})})}function Ee(){const[n,e]=at.useState(!1);return at.useEffect(()=>{if(n){const i=setTimeout(()=>e(!1),1500);return()=>clearTimeout(i)}},[n]),g.jsx("button",{className:he(zt,"w-12 uppercase"),onClick:i=>{var r,a,h;e(!0);const o=((h=(a=(r=i.currentTarget.parentElement)==null?void 0:r.parentElement)==null?void 0:a.querySelector("pre"))==null?void 0:h.textContent)||"";navigator.clipboard.writeText(o)},children:n?"copied":"copy"})}function xe({children:n,...e}){const{"data-buttons":i,"data-filename":s,"data-fullpath":o,"data-nocopy":r,"data-sep":a}=e,h=r===void 0;function c(){if(o&&a)return!s||s.includes("..")?{"data-filename":Zt(o,a)}:{"data-filename":s.replace(/\//g,a)}}return g.jsxs("div",{className:"group relative",children:[g.jsxs("div",{className:"absolute right-0 top-0 z-50 m-2 flex items-baseline justify-end gap-4 opacity-0 transition duration-300 ease-in-out focus-within:opacity-100 group-hover:opacity-100",children:[i?g.jsx(Se,{...e}):null,h?g.jsx(Ee,{}):null]}),g.jsx("pre",{...e,className:St("scrollbar-thin scrollbar-thumb-scrollbar",e.className??""),...c(),children:n})]})}const Oe={h1:n=>g.jsx(ht,{...n,as:"h1"}),h2:n=>g.jsx(ht,{...n,as:"h2"}),h3:n=>g.jsx(ht,{...n,as:"h3"}),h4:n=>g.jsx(ht,{...n,as:"h4"}),h5:n=>g.jsx(ht,{...n,as:"h5"}),h6:n=>g.jsx(ht,{...n,as:"h6"}),a:le,p:n=>g.jsx("div",{...n}),pre:n=>g.jsx("pre",{...n,className:St("scrollbar-thin scrollbar-thumb-scrollbar",n.className??"")}),LaunchEditor:Vt,VideoEmbed:re,EpicVideo:oe};function ve(n){const e=ye.getMDXComponent(n);function i({components:s,...o}){const r=at.useMemo(()=>({...Oe,...s}),[s]);return g.jsx(e,{components:r,...o})}return i}const vt=new jt({max:1e3});function Ae(n){return at.useMemo(()=>{if(vt.has(n))return vt.get(n);const e=ve(n);return vt.set(n,e),e},[n])}function Ie({code:n,components:e}){const i=Ae(n),s=at.useMemo(()=>({Icon:ae,pre:xe,Link:Ht,...e}),[e]);return g.jsx(i,{components:s})}export{Re as E,Vt as L,Ie as M};
2
- //# sourceMappingURL=mdx-Cb7iYGhg.js.map
1
+ var Qt=Object.defineProperty;var Lt=n=>{throw TypeError(n)};var te=(n,e,i)=>e in n?Qt(n,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):n[e]=i;var O=(n,e,i)=>te(n,typeof e!="symbol"?e+"":e,i),xt=(n,e,i)=>e.has(n)||Lt("Cannot "+i);var t=(n,e,i)=>(xt(n,e,"read from private field"),i?i.call(n):e.get(n)),b=(n,e,i)=>e.has(n)?Lt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,i),f=(n,e,i,s)=>(xt(n,e,"write to private field"),s?s.call(n,i):e.set(n,i),i),u=(n,e,i)=>(xt(n,e,"access private method"),i);var mt=(n,e,i,s)=>({set _(o){f(n,e,o,i)},get _(){return t(n,e,s)}});import{j as g,r as at}from"./index-1cKOJFpX.js";import{c as St}from"./clsx-B-dksMZM.js";import{e as ee,L as Ht,a as ie,r as se,u as ne}from"./components-CME-nGId.js";import{V as re,D as oe}from"./epic-video-iluUs1-s.js";import{I as ae,c as he,H as ht,A as le}from"./misc-ENVX3CWf.js";import{s as ce}from"./progress-bar-CSvo1ZXP.js";import{u as ue}from"./request-info-CEhUGODY.js";function fe(){const n=ee("root");if(!n)throw new Error("useApps requires a data object from the root loader");return n.apps}function Ut(n){const e=ie();return at.useEffect(()=>{e.state==="idle"&&e.data!=null&&(n==null||n("fetcher-done"))},[e,n]),e}function de({file:n,appFile:e,appName:i,syncTo:s,line:o,column:r,children:a,onUpdate:h}){var W;const c=Ut(h),m=typeof e=="string"?[e]:e,F=n?"file":e?"appFile":"",w=s!=null&&s.file?"file":s!=null&&s.appFile?"appFile":"";return g.jsxs(c.Form,{action:"/launch-editor",method:"POST",className:"flex items-center",children:[ce,g.jsx("input",{type:"hidden",name:"line",value:o}),g.jsx("input",{type:"hidden",name:"column",value:r}),g.jsx("input",{type:"hidden",name:"type",value:F}),g.jsx("input",{type:"hidden",name:"file",value:n}),g.jsx("input",{type:"hidden",name:"appName",value:i}),m==null?void 0:m.map(_=>g.jsx("input",{type:"hidden",name:"appFile",value:_},_)),s?g.jsxs(g.Fragment,{children:[g.jsx("input",{type:"hidden",name:"syncTo.type",value:w}),g.jsx("input",{type:"hidden",name:"syncTo.file",value:s.file}),g.jsx("input",{type:"hidden",name:"syncTo.appName",value:s.appName}),g.jsx("input",{type:"hidden",name:"syncTo.appFile",value:s.appFile})]}):null,g.jsx("button",{type:"submit",className:St("launch_button",c.state==="idle"?null:"cursor-progress",((W=c.data)==null?void 0:W.status)==="error"?"cursor-not-allowed":null),children:a})]})}function pe({file:n,appFile:e,appName:i,line:s,children:o}){const r=fe(),a=ue();if(Array.isArray(e))return g.jsx("div",{children:"Cannot open more than one file"});if(n){const m=F=>F.replace(/\\/g,"/");return g.jsx("a",{className:"launch_button !no-underline",href:m(n).replace(m(ENV.EPICSHOP_CONTEXT_CWD),ENV.EPICSHOP_GITHUB_ROOT)+(s?`#L${s}`:""),rel:"noreferrer",target:"_blank",children:o})}const h=r.find(m=>m.name===i),c=[...(h==null?void 0:h.relativePath.split(a.separator))??[],e+(s?`#L${s}`:"")].join("/");return g.jsx("a",{className:"launch_button !no-underline",href:`${ENV.EPICSHOP_GITHUB_ROOT}/${c}`,rel:"noreferrer",target:"_blank",children:o})}function Re({appFile:n="README.mdx",appName:e,file:i,relativePath:s}){const o=Ut(),r=h=>{if(!h.altKey||ENV.EPICSHOP_DEPLOYED)return;h.preventDefault();const c=new FormData,m=i?"file":"appFile";c.append(m,i??n),c.append("type",m),e&&c.append("appName",e),o.submit(c,{method:"POST",action:"/launch-editor"})},a=ENV.EPICSHOP_GITHUB_ROOT.replace(/\/tree\/|\/blob\//,"/edit/");return g.jsxs(Ht,{className:"self-center font-mono text-sm",onClick:r,target:"_blank",to:`${a}/${s}/${n}`.replace(/\\/g,"/"),children:[g.jsx("span",{className:"block md:hidden",children:"Edit on GitHub"}),g.jsx("span",{className:"hidden md:block",children:"Edit this page on GitHub"})]})}const Vt=ENV.EPICSHOP_DEPLOYED?pe:de,lt=typeof performance=="object"&&performance&&typeof performance.now=="function"?performance:Date,Bt=new Set,At=typeof process=="object"&&process?process:{},$t=(n,e,i,s)=>{typeof At.emitWarning=="function"?At.emitWarning(n,e,i,s):console.error(`[${i}] ${e}: ${n}`)};let yt=globalThis.AbortController,It=globalThis.AbortSignal;var Mt;if(typeof yt>"u"){It=class{constructor(){O(this,"onabort");O(this,"_onabort",[]);O(this,"reason");O(this,"aborted",!1)}addEventListener(s,o){this._onabort.push(o)}},yt=class{constructor(){O(this,"signal",new It);e()}abort(s){var o,r;if(!this.signal.aborted){this.signal.reason=s,this.signal.aborted=!0;for(const a of this.signal._onabort)a(s);(r=(o=this.signal).onabort)==null||r.call(o,s)}}};let n=((Mt=At.env)==null?void 0:Mt.LRU_CACHE_IGNORE_AC_WARNING)!=="1";const e=()=>{n&&(n=!1,$t("AbortController is not defined. If using lru-cache in node 14, load an AbortController polyfill from the `node-abort-controller` package. A minimal polyfill is provided for use by LRUCache.fetch(), but it should not be relied upon in other contexts (eg, passing it to other APIs that use AbortController/AbortSignal might have undesirable effects). You may disable this with LRU_CACHE_IGNORE_AC_WARNING=1 in the env.","NO_ABORT_CONTROLLER","ENOTSUP",e))}}const ge=n=>!Bt.has(n),Q=n=>n&&n===Math.floor(n)&&n>0&&isFinite(n),qt=n=>Q(n)?n<=Math.pow(2,8)?Uint8Array:n<=Math.pow(2,16)?Uint16Array:n<=Math.pow(2,32)?Uint32Array:n<=Number.MAX_SAFE_INTEGER?bt:null:null;class bt extends Array{constructor(e){super(e),this.fill(0)}}var ct;const nt=class nt{constructor(e,i){O(this,"heap");O(this,"length");if(!t(nt,ct))throw new TypeError("instantiate Stack using Stack.create(n)");this.heap=new i(e),this.length=0}static create(e){const i=qt(e);if(!i)return[];f(nt,ct,!0);const s=new nt(e,i);return f(nt,ct,!1),s}push(e){this.heap[this.length++]=e}pop(){return this.heap[--this.length]}};ct=new WeakMap,b(nt,ct,!1);let Ft=nt;var Gt,kt,U,I,V,B,ut,A,$,v,E,p,N,M,z,C,q,T,X,Y,G,K,it,R,l,Ct,rt,Z,pt,k,Xt,ot,ft,gt,tt,et,Tt,wt,_t,S,Dt,dt;const Nt=class Nt{constructor(e){b(this,l);b(this,U);b(this,I);b(this,V);b(this,B);b(this,ut);O(this,"ttl");O(this,"ttlResolution");O(this,"ttlAutopurge");O(this,"updateAgeOnGet");O(this,"updateAgeOnHas");O(this,"allowStale");O(this,"noDisposeOnSet");O(this,"noUpdateTTL");O(this,"maxEntrySize");O(this,"sizeCalculation");O(this,"noDeleteOnFetchRejection");O(this,"noDeleteOnStaleGet");O(this,"allowStaleOnFetchAbort");O(this,"allowStaleOnFetchRejection");O(this,"ignoreFetchAbort");b(this,A);b(this,$);b(this,v);b(this,E);b(this,p);b(this,N);b(this,M);b(this,z);b(this,C);b(this,q);b(this,T);b(this,X);b(this,Y);b(this,G);b(this,K);b(this,it);b(this,R);b(this,rt,()=>{});b(this,Z,()=>{});b(this,pt,()=>{});b(this,k,()=>!1);b(this,ot,e=>{});b(this,ft,(e,i,s)=>{});b(this,gt,(e,i,s,o)=>{if(s||o)throw new TypeError("cannot set size without setting maxSize or maxEntrySize on cache");return 0});O(this,Gt,"LRUCache");const{max:i=0,ttl:s,ttlResolution:o=1,ttlAutopurge:r,updateAgeOnGet:a,updateAgeOnHas:h,allowStale:c,dispose:m,disposeAfter:F,noDisposeOnSet:w,noUpdateTTL:W,maxSize:_=0,maxEntrySize:P=0,sizeCalculation:x,fetchMethod:j,noDeleteOnFetchRejection:d,noDeleteOnStaleGet:y,allowStaleOnFetchRejection:L,allowStaleOnFetchAbort:D,ignoreFetchAbort:H}=e;if(i!==0&&!Q(i))throw new TypeError("max option must be a nonnegative integer");const st=i?qt(i):Array;if(!st)throw new Error("invalid max value: "+i);if(f(this,U,i),f(this,I,_),this.maxEntrySize=P||t(this,I),this.sizeCalculation=x,this.sizeCalculation){if(!t(this,I)&&!this.maxEntrySize)throw new TypeError("cannot set sizeCalculation without setting maxSize or maxEntrySize");if(typeof this.sizeCalculation!="function")throw new TypeError("sizeCalculation set to non-function")}if(j!==void 0&&typeof j!="function")throw new TypeError("fetchMethod must be a function if specified");if(f(this,ut,j),f(this,it,!!j),f(this,v,new Map),f(this,E,new Array(i).fill(void 0)),f(this,p,new Array(i).fill(void 0)),f(this,N,new st(i)),f(this,M,new st(i)),f(this,z,0),f(this,C,0),f(this,q,Ft.create(i)),f(this,A,0),f(this,$,0),typeof m=="function"&&f(this,V,m),typeof F=="function"?(f(this,B,F),f(this,T,[])):(f(this,B,void 0),f(this,T,void 0)),f(this,K,!!t(this,V)),f(this,R,!!t(this,B)),this.noDisposeOnSet=!!w,this.noUpdateTTL=!!W,this.noDeleteOnFetchRejection=!!d,this.allowStaleOnFetchRejection=!!L,this.allowStaleOnFetchAbort=!!D,this.ignoreFetchAbort=!!H,this.maxEntrySize!==0){if(t(this,I)!==0&&!Q(t(this,I)))throw new TypeError("maxSize must be a positive integer if specified");if(!Q(this.maxEntrySize))throw new TypeError("maxEntrySize must be a positive integer if specified");u(this,l,Xt).call(this)}if(this.allowStale=!!c,this.noDeleteOnStaleGet=!!y,this.updateAgeOnGet=!!a,this.updateAgeOnHas=!!h,this.ttlResolution=Q(o)||o===0?o:1,this.ttlAutopurge=!!r,this.ttl=s||0,this.ttl){if(!Q(this.ttl))throw new TypeError("ttl must be a positive integer if specified");u(this,l,Ct).call(this)}if(t(this,U)===0&&this.ttl===0&&t(this,I)===0)throw new TypeError("At least one of max, maxSize, or ttl is required");if(!this.ttlAutopurge&&!t(this,U)&&!t(this,I)){const J="LRU_CACHE_UNBOUNDED";ge(J)&&(Bt.add(J),$t("TTL caching without ttlAutopurge, max, or maxSize can result in unbounded memory consumption.","UnboundedCacheWarning",J,Nt))}}static unsafeExposeInternals(e){return{starts:t(e,Y),ttls:t(e,G),sizes:t(e,X),keyMap:t(e,v),keyList:t(e,E),valList:t(e,p),next:t(e,N),prev:t(e,M),get head(){return t(e,z)},get tail(){return t(e,C)},free:t(e,q),isBackgroundFetch:i=>{var s;return u(s=e,l,S).call(s,i)},backgroundFetch:(i,s,o,r)=>{var a;return u(a=e,l,_t).call(a,i,s,o,r)},moveToTail:i=>{var s;return u(s=e,l,dt).call(s,i)},indexes:i=>{var s;return u(s=e,l,tt).call(s,i)},rindexes:i=>{var s;return u(s=e,l,et).call(s,i)},isStale:i=>{var s;return t(s=e,k).call(s,i)}}}get max(){return t(this,U)}get maxSize(){return t(this,I)}get calculatedSize(){return t(this,$)}get size(){return t(this,A)}get fetchMethod(){return t(this,ut)}get dispose(){return t(this,V)}get disposeAfter(){return t(this,B)}getRemainingTTL(e){return t(this,v).has(e)?1/0:0}*entries(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*rentries(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&t(this,E)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield[t(this,E)[e],t(this,p)[e]])}*keys(){for(const e of u(this,l,tt).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*rkeys(){for(const e of u(this,l,et).call(this)){const i=t(this,E)[e];i!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield i)}}*values(){for(const e of u(this,l,tt).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}*rvalues(){for(const e of u(this,l,et).call(this))t(this,p)[e]!==void 0&&!u(this,l,S).call(this,t(this,p)[e])&&(yield t(this,p)[e])}[(kt=Symbol.iterator,Gt=Symbol.toStringTag,kt)](){return this.entries()}find(e,i={}){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r!==void 0&&e(r,t(this,E)[s],this))return this.get(t(this,E)[s],i)}}forEach(e,i=this){for(const s of u(this,l,tt).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}rforEach(e,i=this){for(const s of u(this,l,et).call(this)){const o=t(this,p)[s],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;r!==void 0&&e.call(i,r,t(this,E)[s],this)}}purgeStale(){let e=!1;for(const i of u(this,l,et).call(this,{allowStale:!0}))t(this,k).call(this,i)&&(this.delete(t(this,E)[i]),e=!0);return e}info(e){const i=t(this,v).get(e);if(i===void 0)return;const s=t(this,p)[i],o=u(this,l,S).call(this,s)?s.__staleWhileFetching:s;if(o===void 0)return;const r={value:o};if(t(this,G)&&t(this,Y)){const a=t(this,G)[i],h=t(this,Y)[i];if(a&&h){const c=a-(lt.now()-h);r.ttl=c,r.start=Date.now()}}return t(this,X)&&(r.size=t(this,X)[i]),r}dump(){const e=[];for(const i of u(this,l,tt).call(this,{allowStale:!0})){const s=t(this,E)[i],o=t(this,p)[i],r=u(this,l,S).call(this,o)?o.__staleWhileFetching:o;if(r===void 0||s===void 0)continue;const a={value:r};if(t(this,G)&&t(this,Y)){a.ttl=t(this,G)[i];const h=lt.now()-t(this,Y)[i];a.start=Math.floor(Date.now()-h)}t(this,X)&&(a.size=t(this,X)[i]),e.unshift([s,a])}return e}load(e){this.clear();for(const[i,s]of e){if(s.start){const o=Date.now()-s.start;s.start=lt.now()-o}this.set(i,s.value,s)}}set(e,i,s={}){var W,_,P,x,j;if(i===void 0)return this.delete(e),this;const{ttl:o=this.ttl,start:r,noDisposeOnSet:a=this.noDisposeOnSet,sizeCalculation:h=this.sizeCalculation,status:c}=s;let{noUpdateTTL:m=this.noUpdateTTL}=s;const F=t(this,gt).call(this,e,i,s.size||0,h);if(this.maxEntrySize&&F>this.maxEntrySize)return c&&(c.set="miss",c.maxEntrySizeExceeded=!0),this.delete(e),this;let w=t(this,A)===0?void 0:t(this,v).get(e);if(w===void 0)w=t(this,A)===0?t(this,C):t(this,q).length!==0?t(this,q).pop():t(this,A)===t(this,U)?u(this,l,wt).call(this,!1):t(this,A),t(this,E)[w]=e,t(this,p)[w]=i,t(this,v).set(e,w),t(this,N)[t(this,C)]=w,t(this,M)[w]=t(this,C),f(this,C,w),mt(this,A)._++,t(this,ft).call(this,w,F,c),c&&(c.set="add"),m=!1;else{u(this,l,dt).call(this,w);const d=t(this,p)[w];if(i!==d){if(t(this,it)&&u(this,l,S).call(this,d)){d.__abortController.abort(new Error("replaced"));const{__staleWhileFetching:y}=d;y!==void 0&&!a&&(t(this,K)&&((W=t(this,V))==null||W.call(this,y,e,"set")),t(this,R)&&((_=t(this,T))==null||_.push([y,e,"set"])))}else a||(t(this,K)&&((P=t(this,V))==null||P.call(this,d,e,"set")),t(this,R)&&((x=t(this,T))==null||x.push([d,e,"set"])));if(t(this,ot).call(this,w),t(this,ft).call(this,w,F,c),t(this,p)[w]=i,c){c.set="replace";const y=d&&u(this,l,S).call(this,d)?d.__staleWhileFetching:d;y!==void 0&&(c.oldValue=y)}}else c&&(c.set="update")}if(o!==0&&!t(this,G)&&u(this,l,Ct).call(this),t(this,G)&&(m||t(this,pt).call(this,w,o,r),c&&t(this,Z).call(this,c,w)),!a&&t(this,R)&&t(this,T)){const d=t(this,T);let y;for(;y=d==null?void 0:d.shift();)(j=t(this,B))==null||j.call(this,...y)}return this}pop(){var e;try{for(;t(this,A);){const i=t(this,p)[t(this,z)];if(u(this,l,wt).call(this,!0),u(this,l,S).call(this,i)){if(i.__staleWhileFetching)return i.__staleWhileFetching}else if(i!==void 0)return i}}finally{if(t(this,R)&&t(this,T)){const i=t(this,T);let s;for(;s=i==null?void 0:i.shift();)(e=t(this,B))==null||e.call(this,...s)}}}has(e,i={}){const{updateAgeOnHas:s=this.updateAgeOnHas,status:o}=i,r=t(this,v).get(e);if(r!==void 0){const a=t(this,p)[r];if(u(this,l,S).call(this,a)&&a.__staleWhileFetching===void 0)return!1;if(t(this,k).call(this,r))o&&(o.has="stale",t(this,Z).call(this,o,r));else return s&&t(this,rt).call(this,r),o&&(o.has="hit",t(this,Z).call(this,o,r)),!0}else o&&(o.has="miss");return!1}peek(e,i={}){const{allowStale:s=this.allowStale}=i,o=t(this,v).get(e);if(o===void 0||!s&&t(this,k).call(this,o))return;const r=t(this,p)[o];return u(this,l,S).call(this,r)?r.__staleWhileFetching:r}async fetch(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,ttl:a=this.ttl,noDisposeOnSet:h=this.noDisposeOnSet,size:c=0,sizeCalculation:m=this.sizeCalculation,noUpdateTTL:F=this.noUpdateTTL,noDeleteOnFetchRejection:w=this.noDeleteOnFetchRejection,allowStaleOnFetchRejection:W=this.allowStaleOnFetchRejection,ignoreFetchAbort:_=this.ignoreFetchAbort,allowStaleOnFetchAbort:P=this.allowStaleOnFetchAbort,context:x,forceRefresh:j=!1,status:d,signal:y}=i;if(!t(this,it))return d&&(d.fetch="get"),this.get(e,{allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,status:d});const L={allowStale:s,updateAgeOnGet:o,noDeleteOnStaleGet:r,ttl:a,noDisposeOnSet:h,size:c,sizeCalculation:m,noUpdateTTL:F,noDeleteOnFetchRejection:w,allowStaleOnFetchRejection:W,allowStaleOnFetchAbort:P,ignoreFetchAbort:_,status:d,signal:y};let D=t(this,v).get(e);if(D===void 0){d&&(d.fetch="miss");const H=u(this,l,_t).call(this,e,D,L,x);return H.__returned=H}else{const H=t(this,p)[D];if(u(this,l,S).call(this,H)){const Wt=s&&H.__staleWhileFetching!==void 0;return d&&(d.fetch="inflight",Wt&&(d.returnedStale=!0)),Wt?H.__staleWhileFetching:H.__returned=H}const st=t(this,k).call(this,D);if(!j&&!st)return d&&(d.fetch="hit"),u(this,l,dt).call(this,D),o&&t(this,rt).call(this,D),d&&t(this,Z).call(this,d,D),H;const J=u(this,l,_t).call(this,e,D,L,x),Rt=J.__staleWhileFetching!==void 0&&s;return d&&(d.fetch=st?"stale":"refresh",Rt&&st&&(d.returnedStale=!0)),Rt?J.__staleWhileFetching:J.__returned=J}}get(e,i={}){const{allowStale:s=this.allowStale,updateAgeOnGet:o=this.updateAgeOnGet,noDeleteOnStaleGet:r=this.noDeleteOnStaleGet,status:a}=i,h=t(this,v).get(e);if(h!==void 0){const c=t(this,p)[h],m=u(this,l,S).call(this,c);return a&&t(this,Z).call(this,a,h),t(this,k).call(this,h)?(a&&(a.get="stale"),m?(a&&s&&c.__staleWhileFetching!==void 0&&(a.returnedStale=!0),s?c.__staleWhileFetching:void 0):(r||this.delete(e),a&&s&&(a.returnedStale=!0),s?c:void 0)):(a&&(a.get="hit"),m?c.__staleWhileFetching:(u(this,l,dt).call(this,h),o&&t(this,rt).call(this,h),c))}else a&&(a.get="miss")}delete(e){var s,o,r,a;let i=!1;if(t(this,A)!==0){const h=t(this,v).get(e);if(h!==void 0)if(i=!0,t(this,A)===1)this.clear();else{t(this,ot).call(this,h);const c=t(this,p)[h];if(u(this,l,S).call(this,c)?c.__abortController.abort(new Error("deleted")):(t(this,K)||t(this,R))&&(t(this,K)&&((s=t(this,V))==null||s.call(this,c,e,"delete")),t(this,R)&&((o=t(this,T))==null||o.push([c,e,"delete"]))),t(this,v).delete(e),t(this,E)[h]=void 0,t(this,p)[h]=void 0,h===t(this,C))f(this,C,t(this,M)[h]);else if(h===t(this,z))f(this,z,t(this,N)[h]);else{const m=t(this,M)[h];t(this,N)[m]=t(this,N)[h];const F=t(this,N)[h];t(this,M)[F]=t(this,M)[h]}mt(this,A)._--,t(this,q).push(h)}}if(t(this,R)&&((r=t(this,T))!=null&&r.length)){const h=t(this,T);let c;for(;c=h==null?void 0:h.shift();)(a=t(this,B))==null||a.call(this,...c)}return i}clear(){var e,i,s;for(const o of u(this,l,et).call(this,{allowStale:!0})){const r=t(this,p)[o];if(u(this,l,S).call(this,r))r.__abortController.abort(new Error("deleted"));else{const a=t(this,E)[o];t(this,K)&&((e=t(this,V))==null||e.call(this,r,a,"delete")),t(this,R)&&((i=t(this,T))==null||i.push([r,a,"delete"]))}}if(t(this,v).clear(),t(this,p).fill(void 0),t(this,E).fill(void 0),t(this,G)&&t(this,Y)&&(t(this,G).fill(0),t(this,Y).fill(0)),t(this,X)&&t(this,X).fill(0),f(this,z,0),f(this,C,0),t(this,q).length=0,f(this,$,0),f(this,A,0),t(this,R)&&t(this,T)){const o=t(this,T);let r;for(;r=o==null?void 0:o.shift();)(s=t(this,B))==null||s.call(this,...r)}}};U=new WeakMap,I=new WeakMap,V=new WeakMap,B=new WeakMap,ut=new WeakMap,A=new WeakMap,$=new WeakMap,v=new WeakMap,E=new WeakMap,p=new WeakMap,N=new WeakMap,M=new WeakMap,z=new WeakMap,C=new WeakMap,q=new WeakMap,T=new WeakMap,X=new WeakMap,Y=new WeakMap,G=new WeakMap,K=new WeakMap,it=new WeakMap,R=new WeakMap,l=new WeakSet,Ct=function(){const e=new bt(t(this,U)),i=new bt(t(this,U));f(this,G,e),f(this,Y,i),f(this,pt,(r,a,h=lt.now())=>{if(i[r]=a!==0?h:0,e[r]=a,a!==0&&this.ttlAutopurge){const c=setTimeout(()=>{t(this,k).call(this,r)&&this.delete(t(this,E)[r])},a+1);c.unref&&c.unref()}}),f(this,rt,r=>{i[r]=e[r]!==0?lt.now():0}),f(this,Z,(r,a)=>{if(e[a]){const h=e[a],c=i[a];if(!h||!c)return;r.ttl=h,r.start=c,r.now=s||o();const m=r.now-c;r.remainingTTL=h-m}});let s=0;const o=()=>{const r=lt.now();if(this.ttlResolution>0){s=r;const a=setTimeout(()=>s=0,this.ttlResolution);a.unref&&a.unref()}return r};this.getRemainingTTL=r=>{const a=t(this,v).get(r);if(a===void 0)return 0;const h=e[a],c=i[a];if(!h||!c)return 1/0;const m=(s||o())-c;return h-m},f(this,k,r=>{const a=i[r],h=e[r];return!!h&&!!a&&(s||o())-a>h})},rt=new WeakMap,Z=new WeakMap,pt=new WeakMap,k=new WeakMap,Xt=function(){const e=new bt(t(this,U));f(this,$,0),f(this,X,e),f(this,ot,i=>{f(this,$,t(this,$)-e[i]),e[i]=0}),f(this,gt,(i,s,o,r)=>{if(u(this,l,S).call(this,s))return 0;if(!Q(o))if(r){if(typeof r!="function")throw new TypeError("sizeCalculation must be a function");if(o=r(s,i),!Q(o))throw new TypeError("sizeCalculation return invalid (expect positive integer)")}else throw new TypeError("invalid size value (must be positive integer). When maxSize or maxEntrySize is used, sizeCalculation or size must be set.");return o}),f(this,ft,(i,s,o)=>{if(e[i]=s,t(this,I)){const r=t(this,I)-e[i];for(;t(this,$)>r;)u(this,l,wt).call(this,!0)}f(this,$,t(this,$)+e[i]),o&&(o.entrySize=s,o.totalCalculatedSize=t(this,$))})},ot=new WeakMap,ft=new WeakMap,gt=new WeakMap,tt=function*({allowStale:e=this.allowStale}={}){if(t(this,A))for(let i=t(this,C);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,z)));)i=t(this,M)[i]},et=function*({allowStale:e=this.allowStale}={}){if(t(this,A))for(let i=t(this,z);!(!u(this,l,Tt).call(this,i)||((e||!t(this,k).call(this,i))&&(yield i),i===t(this,C)));)i=t(this,N)[i]},Tt=function(e){return e!==void 0&&t(this,v).get(t(this,E)[e])===e},wt=function(e){var r,a;const i=t(this,z),s=t(this,E)[i],o=t(this,p)[i];return t(this,it)&&u(this,l,S).call(this,o)?o.__abortController.abort(new Error("evicted")):(t(this,K)||t(this,R))&&(t(this,K)&&((r=t(this,V))==null||r.call(this,o,s,"evict")),t(this,R)&&((a=t(this,T))==null||a.push([o,s,"evict"]))),t(this,ot).call(this,i),e&&(t(this,E)[i]=void 0,t(this,p)[i]=void 0,t(this,q).push(i)),t(this,A)===1?(f(this,z,f(this,C,0)),t(this,q).length=0):f(this,z,t(this,N)[i]),t(this,v).delete(s),mt(this,A)._--,i},_t=function(e,i,s,o){const r=i===void 0?void 0:t(this,p)[i];if(u(this,l,S).call(this,r))return r;const a=new yt,{signal:h}=s;h==null||h.addEventListener("abort",()=>a.abort(h.reason),{signal:a.signal});const c={signal:a.signal,options:s,context:o},m=(x,j=!1)=>{const{aborted:d}=a.signal,y=s.ignoreFetchAbort&&x!==void 0;if(s.status&&(d&&!j?(s.status.fetchAborted=!0,s.status.fetchError=a.signal.reason,y&&(s.status.fetchAbortIgnored=!0)):s.status.fetchResolved=!0),d&&!y&&!j)return w(a.signal.reason);const L=_;return t(this,p)[i]===_&&(x===void 0?L.__staleWhileFetching?t(this,p)[i]=L.__staleWhileFetching:this.delete(e):(s.status&&(s.status.fetchUpdated=!0),this.set(e,x,c.options))),x},F=x=>(s.status&&(s.status.fetchRejected=!0,s.status.fetchError=x),w(x)),w=x=>{const{aborted:j}=a.signal,d=j&&s.allowStaleOnFetchAbort,y=d||s.allowStaleOnFetchRejection,L=y||s.noDeleteOnFetchRejection,D=_;if(t(this,p)[i]===_&&(!L||D.__staleWhileFetching===void 0?this.delete(e):d||(t(this,p)[i]=D.__staleWhileFetching)),y)return s.status&&D.__staleWhileFetching!==void 0&&(s.status.returnedStale=!0),D.__staleWhileFetching;if(D.__returned===D)throw x},W=(x,j)=>{var y;const d=(y=t(this,ut))==null?void 0:y.call(this,e,r,c);d&&d instanceof Promise&&d.then(L=>x(L===void 0?void 0:L),j),a.signal.addEventListener("abort",()=>{(!s.ignoreFetchAbort||s.allowStaleOnFetchAbort)&&(x(void 0),s.allowStaleOnFetchAbort&&(x=L=>m(L,!0)))})};s.status&&(s.status.fetchDispatched=!0);const _=new Promise(W).then(m,F),P=Object.assign(_,{__abortController:a,__staleWhileFetching:r,__returned:void 0});return i===void 0?(this.set(e,P,{...c.options,status:void 0}),i=t(this,v).get(e)):t(this,p)[i]=P,P},S=function(e){if(!t(this,it))return!1;const i=e;return!!i&&i instanceof Promise&&i.hasOwnProperty("__staleWhileFetching")&&i.__abortController instanceof yt},Dt=function(e,i){t(this,M)[i]=e,t(this,N)[e]=i},dt=function(e){e!==t(this,C)&&(e===t(this,z)?f(this,z,t(this,N)[e]):u(this,l,Dt).call(this,t(this,M)[e],t(this,N)[e]),u(this,l,Dt).call(this,t(this,C),e),f(this,C,e))};let jt=Nt;var Et={};Object.defineProperty(Et,"__esModule",{value:!0});Et.getMDXComponent=_e;Et.getMDXExport=Kt;var me=Pt(at),be=Pt(g),we=Pt(se);function Yt(n){if(typeof WeakMap!="function")return null;var e=new WeakMap,i=new WeakMap;return(Yt=function(s){return s?i:e})(n)}function Pt(n,e){if(n&&n.__esModule)return n;if(n===null||typeof n!="object"&&typeof n!="function")return{default:n};var i=Yt(e);if(i&&i.has(n))return i.get(n);var s={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var r in n)if(r!=="default"&&{}.hasOwnProperty.call(n,r)){var a=o?Object.getOwnPropertyDescriptor(n,r):null;a&&(a.get||a.set)?Object.defineProperty(s,r,a):s[r]=n[r]}return s.default=n,i&&i.set(n,s),s}function _e(n,e){return Kt(n,e).default}function Kt(n,e){const i={React:me,ReactDOM:we,_jsx_runtime:be,...e};return new Function(...Object.keys(i),n)(...Object.values(i))}var ye=Et;const Ot=n=>n.replace(/\\/g,"/");function Zt(n,e,i){const[,s]=n.replace(/\\|\//g,e).split(`${i==="playground"?"example":"exercises"}${e}`);return s}const zt="border-border bg-[var(--shiki-background)] hover:bg-foreground/20 active:bg-foreground/30 box-content block rounded border-2 px-2 py-0.5 font-mono text-xs font-semibold outline-none transition duration-300 ease-in-out";function Se({"data-buttons":n,"data-filename":e,"data-fullpath":i,"data-sep":s="/","data-start":o,"data-type":r}){var W;const a=ne();if(r==="other"||!n||!e||!i)return null;const h=Ot(((W=a[a.type])==null?void 0:W.fullPath)??""),c=!i.startsWith(h),m=ENV.EPICSHOP_DEPLOYED?["problem","solution"]:["problem","solution","playground"],F=n.split(","),w=m.filter(_=>F.includes(_));return g.jsx(g.Fragment,{children:w.map(_=>{var d;const P=a[_];if(_==="playground"){const y=a.playground&&a.playground.appName!==((d=a.problem)==null?void 0:d.name);if(!P||y||c)return g.jsxs("button",{className:St(zt,"cursor-not-allowed"),title:y?"Playground is not set to the right app":c?"This file is from different app":"You must 'Set to Playground' before opening a file",children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]},_)}if(!P||!P.fullPath)return null;const x=[Ot(P.fullPath),Ot(e)].join(s),j=Zt(x,s,_);return g.jsx(Vt,{file:x,line:Number(o??1),children:g.jsxs("span",{title:j,className:zt,children:[g.jsx("span",{className:"uppercase",children:"Open"})," in ",_]})},_)})})}function Ee(){const[n,e]=at.useState(!1);return at.useEffect(()=>{if(n){const i=setTimeout(()=>e(!1),1500);return()=>clearTimeout(i)}},[n]),g.jsx("button",{className:he(zt,"w-12 uppercase"),onClick:i=>{var r,a,h;e(!0);const o=((h=(a=(r=i.currentTarget.parentElement)==null?void 0:r.parentElement)==null?void 0:a.querySelector("pre"))==null?void 0:h.textContent)||"";navigator.clipboard.writeText(o)},children:n?"copied":"copy"})}function xe({children:n,...e}){const{"data-buttons":i,"data-filename":s,"data-fullpath":o,"data-nocopy":r,"data-sep":a}=e,h=r===void 0;function c(){if(o&&a)return!s||s.includes("..")?{"data-filename":Zt(o,a)}:{"data-filename":s.replace(/\//g,a)}}return g.jsxs("div",{className:"group relative",children:[g.jsxs("div",{className:"absolute right-0 top-0 z-50 m-2 flex items-baseline justify-end gap-4 opacity-0 transition duration-300 ease-in-out focus-within:opacity-100 group-hover:opacity-100",children:[i?g.jsx(Se,{...e}):null,h?g.jsx(Ee,{}):null]}),g.jsx("pre",{...e,className:St("scrollbar-thin scrollbar-thumb-scrollbar",e.className??""),...c(),children:n})]})}const Oe={h1:n=>g.jsx(ht,{...n,as:"h1"}),h2:n=>g.jsx(ht,{...n,as:"h2"}),h3:n=>g.jsx(ht,{...n,as:"h3"}),h4:n=>g.jsx(ht,{...n,as:"h4"}),h5:n=>g.jsx(ht,{...n,as:"h5"}),h6:n=>g.jsx(ht,{...n,as:"h6"}),a:le,p:n=>g.jsx("div",{...n}),pre:n=>g.jsx("pre",{...n,className:St("scrollbar-thin scrollbar-thumb-scrollbar",n.className??"")}),LaunchEditor:Vt,VideoEmbed:re,EpicVideo:oe};function ve(n){const e=ye.getMDXComponent(n);function i({components:s,...o}){const r=at.useMemo(()=>({...Oe,...s}),[s]);return g.jsx(e,{components:r,...o})}return i}const vt=new jt({max:1e3});function Ae(n){return at.useMemo(()=>{if(vt.has(n))return vt.get(n);const e=ve(n);return vt.set(n,e),e},[n])}function Ie({code:n,components:e}){const i=Ae(n),s=at.useMemo(()=>({Icon:ae,pre:xe,Link:Ht,...e}),[e]);return g.jsx(i,{components:s})}export{Re as E,Vt as L,Ie as M};
2
+ //# sourceMappingURL=mdx-M0kcP-mP.js.map