etudes 1.2.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/Accordion.d.ts +80 -71
- package/lib/Accordion.js +173 -183
- package/lib/Accordion.js.map +1 -1
- package/lib/BurgerButton.d.ts +20 -7
- package/lib/BurgerButton.js +113 -20
- package/lib/BurgerButton.js.map +1 -1
- package/lib/Conditional.d.ts +2 -3
- package/lib/Conditional.js +0 -1
- package/lib/Conditional.js.map +1 -1
- package/lib/DebugConsole.d.ts +14 -23
- package/lib/DebugConsole.js +86 -87
- package/lib/DebugConsole.js.map +1 -1
- package/lib/Dial.d.ts +53 -16
- package/lib/Dial.js +121 -35
- package/lib/Dial.js.map +1 -1
- package/lib/Dropdown.d.ts +68 -83
- package/lib/Dropdown.js +226 -161
- package/lib/Dropdown.js.map +1 -1
- package/lib/Each.d.ts +2 -2
- package/lib/Each.js.map +1 -1
- package/lib/ExtractChild.d.ts +5 -4
- package/lib/ExtractChild.js +13 -11
- package/lib/ExtractChild.js.map +1 -1
- package/lib/ExtractChildren.d.ts +2 -2
- package/lib/ExtractChildren.js +7 -5
- package/lib/ExtractChildren.js.map +1 -1
- package/lib/FlatSVG.d.ts +30 -25
- package/lib/FlatSVG.js +28 -37
- package/lib/FlatSVG.js.map +1 -1
- package/lib/List.d.ts +97 -54
- package/lib/List.js +124 -63
- package/lib/List.js.map +1 -1
- package/lib/MasonryGrid.d.ts +27 -15
- package/lib/MasonryGrid.js +163 -148
- package/lib/MasonryGrid.js.map +1 -1
- package/lib/Panorama.d.ts +100 -21
- package/lib/Panorama.js +45 -44
- package/lib/Panorama.js.map +1 -1
- package/lib/PanoramaSlider.d.ts +65 -23
- package/lib/PanoramaSlider.js +150 -45
- package/lib/PanoramaSlider.js.map +1 -1
- package/lib/RangeSlider.d.ts +29 -89
- package/lib/RangeSlider.js +272 -286
- package/lib/RangeSlider.js.map +1 -1
- package/lib/Repeat.d.ts +4 -3
- package/lib/Repeat.js +3 -2
- package/lib/Repeat.js.map +1 -1
- package/lib/RotatingGallery.d.ts +38 -36
- package/lib/RotatingGallery.js +47 -17
- package/lib/RotatingGallery.js.map +1 -1
- package/lib/SelectableButton.d.ts +13 -4
- package/lib/SelectableButton.js +3 -14
- package/lib/SelectableButton.js.map +1 -1
- package/lib/Slider.d.ts +103 -41
- package/lib/Slider.js +182 -82
- package/lib/Slider.js.map +1 -1
- package/lib/StepwiseSlider.d.ts +146 -59
- package/lib/StepwiseSlider.js +248 -142
- package/lib/StepwiseSlider.js.map +1 -1
- package/lib/SwipeContainer.d.ts +13 -5
- package/lib/SwipeContainer.js +5 -15
- package/lib/SwipeContainer.js.map +1 -1
- package/lib/TextField.d.ts +1 -1
- package/lib/TextField.js +5 -15
- package/lib/TextField.js.map +1 -1
- package/lib/Video.d.ts +30 -51
- package/lib/Video.js +77 -119
- package/lib/Video.js.map +1 -1
- package/lib/WithTooltip.d.ts +16 -18
- package/lib/WithTooltip.js +167 -101
- package/lib/WithTooltip.js.map +1 -1
- package/lib/hooks/useDocumentTitle.d.ts +2 -1
- package/lib/hooks/useDocumentTitle.js +2 -1
- package/lib/hooks/useDocumentTitle.js.map +1 -1
- package/lib/hooks/useDragEffect.d.ts +26 -17
- package/lib/hooks/useDragEffect.js +30 -20
- package/lib/hooks/useDragEffect.js.map +1 -1
- package/lib/hooks/useElementRect.d.ts +2 -1
- package/lib/hooks/useElementRect.js +5 -4
- package/lib/hooks/useElementRect.js.map +1 -1
- package/lib/hooks/useInterval.d.ts +3 -3
- package/lib/hooks/useInterval.js +1 -1
- package/lib/hooks/useInterval.js.map +1 -1
- package/lib/hooks/useLoadImageEffect.d.ts +8 -8
- package/lib/hooks/useLoadImageEffect.js.map +1 -1
- package/lib/hooks/usePrevious.d.ts +6 -0
- package/lib/hooks/usePrevious.js +17 -0
- package/lib/hooks/usePrevious.js.map +1 -0
- package/lib/hooks/useResizeEffect.d.ts +3 -3
- package/lib/hooks/useResizeEffect.js +5 -8
- package/lib/hooks/useResizeEffect.js.map +1 -1
- package/lib/hooks/useSearchParamState.d.ts +11 -8
- package/lib/hooks/useSearchParamState.js +14 -10
- package/lib/hooks/useSearchParamState.js.map +1 -1
- package/lib/providers/I18nProvider.d.ts +179 -0
- package/lib/providers/I18nProvider.js +470 -0
- package/lib/providers/I18nProvider.js.map +1 -0
- package/lib/providers/ScrollPositionProvider.d.ts +15 -0
- package/lib/providers/ScrollPositionProvider.js +112 -0
- package/lib/providers/ScrollPositionProvider.js.map +1 -0
- package/lib/utils/asClassNameDict.d.ts +3 -0
- package/lib/utils/asClassNameDict.js +7 -0
- package/lib/utils/asClassNameDict.js.map +1 -0
- package/lib/utils/asComponentDict.d.ts +5 -0
- package/lib/utils/asComponentDict.js +23 -0
- package/lib/utils/asComponentDict.js.map +1 -0
- package/lib/utils/asStyleDict.d.ts +4 -0
- package/lib/utils/asStyleDict.js +7 -0
- package/lib/utils/asStyleDict.js.map +1 -0
- package/lib/utils/cloneStyledElement.d.ts +18 -0
- package/lib/utils/cloneStyledElement.js +63 -0
- package/lib/utils/cloneStyledElement.js.map +1 -0
- package/lib/utils/styles.d.ts +2 -0
- package/lib/utils/styles.js +22 -0
- package/lib/utils/styles.js.map +1 -0
- package/lib/utils/useDebug.d.ts +2 -0
- package/lib/utils/useDebug.js +46 -0
- package/lib/utils/useDebug.js.map +1 -0
- package/package.json +31 -38
- package/lib/AbstractSelectableCollection.d.ts +0 -94
- package/lib/AbstractSelectableCollection.js +0 -151
- package/lib/AbstractSelectableCollection.js.map +0 -1
- package/lib/types/index.d.ts +0 -7
- package/lib/types/index.js +0 -3
- package/lib/types/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"I18nProvider.js","sourceRoot":"/","sources":["providers/I18nProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import Polyglot from 'node-polyglot'\nimport React, { createContext, Dispatch, PropsWithChildren, useContext, useMemo, useReducer } from 'react'\nimport { Route, Routes, useLocation, useNavigate } from 'react-router'\n\ninterface Translation { [key: string]: Translation | string }\n\ntype I18nState = {\n changeLocaleStrategy: 'action' | 'path' | 'query'\n defaultLocale: string\n locale: string\n polyglots: Record<string, Polyglot>\n supportedLocales: string[]\n getLocalizedPath?: (path: string) => string\n getLocalizedString: typeof Polyglot.prototype.t\n}\n\ntype I18nContextValue = {\n state: I18nState\n dispatch?: Dispatch<I18nChangeLocaleAction>\n}\n\ntype I18nProviderProps = PropsWithChildren<{\n changeLocaleStrategy?: I18nState['changeLocaleStrategy']\n defaultLocale?: I18nState['defaultLocale']\n translations: Record<string, Translation>\n}>\n\ntype I18nChangeLocaleAction = {\n type: '@i18n/CHANGE_LOCALE'\n locale: string\n}\n\nconst reducer = (state: I18nState, action: I18nChangeLocaleAction): I18nState => {\n switch (action.type) {\n case '@i18n/CHANGE_LOCALE':\n return {\n ...state,\n locale: action.locale,\n getLocalizedString: (...args) => state.polyglots[action.locale]?.t(...args) ?? args[0],\n }\n default:\n return state\n }\n}\n\nexport const I18nContext = createContext<I18nContextValue | undefined>(undefined)\n\n/**\n * Context provider whose value consists of the current i18n state. The method\n * of modifying the locale is specified by `changeLocaleStrategy`, as follows:\n * - If set to `action`, the locale can be modified by dispatching an action\n * - If set to `path`, the locale is inferred from the current path name\n * - If set to `query`, the locale is inferred from the search parameter\n * `locale` in the current path\n *\n * @param props - See {@link I18nProviderProps}.\n *\n * @returns The context provider.\n */\nexport default function I18nProvider({\n children,\n defaultLocale = 'en',\n translations,\n changeLocaleStrategy = 'path',\n}: I18nProviderProps) {\n const { pathname, search, hash } = useLocation()\n const url = `${pathname}${search}${hash}`\n const supportedLocales = Object.keys(translations)\n\n if (supportedLocales.indexOf(defaultLocale) < 0) {\n console.warn(`Provided supported locales do not contain the default locale <${defaultLocale}>`)\n supportedLocales.push(defaultLocale)\n }\n\n const polyglots = useMemo<Record<string, Polyglot>>(() => supportedLocales.reduce((out, locale) => ({\n ...out,\n [locale]: new Polyglot({ locale, phrases: translations[locale] }),\n }), {}), [translations])\n\n switch (changeLocaleStrategy) {\n case 'action': {\n const [state, dispatch] = useReducer(reducer, {\n changeLocaleStrategy,\n defaultLocale,\n locale: defaultLocale,\n polyglots,\n supportedLocales,\n getLocalizedString: (...args) => polyglots[defaultLocale]?.t(...args) ?? args[0],\n })\n\n return (\n <I18nContext.Provider value={{ state, dispatch }}>\n {children}\n </I18nContext.Provider>\n )\n }\n default: {\n const resolveStrategy = changeLocaleStrategy === 'path' ? 'path' : 'query'\n const localeInfo = getLocaleFromURL(url, { defaultLocale, resolveStrategy, supportedLocales })\n if (!localeInfo) console.warn(`Unable to infer locale from path <${url}>`)\n\n const locale = localeInfo?.locale ?? defaultLocale\n\n const polyglot = polyglots[locale]\n if (!polyglot) console.warn(`Missing transtions for locale <${locale}>`)\n\n const state: I18nState = {\n changeLocaleStrategy,\n defaultLocale,\n locale,\n polyglots,\n supportedLocales,\n getLocalizedPath: path => locale === defaultLocale ? getUnlocalizedURL(path, { resolveStrategy, supportedLocales }) : getLocalizedURL(path, locale, { defaultLocale, resolveStrategy: changeLocaleStrategy, supportedLocales }),\n getLocalizedString: (...args) => polyglot?.t(...args) ?? args[0],\n }\n\n return (\n <I18nContext.Provider value={{ state }}>\n {children}\n </I18nContext.Provider>\n )\n }\n }\n}\n\n/** @namespace Components */\n\n/**\n * Custom {@link Routes} container that generates child {@link Route} components\n * for all locales supported by {@link I18nProvider}.\n */\nexport function I18nRoutes({ children }: PropsWithChildren) {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the value of I18nContext, is the corresponding provider instated?')\n\n const { defaultLocale, supportedLocales, changeLocaleStrategy } = context.state\n\n switch (changeLocaleStrategy) {\n case 'path':\n return (\n <Routes>\n {supportedLocales.map(locale => (\n <Route key={locale} path={locale === defaultLocale ? '/' : locale}>\n {children}\n </Route>\n ))}\n </Routes>\n )\n default:\n return (\n <Routes>\n <Route path={'/'}>\n {children}\n </Route>\n </Routes>\n )\n }\n}\n\n/** @namespace Hooks */\n\n/**\n * Hook for retrieving the change locale function.\n *\n * @returns The change locale function.\n */\nexport function useChangeLocale() {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the current i18n context, is the corresponding provider instated?')\n\n if (context.state.changeLocaleStrategy === 'action') {\n return (locale: string) => context.dispatch?.({\n locale,\n type: '@i18n/CHANGE_LOCALE',\n })\n }\n else {\n const { defaultLocale, changeLocaleStrategy, supportedLocales } = context.state\n const { pathname, search, hash } = useLocation()\n const path = `${pathname}${search}${hash}`\n const navigate = useNavigate()\n const resolveStrategy = changeLocaleStrategy === 'path' ? 'path' : 'query'\n\n return (locale: string) => {\n const newPath = locale === defaultLocale\n ? getUnlocalizedURL(path, { resolveStrategy, supportedLocales })\n : getLocalizedURL(path, locale, { defaultLocale, resolveStrategy, supportedLocales })\n\n navigate(newPath)\n }\n }\n}\n\n/**\n * Hook for retrieving the current locale.\n *\n * @returns The current locale.\n */\nexport function useLocale() {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the current i18n context, is the corresponding provider instated?')\n\n return context.state.locale\n}\n\n/**\n * Hook for retrieving the path localizing function for the current locale.\n *\n * @returns The path localizing function.\n */\nexport function useLocalizedPath() {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the current i18n context, is the corresponding provider instated?')\n\n return context.state.getLocalizedPath ?? ((path: string) => path)\n}\n\n/**\n * Hook for retrieving the string localizing function for the current locale.\n *\n * @returns The string localizing function.\n */\nexport function useLocalizedString() {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the current i18n context, is the corresponding provider instated?')\n\n return context.state.getLocalizedString\n}\n\n/**\n * Hook for retrieving all supported locales.\n *\n * @returns All supported locales.\n */\nexport function useSupportedLocales() {\n const context = useContext(I18nContext)\n if (!context) throw Error('Cannot fetch the current i18n context, is the corresponding provider instated?')\n\n return context.state.supportedLocales\n}\n\n/** @namespace Utilities */\n\ntype URLParts = {\n base?: string\n hash?: string\n host?: string\n path?: string\n port?: string\n protocol?: string\n query?: string\n}\n\ntype ResolveLocaleOptions = {\n /**\n * The locale to fallback to if one cannot be inferred from the provided URL.\n */\n defaultLocale?: string\n\n /**\n * An array of supported locales to validate the inferred locale against. If\n * it doesn't exist in the list of supported locales, the default locale (if\n * specified) or `undefined` will be returned.\n */\n supportedLocales?: string[]\n}\n\ntype ResolveLocalizedURLOptions = ResolveLocaleOptions & {\n /**\n * Specifies where in the URL the locale should be matched. If `resolver` is\n * provided, this option is ignored.\n */\n resolveStrategy?: 'auto' | 'domain' | 'path' | 'query'\n\n /**\n * Custom resolver function.\n *\n * @param protocol - The matched protocol of the provided url, if available.\n * @param host - The matched host of the provided url, if available.\n * @param port - The matched port of the provided url, if available.\n * @param path - The matched path of the provided url, if available.\n *\n * @returns The resolved locale.\n */\n resolver?: (urlParts: URLParts) => string | undefined\n}\n\ntype LocalizedURLInfo = {\n /**\n * The matched locale.\n */\n locale: string\n\n /**\n * Specifies where in the URL the locale was matched.\n */\n resolveStrategy: ResolveLocalizedURLOptions['resolveStrategy'] | 'custom'\n}\n\n/**\n * Parses a URL into parts.\n *\n * @param url - The URL to parse.\n *\n * @returns The parsed result.\n */\nfunction parseURL(url: string): URLParts {\n const regex = /((?:(.*):\\/\\/)?((?:[A-Za-z0-9-]+\\.?)+)?(?::([0-9]+))?)([^?#]*)(?:\\?([^#]*))?(?:#(.*))?/\n const parts = url.match(regex)\n\n if (!parts) return {}\n\n return {\n base: parts[1],\n hash: parts[7],\n host: parts[3],\n path: parts[5],\n port: parts[4],\n protocol: parts[2],\n query: parts[6],\n }\n}\n\n/**\n * Constructs a URL from {@link URLParts}.\n *\n * @param parts - See {@link URLParts}.\n *\n * @returns The constructed URL.\n */\nfunction constructURL(parts: URLParts): string {\n const protocol = parts.protocol?.concat('://') ?? ''\n const host = parts.host?.concat('/') ?? ''\n const port = parts.port ? `:${parts.port}` : ''\n const path = parts.path ? `/${parts.path.split('/').filter(t => t).join('/')}` : ''\n const query = parts.query ? `?${parts.query}` : ''\n const hash = parts.hash ? `#${parts.hash}` : ''\n\n return `${protocol}${host}${port}${path}${query}${hash}`\n}\n\n/**\n * Resolves the specified locale with the provided options. All parameters are\n * optional.\n *\n * @param locale - The locale to resolve.\n * @param options - See {@link ResolveLocaleOptions}.\n *\n * @returns - The resolved locale.\n */\nexport function resolveLocale(locale?: string, { defaultLocale, supportedLocales }: ResolveLocaleOptions = {}): string | undefined {\n if (supportedLocales) {\n if (locale && supportedLocales.indexOf(locale) >= 0) return locale\n if (defaultLocale && supportedLocales.indexOf(defaultLocale) >= 0) return defaultLocale\n\n return undefined\n }\n\n return locale ?? defaultLocale\n}\n\n/**\n * Retrieves the locale identifier from a URL. The default behavior of this\n * function to look for the locale identifier in the domain first followed by\n * the first directory of the path. You can provide a custom resolver.\n *\n * @param url - The URL, can be a full URL or a valid path.\n * @param options - See {@link ResolveLocalizedURLOptions}.\n *\n * @returns The inferred locale if it exists.\n */\nexport function getLocaleFromURL(url: string, { defaultLocale, resolveStrategy = 'auto', resolver, supportedLocales }: ResolveLocalizedURLOptions = {}): LocalizedURLInfo | undefined {\n const parts = parseURL(url)\n\n if (resolver) {\n const matchedLocale = resolver(parts)\n\n if (matchedLocale && (!supportedLocales || supportedLocales.indexOf(matchedLocale) >= 0)) return { locale: matchedLocale, resolveStrategy: 'custom' }\n if (defaultLocale && (!supportedLocales || supportedLocales.indexOf(defaultLocale) >= 0)) return { locale: defaultLocale, resolveStrategy: 'auto' }\n\n return undefined\n }\n else {\n const matchedLocaleFromHost = parts.host?.split('.').filter(t => t)[0]\n const matchedLocaleFromPath = parts.path?.split('/').filter(t => t)[0]\n const matchedLocaleFromQuery = new URLSearchParams(parts.query).get('locale')\n\n if (matchedLocaleFromHost && (resolveStrategy === 'auto' || resolveStrategy === 'domain') && (!supportedLocales || supportedLocales.indexOf(matchedLocaleFromHost) >= 0)) return { locale: matchedLocaleFromHost, resolveStrategy: 'domain' }\n if (matchedLocaleFromPath && (resolveStrategy === 'auto' || resolveStrategy === 'path') && (!supportedLocales || supportedLocales.indexOf(matchedLocaleFromPath) >= 0)) return { locale: matchedLocaleFromPath, resolveStrategy: 'path' }\n if (matchedLocaleFromQuery && (resolveStrategy === 'auto' || resolveStrategy === 'query') && (!supportedLocales || supportedLocales.indexOf(matchedLocaleFromQuery) >= 0)) return { locale: matchedLocaleFromQuery, resolveStrategy: 'query' }\n if (defaultLocale && (!supportedLocales || supportedLocales.indexOf(defaultLocale) >= 0)) return { locale: defaultLocale, resolveStrategy: 'auto' }\n\n return undefined\n }\n}\n\n/**\n * Returns the unlocalized version of a URL.\n *\n * @param url - The URL.\n * @param options - See {@link ResolveLocalizedURLOptions}.\n *\n * @returns The unlocalized URL.\n */\nexport function getUnlocalizedURL(url: string, { resolveStrategy = 'auto', resolver, supportedLocales }: ResolveLocalizedURLOptions = {}): string {\n const currLocaleInfo = getLocaleFromURL(url, { resolveStrategy, resolver, supportedLocales })\n const parts = parseURL(url)\n\n if (!currLocaleInfo) return url\n\n switch (currLocaleInfo.resolveStrategy) {\n case 'domain':\n return constructURL({ ...parts, host: parts.host ? parts.host.split('.').filter(t => t).slice(1).join('.') : undefined })\n case 'query': {\n if (!parts.query) return url\n\n const searchParams = new URLSearchParams(parts.query)\n searchParams.delete('locale')\n\n return constructURL({ ...parts, query: searchParams.toString() })\n }\n case 'path':\n case 'auto':\n default:\n return constructURL({ ...parts, path: parts.path ? [...parts.path.split('/').filter(t => t).slice(1)].join('/') : undefined })\n }\n}\n\n/**\n * Returns the localized version of a URL.\n *\n * @param url - The URL.\n * @param locale - The target locale.\n * @param options - See {@link ResolveLocalizedURLOptions}.\n *\n * @returns The localized URL.\n */\nexport function getLocalizedURL(url: string, locale: string, { defaultLocale, resolveStrategy = 'auto', resolver, supportedLocales }: ResolveLocalizedURLOptions = {}): string {\n const currLocaleInfo = getLocaleFromURL(url, { resolveStrategy, resolver, supportedLocales })\n const parts = parseURL(url)\n const targetLocale = resolveLocale(locale, { defaultLocale, supportedLocales })\n\n if (!targetLocale) return url\n\n if (targetLocale === defaultLocale) return getUnlocalizedURL(url, { resolveStrategy, resolver, supportedLocales })\n\n if (currLocaleInfo) {\n switch (currLocaleInfo.resolveStrategy) {\n case 'domain':\n return constructURL({ ...parts, host: parts.host ? `${targetLocale}.${parts.host.split('.').filter(t => t).slice(1).join('.')}` : undefined })\n case 'query': {\n if (!parts.query) return url\n\n const searchParams = new URLSearchParams(parts.query)\n if (searchParams.get('locale')) {\n searchParams.set('locale', targetLocale)\n }\n else {\n searchParams.set('locale', targetLocale)\n }\n\n return constructURL({ ...parts, query: searchParams.toString() })\n }\n case 'path':\n case 'auto':\n default:\n return constructURL({ ...parts, path: parts.path ? [targetLocale, ...parts.path.split('/').filter(t => t).slice(1)].join('/') : undefined })\n }\n }\n else {\n switch (resolveStrategy) {\n case 'domain':\n return constructURL({ ...parts, host: parts.host ? `${targetLocale}.${parts.host}` : undefined })\n case 'query': {\n const searchParams = new URLSearchParams(parts.query)\n\n if (targetLocale === defaultLocale) {\n searchParams.delete('locale')\n }\n else {\n searchParams.set('locale', targetLocale)\n }\n\n return constructURL({ ...parts, query: searchParams.toString() })\n }\n case 'path':\n case 'auto':\n default:\n return constructURL({ ...parts, path: parts.path ? [targetLocale, ...parts.path.split('/').filter(t => t)].join('/') : undefined })\n }\n }\n}\n\n/**\n * Returns all localized versions of a URL based on the specified\n * `supportedLocales`.\n *\n * @param url - The URL.\n * @param options - See {@link ResolveLocalizedURLOptions}.\n *\n * @returns The localized URLs.\n */\nexport function getLocalizedURLs(url: string, { defaultLocale, resolveStrategy = 'auto', resolver, supportedLocales }: ResolveLocalizedURLOptions = {}): string[] {\n if (!supportedLocales) return []\n\n return supportedLocales.map(locale => getLocalizedURL(url, locale, { defaultLocale, resolveStrategy, resolver, supportedLocales }))\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React, { PropsWithChildren, RefObject } from 'react';
|
|
2
|
+
import { Point } from 'spase';
|
|
3
|
+
type ScrollPosition = {
|
|
4
|
+
pos: Point;
|
|
5
|
+
step: Point;
|
|
6
|
+
};
|
|
7
|
+
type ScrollPositionContextValue = ScrollPosition & {
|
|
8
|
+
minPos: Point;
|
|
9
|
+
maxPos: Point;
|
|
10
|
+
};
|
|
11
|
+
type ScrollPositionProviderProps = PropsWithChildren;
|
|
12
|
+
export declare const ScrollPositionContext: React.Context<ScrollPositionContextValue | undefined>;
|
|
13
|
+
export default function ScrollPositionProvider({ children, }: ScrollPositionProviderProps): JSX.Element;
|
|
14
|
+
export declare function useScrollPosition(targetRef?: RefObject<Element>): ScrollPosition;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
26
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
27
|
+
if (!m) return o;
|
|
28
|
+
var i = m.call(o), r, ar = [], e;
|
|
29
|
+
try {
|
|
30
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
31
|
+
}
|
|
32
|
+
catch (error) { e = { error: error }; }
|
|
33
|
+
finally {
|
|
34
|
+
try {
|
|
35
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
36
|
+
}
|
|
37
|
+
finally { if (e) throw e.error; }
|
|
38
|
+
}
|
|
39
|
+
return ar;
|
|
40
|
+
};
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.useScrollPosition = exports.ScrollPositionContext = void 0;
|
|
43
|
+
var react_1 = __importStar(require("react"));
|
|
44
|
+
var spase_1 = require("spase");
|
|
45
|
+
exports.ScrollPositionContext = (0, react_1.createContext)(undefined);
|
|
46
|
+
function ScrollPositionProvider(_a) {
|
|
47
|
+
var children = _a.children;
|
|
48
|
+
var _b = __read((0, react_1.useState)({
|
|
49
|
+
minPos: new spase_1.Point(),
|
|
50
|
+
maxPos: new spase_1.Point(),
|
|
51
|
+
pos: new spase_1.Point(),
|
|
52
|
+
step: new spase_1.Point(),
|
|
53
|
+
}), 2), value = _b[0], setValue = _b[1];
|
|
54
|
+
(0, react_1.useEffect)(function () {
|
|
55
|
+
var updateScrollPosition = function () {
|
|
56
|
+
var refRect = spase_1.Rect.fromViewport();
|
|
57
|
+
var refRectMin = refRect.clone({ x: 0, y: 0 });
|
|
58
|
+
var refRectFull = spase_1.Rect.from(window, { overflow: true });
|
|
59
|
+
if (!refRectFull)
|
|
60
|
+
return;
|
|
61
|
+
var refRectMax = refRectMin.clone({ x: refRectFull.width - refRect.width, y: refRectFull.height - refRect.height });
|
|
62
|
+
var step = new spase_1.Point([refRect.left / refRectMax.left, refRect.top / refRectMax.top]);
|
|
63
|
+
setValue({
|
|
64
|
+
minPos: new spase_1.Point([refRectMin.left, refRectMin.top]),
|
|
65
|
+
maxPos: new spase_1.Point([refRectMax.left, refRectMax.top]),
|
|
66
|
+
pos: new spase_1.Point([refRect.left, refRect.top]),
|
|
67
|
+
step: step,
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
window.addEventListener('scroll', updateScrollPosition);
|
|
71
|
+
window.addEventListener('resize', updateScrollPosition);
|
|
72
|
+
window.addEventListener('orientationchange', updateScrollPosition);
|
|
73
|
+
updateScrollPosition();
|
|
74
|
+
return function () {
|
|
75
|
+
window.removeEventListener('scroll', updateScrollPosition);
|
|
76
|
+
window.removeEventListener('resize', updateScrollPosition);
|
|
77
|
+
window.removeEventListener('orientationchange', updateScrollPosition);
|
|
78
|
+
};
|
|
79
|
+
}, []);
|
|
80
|
+
return (react_1.default.createElement(exports.ScrollPositionContext.Provider, { value: value }, children));
|
|
81
|
+
}
|
|
82
|
+
exports.default = ScrollPositionProvider;
|
|
83
|
+
function useScrollPosition(targetRef) {
|
|
84
|
+
var context = (0, react_1.useContext)(exports.ScrollPositionContext);
|
|
85
|
+
if (!context)
|
|
86
|
+
throw Error('Cannot fetch the current scroll position context, is the corresponding provider instated?');
|
|
87
|
+
if (!targetRef) {
|
|
88
|
+
return {
|
|
89
|
+
pos: context.pos,
|
|
90
|
+
step: context.step,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
var element = targetRef.current;
|
|
94
|
+
var refRect = spase_1.Rect.fromViewport();
|
|
95
|
+
var rect = spase_1.Rect.from(element);
|
|
96
|
+
if (!refRect || !rect) {
|
|
97
|
+
return {
|
|
98
|
+
pos: new spase_1.Point(),
|
|
99
|
+
step: new spase_1.Point(),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
var posX = refRect.right - rect.left;
|
|
103
|
+
var posY = refRect.bottom - rect.top;
|
|
104
|
+
var stepX = posX / rect.width;
|
|
105
|
+
var stepY = posY / rect.height;
|
|
106
|
+
return {
|
|
107
|
+
pos: new spase_1.Point([posX, posY]),
|
|
108
|
+
step: new spase_1.Point([stepX, stepY]),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
exports.useScrollPosition = useScrollPosition;
|
|
112
|
+
//# sourceMappingURL=ScrollPositionProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollPositionProvider.js","sourceRoot":"/","sources":["providers/ScrollPositionProvider.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { createContext, PropsWithChildren, RefObject, useContext, useEffect, useState } from 'react'\nimport { Point, Rect } from 'spase'\n\ntype ScrollPosition = {\n pos: Point\n step: Point\n}\n\ntype ScrollPositionContextValue = ScrollPosition & {\n minPos: Point\n maxPos: Point\n}\n\ntype ScrollPositionProviderProps = PropsWithChildren\n\nexport const ScrollPositionContext = createContext<ScrollPositionContextValue | undefined>(undefined)\n\nexport default function ScrollPositionProvider({\n children,\n}: ScrollPositionProviderProps) {\n const [value, setValue] = useState<ScrollPositionContextValue>({\n minPos: new Point(),\n maxPos: new Point(),\n pos: new Point(),\n step: new Point(),\n })\n\n useEffect(() => {\n const updateScrollPosition = () => {\n const refRect = Rect.fromViewport()\n const refRectMin = refRect.clone({ x: 0, y: 0 })\n const refRectFull = Rect.from(window, { overflow: true })\n\n if (!refRectFull) return\n\n const refRectMax = refRectMin.clone({ x: refRectFull.width - refRect.width, y: refRectFull.height - refRect.height })\n const step = new Point([refRect.left / refRectMax.left, refRect.top / refRectMax.top])\n\n setValue({\n minPos: new Point([refRectMin.left, refRectMin.top]),\n maxPos: new Point([refRectMax.left, refRectMax.top]),\n pos: new Point([refRect.left, refRect.top]),\n step,\n })\n }\n\n window.addEventListener('scroll', updateScrollPosition)\n window.addEventListener('resize', updateScrollPosition)\n window.addEventListener('orientationchange', updateScrollPosition)\n\n updateScrollPosition()\n\n return () => {\n window.removeEventListener('scroll', updateScrollPosition)\n window.removeEventListener('resize', updateScrollPosition)\n window.removeEventListener('orientationchange', updateScrollPosition)\n }\n }, [])\n\n return (\n <ScrollPositionContext.Provider value={value}>\n {children}\n </ScrollPositionContext.Provider>\n )\n}\n\nexport function useScrollPosition(targetRef?: RefObject<Element>): ScrollPosition {\n const context = useContext(ScrollPositionContext)\n if (!context) throw Error('Cannot fetch the current scroll position context, is the corresponding provider instated?')\n\n if (!targetRef) {\n return {\n pos: context.pos,\n step: context.step,\n }\n }\n\n const element = targetRef.current\n\n const refRect = Rect.fromViewport()\n const rect = Rect.from(element)\n\n if (!refRect || !rect) {\n return {\n pos: new Point(),\n step: new Point(),\n }\n }\n\n const posX = refRect.right - rect.left\n const posY = refRect.bottom - rect.top\n const stepX = posX / rect.width\n const stepY = posY / rect.height\n\n return {\n pos: new Point([posX, posY]),\n step: new Point([stepX, stepY]),\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asClassNameDict.js","sourceRoot":"/","sources":["utils/asClassNameDict.ts"],"names":[],"mappings":";;AAAA,SAAwB,eAAe,CAAI,IAAgC;IACzE,OAAO,IAAI,CAAA;AACb,CAAC;AAFD,kCAEC","sourcesContent":["export default function asClassNameDict<T>(dict: { [K in keyof T]: string }) {\n return dict\n}\n"]}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { JSXElementConstructor, ReactNode } from 'react';
|
|
2
|
+
type ComponentTypeDict = Record<string, JSXElementConstructor<any>>;
|
|
3
|
+
type ComponentElementDict<T extends ComponentTypeDict> = Record<keyof T, JSX.Element>;
|
|
4
|
+
export default function asComponentDict<T extends ComponentTypeDict>(children?: ReactNode, typeDict?: T): Partial<ComponentElementDict<T>>;
|
|
5
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var react_1 = require("react");
|
|
4
|
+
function asComponentDict(children, typeDict) {
|
|
5
|
+
if (typeDict === void 0) { typeDict = {}; }
|
|
6
|
+
var keys = Object.keys(typeDict);
|
|
7
|
+
var types = Object.values(typeDict);
|
|
8
|
+
var components = {};
|
|
9
|
+
react_1.Children.forEach(children, function (child) {
|
|
10
|
+
if (!(0, react_1.isValidElement)(child))
|
|
11
|
+
throw Error('Invalid child detected');
|
|
12
|
+
var index = types.indexOf(child.type);
|
|
13
|
+
if (index < 0)
|
|
14
|
+
throw Error("Unsupported child, only the following children are allowed: ".concat(types));
|
|
15
|
+
var key = keys[index];
|
|
16
|
+
if (components[key])
|
|
17
|
+
throw Error("Only one ".concat(types[index], " can be provided as a child"));
|
|
18
|
+
components[key] = child;
|
|
19
|
+
});
|
|
20
|
+
return components;
|
|
21
|
+
}
|
|
22
|
+
exports.default = asComponentDict;
|
|
23
|
+
//# sourceMappingURL=asComponentDict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asComponentDict.js","sourceRoot":"/","sources":["utils/asComponentDict.ts"],"names":[],"mappings":";;AAAA,+BAAkF;AAMlF,SAAwB,eAAe,CAA8B,QAAoB,EAAE,QAAqB;IAArB,yBAAA,EAAA,WAAc,EAAO;IAC9G,IAAM,IAAI,GAAgB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC/C,IAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACrC,IAAM,UAAU,GAAqC,EAAE,CAAA;IAEvD,gBAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAA,KAAK;QAC9B,IAAI,CAAC,IAAA,sBAAc,EAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAA;QAEjE,IAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAW,CAAC,CAAA;QAC9C,IAAI,KAAK,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,sEAA+D,KAAK,CAAE,CAAC,CAAA;QAElG,IAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,KAAK,CAAC,mBAAY,KAAK,CAAC,KAAK,CAAC,gCAA6B,CAAC,CAAA;QAEvF,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,OAAO,UAAU,CAAA;AACnB,CAAC;AAlBD,kCAkBC","sourcesContent":["import { Children, isValidElement, JSXElementConstructor, ReactNode } from 'react'\n\ntype ComponentTypeDict = Record<string, JSXElementConstructor<any>>\n\ntype ComponentElementDict<T extends ComponentTypeDict> = Record<keyof T, JSX.Element>\n\nexport default function asComponentDict<T extends ComponentTypeDict>(children?: ReactNode, typeDict: T = {} as T): Partial<ComponentElementDict<T>> {\n const keys: (keyof T)[] = Object.keys(typeDict)\n const types = Object.values(typeDict)\n const components: Partial<ComponentElementDict<T>> = {}\n\n Children.forEach(children, child => {\n if (!isValidElement(child)) throw Error('Invalid child detected')\n\n const index = types.indexOf(child.type as any)\n if (index < 0) throw Error(`Unsupported child, only the following children are allowed: ${types}`)\n\n const key = keys[index]\n if (components[key]) throw Error(`Only one ${types[index]} can be provided as a child`)\n\n components[key] = child\n })\n\n return components\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asStyleDict.js","sourceRoot":"/","sources":["utils/asStyleDict.ts"],"names":[],"mappings":";;AAEA,SAAwB,WAAW,CAAI,IAAuC;IAC5E,OAAO,IAAI,CAAA;AACb,CAAC;AAFD,8BAEC","sourcesContent":["import { CSSProperties } from 'react'\n\nexport default function asStyleDict<T>(dict: { [K in keyof T]: CSSProperties }) {\n return dict\n}\n"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Attributes, CElement, ClassAttributes, Component, ComponentState, FunctionComponentElement, ReactElement, ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Wrapper for {@link cloneElement} but instead of overwriting `className` and
|
|
4
|
+
* `style` of the cloned element with the values specified in the `props`
|
|
5
|
+
* argument, they are merged instead.
|
|
6
|
+
*
|
|
7
|
+
* @param element - The target element to clone.
|
|
8
|
+
* @param props - The props to apply to the cloned element. Overlapping props
|
|
9
|
+
* are overwritten with the exception of `className` and `style`,
|
|
10
|
+
* which are merged.
|
|
11
|
+
* @param children - Optional child elements add into the cloned element.
|
|
12
|
+
*
|
|
13
|
+
* @returns The cloned element.
|
|
14
|
+
*/
|
|
15
|
+
declare function cloneStyledElement<P>(element: FunctionComponentElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[]): FunctionComponentElement<P>;
|
|
16
|
+
declare function cloneStyledElement<P, T extends Component<P, ComponentState>>(element: CElement<P, T>, props?: Partial<P> & ClassAttributes<T>, ...children: ReactNode[]): CElement<P, T>;
|
|
17
|
+
declare function cloneStyledElement<P>(element: ReactElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[]): ReactElement<P>;
|
|
18
|
+
export default cloneStyledElement;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
14
|
+
var t = {};
|
|
15
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
16
|
+
t[p] = s[p];
|
|
17
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
18
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
19
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
20
|
+
t[p[i]] = s[p[i]];
|
|
21
|
+
}
|
|
22
|
+
return t;
|
|
23
|
+
};
|
|
24
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
25
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
26
|
+
if (!m) return o;
|
|
27
|
+
var i = m.call(o), r, ar = [], e;
|
|
28
|
+
try {
|
|
29
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
30
|
+
}
|
|
31
|
+
catch (error) { e = { error: error }; }
|
|
32
|
+
finally {
|
|
33
|
+
try {
|
|
34
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
35
|
+
}
|
|
36
|
+
finally { if (e) throw e.error; }
|
|
37
|
+
}
|
|
38
|
+
return ar;
|
|
39
|
+
};
|
|
40
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
41
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
42
|
+
if (ar || !(i in from)) {
|
|
43
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
44
|
+
ar[i] = from[i];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
var react_1 = require("react");
|
|
51
|
+
function cloneStyledElement(element, props) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
if (props === void 0) { props = {}; }
|
|
54
|
+
var children = [];
|
|
55
|
+
for (var _i = 2; _i < arguments.length; _i++) {
|
|
56
|
+
children[_i - 2] = arguments[_i];
|
|
57
|
+
}
|
|
58
|
+
var _c = props, className = _c.className, style = _c.style, otherProps = __rest(_c, ["className", "style"]);
|
|
59
|
+
var elementProps = element.props;
|
|
60
|
+
return react_1.cloneElement.apply(void 0, __spreadArray([element, __assign({ className: "".concat((_a = elementProps.className) !== null && _a !== void 0 ? _a : '', " ").concat(className !== null && className !== void 0 ? className : '').split(' ').filter(Boolean).join(' '), style: __assign(__assign({}, (_b = elementProps.style) !== null && _b !== void 0 ? _b : {}), style !== null && style !== void 0 ? style : {}) }, otherProps)], __read(children), false));
|
|
61
|
+
}
|
|
62
|
+
exports.default = cloneStyledElement;
|
|
63
|
+
//# sourceMappingURL=cloneStyledElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloneStyledElement.js","sourceRoot":"/","sources":["utils/cloneStyledElement.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAyJ;AAkBzJ,SAAS,kBAAkB,CACzB,OAAuE,EACvE,KAAqE;;IAArE,sBAAA,EAAA,UAAqE;IACrE,kBAAwB;SAAxB,UAAwB,EAAxB,qBAAwB,EAAxB,IAAwB;QAAxB,iCAAwB;;IAExB,IAAM,KAAsC,KAAY,EAAhD,SAAS,eAAA,EAAE,KAAK,WAAA,EAAK,UAAU,cAAjC,sBAAmC,CAAe,CAAA;IACxD,IAAM,YAAY,GAAG,OAAO,CAAC,KAAY,CAAA;IAEzC,OAAO,oBAAY,8BAAC,OAAO,EAAE,WAC3B,SAAS,EAAE,UAAG,MAAA,YAAY,CAAC,SAAS,mCAAI,EAAE,cAAI,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACpG,KAAK,wBACA,MAAA,YAAY,CAAC,KAAK,mCAAI,EAAE,GACxB,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,KAEb,UAAU,CACP,UAAK,QAAQ,WAAC;AACxB,CAAC;AAED,kBAAe,kBAAkB,CAAA","sourcesContent":["import { Attributes, CElement, ClassAttributes, cloneElement, Component, ComponentState, FunctionComponentElement, ReactElement, ReactNode } from 'react'\n\n/**\n * Wrapper for {@link cloneElement} but instead of overwriting `className` and\n * `style` of the cloned element with the values specified in the `props`\n * argument, they are merged instead.\n *\n * @param element - The target element to clone.\n * @param props - The props to apply to the cloned element. Overlapping props\n * are overwritten with the exception of `className` and `style`,\n * which are merged.\n * @param children - Optional child elements add into the cloned element.\n *\n * @returns The cloned element.\n */\nfunction cloneStyledElement<P>(element: FunctionComponentElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[]): FunctionComponentElement<P>\nfunction cloneStyledElement<P, T extends Component<P, ComponentState>>(element: CElement<P, T>, props?: Partial<P> & ClassAttributes<T>, ...children: ReactNode[]): CElement<P, T>\nfunction cloneStyledElement<P>(element: ReactElement<P>, props?: Partial<P> & Attributes, ...children: ReactNode[]): ReactElement<P>\nfunction cloneStyledElement<P, T extends Component<P, ComponentState> = never>(\n element: FunctionComponentElement<P> | CElement<P, T> | ReactElement<P>,\n props: Partial<P> & Attributes | Partial<P> & ClassAttributes<T> = {},\n ...children: ReactNode[]\n) {\n const { className, style, ...otherProps } = props as any\n const elementProps = element.props as any\n\n return cloneElement(element, {\n className: `${elementProps.className ?? ''} ${className ?? ''}`.split(' ').filter(Boolean).join(' '),\n style: {\n ...elementProps.style ?? {},\n ...style ?? {},\n },\n ...otherProps,\n } as any, ...children)\n}\n\nexport default cloneStyledElement\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
function styles() {
|
|
15
|
+
var args = [];
|
|
16
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
17
|
+
args[_i] = arguments[_i];
|
|
18
|
+
}
|
|
19
|
+
return args.reduce(function (out, curr) { return (__assign(__assign({}, out), curr || {})); }, {});
|
|
20
|
+
}
|
|
21
|
+
exports.default = styles;
|
|
22
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"/","sources":["utils/styles.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAEA,SAAwB,MAAM;IAAC,cAA8C;SAA9C,UAA8C,EAA9C,qBAA8C,EAA9C,IAA8C;QAA9C,yBAA8C;;IAC3E,OAAO,IAAI,CAAC,MAAM,CAAgB,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,uBAC5C,GAAG,GACH,IAAI,IAAI,EAAE,EACb,EAH+C,CAG/C,EAAE,EAAE,CAAC,CAAA;AACT,CAAC;AALD,yBAKC","sourcesContent":["import { CSSProperties } from 'react'\n\nexport default function styles(...args: (CSSProperties | undefined | false)[]): CSSProperties {\n return args.reduce<CSSProperties>((out, curr) => ({\n ...out,\n ...curr || {},\n }), {})\n}\n"]}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
3
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
4
|
+
if (!m) return o;
|
|
5
|
+
var i = m.call(o), r, ar = [], e;
|
|
6
|
+
try {
|
|
7
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
8
|
+
}
|
|
9
|
+
catch (error) { e = { error: error }; }
|
|
10
|
+
finally {
|
|
11
|
+
try {
|
|
12
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
13
|
+
}
|
|
14
|
+
finally { if (e) throw e.error; }
|
|
15
|
+
}
|
|
16
|
+
return ar;
|
|
17
|
+
};
|
|
18
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
19
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
20
|
+
if (ar || !(i in from)) {
|
|
21
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
22
|
+
ar[i] = from[i];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
26
|
+
};
|
|
27
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
|
+
};
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
var debug_1 = __importDefault(require("debug"));
|
|
32
|
+
function useDebug(subnamespace) {
|
|
33
|
+
if (subnamespace === void 0) { subnamespace = ''; }
|
|
34
|
+
if (process.env.NODE_ENV === 'development') {
|
|
35
|
+
var namespace = __spreadArray(['etudes'], __read(subnamespace.split(':').filter(Boolean)), false).join(':');
|
|
36
|
+
if (typeof window === 'undefined')
|
|
37
|
+
debug_1.default.enable(namespace);
|
|
38
|
+
return (0, debug_1.default)(namespace);
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
42
|
+
return function () { };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.default = useDebug;
|
|
46
|
+
//# sourceMappingURL=useDebug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDebug.js","sourceRoot":"/","sources":["utils/useDebug.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAyB;AAEzB,SAAwB,QAAQ,CAAC,YAAiB;IAAjB,6BAAA,EAAA,iBAAiB;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE;QAC1C,IAAM,SAAS,GAAG,eAAC,QAAQ,UAAK,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAE,IAAI,CAAC,GAAG,CAAC,CAAA;QAClF,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,eAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAE1D,OAAO,IAAA,eAAK,EAAC,SAAS,CAAC,CAAA;KACxB;SACI;QACH,gEAAgE;QAChE,OAAO,cAAO,CAAC,CAAA;KAChB;AACH,CAAC;AAXD,2BAWC","sourcesContent":["import debug from 'debug'\n\nexport default function useDebug(subnamespace = '') {\n if (process.env.NODE_ENV === 'development') {\n const namespace = ['etudes', ...subnamespace.split(':').filter(Boolean)].join(':')\n if (typeof window === 'undefined') debug.enable(namespace)\n\n return debug(namespace)\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n return () => {}\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "etudes",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "A study of
|
|
3
|
+
"version": "2.1.0",
|
|
4
|
+
"description": "A study of headless React components",
|
|
5
5
|
"main": "lib",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"clean": "rimraf lib",
|
|
8
8
|
"prebuild": "npm run lint",
|
|
9
9
|
"build": "npm run clean && cross-env NODE_ENV=production tsc",
|
|
10
10
|
"pages": "rimraf .gh-pages && webpack --config demo/config/build.conf.ts",
|
|
11
|
-
"demo": "npm run clean && concurrently \"cross-env NODE_ENV=production tsc -w\" \"wait-on lib && cross-env NODE_ENV=development webpack-cli serve --mode development --hot --config demo/config/build.conf.ts\"",
|
|
11
|
+
"demo": "npm run clean && concurrently \"cross-env NODE_ENV=production tsc -w --diagnostics false\" \"wait-on lib && cross-env NODE_ENV=development webpack-cli serve --mode development --hot --config demo/config/build.conf.ts\"",
|
|
12
12
|
"test": "echo \"No tests yet :)\"",
|
|
13
13
|
"lint": "eslint --ext .ts --ext .tsx src demo",
|
|
14
14
|
"lint:fix": "npm run lint -- --fix"
|
|
@@ -29,63 +29,56 @@
|
|
|
29
29
|
"lib"
|
|
30
30
|
],
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@babel/core": "^7.
|
|
33
|
-
"@babel/plugin-transform-runtime": "^7.
|
|
34
|
-
"@babel/preset-env": "^7.
|
|
32
|
+
"@babel/core": "^7.20.12",
|
|
33
|
+
"@babel/plugin-transform-runtime": "^7.19.6",
|
|
34
|
+
"@babel/preset-env": "^7.20.2",
|
|
35
35
|
"@babel/preset-react": "^7.18.6",
|
|
36
36
|
"@babel/preset-typescript": "^7.18.6",
|
|
37
|
-
"@babel/runtime": "^7.18.9",
|
|
38
37
|
"@types/debug": "^4.1.7",
|
|
39
38
|
"@types/html-webpack-plugin": "^3.2.6",
|
|
40
|
-
"@types/
|
|
41
|
-
"@types/react": "^18.0.
|
|
42
|
-
"@types/react-dom": "^18.0.
|
|
39
|
+
"@types/node-polyglot": "^2.4.2",
|
|
40
|
+
"@types/react": "^18.0.27",
|
|
41
|
+
"@types/react-dom": "^18.0.10",
|
|
43
42
|
"@types/react-transition-group": "^4.4.5",
|
|
44
43
|
"@types/styled-components": "^5.1.26",
|
|
45
44
|
"@types/webpack": "^5.28.0",
|
|
46
|
-
"@types/webpack-env": "^1.
|
|
47
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
48
|
-
"@typescript-eslint/parser": "^5.
|
|
49
|
-
"babel-loader": "^
|
|
45
|
+
"@types/webpack-env": "^1.18.0",
|
|
46
|
+
"@typescript-eslint/eslint-plugin": "^5.50.0",
|
|
47
|
+
"@typescript-eslint/parser": "^5.50.0",
|
|
48
|
+
"babel-loader": "^9.1.2",
|
|
50
49
|
"babel-plugin-styled-components": "^2.0.7",
|
|
51
|
-
"concurrently": "^7.
|
|
50
|
+
"concurrently": "^7.6.0",
|
|
52
51
|
"cross-env": "^7.0.3",
|
|
53
52
|
"debug": "^4.3.4",
|
|
54
|
-
"eslint": "^8.
|
|
55
|
-
"file-loader": "^6.2.0",
|
|
53
|
+
"eslint": "^8.33.0",
|
|
56
54
|
"html-webpack-plugin": "^5.5.0",
|
|
57
|
-
"promptu": "^5.9.0",
|
|
58
|
-
"raw-loader": "^4.0.2",
|
|
59
55
|
"react": "^18.2.0",
|
|
60
56
|
"react-dom": "^18.2.0",
|
|
61
|
-
"react-router": "^6.
|
|
62
|
-
"react-router-dom": "^6.
|
|
63
|
-
"rimraf": "^
|
|
64
|
-
"styled-components": "^5.3.
|
|
65
|
-
"ts-loader": "^9.3.1",
|
|
57
|
+
"react-router": "^6.8.0",
|
|
58
|
+
"react-router-dom": "^6.8.0",
|
|
59
|
+
"rimraf": "^4.1.2",
|
|
60
|
+
"styled-components": "^5.3.6",
|
|
66
61
|
"ts-node": "^10.9.1",
|
|
67
|
-
"typescript": "^4.
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"webpack": "^5.
|
|
71
|
-
"webpack-
|
|
72
|
-
"webpack-dev-server": "^4.10.0"
|
|
62
|
+
"typescript": "^4.9.5",
|
|
63
|
+
"wait-on": "^7.0.1",
|
|
64
|
+
"webpack": "^5.75.0",
|
|
65
|
+
"webpack-cli": "^5.0.1",
|
|
66
|
+
"webpack-dev-server": "^4.11.1"
|
|
73
67
|
},
|
|
74
68
|
"dependencies": {
|
|
75
|
-
"classnames": "^2.3.
|
|
76
|
-
"
|
|
69
|
+
"classnames": "^2.3.2",
|
|
70
|
+
"fast-deep-equal": "^3.1.3",
|
|
77
71
|
"interactjs": "^1.10.17",
|
|
78
|
-
"
|
|
72
|
+
"node-polyglot": "^2.5.0",
|
|
79
73
|
"react-transition-group": "^4.4.5",
|
|
80
74
|
"resize-observer-polyfill": "^1.5.1",
|
|
81
|
-
"spase": "^6.
|
|
75
|
+
"spase": "^6.5.0"
|
|
82
76
|
},
|
|
83
77
|
"peerDependencies": {
|
|
84
|
-
"react": "^18.2.0"
|
|
85
|
-
"styled-components": "^5.3.5"
|
|
78
|
+
"react": "^18.2.0"
|
|
86
79
|
},
|
|
87
80
|
"optionalDependencies": {
|
|
88
|
-
"react-router": "^6.
|
|
89
|
-
"react-router-dom": "^6.
|
|
81
|
+
"react-router": "^6.8.0",
|
|
82
|
+
"react-router-dom": "^6.8.0"
|
|
90
83
|
}
|
|
91
84
|
}
|