@intlayer/design-system 9.5.0 → 9.5.2

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 (29) hide show
  1. package/dist/esm/api/index.mjs +2 -2
  2. package/dist/esm/api/useAuth/useOAuth2.mjs +1 -1
  3. package/dist/esm/api/useAuth/useSession.mjs +2 -2
  4. package/dist/esm/api/useUser/index.mjs +1 -1
  5. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
  6. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +2 -2
  7. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
  8. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +6 -6
  9. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -1
  10. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -1
  11. package/dist/esm/components/DictionaryFieldEditor/NodeEditor.mjs +2 -2
  12. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +2 -2
  13. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -1
  14. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs +53 -61
  15. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
  16. package/dist/esm/components/MarkDownRender/index.mjs +2 -1
  17. package/dist/esm/components/MarkDownRender/youtubeUrl.mjs +22 -0
  18. package/dist/esm/components/MarkDownRender/youtubeUrl.mjs.map +1 -0
  19. package/dist/esm/components/index.mjs +2 -1
  20. package/dist/esm/routes.mjs +3 -1
  21. package/dist/esm/routes.mjs.map +1 -1
  22. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
  23. package/dist/types/components/MarkDownRender/index.d.ts +2 -1
  24. package/dist/types/components/MarkDownRender/youtubeUrl.d.ts +17 -0
  25. package/dist/types/components/MarkDownRender/youtubeUrl.d.ts.map +1 -0
  26. package/dist/types/components/index.d.ts +2 -1
  27. package/dist/types/routes.d.ts +2 -0
  28. package/dist/types/routes.d.ts.map +1 -1
  29. package/package.json +25 -25
@@ -1,13 +1,12 @@
1
1
  import { useAiAPI, useAnalyticsAPI, useAssetAPI, useAuditAPI, useBitbucketAPI, useDictionaryAPI, useEditorAPI, useEnvironmentAPI, useGithubAPI, useGitlabAPI, useIntlayerAuth, useIntlayerOAuth, useIntlayerOAuthOptions, useNewsletterAPI, useOAuthAPI, useOrganizationAPI, useProjectAPI, useReviewerAPI, useSearchAPI, useShowcaseProjectAPI, useStripeAPI, useTagAPI, useTranslateAPI, useUserAPI } from "./useIntlayerAPI.mjs";
2
- import { useAddPasskey, useAskResetPassword, useChangePassword, useDeletePasskey, useDeleteSSOProvider, useDisableTwoFactor, useEnableTwoFactor, useGetUserByAccount, useGetVerifyEmailStatus, useLinkSocial, useListAccounts, useListPasskeys, useListSSOProviders, useLogin, useLogout, useRegister, useRegisterSSO, useResetPassword, useSignInMagicLink, useSignInPasskey, useSignInSSO, useUnlinkAccount, useVerifyBackupCode, useVerifyEmail, useVerifyTotp } from "./hooks/auth.mjs";
3
2
  import { useOAuth2 } from "./useAuth/useOAuth2.mjs";
4
3
  import { useSession } from "./useAuth/useSession.mjs";
5
4
  import { useAuth } from "./useAuth/useAuth.mjs";
6
- import { useUser } from "./useUser/index.mjs";
7
5
  import { useAskDocQuestion, useAuditContentDeclaration, useAuditContentDeclarationField, useAuditContentDeclarationMetadata, useAuditTag, useAutocomplete, useChat, useCustomQuery, useGetAIStats, useTranslateJSONDeclaration } from "./hooks/ai.mjs";
8
6
  import { useGetAnalyticsAudience, useGetContentStats, useGetExperimentResults } from "./hooks/analytics.mjs";
9
7
  import { useDeleteAsset, useGetAssetById, useGetAssets, useUpdateAsset, useUploadAsset } from "./hooks/asset.mjs";
10
8
  import { useAuditScan, useGetRecursiveAuditStatus, useStartRecursiveAudit } from "./hooks/audit.mjs";
9
+ import { useAddPasskey, useAskResetPassword, useChangePassword, useDeletePasskey, useDeleteSSOProvider, useDisableTwoFactor, useEnableTwoFactor, useGetUserByAccount, useGetVerifyEmailStatus, useLinkSocial, useListAccounts, useListPasskeys, useListSSOProviders, useLogin, useLogout, useRegister, useRegisterSSO, useResetPassword, useSignInMagicLink, useSignInPasskey, useSignInSSO, useUnlinkAccount, useVerifyBackupCode, useVerifyEmail, useVerifyTotp } from "./hooks/auth.mjs";
11
10
  import { useBitbucketAuth, useBitbucketCheckConfig, useBitbucketGetConfigFile, useBitbucketRepos } from "./hooks/bitbucket.mjs";
12
11
  import { useAddDictionary, useDeleteDictionary, useGetDictionaries, useGetDictionariesKeys, useGetDictionary, useInfiniteGetDictionaries, usePushDictionaries, useUpdateDictionary } from "./hooks/dictionary.mjs";
13
12
  import { useGetDiscussions, useGetDiscussionsData } from "./hooks/discussions.mjs";
@@ -25,5 +24,6 @@ import { useAcceptAffiliateInvitation, useCancelSubscription, useCreatePortalSes
25
24
  import { useAddTag, useDeleteTag, useGetTags, useUpdateTag } from "./hooks/tag.mjs";
26
25
  import { useFillAllTranslations, usePauseTranslationJob, useResumeTranslationJob, useStopTranslationJob } from "./hooks/translate.mjs";
27
26
  import { useCreateUser, useDeleteUser, useGetUserById, useGetUsers, useUpdateUser, useUploadUserAvatar } from "./hooks/user.mjs";
27
+ import { useUser } from "./useUser/index.mjs";
28
28
 
29
29
  export { useAcceptAffiliateInvitation, useAddDictionary, useAddEnvironment, useAddNewAccessKey, useAddOrganization, useAddOrganizationMember, useAddPasskey, useAddProject, useAddTag, useAiAPI, useAnalyticsAPI, useAskDocQuestion, useAskResetPassword, useAssetAPI, useAuditAPI, useAuditContentDeclaration, useAuditContentDeclarationField, useAuditContentDeclarationMetadata, useAuditScan, useAuditTag, useAuth, useAutocomplete, useBitbucketAPI, useBitbucketAuth, useBitbucketCheckConfig, useBitbucketGetConfigFile, useBitbucketRepos, useCancelSubscription, useChangePassword, useChat, useContactReviewer, useCreateMission, useCreatePortalSession, useCreatePromoCode, useCreateUser, useCustomQuery, useDeleteAccessKey, useDeleteAsset, useDeleteDictionary, useDeleteEnvironment, useDeleteOrganization, useDeleteOrganizationById, useDeletePasskey, useDeleteProject, useDeleteProjectById, useDeletePromoCode, useDeleteReviewerProfile, useDeleteSSOProvider, useDeleteShowcaseProject, useDeleteTag, useDeleteUser, useDictionaryAPI, useDisableTwoFactor, useEditorAPI, useEnableTwoFactor, useEnvironmentAPI, useEstimateMission, useFillAllTranslations, useGetAIStats, useGetAdminReviewers, useGetAffiliate, useGetAffiliateAccountSession, useGetAffiliateById, useGetAffiliateInvitation, useGetAffiliateInvitations, useGetAffiliateOnboardingLink, useGetAffiliatePromoCode, useGetAffiliateStats, useGetAffiliates, useGetAnalyticsAudience, useGetAssetById, useGetAssets, useGetCIConfig, useGetChatHistory, useGetContentStats, useGetDictionaries, useGetDictionariesKeys, useGetDictionary, useGetDiscussions, useGetDiscussionsData, useGetEditorDictionaries, useGetExperimentResults, useGetInvoices, useGetMissionById, useGetMyMissions, useGetMyReviewerProfile, useGetNewsletterStatus, useGetOrganizations, useGetOtherShowcaseProjects, useGetPaymentMethod, useGetPricing, useGetProjectInsights, useGetProjects, useGetPromoCodeById, useGetPromoCodes, useGetRecursiveAuditStatus, useGetReviewerById, useGetReviewerMarketplace, useGetReviewerPriceDistribution, useGetReviewerReviews, useGetShowcaseProjectById, useGetShowcaseProjects, useGetSubscription, useGetTags, useGetUserByAccount, useGetUserById, useGetUsers, useGetVerifyEmailStatus, useGithubAPI, useGithubAuth, useGithubCheckConfig, useGithubGetAuthUrl, useGithubGetConfigFile, useGithubRepos, useGithubToken, useGitlabAPI, useGitlabAuth, useGitlabCheckConfig, useGitlabGetConfigFile, useGitlabProjects, useGrantAffiliateAccess, useInfiniteGetDictionaries, useIntlayerAuth, useIntlayerOAuth, useIntlayerOAuthOptions, useLinkSocial, useListAccounts, useListPasskeys, useListSSOProviders, useLogin, useLogout, useMigrateEnvironment, useNewsletterAPI, useOAuth2, useOAuthAPI, useOrganizationAPI, usePauseTranslationJob, useProjectAPI, usePushCIConfig, usePushDictionaries, usePushProjectConfiguration, useRefreshAccessKey, useRegister, useRegisterAsReviewer, useRegisterSSO, useResetPassword, useResetToProductionEnvironment, useResumeTranslationJob, useReviewerAPI, useSearchAPI, useSearchDoc, useSelectEnvironment, useSelectOrganization, useSelectProject, useSendAffiliateInvitation, useSendReviewerMessage, useSession, useShowcaseProjectAPI, useSignInMagicLink, useSignInPasskey, useSignInSSO, useStartRecursiveAudit, useStopTranslationJob, useStripeAPI, useSubmitReview, useSubmitShowcaseProject, useSubscribeToNewsletter, useTagAPI, useToggleShowcaseDownvote, useToggleShowcaseUpvote, useTranslateAPI, useTranslateJSONDeclaration, useTriggerBuild, useTriggerWebhook, useUnlinkAccount, useUnselectOrganization, useUnselectProject, useUnsubscribeFromNewsletter, useUpdateAffiliateStatus, useUpdateAsset, useUpdateDictionary, useUpdateEnvironment, useUpdateMemberAccess, useUpdateMissionStatus, useUpdateOrganization, useUpdateOrganizationMailerConfig, useUpdateOrganizationMembers, useUpdateOrganizationMembersById, useUpdateProject, useUpdateProjectMembers, useUpdatePromoCode, useUpdateReviewerProfile, useUpdateShowcaseProject, useUpdateTag, useUpdateUser, useUploadAsset, useUploadReviewerCoverPicture, useUploadReviewerMainPicture, useUploadUserAvatar, useUser, useUserAPI, useValidateReviewerProfile, useVerifyBackupCode, useVerifyEmail, useVerifyTotp, useWriteDictionary };
@@ -1,8 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { useIsAuthFetchEnabled } from "../../providers/DeferredAuthProvider.mjs";
4
- import { editor } from "@intlayer/config/built";
5
4
  import { useQuery } from "@tanstack/react-query";
5
+ import { editor } from "@intlayer/config/built";
6
6
  import { getOAuthAPI } from "@intlayer/api";
7
7
  import { useConfiguration } from "@intlayer/editor-react";
8
8
  import { defu } from "defu";
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
 
3
- import { getAuthAPI } from "../../libs/auth.mjs";
4
3
  import { useIsAuthFetchEnabled } from "../../providers/DeferredAuthProvider.mjs";
5
- import { editor } from "@intlayer/config/built";
4
+ import { getAuthAPI } from "../../libs/auth.mjs";
6
5
  import { useQuery, useQueryClient } from "@tanstack/react-query";
6
+ import { editor } from "@intlayer/config/built";
7
7
  import { useConfiguration } from "@intlayer/editor-react";
8
8
 
9
9
  //#region src/api/useAuth/useSession.ts
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { useLogout } from "../hooks/auth.mjs";
4
3
  import { useAuth } from "../useAuth/useAuth.mjs";
4
+ import { useLogout } from "../hooks/auth.mjs";
5
5
 
6
6
  //#region src/api/useUser/index.ts
7
7
  const useUser = () => {
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { Button } from "../Button/Button.mjs";
4
3
  import { useUser } from "../../api/useUser/index.mjs";
4
+ import { Button } from "../Button/Button.mjs";
5
5
  import { AutoCompleteTextarea } from "../TextArea/AutocompleteTextArea.mjs";
6
6
  import { useEffect, useState } from "react";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -1,5 +1,6 @@
1
1
  'use client';
2
2
 
3
+ import { useAuditContentDeclarationField } from "../../../api/hooks/ai.mjs";
3
4
  import { Loader } from "../../Loader/index.mjs";
4
5
  import { Button } from "../../Button/Button.mjs";
5
6
  import { Accordion } from "../../Accordion/Accordion.mjs";
@@ -7,7 +8,6 @@ import { Container } from "../../Container/index.mjs";
7
8
  import { ContentEditorInput as ContentEditorInput$1 } from "../../ContentEditor/ContentEditorInput.mjs";
8
9
  import { ContentEditorTextArea as ContentEditorTextArea$1 } from "../../ContentEditor/ContentEditorTextArea.mjs";
9
10
  import { SwitchSelector } from "../../SwitchSelector/SwitchSelector.mjs";
10
- import { useAuditContentDeclarationField } from "../../../api/hooks/ai.mjs";
11
11
  import { renameKey } from "./object.mjs";
12
12
  import { Label } from "../../Label/index.mjs";
13
13
  import { useLocaleSwitcherContent } from "../../LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs";
@@ -16,9 +16,9 @@ import { SafeHtmlRenderer } from "./SafeHtmlRenderer.mjs";
16
16
  import { Fragment, Suspense, lazy, memo, useState } from "react";
17
17
  import { jsx, jsxs } from "react/jsx-runtime";
18
18
  import { Plus, Trash, WandSparkles } from "lucide-react";
19
+ import { useConfiguration, useEditedContent } from "@intlayer/editor-react";
19
20
  import { useIntlayer, useLocale } from "react-intlayer";
20
21
  import { getLocaleName } from "@intlayer/core/localization";
21
- import { useConfiguration, useEditedContent } from "@intlayer/editor-react";
22
22
  import { getEmptyNode, getNodeType } from "@intlayer/core/dictionaryManipulator";
23
23
  import * as NodeTypes from "@intlayer/types/nodeType";
24
24
  import { camelCaseToSentence } from "@intlayer/config/client";
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
 
3
- import { Button } from "../../Button/Button.mjs";
4
3
  import { useSession } from "../../../api/useAuth/useSession.mjs";
5
4
  import { useAddDictionary } from "../../../api/hooks/dictionary.mjs";
6
5
  import { useGetProjects } from "../../../api/hooks/project.mjs";
6
+ import { Button } from "../../Button/Button.mjs";
7
7
  import { MultiSelect } from "../../Select/Multiselect.mjs";
8
8
  import { Select } from "../../Select/Select.mjs";
9
9
  import { InputElement } from "../../Form/elements/InputElement.mjs";
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from "../../../utils/cn.mjs";
4
- import { Loader } from "../../Loader/index.mjs";
5
- import { Button } from "../../Button/Button.mjs";
6
- import { Container } from "../../Container/index.mjs";
7
- import { Checkbox } from "../../Input/Checkbox.mjs";
8
- import { Input } from "../../Input/Input.mjs";
9
4
  import { useSession } from "../../../api/useAuth/useSession.mjs";
10
5
  import { useAuditContentDeclarationMetadata } from "../../../api/hooks/ai.mjs";
11
6
  import { useGetDictionaries } from "../../../api/hooks/dictionary.mjs";
12
7
  import { useGetProjects } from "../../../api/hooks/project.mjs";
13
8
  import { useGetTags } from "../../../api/hooks/tag.mjs";
9
+ import { Loader } from "../../Loader/index.mjs";
10
+ import { Button } from "../../Button/Button.mjs";
11
+ import { Container } from "../../Container/index.mjs";
12
+ import { Checkbox } from "../../Input/Checkbox.mjs";
13
+ import { Input } from "../../Input/Input.mjs";
14
14
  import { MultiSelect } from "../../Select/Multiselect.mjs";
15
15
  import { Select } from "../../Select/Select.mjs";
16
16
  import { FormItem } from "../../Form/FormItem.mjs";
@@ -30,8 +30,8 @@ import { useDictionaryDetailsSchema } from "./useDictionaryDetailsSchema.mjs";
30
30
  import { useEffect, useMemo, useState } from "react";
31
31
  import { jsx, jsxs } from "react/jsx-runtime";
32
32
  import { WandSparkles } from "lucide-react";
33
- import { useIntlayer } from "react-intlayer";
34
33
  import { useEditedContent } from "@intlayer/editor-react";
34
+ import { useIntlayer } from "react-intlayer";
35
35
  import { useWatch } from "react-hook-form";
36
36
  import { AnimatePresence, motion } from "framer-motion";
37
37
 
@@ -13,8 +13,8 @@ import { StructureEditor } from "./StructureEditor.mjs";
13
13
  import { useEffect, useState } from "react";
14
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
15
  import { ArrowLeft } from "lucide-react";
16
- import { useIntlayer } from "react-intlayer";
17
16
  import { useConfiguration, useDictionariesRecordActions, useFocusUnmergedDictionary } from "@intlayer/editor-react";
17
+ import { useIntlayer } from "react-intlayer";
18
18
 
19
19
  //#region src/components/DictionaryFieldEditor/DictionaryFieldEditor.tsx
20
20
  const DictionaryFieldEditor = ({ dictionary, onClickDictionaryList, isDarkMode, mode, onDelete, onSave, showReturnButton = true, rightContent }) => {
@@ -5,8 +5,8 @@ import { getIsEditableSection } from "../getIsEditableSection.mjs";
5
5
  import { useState } from "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
7
  import { ChevronRight, Plus } from "lucide-react";
8
- import { useIntlayer } from "react-intlayer";
9
8
  import { useEditedContentActions, useEditorLocale, useFocusUnmergedDictionary } from "@intlayer/editor-react";
9
+ import { useIntlayer } from "react-intlayer";
10
10
  import { getContentNodeByKeyPath, getEmptyNode, getNodeType } from "@intlayer/core/dictionaryManipulator";
11
11
  import * as NodeTypes from "@intlayer/types/nodeType";
12
12
  import { isSameKeyPath } from "@intlayer/core/utils";
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { Container } from "../Container/index.mjs";
4
3
  import { useGetDictionaries } from "../../api/hooks/dictionary.mjs";
4
+ import { Container } from "../Container/index.mjs";
5
5
  import { LocaleSwitcherContent } from "../LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs";
6
6
  import { TextEditorContainer } from "./ContentEditorView/TextEditor.mjs";
7
7
  import { Pagination } from "../Pagination/Pagination.mjs";
@@ -10,8 +10,8 @@ import { KeyPathBreadcrumb } from "./KeyPathBreadcrumb.mjs";
10
10
  import { NavigationViewNode } from "./NavigationView/NavigationViewNode.mjs";
11
11
  import { useCallback, useDeferredValue, useEffect, useMemo, useState, useTransition } from "react";
12
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
- import { useIntlayer } from "react-intlayer";
14
13
  import { useEditedContent, useEditorLocale, useFocusUnmergedDictionary } from "@intlayer/editor-react";
14
+ import { useIntlayer } from "react-intlayer";
15
15
  import { getContentNodeByKeyPath } from "@intlayer/core/dictionaryManipulator";
16
16
 
17
17
  //#region src/components/DictionaryFieldEditor/NodeEditor.tsx
@@ -1,17 +1,17 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from "../../../utils/cn.mjs";
4
- import { Button } from "../../Button/Button.mjs";
5
4
  import { useSession } from "../../../api/useAuth/useSession.mjs";
6
5
  import { useAuth } from "../../../api/useAuth/useAuth.mjs";
7
6
  import { useDeleteDictionary, usePushDictionaries } from "../../../api/hooks/dictionary.mjs";
8
7
  import { useWriteDictionary } from "../../../api/hooks/editor.mjs";
8
+ import { Button } from "../../Button/Button.mjs";
9
9
  import { Modal } from "../../Modal/Modal.mjs";
10
10
  import { useState } from "react";
11
11
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
12
  import { ArrowUpFromLine, Download, RotateCcw, Save, Trash } from "lucide-react";
13
- import { useIntlayer } from "react-intlayer";
14
13
  import { useDictionariesRecordActions, useEditedContent } from "@intlayer/editor-react";
14
+ import { useIntlayer } from "react-intlayer";
15
15
 
16
16
  //#region src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx
17
17
  const SaveForm = ({ dictionary, mode, className, onDelete, onSave, ...props }) => {
@@ -6,8 +6,8 @@ import { EditableFieldInput } from "../../EditableField/EditableFieldInput.mjs";
6
6
  import { NodeTypeSelector } from "../NodeTypeSelector.mjs";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
8
  import { Plus, Trash } from "lucide-react";
9
- import { useIntlayer } from "react-intlayer";
10
9
  import { useConfiguration, useEditedContentActions, useFocusUnmergedDictionary } from "@intlayer/editor-react";
10
+ import { useIntlayer } from "react-intlayer";
11
11
  import { getDefaultNode, getNodeChildren, getNodeType } from "@intlayer/core/dictionaryManipulator";
12
12
  import * as NodeTypes from "@intlayer/types/nodeType";
13
13
  import { isSameKeyPath } from "@intlayer/core/utils";
@@ -5,16 +5,58 @@ import { Button } from "../Button/Button.mjs";
5
5
  import { Link } from "../Link/Link.mjs";
6
6
  import { Container } from "../Container/index.mjs";
7
7
  import { Modal } from "../Modal/Modal.mjs";
8
+ import { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl } from "./youtubeUrl.mjs";
8
9
  import { useEffect, useRef, useState } from "react";
9
10
  import { jsx, jsxs } from "react/jsx-runtime";
10
- import { MoveDiagonal, Play } from "lucide-react";
11
+ import { MoveDiagonal } from "lucide-react";
11
12
 
12
13
  //#region src/components/MarkDownRender/MarkDownIframe.tsx
13
- function embedLinkMeta(src) {
14
+ /**
15
+ * The features the YouTube player asks for, as shipped by YouTube's own embed code.
16
+ */
17
+ const YOUTUBE_PLAYER_ALLOW = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share";
18
+ /**
19
+ * Turns whatever the markdown handed over into what the frame is rendered with.
20
+ *
21
+ * A YouTube address, in any of its forms, becomes the player embed carrying
22
+ * the attributes YouTube's own embed code ships with. Query parameters are
23
+ * dropped on purpose: docs written for one origin (`origin=…`) break the
24
+ * player on every other one.
25
+ *
26
+ * `referrerPolicy` is the attribute that matters: the player refuses to start
27
+ * ("Video player configuration error", error 153) unless the request carries
28
+ * a referrer, and a page served with `Referrer-Policy: same-origin` sends none
29
+ * to a cross-origin frame. The attribute overrides the page policy for this
30
+ * frame only.
31
+ */
32
+ const resolveFrame = (src, frameProps) => {
33
+ const youtubeVideoId = getYoutubeVideoId(src);
34
+ if (!youtubeVideoId) return {
35
+ src,
36
+ frameProps,
37
+ isYoutubeVideo: false
38
+ };
39
+ return {
40
+ isYoutubeVideo: true,
41
+ src: getYoutubeEmbedUrl(youtubeVideoId),
42
+ frameProps: {
43
+ ...frameProps,
44
+ allow: YOUTUBE_PLAYER_ALLOW,
45
+ allowFullScreen: true,
46
+ referrerPolicy: "strict-origin-when-cross-origin"
47
+ }
48
+ };
49
+ };
50
+ const getEmbedLinkMeta = (src) => {
14
51
  if (!src) return {
15
52
  href: "",
16
53
  label: ""
17
54
  };
55
+ const youtubeVideoId = getYoutubeVideoId(src);
56
+ if (youtubeVideoId) return {
57
+ href: getYoutubeWatchUrl(youtubeVideoId),
58
+ label: "youtube.com"
59
+ };
18
60
  if (/^https?:\/\//i.test(src)) try {
19
61
  const url = new URL(src);
20
62
  return {
@@ -31,21 +73,6 @@ function embedLinkMeta(src) {
31
73
  href: src,
32
74
  label: src
33
75
  };
34
- }
35
- /**
36
- * Reads the video id out of a YouTube embed address.
37
- *
38
- * @returns The video id, or `null` when the address is not a YouTube embed.
39
- */
40
- const getYoutubeVideoId = (src) => {
41
- if (!src || !/^https?:\/\//i.test(src)) return null;
42
- try {
43
- const url = new URL(src);
44
- if (!/(^|\.)youtube(-nocookie)?\.com$/.test(url.hostname)) return null;
45
- return url.pathname.replace(/^\/embed\//, "").split("/")[0] || null;
46
- } catch {
47
- return null;
48
- }
49
76
  };
50
77
  /**
51
78
  * Tracks whether an element has come close enough to the viewport to be worth
@@ -85,63 +112,28 @@ const useHasBecomeVisible = () => {
85
112
  };
86
113
  };
87
114
  /**
88
- * The embed itself: a poster for YouTube, deferred loading for anything else.
89
- *
90
- * A YouTube player pulls well over a megabyte of script before it can show a
91
- * single frame. Standing in for it with its own thumbnail until the reader
92
- * presses play keeps that cost on the readers who actually watch the video.
115
+ * The embed itself, mounted once it comes close to the viewport.
93
116
  */
94
117
  const EmbeddedFrame = ({ src, title, className, frameProps }) => {
95
- const [isPlayRequested, setIsPlayRequested] = useState(false);
96
118
  const { elementRef, hasBecomeVisible } = useHasBecomeVisible();
97
- const youtubeVideoId = getYoutubeVideoId(src);
98
- if (youtubeVideoId && !isPlayRequested) return /* @__PURE__ */ jsxs("button", {
99
- type: "button",
100
- "aria-label": title ?? "Play video",
101
- onClick: () => setIsPlayRequested(true),
102
- className: cn("group relative block cursor-pointer border-0 bg-card p-0", className),
103
- children: [/* @__PURE__ */ jsxs("picture", { children: [/* @__PURE__ */ jsx("source", {
104
- srcSet: `https://i.ytimg.com/vi_webp/${youtubeVideoId}/hqdefault.webp`,
105
- type: "image/webp"
106
- }), /* @__PURE__ */ jsx("img", {
107
- src: `https://i.ytimg.com/vi/${youtubeVideoId}/hqdefault.jpg`,
108
- alt: "",
109
- width: 480,
110
- height: 360,
111
- fetchPriority: "high",
112
- decoding: "async",
113
- className: "size-full object-cover"
114
- })] }), /* @__PURE__ */ jsx("span", {
115
- className: "absolute inset-0 flex items-center justify-center",
116
- children: /* @__PURE__ */ jsx("span", {
117
- className: "flex size-14 items-center justify-center rounded-full bg-text/70 text-text-opposite transition-transform group-hover:scale-110",
118
- children: /* @__PURE__ */ jsx(Play, { className: "size-6 translate-x-0.5 fill-current" })
119
- })
120
- })]
121
- });
122
- if (!hasBecomeVisible && !isPlayRequested) return /* @__PURE__ */ jsx("div", {
119
+ if (!hasBecomeVisible) return /* @__PURE__ */ jsx("div", {
123
120
  ref: elementRef,
124
121
  "aria-hidden": true,
125
122
  className
126
123
  });
127
- const frameSrc = (() => {
128
- if (!isPlayRequested || !youtubeVideoId || !src) return src;
129
- const playbackSrc = new URL(src);
130
- playbackSrc.searchParams.set("autoplay", "1");
131
- return playbackSrc.href;
132
- })();
133
124
  return /* @__PURE__ */ jsx("iframe", {
134
125
  ...frameProps,
135
- src: frameSrc,
126
+ src,
136
127
  title,
137
128
  loading: "lazy",
138
129
  className
139
130
  });
140
131
  };
141
132
  const MarkDownIframe = (props) => {
142
- const { src, className, title, ...rest } = props;
133
+ const { src: rawSrc, className, title, ...rest } = props;
143
134
  const [isModalOpen, setIsModalOpen] = useState(false);
144
- const { href, label } = embedLinkMeta(src);
135
+ const { src, frameProps, isYoutubeVideo } = resolveFrame(rawSrc, rest);
136
+ const { href, label } = getEmbedLinkMeta(rawSrc);
145
137
  return /* @__PURE__ */ jsxs(Container, {
146
138
  roundedSize: "2xl",
147
139
  border: true,
@@ -152,8 +144,8 @@ const MarkDownIframe = (props) => {
152
144
  /* @__PURE__ */ jsx(EmbeddedFrame, {
153
145
  src,
154
146
  title,
155
- frameProps: rest,
156
- className: cn("block max-h-[80vh] min-h-[12rem] w-full border-0", className)
147
+ frameProps,
148
+ className: cn("block max-h-[80vh] min-h-[12rem] w-full border-0", isYoutubeVideo && "aspect-video", className)
157
149
  }),
158
150
  /* @__PURE__ */ jsxs("div", {
159
151
  className: "flex items-center justify-between gap-3 px-3 py-1",
@@ -190,7 +182,7 @@ const MarkDownIframe = (props) => {
190
182
  className: "overflow-hidden p-0",
191
183
  gap: "none",
192
184
  children: /* @__PURE__ */ jsx("iframe", {
193
- ...rest,
185
+ ...frameProps,
194
186
  src,
195
187
  title: title ?? "Embedded content",
196
188
  allowFullScreen: true,
@@ -1 +1 @@
1
- {"version":3,"file":"MarkDownIframe.mjs","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownIframe.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { Link } from '@components/Link';\nimport { Modal } from '@components/Modal';\nimport { cn } from '@utils/cn';\nimport { MoveDiagonal, Play } from 'lucide-react';\nimport {\n type ComponentProps,\n type FC,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nfunction embedLinkMeta(src: string | undefined): {\n href: string;\n label: string;\n} {\n if (!src) return { href: '', label: '' };\n if (/^https?:\\/\\//i.test(src)) {\n try {\n const url = new URL(src);\n return { href: url.href, label: url.host };\n } catch {\n return { href: src, label: src };\n }\n }\n return { href: src, label: src };\n}\n\n/**\n * Reads the video id out of a YouTube embed address.\n *\n * @returns The video id, or `null` when the address is not a YouTube embed.\n */\nconst getYoutubeVideoId = (src: string | undefined): string | null => {\n if (!src || !/^https?:\\/\\//i.test(src)) return null;\n\n try {\n const url = new URL(src);\n if (!/(^|\\.)youtube(-nocookie)?\\.com$/.test(url.hostname)) return null;\n\n const videoId = url.pathname.replace(/^\\/embed\\//, '').split('/')[0];\n\n return videoId || null;\n } catch {\n return null;\n }\n};\n\n/**\n * Tracks whether an element has come close enough to the viewport to be worth\n * loading.\n *\n * `loading=\"lazy\"` is not enough for embeds inside tabs or carousels: the\n * browser only defers frames that are far down the page, so a frame parked\n * off-screen by a transform — an inactive tab panel — still loads immediately.\n * A live-app embed costs upwards of a megabyte and seconds of main thread,\n * which is the whole page's performance budget spent on something nobody is\n * looking at.\n *\n * @returns A ref to attach to the placeholder, and whether it became visible.\n */\nconst useHasBecomeVisible = <ElementType extends HTMLElement>() => {\n const elementRef = useRef<ElementType>(null);\n const [hasBecomeVisible, setHasBecomeVisible] = useState(false);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element || hasBecomeVisible) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n setHasBecomeVisible(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n setHasBecomeVisible(true);\n observer.disconnect();\n }\n },\n { rootMargin: '200px' }\n );\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [hasBecomeVisible]);\n\n return { elementRef, hasBecomeVisible };\n};\n\ntype EmbeddedFrameProps = {\n src: string | undefined;\n title: string | undefined;\n className: string;\n frameProps: Omit<ComponentProps<'iframe'>, 'src' | 'title' | 'className'>;\n};\n\n/**\n * The embed itself: a poster for YouTube, deferred loading for anything else.\n *\n * A YouTube player pulls well over a megabyte of script before it can show a\n * single frame. Standing in for it with its own thumbnail until the reader\n * presses play keeps that cost on the readers who actually watch the video.\n */\nconst EmbeddedFrame: FC<EmbeddedFrameProps> = ({\n src,\n title,\n className,\n frameProps,\n}) => {\n const [isPlayRequested, setIsPlayRequested] = useState(false);\n const { elementRef, hasBecomeVisible } =\n useHasBecomeVisible<HTMLDivElement>();\n const youtubeVideoId = getYoutubeVideoId(src);\n\n if (youtubeVideoId && !isPlayRequested) {\n return (\n <button\n type=\"button\"\n aria-label={title ?? 'Play video'}\n onClick={() => setIsPlayRequested(true)}\n className={cn(\n 'group relative block cursor-pointer border-0 bg-card p-0',\n className\n )}\n >\n {/*\n * The poster stands in for the player, so on a page that opens with a\n * video it is the largest element painted — deferring it would defer\n * the page's LCP. It is the one image here worth fetching eagerly.\n */}\n <picture>\n {/*\n * YouTube serves the same poster as WebP under `vi_webp`, at roughly\n * a third of the JPEG's weight. The `img` below stays as the\n * fallback for the browsers that cannot decode it.\n */}\n <source\n srcSet={`https://i.ytimg.com/vi_webp/${youtubeVideoId}/hqdefault.webp`}\n type=\"image/webp\"\n />\n <img\n src={`https://i.ytimg.com/vi/${youtubeVideoId}/hqdefault.jpg`}\n alt=\"\"\n width={480}\n height={360}\n fetchPriority=\"high\"\n decoding=\"async\"\n className=\"size-full object-cover\"\n />\n </picture>\n <span className=\"absolute inset-0 flex items-center justify-center\">\n <span className=\"flex size-14 items-center justify-center rounded-full bg-text/70 text-text-opposite transition-transform group-hover:scale-110\">\n <Play className=\"size-6 translate-x-0.5 fill-current\" />\n </span>\n </span>\n </button>\n );\n }\n\n if (!hasBecomeVisible && !isPlayRequested) {\n // Same box as the frame it stands in for, so nothing shifts once it loads.\n return <div ref={elementRef} aria-hidden className={className} />;\n }\n\n const frameSrc = (() => {\n if (!isPlayRequested || !youtubeVideoId || !src) return src;\n\n const playbackSrc = new URL(src);\n playbackSrc.searchParams.set('autoplay', '1');\n\n return playbackSrc.href;\n })();\n\n return (\n <iframe\n {...frameProps}\n src={frameSrc}\n title={title}\n loading=\"lazy\"\n className={className}\n />\n );\n};\n\nexport const MarkDownIframe: FC<ComponentProps<'iframe'>> = (props) => {\n const { src, className, title, ...rest } = props;\n const [isModalOpen, setIsModalOpen] = useState(false);\n const { href, label } = embedLinkMeta(src);\n\n return (\n <Container\n roundedSize=\"2xl\"\n border\n borderColor=\"neutral\"\n className=\"overflow-hidden p-0\"\n gap=\"none\"\n >\n <EmbeddedFrame\n src={src}\n title={title}\n frameProps={rest}\n className={cn(\n 'block max-h-[80vh] min-h-[12rem] w-full border-0',\n className\n )}\n />\n <div className=\"flex items-center justify-between gap-3 px-3 py-1\">\n {href ? (\n <Link\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n label=\"\"\n color=\"neutral\"\n className=\"inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-muted-foreground text-xs underline-offset-2 hover:text-foreground hover:underline\"\n >\n {label}\n </Link>\n ) : (\n <span className=\"text-neutral text-sm\">Embedded frame</span>\n )}\n <Button\n variant=\"hoverable\"\n size=\"icon-md\"\n onClick={() => setIsModalOpen(true)}\n label=\"Open embedded page in fullscreen\"\n Icon={MoveDiagonal}\n />\n </div>\n\n <Modal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n size=\"unset\"\n hasCloseButton\n isScrollable\n padding=\"sm\"\n >\n {isModalOpen && src ? (\n <Container\n roundedSize=\"2xl\"\n border\n borderColor=\"neutral\"\n className=\"overflow-hidden p-0\"\n gap=\"none\"\n >\n <iframe\n {...rest}\n src={src}\n title={title ?? 'Embedded content'}\n allowFullScreen\n className=\"block min-h-[82vh] w-full border-0\"\n />\n </Container>\n ) : null}\n </Modal>\n </Container>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"MarkDownIframe.mjs","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownIframe.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { Link } from '@components/Link';\nimport { Modal } from '@components/Modal';\nimport { cn } from '@utils/cn';\nimport { MoveDiagonal } from 'lucide-react';\nimport {\n type ComponentProps,\n type FC,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport {\n getYoutubeEmbedUrl,\n getYoutubeVideoId,\n getYoutubeWatchUrl,\n} from './youtubeUrl';\n\ntype FrameProps = Omit<ComponentProps<'iframe'>, 'src' | 'title' | 'className'>;\n\n/**\n * The features the YouTube player asks for, as shipped by YouTube's own embed code.\n */\nconst YOUTUBE_PLAYER_ALLOW =\n 'accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share';\n\ntype ResolvedFrame = {\n src: string | undefined;\n frameProps: FrameProps;\n isYoutubeVideo: boolean;\n};\n\n/**\n * Turns whatever the markdown handed over into what the frame is rendered with.\n *\n * A YouTube address, in any of its forms, becomes the player embed carrying\n * the attributes YouTube's own embed code ships with. Query parameters are\n * dropped on purpose: docs written for one origin (`origin=…`) break the\n * player on every other one.\n *\n * `referrerPolicy` is the attribute that matters: the player refuses to start\n * (\"Video player configuration error\", error 153) unless the request carries\n * a referrer, and a page served with `Referrer-Policy: same-origin` sends none\n * to a cross-origin frame. The attribute overrides the page policy for this\n * frame only.\n */\nconst resolveFrame = (\n src: string | undefined,\n frameProps: FrameProps\n): ResolvedFrame => {\n const youtubeVideoId = getYoutubeVideoId(src);\n\n if (!youtubeVideoId) return { src, frameProps, isYoutubeVideo: false };\n\n return {\n isYoutubeVideo: true,\n src: getYoutubeEmbedUrl(youtubeVideoId),\n frameProps: {\n ...frameProps,\n allow: YOUTUBE_PLAYER_ALLOW,\n allowFullScreen: true,\n referrerPolicy: 'strict-origin-when-cross-origin',\n },\n };\n};\n\nconst getEmbedLinkMeta = (\n src: string | undefined\n): { href: string; label: string } => {\n if (!src) return { href: '', label: '' };\n\n const youtubeVideoId = getYoutubeVideoId(src);\n if (youtubeVideoId) {\n return {\n href: getYoutubeWatchUrl(youtubeVideoId),\n label: 'youtube.com',\n };\n }\n\n if (/^https?:\\/\\//i.test(src)) {\n try {\n const url = new URL(src);\n return { href: url.href, label: url.host };\n } catch {\n return { href: src, label: src };\n }\n }\n\n return { href: src, label: src };\n};\n\n/**\n * Tracks whether an element has come close enough to the viewport to be worth\n * loading.\n *\n * `loading=\"lazy\"` is not enough for embeds inside tabs or carousels: the\n * browser only defers frames that are far down the page, so a frame parked\n * off-screen by a transform — an inactive tab panel — still loads immediately.\n * A live-app embed costs upwards of a megabyte and seconds of main thread,\n * which is the whole page's performance budget spent on something nobody is\n * looking at.\n *\n * @returns A ref to attach to the placeholder, and whether it became visible.\n */\nconst useHasBecomeVisible = <ElementType extends HTMLElement>() => {\n const elementRef = useRef<ElementType>(null);\n const [hasBecomeVisible, setHasBecomeVisible] = useState(false);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element || hasBecomeVisible) return;\n\n if (typeof IntersectionObserver === 'undefined') {\n setHasBecomeVisible(true);\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries.some((entry) => entry.isIntersecting)) {\n setHasBecomeVisible(true);\n observer.disconnect();\n }\n },\n { rootMargin: '200px' }\n );\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [hasBecomeVisible]);\n\n return { elementRef, hasBecomeVisible };\n};\n\ntype EmbeddedFrameProps = Pick<ResolvedFrame, 'src' | 'frameProps'> & {\n title: string | undefined;\n className: string;\n};\n\n/**\n * The embed itself, mounted once it comes close to the viewport.\n */\nconst EmbeddedFrame: FC<EmbeddedFrameProps> = ({\n src,\n title,\n className,\n frameProps,\n}) => {\n const { elementRef, hasBecomeVisible } =\n useHasBecomeVisible<HTMLDivElement>();\n\n if (!hasBecomeVisible) {\n // Same box as the frame it stands in for, so nothing shifts once it loads.\n return <div ref={elementRef} aria-hidden className={className} />;\n }\n\n return (\n <iframe\n {...frameProps}\n src={src}\n title={title}\n loading=\"lazy\"\n className={className}\n />\n );\n};\n\nexport const MarkDownIframe: FC<ComponentProps<'iframe'>> = (props) => {\n const { src: rawSrc, className, title, ...rest } = props;\n const [isModalOpen, setIsModalOpen] = useState(false);\n const { src, frameProps, isYoutubeVideo } = resolveFrame(rawSrc, rest);\n const { href, label } = getEmbedLinkMeta(rawSrc);\n\n return (\n <Container\n roundedSize=\"2xl\"\n border\n borderColor=\"neutral\"\n className=\"overflow-hidden p-0\"\n gap=\"none\"\n >\n <EmbeddedFrame\n src={src}\n title={title}\n frameProps={frameProps}\n className={cn(\n 'block max-h-[80vh] min-h-[12rem] w-full border-0',\n isYoutubeVideo && 'aspect-video',\n className\n )}\n />\n <div className=\"flex items-center justify-between gap-3 px-3 py-1\">\n {href ? (\n <Link\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n label=\"\"\n color=\"neutral\"\n className=\"inline-flex min-w-0 max-w-[calc(100%-3rem)] items-center gap-2 text-muted-foreground text-xs underline-offset-2 hover:text-foreground hover:underline\"\n >\n {label}\n </Link>\n ) : (\n <span className=\"text-neutral text-sm\">Embedded frame</span>\n )}\n <Button\n variant=\"hoverable\"\n size=\"icon-md\"\n onClick={() => setIsModalOpen(true)}\n label=\"Open embedded page in fullscreen\"\n Icon={MoveDiagonal}\n />\n </div>\n\n <Modal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n size=\"unset\"\n hasCloseButton\n isScrollable\n padding=\"sm\"\n >\n {isModalOpen && src ? (\n <Container\n roundedSize=\"2xl\"\n border\n borderColor=\"neutral\"\n className=\"overflow-hidden p-0\"\n gap=\"none\"\n >\n <iframe\n {...frameProps}\n src={src}\n title={title ?? 'Embedded content'}\n allowFullScreen\n className=\"block min-h-[82vh] w-full border-0\"\n />\n </Container>\n ) : null}\n </Modal>\n </Container>\n );\n};\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
+ import { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl } from "./youtubeUrl.mjs";
1
2
  import { MarkDownIframe } from "./MarkDownIframe.mjs";
2
3
  import { MarkdownRenderer, baseMarkdownComponents, getIntlayerMarkdownOptions } from "./MarkDownRender.mjs";
3
4
 
4
- export { MarkDownIframe, MarkdownRenderer, baseMarkdownComponents, getIntlayerMarkdownOptions };
5
+ export { MarkDownIframe, MarkdownRenderer, baseMarkdownComponents, getIntlayerMarkdownOptions, getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl };
@@ -0,0 +1,22 @@
1
+ //#region src/components/MarkDownRender/youtubeUrl.ts
2
+ /**
3
+ * Reads the video id out of a YouTube address (embed, watch, youtu.be, shorts, etc.).
4
+ *
5
+ * @returns The video id, or `null` when the address is not a YouTube URL.
6
+ */
7
+ const getYoutubeVideoId = (src) => {
8
+ if (!src) return null;
9
+ return src.match(/(?:youtu\.be\/|youtube(?:-nocookie)?\.com\/(?:embed\/|v\/|watch\?v=|shorts\/))([\w-]{11})/i)?.[1] ?? null;
10
+ };
11
+ /**
12
+ * The address the YouTube player is loaded from for a given video.
13
+ */
14
+ const getYoutubeEmbedUrl = (videoId) => `https://www.youtube.com/embed/${videoId}`;
15
+ /**
16
+ * The address of the video on youtube.com itself.
17
+ */
18
+ const getYoutubeWatchUrl = (videoId) => `https://www.youtube.com/watch?v=${videoId}`;
19
+
20
+ //#endregion
21
+ export { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl };
22
+ //# sourceMappingURL=youtubeUrl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtubeUrl.mjs","names":[],"sources":["../../../../src/components/MarkDownRender/youtubeUrl.ts"],"sourcesContent":["/**\n * Reads the video id out of a YouTube address (embed, watch, youtu.be, shorts, etc.).\n *\n * @returns The video id, or `null` when the address is not a YouTube URL.\n */\nexport const getYoutubeVideoId = (src: string | undefined): string | null => {\n if (!src) return null;\n\n const match = src.match(\n /(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\/(?:embed\\/|v\\/|watch\\?v=|shorts\\/))([\\w-]{11})/i\n );\n\n return match?.[1] ?? null;\n};\n\n/**\n * The address the YouTube player is loaded from for a given video.\n */\nexport const getYoutubeEmbedUrl = (videoId: string): string =>\n `https://www.youtube.com/embed/${videoId}`;\n\n/**\n * The address of the video on youtube.com itself.\n */\nexport const getYoutubeWatchUrl = (videoId: string): string =>\n `https://www.youtube.com/watch?v=${videoId}`;\n"],"mappings":";;;;;;AAKA,MAAa,qBAAqB,QAA2C;CAC3E,IAAI,CAAC,KAAK,OAAO;CAMjB,OAJc,IAAI,MAChB,4FAGS,CAAC,GAAG,MAAM;AACvB;;;;AAKA,MAAa,sBAAsB,YACjC,iCAAiC;;;;AAKnC,MAAa,sBAAsB,YACjC,mCAAmC"}
@@ -115,6 +115,7 @@ import { KeyboardScreenAdapter } from "./KeyboardScreenAdapter/index.mjs";
115
115
  import { LanguageBackground } from "./LanguageBackground/LanguageBackground.mjs";
116
116
  import { LanguageSection, LocalCardList } from "./LanguageBackground/LanguageSection.mjs";
117
117
  import { LocaleSwitcher } from "./LocaleSwitcherDropDown/LocaleSwitcher.mjs";
118
+ import { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl } from "./MarkDownRender/youtubeUrl.mjs";
118
119
  import { MarkDownIframe } from "./MarkDownRender/MarkDownIframe.mjs";
119
120
  import { Tab } from "./Tab/Tab.mjs";
120
121
  import { Table } from "./Table/Table.mjs";
@@ -142,4 +143,4 @@ import { Terminal } from "./Terminal/Terminal.mjs";
142
143
  import { DesktopThemeSwitcher } from "./ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs";
143
144
  import { MobileThemeSwitcher } from "./ThemeSwitcherDropDown/MobileThemeSwitcher.mjs";
144
145
 
145
- export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CodeHighlighted, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditor, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocalCardList, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NodeEditor, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
146
+ export { Accordion, AutoCompleteTextarea, AutoSizedTextArea, Avatar, Badge, BitbucketLogo, Breadcrumb, Browser, Burger, Button, Carousel, Checkbox, ClickOutsideDiv, Code, CodeBlock, CodeDefault, CodeHighlighted, CollapsibleTable, Command, CommandRoot, Container, ContentEditableTextArea, ContentEditor, ContentEditorInput, ContentEditorTextArea, ContentSelector, CopyButton, CopyToClipboard, DesktopNavbar, DesktopThemeSwitcher, Detail, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, FacebookLogo, FileList, Flag, flags_exports as Flags, Footer, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeightResizer, HideShow, Hr, IDE, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InstagramLogo, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, Label, LanguageBackground, LanguageSection, Link, LinkedInLogo, Loader, LocalCardList, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProvider, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, MultiSelect, Navbar, NodeEditor, NumberItemsSelector, OTPInput, OTPInputContext, Pagination, Popover, PopoverStatic, PressableSpan, ProductHuntLogo, Radio, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectLabel, SelectSeparator, ShowingResultsNumberItems, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, Tab, TabSelector, Table, Tag, Td, TechLogo, techLogos_exports as TechLogos, Terminal, TextArea, TextEditor, TextEditorContainer, Th, TiktokLogo, Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, VersionSwitcher, VersionSwitcherProvider, VerticalSwitchSelector, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
@@ -149,6 +149,7 @@ const Website_Doc_Environment_NestJS_Path = "/doc/environment/nest";
149
149
  const Website_Doc_Environment_Fastify_Path = "/doc/environment/fastify";
150
150
  const Website_Doc_Environment_Hono_Path = "/doc/environment/hono";
151
151
  const Website_Doc_Environment_Htmx_Path = "/doc/environment/htmx";
152
+ const Website_Doc_Environment_Remix_3_Path = "/doc/environment/remix-3";
152
153
  const Website_Doc_CLI_Fill_Path = "/doc/concept/cli/fill";
153
154
  const Website_Doc_CLI_Translate_Path = "/doc/concept/cli/doc-translate";
154
155
  const Website_Doc_CLI_Review_Path = "/doc/concept/cli/doc-review";
@@ -223,6 +224,7 @@ const Website_Doc_Environment_NestJS = `${Website_Origin}${Website_Doc_Environme
223
224
  const Website_Doc_Environment_Fastify = `${Website_Origin}${Website_Doc_Environment_Fastify_Path}`;
224
225
  const Website_Doc_Environment_Hono = `${Website_Origin}${Website_Doc_Environment_Hono_Path}`;
225
226
  const Website_Doc_Environment_Htmx = `${Website_Origin}${Website_Doc_Environment_Htmx_Path}`;
227
+ const Website_Doc_Environment_Remix_3 = `${Website_Origin}${Website_Doc_Environment_Remix_3_Path}`;
226
228
  const Website_Doc_CLI_Fill = `${Website_Origin}${Website_Doc_CLI_Fill_Path}`;
227
229
  const Website_Doc_CLI_Translate = `${Website_Origin}${Website_Doc_CLI_Translate_Path}`;
228
230
  const Website_Doc_CLI_Review = `${Website_Origin}${Website_Doc_CLI_Review_Path}`;
@@ -322,5 +324,5 @@ const External_ExampleIntlayerWithReactNative = "https://github.com/aymericzip/i
322
324
  const External_ExampleIntlayerWithExpress = "https://github.com/aymericzip/intlayer/tree/main/examples/express-app";
323
325
 
324
326
  //#endregion
325
- export { App_Admin, App_Admin_Affiliate, App_Admin_Affiliate_Path, App_Admin_Dashboard, App_Admin_Dashboard_Path, App_Admin_Discussions, App_Admin_Discussions_Path, App_Admin_Management, App_Admin_Management_Path, App_Admin_Organizations, App_Admin_Organizations_Path, App_Admin_Path, App_Admin_Projects, App_Admin_Projects_Path, App_Admin_PromoCodes, App_Admin_PromoCodes_Path, App_Admin_Reviewers, App_Admin_Reviewers_Path, App_Admin_Users, App_Admin_Users_Path, App_Affiliation, App_Affiliation_Path, App_Auth_AskResetPassword, App_Auth_AskResetPassword_Path, App_Auth_ChangePassword, App_Auth_ChangePassword_Path, App_Auth_Demo_Path, App_Auth_Path, App_Auth_ResetPassword, App_Auth_ResetPassword_Path, App_Auth_SignIn, App_Auth_SignIn_Path, App_Auth_SignUp, App_Auth_SignUp_Path, App_Auth_TwoFactor, App_Auth_TwoFactor_Path, App_Dashboard, App_Dashboard_Analytics, App_Dashboard_Analytics_Path, App_Dashboard_Assets_Path, App_Dashboard_Dictionaries, App_Dashboard_Dictionaries_Path, App_Dashboard_Editor, App_Dashboard_Editor_Path, App_Dashboard_IDE, App_Dashboard_IDE_Path, App_Dashboard_Organization, App_Dashboard_Organization_Path, App_Dashboard_Profile, App_Dashboard_Profile_Path, App_Dashboard_Projects, App_Dashboard_Projects_Path, App_Dashboard_Scanner, App_Dashboard_Scanner_Path, App_Dashboard_Tags, App_Dashboard_Tags_Path, App_Dashboard_Translate, App_Dashboard_Translate_Path, App_Demo, App_Demo_Path, App_Home_Path, App_Init_Path, App_NotFound_Path, App_Onboarding, App_Onboarding_Path, App_Origin, App_Pricing, App_Pricing_Path, App_ReviewerMarketplace, App_ReviewerMarketplace_Dashboard, App_ReviewerMarketplace_Dashboard_Mission_Path, App_ReviewerMarketplace_Dashboard_Path, App_ReviewerMarketplace_Path, App_ReviewerMarketplace_Reviewer_Path, AuthMd_Path, Backend_Health, Backend_OAuth2_Token, Backend_Origin, Backend_Root, Doc_Blog_Path, Doc_Blog_Root_Path, Doc_Blog_Search_Path, Doc_Blog_What_is_i18n_Path, Doc_CLI_Fill_Path, Doc_CLI_Review_Path, Doc_CLI_Translate_Path, Doc_Chat_Path, Doc_Contributors_Path, Doc_Environment_Adonis_Path, Doc_Environment_Angular_Path, Doc_Environment_Astro_Path, Doc_Environment_CRA_Path, Doc_Environment_Express_Path, Doc_Environment_Fastify_Path, Doc_Environment_Hono_Path, Doc_Environment_Lit_Path, Doc_Environment_Lynx_Path, Doc_Environment_NestJS_Path, Doc_Environment_NextJS_14_Path, Doc_Environment_NextJS_15_Path, Doc_Environment_NextJS_16_Path, Doc_Environment_NextJS_Path, Doc_Environment_Nodejs_Path, Doc_Environment_NuxtAndVue_Path, Doc_Environment_ReactNativeAndExpo_Path, Doc_Environment_Tanstack_Path, Doc_Environment_ViteAndPreact_Path, Doc_Environment_ViteAndReact_Path, Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Doc_Environment_ViteAndReact_ReactRouterV7_Path, Doc_Environment_ViteAndSolid_Path, Doc_Environment_ViteAndSvelte_Path, Doc_Environment_ViteAndVue_Path, Doc_FrequentQuestions_Path, Doc_IntlayerCMS_Path, Doc_IntlayerVisualEditor_Path, Doc_Intlayer_with_Lynx_and_React_Path, Doc_MCP_Path, Doc_Path, Doc_PrivacyPolicy_Path, Doc_ReleasesV6_Path, Doc_ReleasesV7_Path, Doc_ReleasesV8_Path, Doc_Root_Path, Doc_Search_Path, Doc_ShowcaseSubmit_Path, Doc_Showcase_Path, Doc_TermsOfService_Path, Doc_Why_Path, External_AI_Landing_Page, External_Discord, External_DockerHub_SelfHost, External_ExampleIntlayerWithExpress, External_ExampleIntlayerWithNextjs, External_ExampleIntlayerWithReactJS, External_ExampleIntlayerWithReactNative, External_ExampleIntlayerWithViteAndPreact, External_ExampleIntlayerWithViteAndReact, External_ExampleIntlayerWithViteAndSolid, External_ExampleIntlayerWithViteAndSvelte, External_ExampleIntlayerWithViteAndVue, External_Examples, External_Github, External_Github_i18n_benchmark, External_LinkedIn, External_ShowcaseApp, LlmsTxt_Path, Mcp_Origin, Mcp_Root, Mcp_Sse, Showcase_Origin, Showcase_Root, Showcase_Root_Path, Showcase_Submit, Showcase_Submit_Path, Website_Benchmark, Website_Benchmark_NextJS, Website_Benchmark_NextJS_Path, Website_Benchmark_Path, Website_Benchmark_Tanstack, Website_Benchmark_Tanstack_Path, Website_Blog, Website_Blog_Path, Website_Blog_Root, Website_Blog_Root_Path, Website_Blog_Search, Website_Blog_Search_Path, Website_Blog_What_is_i18n, Website_Blog_What_is_i18n_Path, Website_CMS, Website_CMS_Path, Website_Changelog, Website_Changelog_Path, Website_Contributors, Website_Contributors_Path, Website_Demo, Website_Demo_Path, Website_Doc, Website_Doc_CLI_Fill, Website_Doc_CLI_Fill_Path, Website_Doc_CLI_Review, Website_Doc_CLI_Review_Path, Website_Doc_CLI_Translate, Website_Doc_CLI_Translate_Path, Website_Doc_Chat, Website_Doc_Chat_Path, Website_Doc_Environment_Adonis, Website_Doc_Environment_Adonis_Path, Website_Doc_Environment_Angular, Website_Doc_Environment_Angular_Path, Website_Doc_Environment_Astro, Website_Doc_Environment_Astro_Path, Website_Doc_Environment_CRA, Website_Doc_Environment_CRA_Path, Website_Doc_Environment_Express, Website_Doc_Environment_Express_Path, Website_Doc_Environment_Fastify, Website_Doc_Environment_Fastify_Path, Website_Doc_Environment_Hono, Website_Doc_Environment_Hono_Path, Website_Doc_Environment_Htmx, Website_Doc_Environment_Htmx_Path, Website_Doc_Environment_Lit, Website_Doc_Environment_Lit_Path, Website_Doc_Environment_Lynx, Website_Doc_Environment_Lynx_Path, Website_Doc_Environment_NestJS, Website_Doc_Environment_NestJS_Path, Website_Doc_Environment_NextJS, Website_Doc_Environment_NextJS_14, Website_Doc_Environment_NextJS_14_Path, Website_Doc_Environment_NextJS_15, Website_Doc_Environment_NextJS_15_Path, Website_Doc_Environment_NextJS_16, Website_Doc_Environment_NextJS_16_Path, Website_Doc_Environment_NextJS_Path, Website_Doc_Environment_Nodejs, Website_Doc_Environment_Nodejs_Path, Website_Doc_Environment_NuxtAndVue, Website_Doc_Environment_NuxtAndVue_Path, Website_Doc_Environment_ReactNativeAndExpo, Website_Doc_Environment_ReactNativeAndExpo_Path, Website_Doc_Environment_Tanstack, Website_Doc_Environment_Tanstack_Path, Website_Doc_Environment_ViteAndPreact, Website_Doc_Environment_ViteAndPreact_Path, Website_Doc_Environment_ViteAndReact, Website_Doc_Environment_ViteAndReact_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path, Website_Doc_Environment_ViteAndSolid, Website_Doc_Environment_ViteAndSolid_Path, Website_Doc_Environment_ViteAndSvelte, Website_Doc_Environment_ViteAndSvelte_Path, Website_Doc_Environment_ViteAndVue, Website_Doc_Environment_ViteAndVue_Path, Website_Doc_HTML, Website_Doc_HTML_Path, Website_Doc_IntlayerCMS, Website_Doc_IntlayerCMS_Path, Website_Doc_IntlayerVisualEditor, Website_Doc_IntlayerVisualEditor_Path, Website_Doc_Intlayer_with_Lynx_and_React, Website_Doc_Intlayer_with_Lynx_and_React_Path, Website_Doc_MCP, Website_Doc_MCP_Path, Website_Doc_Markdown, Website_Doc_Markdown_Path, Website_Doc_Path, Website_Doc_Root, Website_Doc_Root_Path, Website_Doc_Search, Website_Doc_Search_Path, Website_Doc_SelfHosting, Website_Doc_SelfHosting_Path, Website_Doc_Why, Website_Doc_Why_Path, Website_Domain, Website_FrequentQuestions, Website_FrequentQuestions_Path, Website_Home, Website_Home_Path, Website_I18nextFormatter, Website_I18nextFormatter_Path, Website_ICUFormatter, Website_ICUFormatter_Path, Website_IntlayerFormatter, Website_IntlayerFormatter_Path, Website_Markdown, Website_Markdown_Path, Website_MessageConverter, Website_MessageConverter_Path, Website_NotFound, Website_NotFound_Path, Website_Origin, Website_POFormatter, Website_POFormatter_Path, Website_Playground, Website_Playground_Path, Website_PrivacyPolicy, Website_PrivacyPolicy_Path, Website_ReleasesV6, Website_ReleasesV6_Path, Website_ReleasesV7, Website_ReleasesV7_Path, Website_ReleasesV8, Website_ReleasesV8_Path, Website_ReleasesV9_Path, Website_Scanner, Website_Scanner_Path, Website_TMS, Website_TMS_Path, Website_TermsOfService, Website_TermsOfService_Path, Website_Translate, Website_Translate_Path, Website_VueI18nFormatter, Website_VueI18nFormatter_Path, WellKnown_AgentSkillsIndex_Path, WellKnown_AgentSkills_Path, WellKnown_AiCatalog_Path, WellKnown_ApiCatalog_Path, WellKnown_McpServerCard_Path, WellKnown_OAuthAuthorizationServer_Path, WellKnown_OAuthProtectedResource_Path, getAppAdminAffiliateRoute, getAppAdminOrganizationAbsoluteRoute, getAppAdminOrganizationRoute, getAppAdminProjectAbsoluteRoute, getAppAdminProjectRoute, getAppAdminPromoCodeRoute, getAppAdminReviewerRoute, getAppAdminUserAbsoluteRoute, getAppAdminUserRoute, getAppOnboardingFlowAbsoluteRoute, getAppOnboardingFlowRoute, getAppReviewerMissionRoute, getAppReviewerProfileRoute };
327
+ export { App_Admin, App_Admin_Affiliate, App_Admin_Affiliate_Path, App_Admin_Dashboard, App_Admin_Dashboard_Path, App_Admin_Discussions, App_Admin_Discussions_Path, App_Admin_Management, App_Admin_Management_Path, App_Admin_Organizations, App_Admin_Organizations_Path, App_Admin_Path, App_Admin_Projects, App_Admin_Projects_Path, App_Admin_PromoCodes, App_Admin_PromoCodes_Path, App_Admin_Reviewers, App_Admin_Reviewers_Path, App_Admin_Users, App_Admin_Users_Path, App_Affiliation, App_Affiliation_Path, App_Auth_AskResetPassword, App_Auth_AskResetPassword_Path, App_Auth_ChangePassword, App_Auth_ChangePassword_Path, App_Auth_Demo_Path, App_Auth_Path, App_Auth_ResetPassword, App_Auth_ResetPassword_Path, App_Auth_SignIn, App_Auth_SignIn_Path, App_Auth_SignUp, App_Auth_SignUp_Path, App_Auth_TwoFactor, App_Auth_TwoFactor_Path, App_Dashboard, App_Dashboard_Analytics, App_Dashboard_Analytics_Path, App_Dashboard_Assets_Path, App_Dashboard_Dictionaries, App_Dashboard_Dictionaries_Path, App_Dashboard_Editor, App_Dashboard_Editor_Path, App_Dashboard_IDE, App_Dashboard_IDE_Path, App_Dashboard_Organization, App_Dashboard_Organization_Path, App_Dashboard_Profile, App_Dashboard_Profile_Path, App_Dashboard_Projects, App_Dashboard_Projects_Path, App_Dashboard_Scanner, App_Dashboard_Scanner_Path, App_Dashboard_Tags, App_Dashboard_Tags_Path, App_Dashboard_Translate, App_Dashboard_Translate_Path, App_Demo, App_Demo_Path, App_Home_Path, App_Init_Path, App_NotFound_Path, App_Onboarding, App_Onboarding_Path, App_Origin, App_Pricing, App_Pricing_Path, App_ReviewerMarketplace, App_ReviewerMarketplace_Dashboard, App_ReviewerMarketplace_Dashboard_Mission_Path, App_ReviewerMarketplace_Dashboard_Path, App_ReviewerMarketplace_Path, App_ReviewerMarketplace_Reviewer_Path, AuthMd_Path, Backend_Health, Backend_OAuth2_Token, Backend_Origin, Backend_Root, Doc_Blog_Path, Doc_Blog_Root_Path, Doc_Blog_Search_Path, Doc_Blog_What_is_i18n_Path, Doc_CLI_Fill_Path, Doc_CLI_Review_Path, Doc_CLI_Translate_Path, Doc_Chat_Path, Doc_Contributors_Path, Doc_Environment_Adonis_Path, Doc_Environment_Angular_Path, Doc_Environment_Astro_Path, Doc_Environment_CRA_Path, Doc_Environment_Express_Path, Doc_Environment_Fastify_Path, Doc_Environment_Hono_Path, Doc_Environment_Lit_Path, Doc_Environment_Lynx_Path, Doc_Environment_NestJS_Path, Doc_Environment_NextJS_14_Path, Doc_Environment_NextJS_15_Path, Doc_Environment_NextJS_16_Path, Doc_Environment_NextJS_Path, Doc_Environment_Nodejs_Path, Doc_Environment_NuxtAndVue_Path, Doc_Environment_ReactNativeAndExpo_Path, Doc_Environment_Tanstack_Path, Doc_Environment_ViteAndPreact_Path, Doc_Environment_ViteAndReact_Path, Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Doc_Environment_ViteAndReact_ReactRouterV7_Path, Doc_Environment_ViteAndSolid_Path, Doc_Environment_ViteAndSvelte_Path, Doc_Environment_ViteAndVue_Path, Doc_FrequentQuestions_Path, Doc_IntlayerCMS_Path, Doc_IntlayerVisualEditor_Path, Doc_Intlayer_with_Lynx_and_React_Path, Doc_MCP_Path, Doc_Path, Doc_PrivacyPolicy_Path, Doc_ReleasesV6_Path, Doc_ReleasesV7_Path, Doc_ReleasesV8_Path, Doc_Root_Path, Doc_Search_Path, Doc_ShowcaseSubmit_Path, Doc_Showcase_Path, Doc_TermsOfService_Path, Doc_Why_Path, External_AI_Landing_Page, External_Discord, External_DockerHub_SelfHost, External_ExampleIntlayerWithExpress, External_ExampleIntlayerWithNextjs, External_ExampleIntlayerWithReactJS, External_ExampleIntlayerWithReactNative, External_ExampleIntlayerWithViteAndPreact, External_ExampleIntlayerWithViteAndReact, External_ExampleIntlayerWithViteAndSolid, External_ExampleIntlayerWithViteAndSvelte, External_ExampleIntlayerWithViteAndVue, External_Examples, External_Github, External_Github_i18n_benchmark, External_LinkedIn, External_ShowcaseApp, LlmsTxt_Path, Mcp_Origin, Mcp_Root, Mcp_Sse, Showcase_Origin, Showcase_Root, Showcase_Root_Path, Showcase_Submit, Showcase_Submit_Path, Website_Benchmark, Website_Benchmark_NextJS, Website_Benchmark_NextJS_Path, Website_Benchmark_Path, Website_Benchmark_Tanstack, Website_Benchmark_Tanstack_Path, Website_Blog, Website_Blog_Path, Website_Blog_Root, Website_Blog_Root_Path, Website_Blog_Search, Website_Blog_Search_Path, Website_Blog_What_is_i18n, Website_Blog_What_is_i18n_Path, Website_CMS, Website_CMS_Path, Website_Changelog, Website_Changelog_Path, Website_Contributors, Website_Contributors_Path, Website_Demo, Website_Demo_Path, Website_Doc, Website_Doc_CLI_Fill, Website_Doc_CLI_Fill_Path, Website_Doc_CLI_Review, Website_Doc_CLI_Review_Path, Website_Doc_CLI_Translate, Website_Doc_CLI_Translate_Path, Website_Doc_Chat, Website_Doc_Chat_Path, Website_Doc_Environment_Adonis, Website_Doc_Environment_Adonis_Path, Website_Doc_Environment_Angular, Website_Doc_Environment_Angular_Path, Website_Doc_Environment_Astro, Website_Doc_Environment_Astro_Path, Website_Doc_Environment_CRA, Website_Doc_Environment_CRA_Path, Website_Doc_Environment_Express, Website_Doc_Environment_Express_Path, Website_Doc_Environment_Fastify, Website_Doc_Environment_Fastify_Path, Website_Doc_Environment_Hono, Website_Doc_Environment_Hono_Path, Website_Doc_Environment_Htmx, Website_Doc_Environment_Htmx_Path, Website_Doc_Environment_Lit, Website_Doc_Environment_Lit_Path, Website_Doc_Environment_Lynx, Website_Doc_Environment_Lynx_Path, Website_Doc_Environment_NestJS, Website_Doc_Environment_NestJS_Path, Website_Doc_Environment_NextJS, Website_Doc_Environment_NextJS_14, Website_Doc_Environment_NextJS_14_Path, Website_Doc_Environment_NextJS_15, Website_Doc_Environment_NextJS_15_Path, Website_Doc_Environment_NextJS_16, Website_Doc_Environment_NextJS_16_Path, Website_Doc_Environment_NextJS_Path, Website_Doc_Environment_Nodejs, Website_Doc_Environment_Nodejs_Path, Website_Doc_Environment_NuxtAndVue, Website_Doc_Environment_NuxtAndVue_Path, Website_Doc_Environment_ReactNativeAndExpo, Website_Doc_Environment_ReactNativeAndExpo_Path, Website_Doc_Environment_Remix_3, Website_Doc_Environment_Remix_3_Path, Website_Doc_Environment_Tanstack, Website_Doc_Environment_Tanstack_Path, Website_Doc_Environment_ViteAndPreact, Website_Doc_Environment_ViteAndPreact_Path, Website_Doc_Environment_ViteAndReact, Website_Doc_Environment_ViteAndReact_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes, Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path, Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path, Website_Doc_Environment_ViteAndSolid, Website_Doc_Environment_ViteAndSolid_Path, Website_Doc_Environment_ViteAndSvelte, Website_Doc_Environment_ViteAndSvelte_Path, Website_Doc_Environment_ViteAndVue, Website_Doc_Environment_ViteAndVue_Path, Website_Doc_HTML, Website_Doc_HTML_Path, Website_Doc_IntlayerCMS, Website_Doc_IntlayerCMS_Path, Website_Doc_IntlayerVisualEditor, Website_Doc_IntlayerVisualEditor_Path, Website_Doc_Intlayer_with_Lynx_and_React, Website_Doc_Intlayer_with_Lynx_and_React_Path, Website_Doc_MCP, Website_Doc_MCP_Path, Website_Doc_Markdown, Website_Doc_Markdown_Path, Website_Doc_Path, Website_Doc_Root, Website_Doc_Root_Path, Website_Doc_Search, Website_Doc_Search_Path, Website_Doc_SelfHosting, Website_Doc_SelfHosting_Path, Website_Doc_Why, Website_Doc_Why_Path, Website_Domain, Website_FrequentQuestions, Website_FrequentQuestions_Path, Website_Home, Website_Home_Path, Website_I18nextFormatter, Website_I18nextFormatter_Path, Website_ICUFormatter, Website_ICUFormatter_Path, Website_IntlayerFormatter, Website_IntlayerFormatter_Path, Website_Markdown, Website_Markdown_Path, Website_MessageConverter, Website_MessageConverter_Path, Website_NotFound, Website_NotFound_Path, Website_Origin, Website_POFormatter, Website_POFormatter_Path, Website_Playground, Website_Playground_Path, Website_PrivacyPolicy, Website_PrivacyPolicy_Path, Website_ReleasesV6, Website_ReleasesV6_Path, Website_ReleasesV7, Website_ReleasesV7_Path, Website_ReleasesV8, Website_ReleasesV8_Path, Website_ReleasesV9_Path, Website_Scanner, Website_Scanner_Path, Website_TMS, Website_TMS_Path, Website_TermsOfService, Website_TermsOfService_Path, Website_Translate, Website_Translate_Path, Website_VueI18nFormatter, Website_VueI18nFormatter_Path, WellKnown_AgentSkillsIndex_Path, WellKnown_AgentSkills_Path, WellKnown_AiCatalog_Path, WellKnown_ApiCatalog_Path, WellKnown_McpServerCard_Path, WellKnown_OAuthAuthorizationServer_Path, WellKnown_OAuthProtectedResource_Path, getAppAdminAffiliateRoute, getAppAdminOrganizationAbsoluteRoute, getAppAdminOrganizationRoute, getAppAdminProjectAbsoluteRoute, getAppAdminProjectRoute, getAppAdminPromoCodeRoute, getAppAdminReviewerRoute, getAppAdminUserAbsoluteRoute, getAppAdminUserRoute, getAppOnboardingFlowAbsoluteRoute, getAppOnboardingFlowRoute, getAppReviewerMissionRoute, getAppReviewerProfileRoute };
326
328
  //# sourceMappingURL=routes.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.mjs","names":[],"sources":["../../src/routes.ts"],"sourcesContent":["// ============================================================\n// Origins\n// ============================================================\n// `VITE_CMS_URL` and `VITE_BACKEND_URL` are full URLs (`https://…`), so they\n// are the origins themselves — never a host to prefix a scheme onto.\n\n// `import.meta.env` is optional-chained: this module is also loaded by plain\n// Node (a `vite.config.ts` importing it, the CLI), where `env` is undefined.\nexport const App_Origin = ((import.meta as any).env?.VITE_CMS_URL ||\n 'https://app.intlayer.org') as 'https://app.intlayer.org';\nexport const Backend_Origin = ((import.meta as any).env?.VITE_BACKEND_URL ||\n 'https://back.intlayer.org') as 'https://back.intlayer.org';\nexport const Showcase_Origin = 'https://showcase.intlayer.org' as const;\nexport const Mcp_Origin = 'https://mcp.intlayer.org' as const;\n\n// ============================================================\n// Domains\n// ============================================================\nexport const Website_Domain = 'intlayer.org' as const;\nexport const Website_Origin = `https://${Website_Domain}` as const;\n\n// ============================================================\n// App paths — relative (app.intlayer.org)\n// ============================================================\nexport const App_Home_Path = '/' as const;\nexport const App_NotFound_Path = '/404' as const;\n\nexport const App_Dashboard_Editor_Path = '/editor' as const;\nexport const App_Dashboard_Translate_Path = '/translate' as const;\nexport const App_Dashboard_Dictionaries_Path = '/dictionary' as const;\nexport const App_Dashboard_Projects_Path = '/projects' as const;\nexport const App_Dashboard_Tags_Path = '/tags' as const;\nexport const App_Dashboard_Organization_Path = '/organization' as const;\nexport const App_Dashboard_Profile_Path = '/profile' as const;\nexport const App_Dashboard_IDE_Path = '/ide' as const;\nexport const App_Dashboard_Scanner_Path = '/scanner' as const;\nexport const App_Dashboard_Assets_Path = '/assets' as const;\nexport const App_Dashboard_Analytics_Path = '/analytics' as const;\n\nexport const App_Pricing_Path = '/pricing' as const;\nexport const App_Affiliation_Path = '/affiliation' as const;\n\nexport const App_Demo_Path = '/demo' as const;\nexport const App_Init_Path = '/init' as const;\n\nexport const App_ReviewerMarketplace_Path = '/find-reviewer' as const;\nexport const App_ReviewerMarketplace_Dashboard_Path =\n '/find-reviewer/dashboard' as const;\nexport const App_ReviewerMarketplace_Reviewer_Path =\n '/find-reviewer/$reviewerId' as const;\nexport const App_ReviewerMarketplace_Dashboard_Mission_Path =\n '/find-reviewer/dashboard/mission/$missionId' as const;\n\nexport const getAppReviewerProfileRoute = (reviewerId: string) =>\n `/find-reviewer/${reviewerId}` as const;\nexport const getAppReviewerMissionRoute = (missionId: string) =>\n `/find-reviewer/dashboard/mission/${missionId}` as const;\n\n/** Root of the authentication section, usable as a `Disallow` prefix. */\nexport const App_Auth_Path = '/auth' as const;\nexport const App_Auth_SignIn_Path = '/auth/login' as const;\nexport const App_Auth_SignUp_Path = '/auth/register' as const;\nexport const App_Auth_TwoFactor_Path = '/auth/2fa' as const;\nexport const App_Auth_Demo_Path = '/auth/demo' as const;\nexport const App_Auth_AskResetPassword_Path =\n '/auth/password/ask-reset' as const;\nexport const App_Auth_ResetPassword_Path = '/auth/password/reset' as const;\nexport const App_Auth_ChangePassword_Path = '/auth/password/change' as const;\n\nexport const App_Admin_Path = '/admin' as const;\nexport const App_Admin_Users_Path = '/admin/users' as const;\nexport const App_Admin_Organizations_Path = '/admin/organizations' as const;\nexport const App_Admin_Projects_Path = '/admin/projects' as const;\nexport const App_Admin_Dashboard_Path = '/admin/dashboard' as const;\nexport const App_Admin_Management_Path = '/admin/management' as const;\nexport const App_Admin_Discussions_Path = '/admin/discussions' as const;\nexport const App_Admin_Affiliate_Path = '/admin/affiliate' as const;\nexport const getAppAdminAffiliateRoute = (id: string) =>\n `${App_Admin_Affiliate_Path}/${id}` as const;\nexport const App_Admin_PromoCodes_Path = '/admin/promo-code' as const;\nexport const getAppAdminPromoCodeRoute = (id: string) =>\n `${App_Admin_PromoCodes_Path}/${id}` as const;\n\nexport const App_Admin_Reviewers_Path = '/admin/reviewers' as const;\nexport const getAppAdminReviewerRoute = (id: string) =>\n `${App_Admin_Reviewers_Path}/${id}` as const;\n\nexport const App_Onboarding_Path = '/onboarding' as const;\n\nexport const getAppAdminUserRoute = (id: string) =>\n `${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationRoute = (id: string) =>\n `${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectRoute = (id: string) =>\n `${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowRoute = (step: string) =>\n `${App_Onboarding_Path}/${step}` as const;\n\n// ============================================================\n// App absolute URLs — https://app.intlayer.org\n// ============================================================\nexport const App_Dashboard = App_Origin;\nexport const App_Dashboard_Editor =\n `${App_Origin}${App_Dashboard_Editor_Path}` as const;\nexport const App_Dashboard_Translate =\n `${App_Origin}${App_Dashboard_Translate_Path}` as const;\nexport const App_Dashboard_Dictionaries =\n `${App_Origin}${App_Dashboard_Dictionaries_Path}` as const;\nexport const App_Dashboard_Projects =\n `${App_Origin}${App_Dashboard_Projects_Path}` as const;\nexport const App_Dashboard_Tags =\n `${App_Origin}${App_Dashboard_Tags_Path}` as const;\nexport const App_Dashboard_Organization =\n `${App_Origin}${App_Dashboard_Organization_Path}` as const;\nexport const App_Dashboard_Profile =\n `${App_Origin}${App_Dashboard_Profile_Path}` as const;\nexport const App_Dashboard_IDE =\n `${App_Origin}${App_Dashboard_IDE_Path}` as const;\nexport const App_Dashboard_Scanner =\n `${App_Origin}${App_Dashboard_Scanner_Path}` as const;\nexport const App_Dashboard_Analytics =\n `${App_Origin}${App_Dashboard_Analytics_Path}` as const;\n\nexport const App_Pricing = `${App_Origin}${App_Pricing_Path}` as const;\nexport const App_Affiliation = `${App_Origin}${App_Affiliation_Path}` as const;\nexport const App_Demo = `${App_Origin}${App_Demo_Path}` as const;\n\nexport const App_ReviewerMarketplace =\n `${App_Origin}${App_ReviewerMarketplace_Path}` as const;\nexport const App_ReviewerMarketplace_Dashboard =\n `${App_Origin}${App_ReviewerMarketplace_Dashboard_Path}` as const;\n\nexport const App_Auth_SignIn = `${App_Origin}${App_Auth_SignIn_Path}` as const;\nexport const App_Auth_SignUp = `${App_Origin}${App_Auth_SignUp_Path}` as const;\nexport const App_Auth_TwoFactor =\n `${App_Origin}${App_Auth_TwoFactor_Path}` as const;\nexport const App_Auth_AskResetPassword =\n `${App_Origin}${App_Auth_AskResetPassword_Path}` as const;\nexport const App_Auth_ResetPassword =\n `${App_Origin}${App_Auth_ResetPassword_Path}` as const;\nexport const App_Auth_ChangePassword =\n `${App_Origin}${App_Auth_ChangePassword_Path}` as const;\n\nexport const App_Admin = `${App_Origin}${App_Admin_Path}` as const;\nexport const App_Admin_Users = `${App_Origin}${App_Admin_Users_Path}` as const;\nexport const App_Admin_Organizations =\n `${App_Origin}${App_Admin_Organizations_Path}` as const;\nexport const App_Admin_Projects =\n `${App_Origin}${App_Admin_Projects_Path}` as const;\nexport const App_Admin_Dashboard =\n `${App_Origin}${App_Admin_Dashboard_Path}` as const;\nexport const App_Admin_Management =\n `${App_Origin}${App_Admin_Management_Path}` as const;\nexport const App_Admin_Discussions =\n `${App_Origin}${App_Admin_Discussions_Path}` as const;\nexport const App_Admin_Affiliate =\n `${App_Origin}${App_Admin_Affiliate_Path}` as const;\nexport const App_Admin_PromoCodes =\n `${App_Origin}${App_Admin_PromoCodes_Path}` as const;\nexport const App_Admin_Reviewers =\n `${App_Origin}${App_Admin_Reviewers_Path}` as const;\n\nexport const App_Onboarding = `${App_Origin}${App_Onboarding_Path}` as const;\n\nexport const getAppAdminUserAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowAbsoluteRoute = (\n step: string,\n plan: string,\n period?: string\n) =>\n period\n ? `${App_Origin}${App_Onboarding_Path}/${step}/${plan}/${period}`\n : (`${App_Origin}${App_Onboarding_Path}/${step}/${plan}` as const);\n\n// ============================================================\n// Website paths — relative (intlayer.org)\n// ============================================================\nexport const Website_Home_Path = '/' as const;\nexport const Website_CMS_Path = '/cms' as const;\nexport const Website_TMS_Path = '/tms' as const;\nexport const Website_Translate_Path = '/translate' as const;\nexport const Website_Markdown_Path = '/markdown' as const;\nexport const Website_Demo_Path = '/demo' as const;\nexport const Website_Playground_Path = '/playground' as const;\nexport const Website_NotFound_Path = '/404' as const;\nexport const Website_Changelog_Path = '/changelog' as const;\nexport const Website_Scanner_Path = '/i18n-seo-scanner' as const;\nexport const Website_MessageConverter_Path = '/i18n-message-converter' as const;\nexport const Website_IntlayerFormatter_Path =\n '/intlayer-message-formatter' as const;\nexport const Website_ICUFormatter_Path = '/icu-message-formatter' as const;\nexport const Website_I18nextFormatter_Path =\n '/i18next-message-formatter' as const;\nexport const Website_VueI18nFormatter_Path =\n '/vue-i18n-message-formatter' as const;\nexport const Website_POFormatter_Path = '/po-file-message-formatter' as const;\n\nexport const Website_Doc_Root_Path = '/doc' as const;\nexport const Website_Doc_Path = '/doc/get-started' as const;\nexport const Website_Doc_Why_Path = '/doc/why' as const;\nexport const Website_Doc_Search_Path = '/doc/search' as const;\nexport const Website_Doc_Chat_Path = '/doc/chat' as const;\nexport const Website_Doc_IntlayerVisualEditor_Path =\n '/doc/concept/editor' as const;\nexport const Website_Doc_IntlayerCMS_Path = '/doc/concept/cms' as const;\nexport const Website_Doc_SelfHosting_Path = '/doc/self-hosting' as const;\nexport const Website_Doc_Markdown_Path =\n '/doc/concept/content/markdown' as const;\nexport const Website_Doc_HTML_Path = '/doc/concept/content/html' as const;\n\nexport const Website_ReleasesV6_Path = '/doc/releases/v6' as const;\nexport const Website_ReleasesV7_Path = '/doc/releases/v7' as const;\nexport const Website_ReleasesV8_Path = '/doc/releases/v8' as const;\nexport const Website_ReleasesV9_Path = '/doc/releases/v9' as const;\nexport const Website_Doc_Environment_NextJS_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_16_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_15_Path =\n '/doc/environment/nextjs/15' as const;\nexport const Website_Doc_Environment_NextJS_14_Path =\n '/doc/environment/nextjs/14' as const;\nexport const Website_Doc_Environment_CRA_Path =\n '/doc/environment/create-react-app' as const;\nexport const Website_Doc_Environment_Astro_Path =\n '/doc/environment/astro' as const;\nexport const Website_Doc_Environment_ViteAndReact_Path =\n '/doc/environment/vite-and-react' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/doc/environment/vite-and-react/react-router-v7' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/doc/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Website_Doc_Environment_Tanstack_Path =\n '/doc/environment/tanstack-start' as const;\nexport const Website_Doc_Environment_Lit_Path =\n '/doc/environment/vite-and-lit' as const;\nexport const Website_Doc_Environment_Nodejs_Path = '/doc/concept/cli' as const;\nexport const Website_Doc_Environment_Adonis_Path =\n '/doc/environment/adonisjs' as const;\nexport const Website_Doc_Environment_ViteAndVue_Path =\n '/doc/environment/vite-and-vue' as const;\nexport const Website_Doc_Environment_ViteAndSolid_Path =\n '/doc/environment/vite-and-solid' as const;\nexport const Website_Doc_Environment_ViteAndSvelte_Path =\n '/doc/environment/vite-and-svelte' as const;\nexport const Website_Doc_Environment_ViteAndPreact_Path =\n '/doc/environment/vite-and-preact' as const;\nexport const Website_Doc_Environment_NuxtAndVue_Path =\n '/doc/environment/nuxt-and-vue' as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Angular_Path =\n '/doc/environment/angular' as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo_Path =\n '/doc/environment/react-native-and-expo' as const;\nexport const Website_Doc_Environment_Lynx_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Express_Path =\n '/doc/environment/express' as const;\nexport const Website_Doc_Environment_NestJS_Path =\n '/doc/environment/nest' as const;\nexport const Website_Doc_Environment_Fastify_Path =\n '/doc/environment/fastify' as const;\nexport const Website_Doc_Environment_Hono_Path =\n '/doc/environment/hono' as const;\nexport const Website_Doc_Environment_Htmx_Path =\n '/doc/environment/htmx' as const;\n\nexport const Website_Doc_CLI_Fill_Path = '/doc/concept/cli/fill' as const;\nexport const Website_Doc_CLI_Translate_Path =\n '/doc/concept/cli/doc-translate' as const;\nexport const Website_Doc_CLI_Review_Path =\n '/doc/concept/cli/doc-review' as const;\n\nexport const Website_Benchmark_Path = '/doc/benchmark' as const;\nexport const Website_Benchmark_NextJS_Path = '/doc/benchmark/nextjs' as const;\nexport const Website_Benchmark_Tanstack_Path =\n '/doc/benchmark/tanstack' as const;\n\nexport const Website_Doc_MCP_Path = '/doc/mcp-server' as const;\n\nexport const Website_Blog_Root_Path = '/blog' as const;\nexport const Website_Blog_Path = '/blog' as const;\nexport const Website_Blog_Search_Path = '/blog' as const;\nexport const Website_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Website_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Website_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Website_TermsOfService_Path = '/terms-of-service' as const;\nexport const Website_Contributors_Path = '/contributors' as const;\n\n// ============================================================\n// Website absolute URLs — https://intlayer.org\n// ============================================================\nexport const Website_Home = `${Website_Origin}${Website_Home_Path}` as const;\nexport const Website_CMS = `${Website_Origin}${Website_CMS_Path}` as const;\nexport const Website_TMS = `${Website_Origin}${Website_TMS_Path}` as const;\nexport const Website_Translate =\n `${Website_Origin}${Website_Translate_Path}` as const;\nexport const Website_Markdown =\n `${Website_Origin}${Website_Markdown_Path}` as const;\nexport const Website_Demo = `${Website_Origin}${Website_Demo_Path}` as const;\nexport const Website_Playground =\n `${Website_Origin}${Website_Playground_Path}` as const;\nexport const Website_NotFound =\n `${Website_Origin}${Website_NotFound_Path}` as const;\nexport const Website_Changelog =\n `${Website_Origin}${Website_Changelog_Path}` as const;\nexport const Website_Scanner =\n `${Website_Origin}${Website_Scanner_Path}` as const;\nexport const Website_MessageConverter =\n `${Website_Origin}${Website_MessageConverter_Path}` as const;\nexport const Website_IntlayerFormatter =\n `${Website_Origin}${Website_IntlayerFormatter_Path}` as const;\nexport const Website_ICUFormatter =\n `${Website_Origin}${Website_ICUFormatter_Path}` as const;\nexport const Website_I18nextFormatter =\n `${Website_Origin}${Website_I18nextFormatter_Path}` as const;\nexport const Website_VueI18nFormatter =\n `${Website_Origin}${Website_VueI18nFormatter_Path}` as const;\nexport const Website_POFormatter =\n `${Website_Origin}${Website_POFormatter_Path}` as const;\nexport const Website_Benchmark =\n `${Website_Origin}${Website_Benchmark_Path}` as const;\nexport const Website_Benchmark_NextJS =\n `${Website_Origin}${Website_Benchmark_NextJS_Path}` as const;\nexport const Website_Benchmark_Tanstack =\n `${Website_Origin}${Website_Benchmark_Tanstack_Path}` as const;\n\nexport const Website_Doc_Root =\n `${Website_Origin}${Website_Doc_Root_Path}` as const;\nexport const Website_Doc = `${Website_Origin}${Website_Doc_Path}` as const;\nexport const Website_Doc_Why =\n `${Website_Origin}${Website_Doc_Why_Path}` as const;\nexport const Website_Doc_Search =\n `${Website_Origin}${Website_Doc_Search_Path}` as const;\nexport const Website_Doc_Chat =\n `${Website_Origin}${Website_Doc_Chat_Path}` as const;\nexport const Website_Doc_IntlayerVisualEditor =\n `${Website_Origin}${Website_Doc_IntlayerVisualEditor_Path}` as const;\nexport const Website_Doc_IntlayerCMS =\n `${Website_Origin}${Website_Doc_IntlayerCMS_Path}` as const;\nexport const Website_Doc_SelfHosting =\n `${Website_Origin}${Website_Doc_SelfHosting_Path}` as const;\nexport const Website_Doc_Markdown =\n `${Website_Origin}${Website_Doc_Markdown_Path}` as const;\nexport const Website_Doc_HTML =\n `${Website_Origin}${Website_Doc_HTML_Path}` as const;\n\nexport const Website_ReleasesV6 =\n `${Website_Origin}${Website_ReleasesV6_Path}` as const;\nexport const Website_ReleasesV7 =\n `${Website_Origin}${Website_ReleasesV7_Path}` as const;\nexport const Website_ReleasesV8 =\n `${Website_Origin}${Website_ReleasesV8_Path}` as const;\nexport const Website_Doc_Environment_NextJS =\n `${Website_Origin}${Website_Doc_Environment_NextJS_Path}` as const;\nexport const Website_Doc_Environment_NextJS_16 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_16_Path}` as const;\nexport const Website_Doc_Environment_NextJS_15 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_15_Path}` as const;\nexport const Website_Doc_Environment_NextJS_14 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_14_Path}` as const;\nexport const Website_Doc_Environment_CRA =\n `${Website_Origin}${Website_Doc_Environment_CRA_Path}` as const;\nexport const Website_Doc_Environment_Astro =\n `${Website_Origin}${Website_Doc_Environment_Astro_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7 =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path}` as const;\nexport const Website_Doc_Environment_Tanstack =\n `${Website_Origin}${Website_Doc_Environment_Tanstack_Path}` as const;\nexport const Website_Doc_Environment_Lit =\n `${Website_Origin}${Website_Doc_Environment_Lit_Path}` as const;\nexport const Website_Doc_Environment_Nodejs =\n `${Website_Origin}${Website_Doc_Environment_Nodejs_Path}` as const;\nexport const Website_Doc_Environment_Adonis =\n `${Website_Origin}${Website_Doc_Environment_Adonis_Path}` as const;\nexport const Website_Doc_Environment_ViteAndVue =\n `${Website_Origin}${Website_Doc_Environment_ViteAndVue_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSolid =\n `${Website_Origin}${Website_Doc_Environment_ViteAndSolid_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSvelte =\n `${Website_Origin}${Website_Doc_Environment_ViteAndSvelte_Path}` as const;\nexport const Website_Doc_Environment_ViteAndPreact =\n `${Website_Origin}${Website_Doc_Environment_ViteAndPreact_Path}` as const;\nexport const Website_Doc_Environment_NuxtAndVue =\n `${Website_Origin}${Website_Doc_Environment_NuxtAndVue_Path}` as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React =\n `${Website_Origin}${Website_Doc_Intlayer_with_Lynx_and_React_Path}` as const;\nexport const Website_Doc_Environment_Angular =\n `${Website_Origin}${Website_Doc_Environment_Angular_Path}` as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo =\n `${Website_Origin}${Website_Doc_Environment_ReactNativeAndExpo_Path}` as const;\nexport const Website_Doc_Environment_Lynx =\n `${Website_Origin}${Website_Doc_Environment_Lynx_Path}` as const;\nexport const Website_Doc_Environment_Express =\n `${Website_Origin}${Website_Doc_Environment_Express_Path}` as const;\nexport const Website_Doc_Environment_NestJS =\n `${Website_Origin}${Website_Doc_Environment_NestJS_Path}` as const;\nexport const Website_Doc_Environment_Fastify =\n `${Website_Origin}${Website_Doc_Environment_Fastify_Path}` as const;\nexport const Website_Doc_Environment_Hono =\n `${Website_Origin}${Website_Doc_Environment_Hono_Path}` as const;\nexport const Website_Doc_Environment_Htmx =\n `${Website_Origin}${Website_Doc_Environment_Htmx_Path}` as const;\n\nexport const Website_Doc_CLI_Fill =\n `${Website_Origin}${Website_Doc_CLI_Fill_Path}` as const;\nexport const Website_Doc_CLI_Translate =\n `${Website_Origin}${Website_Doc_CLI_Translate_Path}` as const;\nexport const Website_Doc_CLI_Review =\n `${Website_Origin}${Website_Doc_CLI_Review_Path}` as const;\n\nexport const Website_Doc_MCP =\n `${Website_Origin}${Website_Doc_MCP_Path}` as const;\n\nexport const Website_Blog_Root =\n `${Website_Origin}${Website_Blog_Root_Path}` as const;\nexport const Website_Blog = `${Website_Origin}${Website_Blog_Path}` as const;\nexport const Website_Blog_Search =\n `${Website_Origin}${Website_Blog_Search_Path}` as const;\nexport const Website_Blog_What_is_i18n =\n `${Website_Origin}${Website_Blog_What_is_i18n_Path}` as const;\n\nexport const Website_FrequentQuestions =\n `${Website_Origin}${Website_FrequentQuestions_Path}` as const;\nexport const Website_PrivacyPolicy =\n `${Website_Origin}${Website_PrivacyPolicy_Path}` as const;\nexport const Website_TermsOfService =\n `${Website_Origin}${Website_TermsOfService_Path}` as const;\nexport const Website_Contributors =\n `${Website_Origin}${Website_Contributors_Path}` as const;\n\n// ============================================================\n// Doc app paths — relative (served under intlayer.org/doc/*)\n// ============================================================\nexport const Doc_Root_Path = '/doc' as const;\nexport const Doc_Path = '/get-started' as const;\nexport const Doc_Why_Path = '/why' as const;\nexport const Doc_Search_Path = '/search' as const;\nexport const Doc_Chat_Path = '/chat' as const;\nexport const Doc_IntlayerVisualEditor_Path = '/concept/editor' as const;\nexport const Doc_IntlayerCMS_Path = '/concept/cms' as const;\n\nexport const Doc_ReleasesV6_Path = '/releases/v6' as const;\nexport const Doc_ReleasesV7_Path = '/releases/v7' as const;\nexport const Doc_ReleasesV8_Path = '/releases/v8' as const;\nexport const Doc_Environment_NextJS_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_16_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_15_Path = '/environment/nextjs/15' as const;\nexport const Doc_Environment_NextJS_14_Path = '/environment/nextjs/14' as const;\nexport const Doc_Environment_CRA_Path =\n '/environment/create-react-app' as const;\nexport const Doc_Environment_Astro_Path = '/environment/astro' as const;\nexport const Doc_Environment_ViteAndReact_Path =\n '/environment/vite-and-react' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/environment/vite-and-react/react-router-v7' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Doc_Environment_Tanstack_Path =\n '/environment/tanstack-start' as const;\nexport const Doc_Environment_Lit_Path = '/environment/vite-and-lit' as const;\nexport const Doc_Environment_Nodejs_Path = '/concept/cli' as const;\nexport const Doc_Environment_Adonis_Path = '/environment/adonisjs' as const;\nexport const Doc_Environment_ViteAndVue_Path =\n '/environment/vite-and-vue' as const;\nexport const Doc_Environment_ViteAndSolid_Path =\n '/environment/vite-and-solid' as const;\nexport const Doc_Environment_ViteAndSvelte_Path =\n '/environment/vite-and-svelte' as const;\nexport const Doc_Environment_ViteAndPreact_Path =\n '/environment/vite-and-preact' as const;\nexport const Doc_Environment_NuxtAndVue_Path =\n '/environment/nuxt-and-vue' as const;\nexport const Doc_Intlayer_with_Lynx_and_React_Path =\n '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Angular_Path = '/environment/angular' as const;\nexport const Doc_Environment_ReactNativeAndExpo_Path =\n '/environment/react-native-and-expo' as const;\nexport const Doc_Environment_Lynx_Path = '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Express_Path = '/environment/express' as const;\nexport const Doc_Environment_NestJS_Path = '/environment/nest' as const;\nexport const Doc_Environment_Fastify_Path = '/environment/fastify' as const;\nexport const Doc_Environment_Hono_Path = '/environment/hono' as const;\n\nexport const Doc_CLI_Fill_Path = '/concept/cli/fill' as const;\nexport const Doc_CLI_Translate_Path = '/concept/cli/doc-translate' as const;\nexport const Doc_CLI_Review_Path = '/concept/cli/doc-review' as const;\n\nexport const Doc_MCP_Path = '/mcp-server' as const;\n\nexport const Doc_Blog_Root_Path = '/blog' as const;\nexport const Doc_Blog_Path = '/blog' as const;\nexport const Doc_Blog_Search_Path = '/blog' as const;\nexport const Doc_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Doc_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Doc_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Doc_TermsOfService_Path = '/terms-of-service' as const;\nexport const Doc_Contributors_Path = '/contributors' as const;\nexport const Doc_Showcase_Path = '/' as const;\nexport const Doc_ShowcaseSubmit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase paths — relative (showcase.intlayer.org)\n// ============================================================\nexport const Showcase_Root_Path = '/' as const;\nexport const Showcase_Submit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase absolute URLs — https://showcase.intlayer.org\n// ============================================================\nexport const Showcase_Root = Showcase_Origin;\nexport const Showcase_Submit =\n `${Showcase_Origin}${Showcase_Submit_Path}` as const;\n\n// ============================================================\n// Backend absolute URLs — https://back.intlayer.org\n// ============================================================\nexport const Backend_Root = Backend_Origin;\nexport const Backend_Health = `${Backend_Origin}/health` as const;\nexport const Backend_OAuth2_Token = `${Backend_Origin}/oauth2/token` as const;\n\n// ============================================================\n// MCP absolute URLs — https://mcp.intlayer.org\n// ============================================================\nexport const Mcp_Root = Mcp_Origin;\nexport const Mcp_Sse = `${Mcp_Origin}/sse` as const;\n\n// ============================================================\n// Agent discovery paths — relative\n//\n// Well-known documents that let AI agents discover the site's APIs,\n// skills and authentication without scraping HTML.\n// ============================================================\nexport const WellKnown_ApiCatalog_Path = '/.well-known/api-catalog' as const;\nexport const WellKnown_AiCatalog_Path = '/.well-known/ai-catalog.json' as const;\nexport const WellKnown_OAuthProtectedResource_Path =\n '/.well-known/oauth-protected-resource' as const;\nexport const WellKnown_OAuthAuthorizationServer_Path =\n '/.well-known/oauth-authorization-server' as const;\nexport const WellKnown_McpServerCard_Path =\n '/.well-known/mcp/server-card.json' as const;\nexport const WellKnown_AgentSkills_Path = '/.well-known/agent-skills' as const;\nexport const WellKnown_AgentSkillsIndex_Path =\n `${WellKnown_AgentSkills_Path}/index.json` as const;\nexport const AuthMd_Path = '/auth.md' as const;\nexport const LlmsTxt_Path = '/llms.txt' as const;\n\n// ============================================================\n// External links\n// ============================================================\nexport const External_Github =\n 'https://github.com/aymericzip/intlayer' as const;\n\nexport const External_DockerHub_SelfHost =\n 'https://hub.docker.com/r/aymericzip/intlayer-selfhost' as const;\n\nexport const External_Github_i18n_benchmark =\n 'https://github.com/intlayer-org/benchmark-i18n' as const;\n\nexport const External_Discord = 'https://discord.gg/7uxamYVeCk' as const;\nexport const External_LinkedIn =\n 'https://www.linkedin.com/company/intlayerorg/' as const;\nexport const External_AI_Landing_Page = 'https://ai.intlayer.org' as const;\nexport const External_ShowcaseApp = Showcase_Origin;\nexport const External_Examples =\n 'https://github.com/aymericzip/intlayer/tree/main/examples' as const;\nexport const External_ExampleIntlayerWithNextjs =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/nextjs-15-app' as const;\nexport const External_ExampleIntlayerWithReactJS =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-app' as const;\nexport const External_ExampleIntlayerWithViteAndReact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-react-app' as const;\nexport const External_ExampleIntlayerWithViteAndVue =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-vue-app' as const;\nexport const External_ExampleIntlayerWithViteAndSvelte =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-svelte-app' as const;\nexport const External_ExampleIntlayerWithViteAndSolid =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-solid-app' as const;\nexport const External_ExampleIntlayerWithViteAndPreact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-preact-app' as const;\nexport const External_ExampleIntlayerWithReactNative =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-native-app' as const;\nexport const External_ExampleIntlayerWithExpress =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/express-app' as const;\n"],"mappings":"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"}
1
+ {"version":3,"file":"routes.mjs","names":[],"sources":["../../src/routes.ts"],"sourcesContent":["// ============================================================\n// Origins\n// ============================================================\n// `VITE_CMS_URL` and `VITE_BACKEND_URL` are full URLs (`https://…`), so they\n// are the origins themselves — never a host to prefix a scheme onto.\n\n// `import.meta.env` is optional-chained: this module is also loaded by plain\n// Node (a `vite.config.ts` importing it, the CLI), where `env` is undefined.\nexport const App_Origin = ((import.meta as any).env?.VITE_CMS_URL ||\n 'https://app.intlayer.org') as 'https://app.intlayer.org';\nexport const Backend_Origin = ((import.meta as any).env?.VITE_BACKEND_URL ||\n 'https://back.intlayer.org') as 'https://back.intlayer.org';\nexport const Showcase_Origin = 'https://showcase.intlayer.org' as const;\nexport const Mcp_Origin = 'https://mcp.intlayer.org' as const;\n\n// ============================================================\n// Domains\n// ============================================================\nexport const Website_Domain = 'intlayer.org' as const;\nexport const Website_Origin = `https://${Website_Domain}` as const;\n\n// ============================================================\n// App paths — relative (app.intlayer.org)\n// ============================================================\nexport const App_Home_Path = '/' as const;\nexport const App_NotFound_Path = '/404' as const;\n\nexport const App_Dashboard_Editor_Path = '/editor' as const;\nexport const App_Dashboard_Translate_Path = '/translate' as const;\nexport const App_Dashboard_Dictionaries_Path = '/dictionary' as const;\nexport const App_Dashboard_Projects_Path = '/projects' as const;\nexport const App_Dashboard_Tags_Path = '/tags' as const;\nexport const App_Dashboard_Organization_Path = '/organization' as const;\nexport const App_Dashboard_Profile_Path = '/profile' as const;\nexport const App_Dashboard_IDE_Path = '/ide' as const;\nexport const App_Dashboard_Scanner_Path = '/scanner' as const;\nexport const App_Dashboard_Assets_Path = '/assets' as const;\nexport const App_Dashboard_Analytics_Path = '/analytics' as const;\n\nexport const App_Pricing_Path = '/pricing' as const;\nexport const App_Affiliation_Path = '/affiliation' as const;\n\nexport const App_Demo_Path = '/demo' as const;\nexport const App_Init_Path = '/init' as const;\n\nexport const App_ReviewerMarketplace_Path = '/find-reviewer' as const;\nexport const App_ReviewerMarketplace_Dashboard_Path =\n '/find-reviewer/dashboard' as const;\nexport const App_ReviewerMarketplace_Reviewer_Path =\n '/find-reviewer/$reviewerId' as const;\nexport const App_ReviewerMarketplace_Dashboard_Mission_Path =\n '/find-reviewer/dashboard/mission/$missionId' as const;\n\nexport const getAppReviewerProfileRoute = (reviewerId: string) =>\n `/find-reviewer/${reviewerId}` as const;\nexport const getAppReviewerMissionRoute = (missionId: string) =>\n `/find-reviewer/dashboard/mission/${missionId}` as const;\n\n/** Root of the authentication section, usable as a `Disallow` prefix. */\nexport const App_Auth_Path = '/auth' as const;\nexport const App_Auth_SignIn_Path = '/auth/login' as const;\nexport const App_Auth_SignUp_Path = '/auth/register' as const;\nexport const App_Auth_TwoFactor_Path = '/auth/2fa' as const;\nexport const App_Auth_Demo_Path = '/auth/demo' as const;\nexport const App_Auth_AskResetPassword_Path =\n '/auth/password/ask-reset' as const;\nexport const App_Auth_ResetPassword_Path = '/auth/password/reset' as const;\nexport const App_Auth_ChangePassword_Path = '/auth/password/change' as const;\n\nexport const App_Admin_Path = '/admin' as const;\nexport const App_Admin_Users_Path = '/admin/users' as const;\nexport const App_Admin_Organizations_Path = '/admin/organizations' as const;\nexport const App_Admin_Projects_Path = '/admin/projects' as const;\nexport const App_Admin_Dashboard_Path = '/admin/dashboard' as const;\nexport const App_Admin_Management_Path = '/admin/management' as const;\nexport const App_Admin_Discussions_Path = '/admin/discussions' as const;\nexport const App_Admin_Affiliate_Path = '/admin/affiliate' as const;\nexport const getAppAdminAffiliateRoute = (id: string) =>\n `${App_Admin_Affiliate_Path}/${id}` as const;\nexport const App_Admin_PromoCodes_Path = '/admin/promo-code' as const;\nexport const getAppAdminPromoCodeRoute = (id: string) =>\n `${App_Admin_PromoCodes_Path}/${id}` as const;\n\nexport const App_Admin_Reviewers_Path = '/admin/reviewers' as const;\nexport const getAppAdminReviewerRoute = (id: string) =>\n `${App_Admin_Reviewers_Path}/${id}` as const;\n\nexport const App_Onboarding_Path = '/onboarding' as const;\n\nexport const getAppAdminUserRoute = (id: string) =>\n `${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationRoute = (id: string) =>\n `${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectRoute = (id: string) =>\n `${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowRoute = (step: string) =>\n `${App_Onboarding_Path}/${step}` as const;\n\n// ============================================================\n// App absolute URLs — https://app.intlayer.org\n// ============================================================\nexport const App_Dashboard = App_Origin;\nexport const App_Dashboard_Editor =\n `${App_Origin}${App_Dashboard_Editor_Path}` as const;\nexport const App_Dashboard_Translate =\n `${App_Origin}${App_Dashboard_Translate_Path}` as const;\nexport const App_Dashboard_Dictionaries =\n `${App_Origin}${App_Dashboard_Dictionaries_Path}` as const;\nexport const App_Dashboard_Projects =\n `${App_Origin}${App_Dashboard_Projects_Path}` as const;\nexport const App_Dashboard_Tags =\n `${App_Origin}${App_Dashboard_Tags_Path}` as const;\nexport const App_Dashboard_Organization =\n `${App_Origin}${App_Dashboard_Organization_Path}` as const;\nexport const App_Dashboard_Profile =\n `${App_Origin}${App_Dashboard_Profile_Path}` as const;\nexport const App_Dashboard_IDE =\n `${App_Origin}${App_Dashboard_IDE_Path}` as const;\nexport const App_Dashboard_Scanner =\n `${App_Origin}${App_Dashboard_Scanner_Path}` as const;\nexport const App_Dashboard_Analytics =\n `${App_Origin}${App_Dashboard_Analytics_Path}` as const;\n\nexport const App_Pricing = `${App_Origin}${App_Pricing_Path}` as const;\nexport const App_Affiliation = `${App_Origin}${App_Affiliation_Path}` as const;\nexport const App_Demo = `${App_Origin}${App_Demo_Path}` as const;\n\nexport const App_ReviewerMarketplace =\n `${App_Origin}${App_ReviewerMarketplace_Path}` as const;\nexport const App_ReviewerMarketplace_Dashboard =\n `${App_Origin}${App_ReviewerMarketplace_Dashboard_Path}` as const;\n\nexport const App_Auth_SignIn = `${App_Origin}${App_Auth_SignIn_Path}` as const;\nexport const App_Auth_SignUp = `${App_Origin}${App_Auth_SignUp_Path}` as const;\nexport const App_Auth_TwoFactor =\n `${App_Origin}${App_Auth_TwoFactor_Path}` as const;\nexport const App_Auth_AskResetPassword =\n `${App_Origin}${App_Auth_AskResetPassword_Path}` as const;\nexport const App_Auth_ResetPassword =\n `${App_Origin}${App_Auth_ResetPassword_Path}` as const;\nexport const App_Auth_ChangePassword =\n `${App_Origin}${App_Auth_ChangePassword_Path}` as const;\n\nexport const App_Admin = `${App_Origin}${App_Admin_Path}` as const;\nexport const App_Admin_Users = `${App_Origin}${App_Admin_Users_Path}` as const;\nexport const App_Admin_Organizations =\n `${App_Origin}${App_Admin_Organizations_Path}` as const;\nexport const App_Admin_Projects =\n `${App_Origin}${App_Admin_Projects_Path}` as const;\nexport const App_Admin_Dashboard =\n `${App_Origin}${App_Admin_Dashboard_Path}` as const;\nexport const App_Admin_Management =\n `${App_Origin}${App_Admin_Management_Path}` as const;\nexport const App_Admin_Discussions =\n `${App_Origin}${App_Admin_Discussions_Path}` as const;\nexport const App_Admin_Affiliate =\n `${App_Origin}${App_Admin_Affiliate_Path}` as const;\nexport const App_Admin_PromoCodes =\n `${App_Origin}${App_Admin_PromoCodes_Path}` as const;\nexport const App_Admin_Reviewers =\n `${App_Origin}${App_Admin_Reviewers_Path}` as const;\n\nexport const App_Onboarding = `${App_Origin}${App_Onboarding_Path}` as const;\n\nexport const getAppAdminUserAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Users_Path}/${id}` as const;\nexport const getAppAdminOrganizationAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Organizations_Path}/${id}` as const;\nexport const getAppAdminProjectAbsoluteRoute = (id: string) =>\n `${App_Origin}${App_Admin_Projects_Path}/${id}` as const;\nexport const getAppOnboardingFlowAbsoluteRoute = (\n step: string,\n plan: string,\n period?: string\n) =>\n period\n ? `${App_Origin}${App_Onboarding_Path}/${step}/${plan}/${period}`\n : (`${App_Origin}${App_Onboarding_Path}/${step}/${plan}` as const);\n\n// ============================================================\n// Website paths — relative (intlayer.org)\n// ============================================================\nexport const Website_Home_Path = '/' as const;\nexport const Website_CMS_Path = '/cms' as const;\nexport const Website_TMS_Path = '/tms' as const;\nexport const Website_Translate_Path = '/translate' as const;\nexport const Website_Markdown_Path = '/markdown' as const;\nexport const Website_Demo_Path = '/demo' as const;\nexport const Website_Playground_Path = '/playground' as const;\nexport const Website_NotFound_Path = '/404' as const;\nexport const Website_Changelog_Path = '/changelog' as const;\nexport const Website_Scanner_Path = '/i18n-seo-scanner' as const;\nexport const Website_MessageConverter_Path = '/i18n-message-converter' as const;\nexport const Website_IntlayerFormatter_Path =\n '/intlayer-message-formatter' as const;\nexport const Website_ICUFormatter_Path = '/icu-message-formatter' as const;\nexport const Website_I18nextFormatter_Path =\n '/i18next-message-formatter' as const;\nexport const Website_VueI18nFormatter_Path =\n '/vue-i18n-message-formatter' as const;\nexport const Website_POFormatter_Path = '/po-file-message-formatter' as const;\n\nexport const Website_Doc_Root_Path = '/doc' as const;\nexport const Website_Doc_Path = '/doc/get-started' as const;\nexport const Website_Doc_Why_Path = '/doc/why' as const;\nexport const Website_Doc_Search_Path = '/doc/search' as const;\nexport const Website_Doc_Chat_Path = '/doc/chat' as const;\nexport const Website_Doc_IntlayerVisualEditor_Path =\n '/doc/concept/editor' as const;\nexport const Website_Doc_IntlayerCMS_Path = '/doc/concept/cms' as const;\nexport const Website_Doc_SelfHosting_Path = '/doc/self-hosting' as const;\nexport const Website_Doc_Markdown_Path =\n '/doc/concept/content/markdown' as const;\nexport const Website_Doc_HTML_Path = '/doc/concept/content/html' as const;\n\nexport const Website_ReleasesV6_Path = '/doc/releases/v6' as const;\nexport const Website_ReleasesV7_Path = '/doc/releases/v7' as const;\nexport const Website_ReleasesV8_Path = '/doc/releases/v8' as const;\nexport const Website_ReleasesV9_Path = '/doc/releases/v9' as const;\nexport const Website_Doc_Environment_NextJS_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_16_Path =\n '/doc/environment/nextjs' as const;\nexport const Website_Doc_Environment_NextJS_15_Path =\n '/doc/environment/nextjs/15' as const;\nexport const Website_Doc_Environment_NextJS_14_Path =\n '/doc/environment/nextjs/14' as const;\nexport const Website_Doc_Environment_CRA_Path =\n '/doc/environment/create-react-app' as const;\nexport const Website_Doc_Environment_Astro_Path =\n '/doc/environment/astro' as const;\nexport const Website_Doc_Environment_ViteAndReact_Path =\n '/doc/environment/vite-and-react' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/doc/environment/vite-and-react/react-router-v7' as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/doc/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Website_Doc_Environment_Tanstack_Path =\n '/doc/environment/tanstack-start' as const;\nexport const Website_Doc_Environment_Lit_Path =\n '/doc/environment/vite-and-lit' as const;\nexport const Website_Doc_Environment_Nodejs_Path = '/doc/concept/cli' as const;\nexport const Website_Doc_Environment_Adonis_Path =\n '/doc/environment/adonisjs' as const;\nexport const Website_Doc_Environment_ViteAndVue_Path =\n '/doc/environment/vite-and-vue' as const;\nexport const Website_Doc_Environment_ViteAndSolid_Path =\n '/doc/environment/vite-and-solid' as const;\nexport const Website_Doc_Environment_ViteAndSvelte_Path =\n '/doc/environment/vite-and-svelte' as const;\nexport const Website_Doc_Environment_ViteAndPreact_Path =\n '/doc/environment/vite-and-preact' as const;\nexport const Website_Doc_Environment_NuxtAndVue_Path =\n '/doc/environment/nuxt-and-vue' as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Angular_Path =\n '/doc/environment/angular' as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo_Path =\n '/doc/environment/react-native-and-expo' as const;\nexport const Website_Doc_Environment_Lynx_Path =\n '/doc/environment/lynx-and-react' as const;\nexport const Website_Doc_Environment_Express_Path =\n '/doc/environment/express' as const;\nexport const Website_Doc_Environment_NestJS_Path =\n '/doc/environment/nest' as const;\nexport const Website_Doc_Environment_Fastify_Path =\n '/doc/environment/fastify' as const;\nexport const Website_Doc_Environment_Hono_Path =\n '/doc/environment/hono' as const;\nexport const Website_Doc_Environment_Htmx_Path =\n '/doc/environment/htmx' as const;\nexport const Website_Doc_Environment_Remix_3_Path =\n '/doc/environment/remix-3' as const;\n\nexport const Website_Doc_CLI_Fill_Path = '/doc/concept/cli/fill' as const;\nexport const Website_Doc_CLI_Translate_Path =\n '/doc/concept/cli/doc-translate' as const;\nexport const Website_Doc_CLI_Review_Path =\n '/doc/concept/cli/doc-review' as const;\n\nexport const Website_Benchmark_Path = '/doc/benchmark' as const;\nexport const Website_Benchmark_NextJS_Path = '/doc/benchmark/nextjs' as const;\nexport const Website_Benchmark_Tanstack_Path =\n '/doc/benchmark/tanstack' as const;\n\nexport const Website_Doc_MCP_Path = '/doc/mcp-server' as const;\n\nexport const Website_Blog_Root_Path = '/blog' as const;\nexport const Website_Blog_Path = '/blog' as const;\nexport const Website_Blog_Search_Path = '/blog' as const;\nexport const Website_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Website_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Website_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Website_TermsOfService_Path = '/terms-of-service' as const;\nexport const Website_Contributors_Path = '/contributors' as const;\n\n// ============================================================\n// Website absolute URLs — https://intlayer.org\n// ============================================================\nexport const Website_Home = `${Website_Origin}${Website_Home_Path}` as const;\nexport const Website_CMS = `${Website_Origin}${Website_CMS_Path}` as const;\nexport const Website_TMS = `${Website_Origin}${Website_TMS_Path}` as const;\nexport const Website_Translate =\n `${Website_Origin}${Website_Translate_Path}` as const;\nexport const Website_Markdown =\n `${Website_Origin}${Website_Markdown_Path}` as const;\nexport const Website_Demo = `${Website_Origin}${Website_Demo_Path}` as const;\nexport const Website_Playground =\n `${Website_Origin}${Website_Playground_Path}` as const;\nexport const Website_NotFound =\n `${Website_Origin}${Website_NotFound_Path}` as const;\nexport const Website_Changelog =\n `${Website_Origin}${Website_Changelog_Path}` as const;\nexport const Website_Scanner =\n `${Website_Origin}${Website_Scanner_Path}` as const;\nexport const Website_MessageConverter =\n `${Website_Origin}${Website_MessageConverter_Path}` as const;\nexport const Website_IntlayerFormatter =\n `${Website_Origin}${Website_IntlayerFormatter_Path}` as const;\nexport const Website_ICUFormatter =\n `${Website_Origin}${Website_ICUFormatter_Path}` as const;\nexport const Website_I18nextFormatter =\n `${Website_Origin}${Website_I18nextFormatter_Path}` as const;\nexport const Website_VueI18nFormatter =\n `${Website_Origin}${Website_VueI18nFormatter_Path}` as const;\nexport const Website_POFormatter =\n `${Website_Origin}${Website_POFormatter_Path}` as const;\nexport const Website_Benchmark =\n `${Website_Origin}${Website_Benchmark_Path}` as const;\nexport const Website_Benchmark_NextJS =\n `${Website_Origin}${Website_Benchmark_NextJS_Path}` as const;\nexport const Website_Benchmark_Tanstack =\n `${Website_Origin}${Website_Benchmark_Tanstack_Path}` as const;\n\nexport const Website_Doc_Root =\n `${Website_Origin}${Website_Doc_Root_Path}` as const;\nexport const Website_Doc = `${Website_Origin}${Website_Doc_Path}` as const;\nexport const Website_Doc_Why =\n `${Website_Origin}${Website_Doc_Why_Path}` as const;\nexport const Website_Doc_Search =\n `${Website_Origin}${Website_Doc_Search_Path}` as const;\nexport const Website_Doc_Chat =\n `${Website_Origin}${Website_Doc_Chat_Path}` as const;\nexport const Website_Doc_IntlayerVisualEditor =\n `${Website_Origin}${Website_Doc_IntlayerVisualEditor_Path}` as const;\nexport const Website_Doc_IntlayerCMS =\n `${Website_Origin}${Website_Doc_IntlayerCMS_Path}` as const;\nexport const Website_Doc_SelfHosting =\n `${Website_Origin}${Website_Doc_SelfHosting_Path}` as const;\nexport const Website_Doc_Markdown =\n `${Website_Origin}${Website_Doc_Markdown_Path}` as const;\nexport const Website_Doc_HTML =\n `${Website_Origin}${Website_Doc_HTML_Path}` as const;\n\nexport const Website_ReleasesV6 =\n `${Website_Origin}${Website_ReleasesV6_Path}` as const;\nexport const Website_ReleasesV7 =\n `${Website_Origin}${Website_ReleasesV7_Path}` as const;\nexport const Website_ReleasesV8 =\n `${Website_Origin}${Website_ReleasesV8_Path}` as const;\nexport const Website_Doc_Environment_NextJS =\n `${Website_Origin}${Website_Doc_Environment_NextJS_Path}` as const;\nexport const Website_Doc_Environment_NextJS_16 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_16_Path}` as const;\nexport const Website_Doc_Environment_NextJS_15 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_15_Path}` as const;\nexport const Website_Doc_Environment_NextJS_14 =\n `${Website_Origin}${Website_Doc_Environment_NextJS_14_Path}` as const;\nexport const Website_Doc_Environment_CRA =\n `${Website_Origin}${Website_Doc_Environment_CRA_Path}` as const;\nexport const Website_Doc_Environment_Astro =\n `${Website_Origin}${Website_Doc_Environment_Astro_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7 =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_Path}` as const;\nexport const Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes =\n `${Website_Origin}${Website_Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path}` as const;\nexport const Website_Doc_Environment_Tanstack =\n `${Website_Origin}${Website_Doc_Environment_Tanstack_Path}` as const;\nexport const Website_Doc_Environment_Lit =\n `${Website_Origin}${Website_Doc_Environment_Lit_Path}` as const;\nexport const Website_Doc_Environment_Nodejs =\n `${Website_Origin}${Website_Doc_Environment_Nodejs_Path}` as const;\nexport const Website_Doc_Environment_Adonis =\n `${Website_Origin}${Website_Doc_Environment_Adonis_Path}` as const;\nexport const Website_Doc_Environment_ViteAndVue =\n `${Website_Origin}${Website_Doc_Environment_ViteAndVue_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSolid =\n `${Website_Origin}${Website_Doc_Environment_ViteAndSolid_Path}` as const;\nexport const Website_Doc_Environment_ViteAndSvelte =\n `${Website_Origin}${Website_Doc_Environment_ViteAndSvelte_Path}` as const;\nexport const Website_Doc_Environment_ViteAndPreact =\n `${Website_Origin}${Website_Doc_Environment_ViteAndPreact_Path}` as const;\nexport const Website_Doc_Environment_NuxtAndVue =\n `${Website_Origin}${Website_Doc_Environment_NuxtAndVue_Path}` as const;\nexport const Website_Doc_Intlayer_with_Lynx_and_React =\n `${Website_Origin}${Website_Doc_Intlayer_with_Lynx_and_React_Path}` as const;\nexport const Website_Doc_Environment_Angular =\n `${Website_Origin}${Website_Doc_Environment_Angular_Path}` as const;\nexport const Website_Doc_Environment_ReactNativeAndExpo =\n `${Website_Origin}${Website_Doc_Environment_ReactNativeAndExpo_Path}` as const;\nexport const Website_Doc_Environment_Lynx =\n `${Website_Origin}${Website_Doc_Environment_Lynx_Path}` as const;\nexport const Website_Doc_Environment_Express =\n `${Website_Origin}${Website_Doc_Environment_Express_Path}` as const;\nexport const Website_Doc_Environment_NestJS =\n `${Website_Origin}${Website_Doc_Environment_NestJS_Path}` as const;\nexport const Website_Doc_Environment_Fastify =\n `${Website_Origin}${Website_Doc_Environment_Fastify_Path}` as const;\nexport const Website_Doc_Environment_Hono =\n `${Website_Origin}${Website_Doc_Environment_Hono_Path}` as const;\nexport const Website_Doc_Environment_Htmx =\n `${Website_Origin}${Website_Doc_Environment_Htmx_Path}` as const;\nexport const Website_Doc_Environment_Remix_3 =\n `${Website_Origin}${Website_Doc_Environment_Remix_3_Path}` as const;\n\nexport const Website_Doc_CLI_Fill =\n `${Website_Origin}${Website_Doc_CLI_Fill_Path}` as const;\nexport const Website_Doc_CLI_Translate =\n `${Website_Origin}${Website_Doc_CLI_Translate_Path}` as const;\nexport const Website_Doc_CLI_Review =\n `${Website_Origin}${Website_Doc_CLI_Review_Path}` as const;\n\nexport const Website_Doc_MCP =\n `${Website_Origin}${Website_Doc_MCP_Path}` as const;\n\nexport const Website_Blog_Root =\n `${Website_Origin}${Website_Blog_Root_Path}` as const;\nexport const Website_Blog = `${Website_Origin}${Website_Blog_Path}` as const;\nexport const Website_Blog_Search =\n `${Website_Origin}${Website_Blog_Search_Path}` as const;\nexport const Website_Blog_What_is_i18n =\n `${Website_Origin}${Website_Blog_What_is_i18n_Path}` as const;\n\nexport const Website_FrequentQuestions =\n `${Website_Origin}${Website_FrequentQuestions_Path}` as const;\nexport const Website_PrivacyPolicy =\n `${Website_Origin}${Website_PrivacyPolicy_Path}` as const;\nexport const Website_TermsOfService =\n `${Website_Origin}${Website_TermsOfService_Path}` as const;\nexport const Website_Contributors =\n `${Website_Origin}${Website_Contributors_Path}` as const;\n\n// ============================================================\n// Doc app paths — relative (served under intlayer.org/doc/*)\n// ============================================================\nexport const Doc_Root_Path = '/doc' as const;\nexport const Doc_Path = '/get-started' as const;\nexport const Doc_Why_Path = '/why' as const;\nexport const Doc_Search_Path = '/search' as const;\nexport const Doc_Chat_Path = '/chat' as const;\nexport const Doc_IntlayerVisualEditor_Path = '/concept/editor' as const;\nexport const Doc_IntlayerCMS_Path = '/concept/cms' as const;\n\nexport const Doc_ReleasesV6_Path = '/releases/v6' as const;\nexport const Doc_ReleasesV7_Path = '/releases/v7' as const;\nexport const Doc_ReleasesV8_Path = '/releases/v8' as const;\nexport const Doc_Environment_NextJS_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_16_Path = '/environment/nextjs' as const;\nexport const Doc_Environment_NextJS_15_Path = '/environment/nextjs/15' as const;\nexport const Doc_Environment_NextJS_14_Path = '/environment/nextjs/14' as const;\nexport const Doc_Environment_CRA_Path =\n '/environment/create-react-app' as const;\nexport const Doc_Environment_Astro_Path = '/environment/astro' as const;\nexport const Doc_Environment_ViteAndReact_Path =\n '/environment/vite-and-react' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_Path =\n '/environment/vite-and-react/react-router-v7' as const;\nexport const Doc_Environment_ViteAndReact_ReactRouterV7_FSRoutes_Path =\n '/environment/vite-and-react/react-router-v7-fs-routes' as const;\nexport const Doc_Environment_Tanstack_Path =\n '/environment/tanstack-start' as const;\nexport const Doc_Environment_Lit_Path = '/environment/vite-and-lit' as const;\nexport const Doc_Environment_Nodejs_Path = '/concept/cli' as const;\nexport const Doc_Environment_Adonis_Path = '/environment/adonisjs' as const;\nexport const Doc_Environment_ViteAndVue_Path =\n '/environment/vite-and-vue' as const;\nexport const Doc_Environment_ViteAndSolid_Path =\n '/environment/vite-and-solid' as const;\nexport const Doc_Environment_ViteAndSvelte_Path =\n '/environment/vite-and-svelte' as const;\nexport const Doc_Environment_ViteAndPreact_Path =\n '/environment/vite-and-preact' as const;\nexport const Doc_Environment_NuxtAndVue_Path =\n '/environment/nuxt-and-vue' as const;\nexport const Doc_Intlayer_with_Lynx_and_React_Path =\n '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Angular_Path = '/environment/angular' as const;\nexport const Doc_Environment_ReactNativeAndExpo_Path =\n '/environment/react-native-and-expo' as const;\nexport const Doc_Environment_Lynx_Path = '/environment/lynx-and-react' as const;\nexport const Doc_Environment_Express_Path = '/environment/express' as const;\nexport const Doc_Environment_NestJS_Path = '/environment/nest' as const;\nexport const Doc_Environment_Fastify_Path = '/environment/fastify' as const;\nexport const Doc_Environment_Hono_Path = '/environment/hono' as const;\n\nexport const Doc_CLI_Fill_Path = '/concept/cli/fill' as const;\nexport const Doc_CLI_Translate_Path = '/concept/cli/doc-translate' as const;\nexport const Doc_CLI_Review_Path = '/concept/cli/doc-review' as const;\n\nexport const Doc_MCP_Path = '/mcp-server' as const;\n\nexport const Doc_Blog_Root_Path = '/blog' as const;\nexport const Doc_Blog_Path = '/blog' as const;\nexport const Doc_Blog_Search_Path = '/blog' as const;\nexport const Doc_Blog_What_is_i18n_Path =\n '/blog/what-is-internationalization' as const;\n\nexport const Doc_FrequentQuestions_Path = '/frequent-questions' as const;\nexport const Doc_PrivacyPolicy_Path = '/privacy-notice' as const;\nexport const Doc_TermsOfService_Path = '/terms-of-service' as const;\nexport const Doc_Contributors_Path = '/contributors' as const;\nexport const Doc_Showcase_Path = '/' as const;\nexport const Doc_ShowcaseSubmit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase paths — relative (showcase.intlayer.org)\n// ============================================================\nexport const Showcase_Root_Path = '/' as const;\nexport const Showcase_Submit_Path = '/submit' as const;\n\n// ============================================================\n// Showcase absolute URLs — https://showcase.intlayer.org\n// ============================================================\nexport const Showcase_Root = Showcase_Origin;\nexport const Showcase_Submit =\n `${Showcase_Origin}${Showcase_Submit_Path}` as const;\n\n// ============================================================\n// Backend absolute URLs — https://back.intlayer.org\n// ============================================================\nexport const Backend_Root = Backend_Origin;\nexport const Backend_Health = `${Backend_Origin}/health` as const;\nexport const Backend_OAuth2_Token = `${Backend_Origin}/oauth2/token` as const;\n\n// ============================================================\n// MCP absolute URLs — https://mcp.intlayer.org\n// ============================================================\nexport const Mcp_Root = Mcp_Origin;\nexport const Mcp_Sse = `${Mcp_Origin}/sse` as const;\n\n// ============================================================\n// Agent discovery paths — relative\n//\n// Well-known documents that let AI agents discover the site's APIs,\n// skills and authentication without scraping HTML.\n// ============================================================\nexport const WellKnown_ApiCatalog_Path = '/.well-known/api-catalog' as const;\nexport const WellKnown_AiCatalog_Path = '/.well-known/ai-catalog.json' as const;\nexport const WellKnown_OAuthProtectedResource_Path =\n '/.well-known/oauth-protected-resource' as const;\nexport const WellKnown_OAuthAuthorizationServer_Path =\n '/.well-known/oauth-authorization-server' as const;\nexport const WellKnown_McpServerCard_Path =\n '/.well-known/mcp/server-card.json' as const;\nexport const WellKnown_AgentSkills_Path = '/.well-known/agent-skills' as const;\nexport const WellKnown_AgentSkillsIndex_Path =\n `${WellKnown_AgentSkills_Path}/index.json` as const;\nexport const AuthMd_Path = '/auth.md' as const;\nexport const LlmsTxt_Path = '/llms.txt' as const;\n\n// ============================================================\n// External links\n// ============================================================\nexport const External_Github =\n 'https://github.com/aymericzip/intlayer' as const;\n\nexport const External_DockerHub_SelfHost =\n 'https://hub.docker.com/r/aymericzip/intlayer-selfhost' as const;\n\nexport const External_Github_i18n_benchmark =\n 'https://github.com/intlayer-org/benchmark-i18n' as const;\n\nexport const External_Discord = 'https://discord.gg/7uxamYVeCk' as const;\nexport const External_LinkedIn =\n 'https://www.linkedin.com/company/intlayerorg/' as const;\nexport const External_AI_Landing_Page = 'https://ai.intlayer.org' as const;\nexport const External_ShowcaseApp = Showcase_Origin;\nexport const External_Examples =\n 'https://github.com/aymericzip/intlayer/tree/main/examples' as const;\nexport const External_ExampleIntlayerWithNextjs =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/nextjs-15-app' as const;\nexport const External_ExampleIntlayerWithReactJS =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-app' as const;\nexport const External_ExampleIntlayerWithViteAndReact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-react-app' as const;\nexport const External_ExampleIntlayerWithViteAndVue =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-vue-app' as const;\nexport const External_ExampleIntlayerWithViteAndSvelte =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-svelte-app' as const;\nexport const External_ExampleIntlayerWithViteAndSolid =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-solid-app' as const;\nexport const External_ExampleIntlayerWithViteAndPreact =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/vite-preact-app' as const;\nexport const External_ExampleIntlayerWithReactNative =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/react-native-app' as const;\nexport const External_ExampleIntlayerWithExpress =\n 'https://github.com/aymericzip/intlayer/tree/main/examples/express-app' as const;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkDownIframe.d.ts","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownIframe.tsx"],"mappings":";;qBA+La,gBAAgB,GAAG"}
1
+ {"version":3,"file":"MarkDownIframe.d.ts","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownIframe.tsx"],"mappings":";;qBA2Ka,gBAAgB,GAAG"}
@@ -1,3 +1,4 @@
1
1
  import { MarkDownIframe } from "./MarkDownIframe.js";
2
+ import { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl } from "./youtubeUrl.js";
2
3
  import { MarkdownRenderer, ParsedMarkdown, baseMarkdownComponents, getIntlayerMarkdownOptions } from "./MarkDownRender.js";
3
- export { MarkDownIframe, MarkdownRenderer, type ParsedMarkdown, baseMarkdownComponents, getIntlayerMarkdownOptions };
4
+ export { MarkDownIframe, MarkdownRenderer, type ParsedMarkdown, baseMarkdownComponents, getIntlayerMarkdownOptions, getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl };
@@ -0,0 +1,17 @@
1
+ //#region src/components/MarkDownRender/youtubeUrl.d.ts
2
+ /**
3
+ * Reads the video id out of a YouTube address (embed, watch, youtu.be, shorts, etc.).
4
+ *
5
+ * @returns The video id, or `null` when the address is not a YouTube URL.
6
+ */
7
+ export declare const getYoutubeVideoId: (src: string | undefined) => string | null;
8
+ /**
9
+ * The address the YouTube player is loaded from for a given video.
10
+ */
11
+ export declare const getYoutubeEmbedUrl: (videoId: string) => string;
12
+ /**
13
+ * The address of the video on youtube.com itself.
14
+ */
15
+ export declare const getYoutubeWatchUrl: (videoId: string) => string;
16
+ //#endregion
17
+ //# sourceMappingURL=youtubeUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"youtubeUrl.d.ts","names":[],"sources":["../../../../src/components/MarkDownRender/youtubeUrl.ts"],"mappings":";;;;;;qBAKa,oBAAiB;;;;qBAajB,qBAAkB;;;;qBAMlB,qBAAkB"}
@@ -114,6 +114,7 @@ import { LogoWithText } from "./Logo/LogoWithText.js";
114
114
  import { LogoWithTextBelow } from "./Logo/LogoWithTextBelow.js";
115
115
  import "./Logo/index.js";
116
116
  import { MarkDownIframe } from "./MarkDownRender/MarkDownIframe.js";
117
+ import { getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl } from "./MarkDownRender/youtubeUrl.js";
117
118
  import "./MarkDownRender/index.js";
118
119
  import { CreateEditorUploadFnOptions, UploadImageFn, createEditorUploadFn } from "./MarkdownEditor/imageUpload.js";
119
120
  import { MarkdownEditor, MarkdownEditorProps } from "./MarkdownEditor/MarkdownEditor.js";
@@ -183,4 +184,4 @@ import { reducer, toast, useToast } from "./Toaster/useToast.js";
183
184
  import "./Toaster/index.js";
184
185
  import { WithResizer } from "./WithResizer/index.js";
185
186
  import { MarkdownRenderer, ParsedMarkdown, baseMarkdownComponents, getIntlayerMarkdownOptions } from "./MarkDownRender/MarkDownRender.js";
186
- export { Accordion, AccordionProps, AutoCompleteTextarea, AutoSizedTextArea, AutoSizedTextAreaProps, AutocompleteTextAreaProps, Avatar, AvatarProps, Badge, BadgeColor, BadgeProps, BadgeSize, BadgeVariant, BadgeVariantProps, BitbucketLogo, Breadcrumb, BreadcrumbLink, BreadcrumbProps, Browser, BrowserProps, Burger, Button, ButtonColor, ButtonProps, ButtonSize, ButtonTextAlign, ButtonVariant, Carousel, Checkbox, CheckboxColor, CheckboxProps, CheckboxSize, ClickOutsideDiv, ClickOutsideDivProps, Code, CodeBlock, CodeBlockProps, CodeCompAttributes, CodeDefault, CodeHighlighted, type CodeLanguage, CollapsibleTable, CollapsibleTableProps, Command, CommandRoot, Container, ContainerBackground, ContainerBorderColor, ContainerGap, ContainerPadding, ContainerProps, ContainerRoundedSize, ContainerSeparator, ContainerTransparency, ContentEditableTextArea, ContentEditableTextAreaHandle, ContentEditableTextAreaProps, ContentEditor, ContentEditorInput, ContentEditorInputProps, ContentEditorProps, ContentEditorTextArea, ContentEditorTextAreaProps, ContentSelector, CopyButton, CopyToClipboard, CopyToClipboardProps, type CreateEditorUploadFnOptions, DesktopNavbar, DesktopThemeSwitcher, Detail, DetailProps, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, DropDownAlign, DropDownProps, DropDownType, DropDownYAlign, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, ExpandCollapseProps, FacebookLogo, FileList, FileListProps, Flag, flags_d_exports as Flags, Footer, FooterLink, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeadingProps, HeightResizer, HideShow, HideShowProps, Hr, IDE, IDEProps, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InputProps, InputSize, InputVariant, InstagramLogo, KeyList, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, KeyboardShortcutProps, KeyboardShortcutType, Label, LabelProps, LanguageBackground, LanguageSection, Link, LinkColor, LinkGroup, LinkProps, LinkRoundedSize, LinkSize, LinkUnderlined, LinkVariant, LinkedInLogo, Loader, LoaderProps, LocalCardList, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProps, LocaleSwitcherContentProvider, LocaleSwitcherProps, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, type MarkdownEditorProps, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, ModalSize, Modes, MultiSelect, Navbar, NodeEditor, NodeEditorProps, NumberItemsSelector, NumberItemsSelectorProps, OTPInput, OTPInputContext, OTPInputProps, Pagination, PaginationProps, PaginationSize, PaginationVariant, PanelProps, type ParsedMarkdown, Popover, PopoverProps, PopoverStatic, PopoverType, PopoverXAlign, PopoverYAlign, PressableSpan, ProductHuntLogo, Radio, RadioColor, RadioProps, RadioSize, RenderProps, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectContentPosition, SelectLabel, SelectSeparator, ShowingResultsNumberItems, ShowingResultsNumberItemsProps, SlotProps, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, SwitchSelectorBaseProps, SwitchSelectorChoice, SwitchSelectorChoices, SwitchSelectorColor, SwitchSelectorProps, SwitchSelectorSize, Tab, TabItemProps, TabProps, TabSelector, TabSelectorColor, TabSelectorItemProps, TabSelectorProps, Table, TableProps, Tag, TagBackground, TagBorder, TagColor, TagRoundedSize, TagSize, Td, TechLogo, type TechLogoName, techLogos_d_exports as TechLogos, Terminal, TerminalProps, TextArea, TextAreaProps, TextEditor, TextEditorContainer, TextEditorProps, Th, TiktokLogo, Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, ToastProps, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, TriggerProps, type UploadImageFn, VersionSwitcher, VersionSwitcherProps, VersionSwitcherProvider, VerticalSwitchSelector, VerticalSwitchSelectorProps, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
187
+ export { Accordion, AccordionProps, AutoCompleteTextarea, AutoSizedTextArea, AutoSizedTextAreaProps, AutocompleteTextAreaProps, Avatar, AvatarProps, Badge, BadgeColor, BadgeProps, BadgeSize, BadgeVariant, BadgeVariantProps, BitbucketLogo, Breadcrumb, BreadcrumbLink, BreadcrumbProps, Browser, BrowserProps, Burger, Button, ButtonColor, ButtonProps, ButtonSize, ButtonTextAlign, ButtonVariant, Carousel, Checkbox, CheckboxColor, CheckboxProps, CheckboxSize, ClickOutsideDiv, ClickOutsideDivProps, Code, CodeBlock, CodeBlockProps, CodeCompAttributes, CodeDefault, CodeHighlighted, type CodeLanguage, CollapsibleTable, CollapsibleTableProps, Command, CommandRoot, Container, ContainerBackground, ContainerBorderColor, ContainerGap, ContainerPadding, ContainerProps, ContainerRoundedSize, ContainerSeparator, ContainerTransparency, ContentEditableTextArea, ContentEditableTextAreaHandle, ContentEditableTextAreaProps, ContentEditor, ContentEditorInput, ContentEditorInputProps, ContentEditorProps, ContentEditorTextArea, ContentEditorTextAreaProps, ContentSelector, CopyButton, CopyToClipboard, CopyToClipboardProps, type CreateEditorUploadFnOptions, DesktopNavbar, DesktopThemeSwitcher, Detail, DetailProps, DictionaryCreationForm, DictionaryEditor, DictionaryFieldEditor, DiscordLogo, DotPattern, DropDown, DropDownAlign, DropDownProps, DropDownType, DropDownYAlign, EditableFieldInput, EditableFieldTextArea, ExpandCollapse, ExpandCollapseProps, FacebookLogo, FileList, FileListProps, Flag, flags_d_exports as Flags, Footer, FooterLink, Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, GitHubLogo, GitLabLogo, GoogleLogo, GridDistortionPattern, GridPattern, H1, H2, H3, H4, H5, H6, HTMLRenderer, HeadingProps, HeightResizer, HideShow, HideShowProps, Hr, IDE, IDEProps, InformationTag, Input, InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, InputPassword, InputProps, InputSize, InputVariant, InstagramLogo, KeyList, KeyPathBreadcrumb, KeyboardScreenAdapter, KeyboardShortcut, KeyboardShortcutProps, KeyboardShortcutType, Label, LabelProps, LanguageBackground, LanguageSection, Link, LinkColor, LinkGroup, LinkProps, LinkRoundedSize, LinkSize, LinkUnderlined, LinkVariant, LinkedInLogo, Loader, LoaderProps, LocalCardList, LocaleSwitcher, LocaleSwitcherContent, LocaleSwitcherContentProps, LocaleSwitcherContentProvider, LocaleSwitcherProps, Logo, LogoTextOnly, LogoWithText, LogoWithTextBelow, MarkDownIframe, MarkdownEditor, type MarkdownEditorProps, MarkdownRenderer, MaxHeightSmoother, MaxWidthSmoother, MobileNavbar, MobileThemeSwitcher, Modal, ModalSize, Modes, MultiSelect, Navbar, NodeEditor, NodeEditorProps, NumberItemsSelector, NumberItemsSelectorProps, OTPInput, OTPInputContext, OTPInputProps, Pagination, PaginationProps, PaginationSize, PaginationVariant, PanelProps, type ParsedMarkdown, Popover, PopoverProps, PopoverStatic, PopoverType, PopoverXAlign, PopoverYAlign, PressableSpan, ProductHuntLogo, Radio, RadioColor, RadioProps, RadioSize, RenderProps, RightDrawer, SaveForm, SearchInput, Select, SelectContent, SelectContentPosition, SelectLabel, SelectSeparator, ShowingResultsNumberItems, ShowingResultsNumberItemsProps, SlotProps, SmartTable, SocialNetworks, Spotlight, Step, Steps, SwitchSelector, SwitchSelectorBaseProps, SwitchSelectorChoice, SwitchSelectorChoices, SwitchSelectorColor, SwitchSelectorProps, SwitchSelectorSize, Tab, TabItemProps, TabProps, TabSelector, TabSelectorColor, TabSelectorItemProps, TabSelectorProps, Table, TableProps, Tag, TagBackground, TagBorder, TagColor, TagRoundedSize, TagSize, Td, TechLogo, type TechLogoName, techLogos_d_exports as TechLogos, Terminal, TerminalProps, TextArea, TextAreaProps, TextEditor, TextEditorContainer, TextEditorProps, Th, TiktokLogo, Toast, ToastAction, ToastActionElement, ToastClose, ToastDescription, ToastProps, ToastProvider, ToastTitle, ToastViewport, Toaster, Tr, TriggerProps, type UploadImageFn, VersionSwitcher, VersionSwitcherProps, VersionSwitcherProvider, VerticalSwitchSelector, VerticalSwitchSelectorProps, WithResizer, XLogo, YoutubeLogo, badgeVariants, baseMarkdownComponents, buttonVariants, checkIsExternalLink, checkboxVariants, choiceVariant, containerVariants, createEditorUploadFn, defaultChoices, drawerManager, getCapitals, getIntlayerHTMLOptions, getIntlayerMarkdownOptions, getYoutubeEmbedUrl, getYoutubeVideoId, getYoutubeWatchUrl, indicatorVariant, inputSlotVariants, inputVariants, isTextChildren, linkVariants, paginationVariants, radioVariants, reducer, shikiWrapperClassName, switchSelectorVariant, toast, toastVariants, traceKeys, useContentEditable, useCopyToClipboard, useForm, useFormField, useIsRightDrawerOpen, useLocaleSwitcherContent, usePasswordManagerBadge, usePopoverIds, usePrevious, useRightDrawer, useRightDrawerActions, useToast, useVersionSwitcher };
@@ -149,6 +149,7 @@ export declare const Website_Doc_Environment_NestJS_Path: '/doc/environment/nest
149
149
  export declare const Website_Doc_Environment_Fastify_Path: '/doc/environment/fastify';
150
150
  export declare const Website_Doc_Environment_Hono_Path: '/doc/environment/hono';
151
151
  export declare const Website_Doc_Environment_Htmx_Path: '/doc/environment/htmx';
152
+ export declare const Website_Doc_Environment_Remix_3_Path: '/doc/environment/remix-3';
152
153
  export declare const Website_Doc_CLI_Fill_Path: '/doc/concept/cli/fill';
153
154
  export declare const Website_Doc_CLI_Translate_Path: '/doc/concept/cli/doc-translate';
154
155
  export declare const Website_Doc_CLI_Review_Path: '/doc/concept/cli/doc-review';
@@ -223,6 +224,7 @@ export declare const Website_Doc_Environment_NestJS: "https://intlayer.org/doc/e
223
224
  export declare const Website_Doc_Environment_Fastify: "https://intlayer.org/doc/environment/fastify";
224
225
  export declare const Website_Doc_Environment_Hono: "https://intlayer.org/doc/environment/hono";
225
226
  export declare const Website_Doc_Environment_Htmx: "https://intlayer.org/doc/environment/htmx";
227
+ export declare const Website_Doc_Environment_Remix_3: "https://intlayer.org/doc/environment/remix-3";
226
228
  export declare const Website_Doc_CLI_Fill: "https://intlayer.org/doc/concept/cli/fill";
227
229
  export declare const Website_Doc_CLI_Translate: "https://intlayer.org/doc/concept/cli/doc-translate";
228
230
  export declare const Website_Doc_CLI_Review: "https://intlayer.org/doc/concept/cli/doc-review";
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","names":[],"sources":["../../src/routes.ts"],"mappings":";qBAQa;qBAEA;qBAEA;qBACA;qBAKA;qBACA;qBAKA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAGA,6BAA0B;qBAE1B,6BAA0B;;qBAI1B;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA,4BAAyB;qBAEzB;qBACA,4BAAyB;qBAGzB;qBACA,2BAAwB;qBAGxB;qBAEA,uBAAoB;qBAEpB,+BAA4B;qBAE5B,0BAAuB;qBAEvB,4BAAyB;qBAMzB;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA,+BAA4B;qBAE5B,uCAAoC;qBAEpC,kCAA+B;qBAE/B,oCAAiC,cAChC,cACA;qBAUD;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBAEA;qBAGA;qBACA;qBACA;qBAGA;qBAEA;qBACA;qBACA;qBACA;qBAGA;qBACA;qBACA;qBACA;qBAKA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBAEA;qBAGA;qBAGA;qBAEA;qBACA;qBAEA;qBAGA;qBAEA;qBAEA;qBAEA;qBAMA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBAGA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAKA;qBACA;qBAKA;qBACA;qBAMA;qBACA;qBACA;qBAKA;qBACA;qBAQA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBACA;qBAKA;qBAGA;qBAGA;qBAGA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA"}
1
+ {"version":3,"file":"routes.d.ts","names":[],"sources":["../../src/routes.ts"],"mappings":";qBAQa;qBAEA;qBAEA;qBACA;qBAKA;qBACA;qBAKA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAGA,6BAA0B;qBAE1B,6BAA0B;;qBAI1B;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA,4BAAyB;qBAEzB;qBACA,4BAAyB;qBAGzB;qBACA,2BAAwB;qBAGxB;qBAEA,uBAAoB;qBAEpB,+BAA4B;qBAE5B,0BAAuB;qBAEvB,4BAAyB;qBAMzB;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA,+BAA4B;qBAE5B,uCAAoC;qBAEpC,kCAA+B;qBAE/B,oCAAiC,cAChC,cACA;qBAUD;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBACA;qBAEA;qBAGA;qBACA;qBACA;qBAGA;qBAEA;qBACA;qBACA;qBACA;qBAGA;qBACA;qBACA;qBACA;qBAKA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAGA;qBAEA;qBAEA;qBAGA;qBAGA;qBAEA;qBACA;qBAEA;qBAGA;qBAEA;qBAEA;qBAEA;qBAMA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBACA;qBACA;qBACA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBACA;qBACA;qBACA;qBAGA;qBACA;qBACA;qBACA;qBACA;qBACA;qBAKA;qBACA;qBAKA;qBACA;qBAMA;qBACA;qBACA;qBAKA;qBACA;qBAQA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBACA;qBAEA;qBACA;qBAKA;qBAGA;qBAGA;qBAGA;qBACA;qBAEA;qBACA;qBACA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA;qBAEA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/design-system",
3
- "version": "9.5.0",
3
+ "version": "9.5.2",
4
4
  "private": false,
5
5
  "description": "Intlayer design system, including UI components used in the Intlayer editor, website, and visual editor/CMS.",
6
6
  "keywords": [
@@ -455,15 +455,15 @@
455
455
  "typecheck_": "tsc --noEmit --project tsconfig.types.json"
456
456
  },
457
457
  "dependencies": {
458
- "@better-auth/passkey": "1.7.3",
459
- "@better-auth/sso": "1.7.3",
460
- "@intlayer/api": "9.5.0",
461
- "@intlayer/config": "9.5.0",
462
- "@intlayer/core": "9.5.0",
463
- "@intlayer/dictionaries-entry": "9.5.0",
464
- "@intlayer/editor-react": "9.5.0",
465
- "@intlayer/engine": "9.5.0",
466
- "@intlayer/types": "9.5.0",
458
+ "@better-auth/passkey": "1.7.4",
459
+ "@better-auth/sso": "1.7.4",
460
+ "@intlayer/api": "9.5.2",
461
+ "@intlayer/config": "9.5.2",
462
+ "@intlayer/core": "9.5.2",
463
+ "@intlayer/dictionaries-entry": "9.5.2",
464
+ "@intlayer/editor-react": "9.5.2",
465
+ "@intlayer/engine": "9.5.2",
466
+ "@intlayer/types": "9.5.2",
467
467
  "@radix-ui/react-dialog": "1.1.23",
468
468
  "@radix-ui/react-select": "2.3.7",
469
469
  "@radix-ui/react-slot": "1.3.3",
@@ -471,7 +471,7 @@
471
471
  "@tailwindcss/aspect-ratio": "0.4.2",
472
472
  "@tanstack/query-async-storage-persister": "5.102.8",
473
473
  "@tanstack/react-query-persist-client": "5.102.8",
474
- "@tanstack/react-virtual": "3.14.11",
474
+ "@tanstack/react-virtual": "3.14.12",
475
475
  "@tiptap/core": "3.31.3",
476
476
  "@tiptap/extension-character-count": "3.31.3",
477
477
  "@tiptap/extension-code-block": "3.31.3",
@@ -490,22 +490,22 @@
490
490
  "@tiptap/react": "3.31.3",
491
491
  "@tiptap/starter-kit": "3.31.3",
492
492
  "@tiptap/suggestion": "3.31.3",
493
- "better-auth": "1.7.3",
493
+ "better-auth": "1.7.4",
494
494
  "class-variance-authority": "0.7.1",
495
495
  "cmdk": "1.1.1",
496
496
  "cnfast": "0.2.0",
497
497
  "defu": "6.1.7",
498
498
  "dompurify": "3.4.15",
499
499
  "isomorphic-dompurify": "4.1.0",
500
- "react-intlayer": "9.5.0",
500
+ "react-intlayer": "9.5.2",
501
501
  "rollup-preserve-directives": "1.1.3",
502
502
  "tiptap-extension-global-drag-handle": "^0.1.18",
503
503
  "tiptap-markdown": "^0.9.0",
504
504
  "tunnel-rat": "^0.1.2",
505
- "zod": "4.5.4"
505
+ "zod": "4.6.2"
506
506
  },
507
507
  "devDependencies": {
508
- "@intlayer/backend": "9.5.0",
508
+ "@intlayer/backend": "9.5.2",
509
509
  "@shikijs/core": "4.4.3",
510
510
  "@shikijs/engine-oniguruma": "4.4.3",
511
511
  "@shikijs/transformers": "4.4.3",
@@ -526,27 +526,27 @@
526
526
  "@testing-library/user-event": "14.6.7",
527
527
  "@types/dompurify": "3.2.0",
528
528
  "@types/espree": "11.1.0",
529
- "@types/node": "26.5.0",
530
- "@types/react": "19.2.18",
531
- "@types/react-dom": "19.2.7",
529
+ "@types/node": "^22",
530
+ "@types/react": "19.3.0",
531
+ "@types/react-dom": "19.3.0",
532
532
  "@utils/ts-config": "1.0.4",
533
533
  "@utils/ts-config-types": "1.0.4",
534
534
  "fast-glob": "3.3.3",
535
- "intlayer": "9.5.0",
535
+ "intlayer": "9.5.2",
536
536
  "rimraf": "6.1.3",
537
537
  "shiki": "4.4.3",
538
538
  "storybook": "10.6.0",
539
539
  "tsdown": "0.23.0",
540
540
  "typescript": "7.0.2",
541
- "vite": "8.2.2",
542
- "vite-intlayer": "9.5.0",
541
+ "vite": "8.3.0",
542
+ "vite-intlayer": "9.5.2",
543
543
  "vite-plugin-dts": "5.1.0",
544
544
  "vitest": "5.0.0"
545
545
  },
546
546
  "peerDependencies": {
547
547
  "@better-fetch/fetch": "1.3.1",
548
548
  "@hookform/resolvers": "5.9.1",
549
- "@intlayer/backend": "9.5.0",
549
+ "@intlayer/backend": "9.5.2",
550
550
  "@monaco-editor/react": "4.7.0",
551
551
  "@shikijs/core": "4.4.3",
552
552
  "@shikijs/engine-oniguruma": "4.4.3",
@@ -555,12 +555,12 @@
555
555
  "@tanstack/react-query-devtools": "5.102.8",
556
556
  "framer-motion": "13.2.0",
557
557
  "fuse.js": "7.5.0",
558
- "intlayer": "9.5.0",
559
- "lucide-react": "1.43.0",
558
+ "intlayer": "9.5.2",
559
+ "lucide-react": "1.45.0",
560
560
  "react": ">=16.0.0",
561
561
  "react-dom": ">=16.0.0",
562
562
  "react-hook-form": "7.87.0",
563
- "react-intlayer": "9.5.0",
563
+ "react-intlayer": "9.5.2",
564
564
  "shiki": "4.4.3",
565
565
  "tailwindcss": "4.3.3"
566
566
  },